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\n",    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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM