轉:
http://zengbo.blogbus.com/logs/19569780.htmlVerilog
提供了豐富的系統函數,這為Testbench的編寫提供了方便。尤其是IEEE1364-2005,其系統級建模的能力更強。
以前我一般常用到的系統函數只有幾個:$readmemb,$readmemh,$display,$fmonitor,$fwrite,$fopen,$fclose等。通常需要對文件作預處理,才能用於Testbench讀取。今天又嘗試了幾個其他的文件輸入輸出函數,不需要對文件進行預處理,直接使用需要的文件,只對需要的部分進行讀取。
$fseek,文件定位,可以從任意點對文件進行操作;
$fscanf,對文件一行進行讀寫。
下面是一些常見的應用:
1、讀寫文件
`timescale 1 ns/1 ns
module FileIO_tb;
integer fp_r, fp_w, cnt;
reg [7:0] reg1, reg2, reg3;
initial begin
fp_r = $fopen("data_in.txt", "r");
fp_w = $fopen("data_out.txt", "w");
while(!$feof(fp_r)) begin
cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);
$display("%d %d %d", reg1, reg2, reg3);
$fwrite(fp_w, "%d %d %d\n", reg3, reg2, reg1);
end
$fclose(fp_r);
$fclose(fp_w);
end
endmodule