为什么$display函数不打印任何值?



TPG模块的代码

module TPG(input wire clk, input wire reset, input wire bistMode, input wire enable, output reg[127:0] valueO);
reg[31:0] myPatterns[0:3],Temporary;
integer i;
always@(posedge clk)begin
if((bistMode==1) && (enable==1))begin
if(reset)begin
Temporary = 32'b11111111111111111111111111111111;
end
else
begin
for(i=0;i<4;i=i+1)begin
Temporary = {(Temporary[31] ^ Temporary[25] ^ Temporary[22] ^ Temporary[21] ^ Temporary[15] ^ Temporary[11] ^ Temporary[10] ^ Temporary[9] ^ Temporary[7] ^ Temporary[6] ^ Temporary[4] ^ Temporary[3] ^ Temporary[1] ^ Temporary[0]), Temporary[31:1]};
myPatterns[i] = Temporary;
end
valueO = {myPatterns[3],myPatterns[2],myPatterns[1],myPatterns[0]};
end
end
end
endmodule

下面给出了测试台的代码。

`timescale 10ns/1ns
module mux_tb();
reg clk,resetting,bistForDeterministic,enable,bistMode;
wire [127:0] valueI;
TPG T (clk,resetting,bistMode,enable,valueI);
initial begin
clk = 0;
resetting = 1;
#5 resetting = 0;
bistForDeterministic = 1;
bistMode = 1;
enable = 1;
end
always@(negedge clk)begin
if((bistMode==1) && (bistForDeterministic==1))begin
@(valueI)begin
$display("%h",valueI);
end
end
end
endmodule

$display不会打印任何值,因为测试台没有正确驱动您的输入。

您的时钟信号始终为0,这意味着您从未看到任何negedge。此外,您在重置期间没有分配其他信号(enablebistMode(。

对测试台的这些更改允许$display打印值:

initial begin
clk = 0;
resetting = 1;
bistForDeterministic = 1;
bistMode = 1;
enable = 1;
#5 resetting = 0;
#100 $finish;
end
always #1 clk = ~clk;

您应该根据自己的目的调整时钟周期和其他信号定时。


我能够通过在模拟过程中转储波形并在波形查看器中查看波形来调试这个问题。这通常比仅仅依靠在日志文件中打印信息更有效。

相关内容

最新更新