verilog系統函數用法


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;

有一點不懂,連接符在這時起什么作用呢?


免責聲明!

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



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