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;

有一点不懂,连接符在这时起什么作用呢?

你可能感兴趣的:(Verilog)