在仿真驗證的時候,需要一個合適的數據激勵,在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