TestBench编写_激励产生

TestBench编写_激励产生

  • TestBench编写_激励产生
    • 基本背景
    • 读取函数介绍
      • a.$fopen函数使用
      • b.$fread函数使用
      • c.$fclose函数使用
      • 实际使用

TestBench编写_激励产生

基本背景

  最近遇到项目中需要对外部信号进行处理后再进行输出,首先使用FPGA的仿真器对需要处理的信号进行了采样(采样速率100K),采样的目的是为了能够尽量真实的还原仿真过程中的激励。想法是通过建立testbench文件对该记录进行读取。

读取函数介绍

  Verilog对文件进行读取的函数与C语言用法差不多,这里用的是 $fopen 、$ fread、$fclose。完成对信号文件的打开、读取、关闭。

a.$fopen函数使用

integer fd;
fd = $fopen(FILE_TXT, “r“);

fd是一个$fopen返回的文件句柄(如果打开文件成功的话),如果不成功则返回零;

FILE_TXT文件路径的字符串;如 “D:==/Program Files (x86)/==data.txt”;注意其中的分隔符 “/” 与Windows系统下的分隔符并不一样,Windows下是“\”,使用错会打开文件失败。当然也可以使用相对路径**" …/ "**

“r”,是文件操作(同样是字符串)。r代表读,w代表写,“rb”代表读bin文件。

b.$fread函数使用

integer status;
status = $fread(); 
status = $fread(,  ); 
status = $fread(, ,  ); 
status = $fread(, ,  ); 

eg:
integer status;
reg input_a[7:0];
status = $fread(input_a,fd, 1, 2 ); 

status:读文件返回状态(正常读成功返回读到的字节数),不成功返回0。

: 从文件中要读到的数组或寄存器中,即这个store中便是读取到的文件值

:返回的文件句柄

:数组的起始地址

:写入数组的数量

上述式中的例子,意思是读取fd文件到寄存器input_a[1],input_a[2]中。

c.$fclose函数使用

$fclose(fd);//关闭文件

实际使用

`timescale 1ns/1ps

module tb_demo(

);
reg sys_clk;    //时钟
reg sys_rst_n;  //复位
reg Ua_two;
integer handlea,i;

wire Ua_two_tb;
wire Ub_two_tb;
wire Uc_two_tb;

initial 
	begin
	sys_clk 	<= 1'b0;
	sys_rst_n	<= 1'b0;
	#30
	sys_rst_n	<= 1'b1;
	
	end

always #20 sys_clk 	<= ~sys_clk;

    
//1ns  = 10^(-9)
//100k = 10^(-5)
//ipg  10^(4)
initial 
	begin
        handlea = $fopen("J:/procm/UA_two.txt","r");
	if(handlea == 0)
	begin
		$display("\n*********************open faild****************\n");
		$stop;
	end
	$display("handlea: %h\n",handlea);
	i=0;
        repeat(8192)   //txt有8291行
		begin
			$fscanf(handlea,"%b\n",Ua_two);
			$display("%d : Ua_two: %h\n",i,Ua_two);
			#1000;
			i=i+1;
		end
		
	$fclose(handlea);
	$finish;
	end
	

	
demo demo_inst(

	.sys_clk	(sys_clk	),
	.sys_rst_n 	(sys_rst_n 	),

	.Ua_two		(Ua_two		),

	.Ua_two_tb	(Ua_two_tb	)

);


endmodule

文件中数据形式为(UA_two.txt):

1
0
1
1
1
0
0

此时使用$fread进行读取会读取到行尾的\0。因此这里使用==$fscanf()==进行格式化读取。

$fscanf(handlea,"%b\n",Ua_two);

//handlea 为$fopen打开的文件句柄
//"%b\n"为格式化读取的格式
//Ua_two,读取到的reg

你可能感兴趣的:(FPGA开发,fpga开发)