Verilog中的文件的读取和写入

在仿真验证的时候,需要一个合适的数据激励,在testbech一个一个的写很麻烦,如果能直接从数据文本里读取,然后输入到已经编写好功能程序中,就很方便。

还有的时候,我们需要将程序输出的内容写到文本里面,然后用其他工具(例如matlab、python等)进行处理。

代码和解释说明如下:

  

 1 `timescale 1ns/1ns
 2 
 3 module file_ctrl;
 4 
 5 reg           clk;         
 6 reg            rst_n;
 7 
 8 reg  [7:0]  data_in;                //定义的数据输入寄存器
 9 reg  [7:0]  data_out;                        
10 reg  [7:0]  cnt;
11 
12 integer  file_rd;                //定义数据读指针    
13 integer  file_wr;                //定义数据写指针
14 
15 initial begin                        //定义时钟    
16     clk = 1'b1;
17     forever
18     #10
19     clk = ~clk;                
20 end    
21 
22 initial begin                        //定义复位
23     rst_n = 1'b0;
24     #21
25     rst_n = 1'b1;
26 end
27 
28 initial begin                        //打开读取和写入的文件,这里的路径要对    
29     file_rd = $fopen("E:/Project/file_ctrl/sim/tb/data_in.txt","r");
30     file_wr = $fopen("E:/Project/file_ctrl/sim/tb/data_out.txt","w");
31 end    
32         
33 always@(posedge clk or negedge rst_n)    
34 begin
35     if(rst_n == 1'b0)begin
36         data_in <= 8'd0;        
37         cnt <= 8'd0;
38     end
39     else if(cnt < 10)begin
40         $fscanf(file_rd,"%h",data_in);            //读取每行    
41         cnt <= cnt +1;        
42         $fwrite(file_wr,"%h
",    data_in);      //换行写入    
43     end
44     else begin
45         data_in <= 8'd0;
46         $fclose(file_rd);                        //关闭文件
47         $fclose(file_wr);        
48         cnt <= 8'd11;
49     end
50 end    
51 
52 
53 
54 endmodule
原文地址:https://www.cnblogs.com/jayer/p/12577783.html