将verilog输出写入文本文件的测试台
我无法在文本文件中获得正确的输出,但是modelsim中的模拟非常正常。。但是,当我把它写入文本文件时,每次输入都会得到XX。可能有一些语法错误或其他错误。如果有,可以帮助plz写下测试台,以写入触发器的dout(输出)(例如),每个dout(输出)显示在文本文件的新行中 代码:将verilog输出写入文本文件的测试台,verilog,vlsi,Verilog,Vlsi,我无法在文本文件中获得正确的输出,但是modelsim中的模拟非常正常。。但是,当我把它写入文本文件时,每次输入都会得到XX。可能有一些语法错误或其他错误。如果有,可以帮助plz写下测试台,以写入触发器的dout(输出)(例如),每个dout(输出)显示在文本文件的新行中 代码: 模块LFSR(时钟、复位、输出); 参数宽度=4; 输入时钟,复位; 输出[width-1:0]输出; reg[width-1:0]lfsr; 整数r; 线反馈=lfsr[width-1]^lfsr[width-2];
模块LFSR(时钟、复位、输出);
参数宽度=4;
输入时钟,复位;
输出[width-1:0]输出;
reg[width-1:0]lfsr;
整数r;
线反馈=lfsr[width-1]^lfsr[width-2];
始终@(posedge clk)
如果(重置)
开始
lfsr我希望您考虑以下代码部分:
initial begin
f = $fopen("output.txt","w");
end
initial begin
for (i = 0; i<14; i=i+1)
$fwrite(f,"%b\n",lfsr[i]);
end
initial begin
$fclose(f);
end
保持2个时钟上升沿的复位断言
使用工作示例更新
有一些奇怪的事情发生,你在#140
之后调用$stop
(不是$finish
),但也尝试循环14次,$stop意味着只执行4个循环
您的测试程序由2个并行运行的初始开始
组成,而不是一个顺序执行的程序。您毫不延迟地写出了文本文件,并且编写了lfsr的缓冲版本,而不是直接输出lfsr
以下示例正确模拟并写入要查找的文本文件:
module aaatest();
parameter width =4;
reg clk,reset;
wire [width-1:0] out;
reg [width-1:0] lfsr[13:0];
integer f,i;
LFSR patt (clk,reset,out);
always #5 clk=~clk;
//Clock and reset release
initial begin
clk=0; reset=1; //Clock low at time zero
@(posedge clk);
@(posedge clk);
reset=0;
end
initial begin
f = $fopen("output.txt","w");
@(negedge reset); //Wait for reset to be released
@(posedge clk); //Wait for fisrt clock out of reset
for (i = 0; i<14; i=i+1) begin
@(posedge clk);
lfsr[i] <= out;
$display("LFSR %b", out);
$fwrite(f,"%b\n", out);
end
$fclose(f);
$finish;
end
endmodule
模块aaatest();
参数宽度=4;
reg clk,复位;
线[width-1:0]输出;
reg[width-1:0]lfsr[13:0];
整数f,i;
LFSR patt(时钟、复位、输出);
始终#5 clk=~clk;
//时钟和复位释放
初始开始
clk=0;重置=1//时钟在时间零点低
@(中电);
@(中电);
重置=0;
结束
初始开始
f=$fopen(“output.txt”,“w”);
@(负边缘复位)//等待重置被释放
@(中电)//等待第一个时钟退出复位
对于(i=0;iattached是代码..如果您现在可以检查plz..(jst考虑4位LFSR一段时间,因为我需要对其进行一些更改..)另外,请说明是否有任何方法可以比较verilog中的输出。就像我不希望任何输出重复一样,我可以检查一下吗?如果您有其他问题,请将其作为单独的问题发布。这样,您可以获得每个问题的最佳答案,并且可以根据他们回答的问题接受/投票。注意:您可能需要进行研究前离子posting@user3432905,您可能还想查看将lfsr设置为输出的初始块。首先,您在其中设置为clk=1
,这在您处理另一个块中的clk时是不需要的。其次,由于您使用非阻塞分配,Morgan建议的修复可能无法捕获更新的lfsr,因为fwrite将触发n相同的sim周期,但在输出传递给lfsr之后。
initial begin
f = $fopen("output.txt","w");
end
initial begin
for (i = 0; i<14; i=i+1)
$fwrite(f,"%b\n",lfsr[i]);
end
initial begin
$fclose(f);
end
initial begin
f = $fopen("output.txt","w");
@(negedge reset); //Wait for reset to be released
@(posedge clk); //Wait for fisrt clock out of reset
for (i = 0; i<14; i=i+1) begin
$fwrite(f,"%b\n",lfsr[i]);
end
$fclose(f);
end
initial begin
clk=0; reset=1; //Clock low at time zero
@(posedge clk);
@(posedge clk);
reset=0;
# 140 $stop;
end
module aaatest();
parameter width =4;
reg clk,reset;
wire [width-1:0] out;
reg [width-1:0] lfsr[13:0];
integer f,i;
LFSR patt (clk,reset,out);
always #5 clk=~clk;
//Clock and reset release
initial begin
clk=0; reset=1; //Clock low at time zero
@(posedge clk);
@(posedge clk);
reset=0;
end
initial begin
f = $fopen("output.txt","w");
@(negedge reset); //Wait for reset to be released
@(posedge clk); //Wait for fisrt clock out of reset
for (i = 0; i<14; i=i+1) begin
@(posedge clk);
lfsr[i] <= out;
$display("LFSR %b", out);
$fwrite(f,"%b\n", out);
end
$fclose(f);
$finish;
end
endmodule