2016-10-06 60 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