用于在 Verilog 中写入文件的测试平台

问题描述 投票:0回答:1

这是我的设计测试台,我正在使用函数“$readmemb”将输入应用到设计中。 我已经使用“$fopen”打开了一个文件,并希望将结果“out”写入名为“jaja.txt”的文件中,但我无法这样做。

有时文件“jaja.txt”不显示任何内容,有时不关心“x”。

module trimmed_tb();
reg clk,rst; // clock  and reset
reg [7:0]P;
wire [7:0]out;
reg [12:0] vectornum; // bookkeeping variables
reg [7:0] testvectors[4096:1]; //array of testvectors

integer outfile;
   
//instantiate device under test
median_fil_final dut(.clk(clk),.rst(rst),.P(P),.out(out));

// generate clock
always #5 clk=~clk;

// at start of test, load vectors
initial 
begin
$readmemb("C:/Users/OneDrive/Desktop/Noisy_pixels.mem",testvectors); // Read vectors 

outfile = $fopen("C:/Users/OneDrive/Desktop/jaja.txt","w");

vectornum = 0;
rst=0; 
end

// apply test vectors on rising edge of clk
always @(posedge clk)
begin
 P = testvectors[vectornum];
end


// increment index on falling edge of clk
always @(negedge clk)begin
if(~rst)begin
vectornum = vectornum + 1; // read next vector
if (testvectors[vectornum] === 8'bx)
begin
$display("tests completed");
$finish;// End simulation
end
end
end

initial begin
  $fclose(outfile);
end

endmodule

我尝试通过将“$fdisplay”放入 negedge clk 块中,然后使用“$fclose”来写入文件。

我希望将“out”结果写入“jaja.txt”文件中。

verilog vlsi
1个回答
0
投票

在此过程中 t=0 时您要做的第一件事是关闭 outfile

initial begin
  $fclose(outfile);
end

测试平台将无法在时钟的任何边缘向 outfile 写入任何内容,因为您在 t=0 时关闭了 outfile。

仔细观察,实际上在 t=0 时存在一场竞争,因为您在 t=0 时在另一个进程中打开了它。 如果先打开还是先关闭,这在逻辑上是不明确的。 我将通过在同一进程(开始-结束块)中打开和克隆来解决此问题。

测试平台完成后关闭输出文件,也许就在 $finish 之前。

测试平台还有其他问题,但这个问题是以一种不明确的方式直接停止写入;比赛的结果可能会有所不同。 要么永远不会打开,要么永远不会关闭。

© www.soinside.com 2019 - 2024. All rights reserved.