тестовый модуль записывает неожиданный вывод в файл

#file-io #verilog

#file-io #verilog

Вопрос:

Я пишу тестовый модуль для LFSR и хочу записать значение вывода в текстовый файл, чтобы позже использовать его для некоторых сценариев. В моих сигналах шестнадцатеричные значения результата верны, но выходной файл состоит только из единиц, а не из фактических значений. Я не смог определить, почему. Вот тестовый стенд:

 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, "%hn", pseudo_random_val);
  end

$fclose(file);
end

always
  #5 clk = ~clk;

endmodule 
  

Мне нужно, чтобы «pseudo_random_val» записывался в выходной файл каждый период.

Ответ №1:

Вот что делает ваш тестовый стенд: в какой-то момент времени (в частности, в 1-й позиции clk) вы записываете текущее значение pseudo_random_val 8192 раза (которое будет тем же значением) в файл.

При этом значение будет записываться pseudo_random_val в файл один раз за тактовый период в течение всего моделирования (что может быть больше или меньше 8192 раз):

 always @(posedge clk) $fwrite(file, "%hn", pseudo_random_val);