2016-10-06 30 views
0

我正在为LFSR编写测试台,并且希望将输出的值写入txt文件,以便稍后可以将它用于某些脚本。在我的波形中,结果的十六进制值是正确的,但输出文件只包含1,而不是实际值。我一直无法确定为什么(刚开始使用verilog)。这里是测试台:Verilog测试台将意外输出写入文件

module lfsr13_tb(); 

reg clk, rst_n, en; 
reg[12:0] seed; 
wire[12:0] pseudo_random_val; 
integer file, i; 

lfsr13 iDUT(.clk(clk), .en(en), .rst_n(rst_n), .seed(seed), .pseudo_random_val(pseudo_random_val)); 

initial begin 
seed = 1; 
clk = 0; 
rst_n = 0; // assert reset 
en = 0; // disabled to start 
file = $fopen("lfsr_output.txt", "w"); 

@(negedge clk) rst_n = 1; // deassert reset 
@(posedge clk) en = 1;  // assert enable to begin lfsr function 
for(i=0; i<=8191; i=i+1) begin 
    $fwrite(file, "%h\n", pseudo_random_val); 
    end 

$fclose(file); 
end 

always 
    #5 clk = ~clk; 

endmodule 

任何帮助极大的赞赏。我需要在每个周期将“pseudo_random_val”写入输出文件。

+2

它看起来像你写相同的值8192倍的文件...可能会添加一个延迟或事件触发器? (另外,一些缩进将有助于可读性...) – wilcroft

+0

是的,现在我明白了。我希望它将pseudo_random_val(8192个值)的每个唯一值写入输出文件。我应该在for循环中添加时钟延迟吗?令我困惑的是我的波形显示了正确的功能,我只想将这些值输出到文本文件。另外,关于缩进的道歉,modelsim的默认选项卡就像8个空格,所以我不使用它。 – kcinj

回答

1

以下是测试平台所做的工作:在一个时间点(具体来说,第一个时间点clk),将当前值pseudo_random_val 8192次(这将是相同的值)写入文件。

这会的pseudo_random_val值写入每个时钟周期一旦该文件为模拟的时间(可能多于或少于8192次):

always @(posedge clk) $fwrite(file, "%h\n", pseudo_random_val); 
+1

谢谢你帮助我认识到我的错误!它按预期工作 – kcinj