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

Why isn't the $display function printing any value?

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;

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


我能够通过在仿真期间转储波形并在波形查看器中查看它们来调试此问题。这通常比仅仅依靠在日志文件中打印信息更有效。