Modelsim仿真输出始终显示高执行状态(蓝线)

时间:2016-09-17 06:28:05

标签: verilog simulation hdl modelsim

我使用Verilog并且模拟中的所有输入都很好,但所有输出都保持高执行状态(波形窗口中的蓝线)。

这是.v文件:

module de_mux(
input clk, NewPacket,
input [7:0] DataIn,
output reg [7:0] DataOut0, DataOut1, DataOut2, DataOut3, DataOut4, DataOut5, DataOut6, DataOut7
);
reg [2:0] h = 3'bxxx;
reg [3:0] l = 4'bxxxx;
reg [7:0] t = 8'b00000000;

always @ (posedge clk)
begin
    DataOut0 <= 8'b00000000;
    DataOut1 <= 8'b00000000;
    DataOut2 <= 8'b00000000;
    DataOut3 <= 8'b00000000;
    DataOut4 <= 8'b00000000;
    DataOut5 <= 8'b00000000;
    DataOut6 <= 8'b00000000;
    DataOut7 <= 8'b00000000;

    case (h)
        3'b000: DataOut0 <= t;
        3'b001: DataOut1 <= t;
        3'b010: DataOut2 <= t;
        3'b011: DataOut3 <= t;
        3'b100: DataOut4 <= t;
        3'b101: DataOut5 <= t;
        3'b110: DataOut6 <= t;
        3'b111: DataOut7 <= t;
        default:;
    endcase

    if (NewPacket)
        begin
            h <= DataIn [6:4] - 3'b001;
            l <= DataIn [3:0] + 4'b0001;
        end
    else if (l > 0)
        begin
            t <= DataIn;
            l <= l - 4'b0001;

        end
    else
        begin
            t <= 8'b00000000;
        end
    h <= h + 3'b001;
end
endmodule

和测试台文件:

module de_mux_test();
reg clk;
reg NewPacket;
reg [7:0] DataIn;
wire [7:0] DataOut0, DataOut1, DataOut2, DataOut3, DataOut4, DataOut5, DataOut6, DataOut7;

always begin
    #10 clk = ~clk;
end

initial begin

    clk = 1'b1;

    NewPacket = 1'b1; DataIn = 8'b01110011; #20 
    NewPacket = 1'b0; DataIn = 8'b00010001; #20
    NewPacket = 1'b0; DataIn = 8'b00100010; #20
    NewPacket = 1'b0; DataIn = 8'b00110011; #20
    NewPacket = 1'b0; DataIn = 8'b01000100; #20
    NewPacket = 1'b0; DataIn = 8'b00000000; #20

    NewPacket = 1'b1; DataIn = 8'b00000010; #20
    NewPacket = 1'b0; DataIn = 8'b10001000; #20
    NewPacket = 1'b0; DataIn = 8'b10011001; #20
    //NewPacket = 1'b0; DataIn = 8'b00000000;
    #20
    #20
    $finish;
end
endmodule

我不知道问题出在哪里。为什么会这样呢......

1 个答案:

答案 0 :(得分:0)

您在主模块的主频过程中使用非阻塞分配。实际上,您正尝试在每个时钟上为DataOutN&lt; =分配8'b00000000和case语句。 如果您更改那些&lt; = to =(阻止分配),您可以解决所有DataOutN的问题

我也看到你用变量h做同样的事情。您为h分配非阻塞两次。您可以通过从非阻塞切换到阻塞来修复h,但是您需要验证在NewPacket的情况下,您首先要通过h = DataIn [6:4] - 3'b001分配然后更新啊= h + 1。

变量l未在“else”项中赋值,这可能意味着您希望将l指定为其原始值。我实际上会将其写入声明中以使其看起来有意。