1、$fwrite 向文件寫入數據
$fdisplay
格式:$fwrite(fid,"%h%h\n",dout_r1,dout_r2);
(1)fwrite是需要觸發條件的,在一次觸發條件之后也不會自動發生換行,所以要求手動添加換行。
(2)如果寫放文件的格式為%d,則認為是無符號數,如下例:
wire [27:0] data;
fp_re = $fopen("dout.txt","w");
always @(posedge clk)
begin
if(dout_rdy == 1'b1)
begin
$fwrite(fileid,"%d",data);
end
end
解決方法是:將 data定義為有符號數,即:wire signed [27:0] data;
(3)輸出頂層文件中例化的信號(或下一級例化的文件的信號)
如果輸出有符號數,要在相應的文件中定義為signed
eg:$fwrite(file_id,"%d%12d\n",u_coef_update.ekxdn_i,u_coef_update.u_mult.mult_out);
在文件coef_update中定義的信號或REG ekxdn_i,如果要輸出有符號數,要在coef_update中把ekxdn_i定義為signed;
在文件coef_update文件中例化文件u_mult,輸出相應的信號mult_out.
2、$fscanf 從文件中讀取數據
(1)讀取格式為按行讀取,一行讀完之后再轉向下一行;
(2)讀取也是需要觸發條件的;
always @ ( posedge clk )
begin
if(cnt_test == 3'd7)
begin
$fscanf(coef_file,"%d%d%d%d",coef01_i,coef01_q,coef02_i,coef02_q);
$fscanf(ref_file,"%d%d%d%d",ref01_i,ref01_q,ref02_i,ref02_q); end
end
3、$fopen 打開文件
(1) 在讀寫文件之前,一定要用fopen打開文件
(2)讀寫路徑的設置
file_id = $fopen("F:/modelsim/coef.txt"),注意這里的斜杠方向。 4、$random
random_function ::=
$random [ ( seed ) ]
$random產生一個32位的有符號數,seed可心是reg,integer,time類型
Example 1—Where b is greater than 0, the expression ($random % b) gives a number in the following
range: [(-b+1): (b-1)].
產生–59 到59的數:
reg [23:0] rand;
rand = $random % 60;
Example 2—用連接符產生 0 to 59:
reg [23:0] rand;
rand = {$random} % 60;
有一點不懂,連接符在這時起什么作用呢?