这是我的设计测试台,我正在使用函数“$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”文件中。
在此过程中 t=0 时您要做的第一件事是关闭 outfile
initial begin
$fclose(outfile);
end
测试平台将无法在时钟的任何边缘向 outfile 写入任何内容,因为您在 t=0 时关闭了 outfile。
仔细观察,实际上在 t=0 时存在一场竞争,因为您在 t=0 时在另一个进程中打开了它。 如果先打开还是先关闭,这在逻辑上是不明确的。 我将通过在同一进程(开始-结束块)中打开和克隆来解决此问题。
测试平台完成后关闭输出文件,也许就在 $finish 之前。
测试平台还有其他问题,但这个问题是以一种不明确的方式直接停止写入;比赛的结果可能会有所不同。 要么永远不会打开,要么永远不会关闭。