[英]How to read input stimuli from file in a loop in systemverilog test bench?
我需要以自动方式验证我的硬件设计。 我以前使用VHDL的目的是:
使用随机数据创建大于200k的.txt文件(在Python中)。
通过VHDL测试平台获取数据,将其作为我的硬件设计的输入,然后收集结果。
将结果与用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.