#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);