verilog testbench中 文本读写的操作

来源:互联网 发布:国内外大数据公司 编辑:程序博客网 时间:2024/06/06 06:32

对文件操作时注意文件数据格式和是否带符号

module nr_decoder_topv2_tb;
 // Inputs
 reg clk;
 reg i_rst_n;
 reg i_start;
 reg i_frame_flag;
 reg signed [7:0] i_nrdata;

 // Outputs
 wire signed [7:0] o_nr_decoer;
 wire o_frame_flag;
 wire o_16decoder_finish;
 wire o_read_en;
 wire s3_en;
 
 reg signed[7:0] o_nr_decoer_mat;
 reg [3:0] count;
 reg [3:0] flagcount;
 reg [3:0] out_num;
 reg [12:0] frame_num;

 // Instantiate the Unit Under Test (UUT)
 nr_decoder_topv2 uut (
   .clk(clk),
  .i_rst_n(i_rst_n),
  .i_start(i_start),
  .i_frame_flag(i_frame_flag),
  .i_nrdata(i_nrdata),
  .o_nr_decoer(o_nr_decoer),
  .o_frame_flag(o_frame_flag),
  .o_16decoder_finish(o_16decoder_finish),
  .o_read_en(o_read_en),
  .s3_en(s3_en)
 );
  
 integer handle_in,desc_out,handle_out,flag,flag2; // 文件指针和变量的定义

 initial
 begin
 clk=1;
 i_rst_n=0;
 i_start = 0;
 i_frame_flag=0;
 i_nrdata=0;
 
 o_nr_decoer_mat=0;
 count=0;
 flagcount=0;
 out_num=0;
 frame_num=0;
 #10;

 // 打开文件
 handle_in=$fopen("./../tb/input7488_616_mat.txt","r");
 desc_out=$fopen
("./../tb/output3744_616_mat.txt","r");
 handle_out=$fopen
("./../tb/output3744_616_rtl.txt","w");
 i_rst_n=1;
 i_start = 1;
 i_frame_flag=1;
 
  while(!$feof(handle_in))  // 写文件结束标志
   begin
   @(posedge clk)
     begin
      flag <= $fscanf(handle_in,"%d ",i_nrdata);  // 写文件 
      i_frame_flag<=0;
      if((s3_en==1)&(count<8))
      begin
       flag2=$fscanf(desc_out,"%d ",o_nr_decoer_mat);  // 写文件
       count<=count+1;
       flagcount<=1;
       end
      else count<=0;
     
      if(flagcount==1)begin
      out_num<=out_num+1;
      $display("%d ",o_nr_decoer);// 文件数据显示  带符号时注意:输出格式、变量定义为符号型
      $fdisplay(handle_out,"%d ",o_nr_decoer);  // 读文件
      end
     
      if (out_num==7) begin
      out_num<=0;
      flagcount<=0;
      frame_num<=frame_num+1;
      end
   end
  end

    // 关闭文件

    $fclose(handle_in);
    $fclose
(desc_out);
   
$fclose(handle_out);
      #500000 $finish;
 end
 always #5 clk=~clk;
 
 initial
 begin
    $fsdbDumpfile ("./../sim/nr_decoder_topv2_tb.fsdb");
    $fsdbDumpvars (0, nr_decoder_topv2_tb);
 end
     
endmodule

0 0
原创粉丝点击