繁体   English   中英

如何在systemverilog测试台中循环读取文件中的输入刺激?

[英]How to read input stimuli from file in a loop in systemverilog test bench?

我需要以自动方式验证我的硬件设计。 我以前使用VHDL的目的是:

  1. 使用随机数据创建大于200k的.txt文件(在Python中)。

  2. 通过VHDL测试平台获取数据,将其作为我的硬件设计的输入,然后收集结果。

  3. 将结果与用C / C ++ / Python等编写的模型产生的结果进行比较。

一切由在终端中启动的脚本完成。

我想在系统Verilog中执行相同的操作,但是遇到了一些麻烦。

输入数据文件的典型行(200k之内)是:1 00000000000000000000000001110101 00000000000000000000000000001010

这是我的代码:

initial begin

    fin_pointer= $fopen("../common/divisorInSample.txt","r");
    fout_pointer= $fopen("../common/divisorHWResults.txt","w");

    @(posedge rst_n);
    @(posedge clk);
    while (! $feof(fin_pointer)) begin
      $fscanf(fin_pointer,"%b %b %b\n",usigned,dividend,divisor);
      valid=1;
      @(posedge clk);
      valid=0;
      @(posedge res_ready);
      $fwrite(fout_pointer,"%b %b\n",quotient,reminder);
    end
    $finish;
    $fclose(fin_pointer);
    $fclose(fout_pointer);
end

我在fscanf中尝试了其他格式,例如“%b%b%b”。 但是我总是得到相同的行为:第一次执行“ fwrite”后,代码似乎停止了,因为我可以在输出文件中看到正确的结果。 我怎么解决这个问题? 谢谢

我在Vivado 2018.2中使用了您的代码,但没有发现任何问题。

我必须进行一些更改,但没有触及文件I / O代码的核心。

integer fin_pointer,fout_pointer;
reg  usigned;
reg  [31:0] dividend,divisor;

task ee_se;
 begin

    fin_pointer= $fopen("../../../../tbench/se_ee_in.txt","r");
    if (fin_pointer==0)
    begin
       $display("Could not open file '%s' for reading","se_ee_in.txt");
       $stop;     
    end
    fout_pointer= $fopen("../../../../se_ee_out.txt","w");
    if (fout_pointer==0)
    begin
       $display("Could not open file '%s'  for writing","se_ee_out.txt");
       $stop;     
    end

//    @(posedge rst_n);
//    @(posedge clk);
    # 100;
    while (! $feof(fin_pointer)) begin
      $fscanf(fin_pointer,"%b %b %b\n",usigned,dividend,divisor);
//      valid=1;
//      @(posedge clk);
      #100 ; 
//      valid=0;
//      @(posedge res_ready);
      $fwrite(fout_pointer,"%b %b\n",~dividend,~divisor);
    end
    $finish;
    $fclose(fin_pointer);
    $fclose(fout_pointer);
end
endtask

输入文件se_ee_in.txt:

1 00000000000000000000000001110101 00000000000000000000000000001010
0 00000000000000000000000001110111 00000000000000000000000000001111
1 00000000000000000000000001111111 00000000000000000000000000001000

输出文件se_ee_out.txt:

11111111111111111111111110001010 11111111111111111111111111110101
11111111111111111111111110001000 11111111111111111111111111110000
11111111111111111111111110000000 11111111111111111111111111110111

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM