Verilog注册码错误 - 条件检查

时间:2017-08-30 15:48:12

标签: module verilog

我正在测试一个8位寄存器的模块,与我的其余代码分开。我使用ModelSim设置值,然后运行以查看结果。 该模块应具有二进制数输入,清除位,使能位和输出。

module Register8bit(D, Clk, Clear, Enable, OutNum);
    input [7:0] D; //8 bit binary data
    input Clk;       //Clock
    input Clear;     //Clear bit
    input Enable;    //Enable bit
    output reg [7:0] OutNum;

always @(posedge Clk)
begin
    if (Enable)
        begin
            if (Clear)
                OutNum <= 8'b00000000;
            else
                OutNum <= D;
        end
end
endmodule

这是我期望的输出(按此顺序),D = 10001111,Clk = 1.

Steps    CLR    Enable    OutNum
1        0      0         xxxxxxxx (initially undefined)
2        0      1         10001111 (input data is used)
3        1      0         10001111 (because write-protection)
4        1      1         00000000 (Clear and Enable are true, so set to 0)
5        0      1         10001111 (Clear is false and Enable is true, so use input data)

第一步有效,但第二步没有(因此其他人也不会工作)。具体来说,OutNum在第二步保持未定义。如果Enable为true,则使用输入数据更新OutNum在第一步中可以正常工作。

我该如何修复这个模块?

测试台代码:

`timescale 1ns / 1ps

module test_register;

//inputs
reg [7:0] D;
reg Clk;
reg Clear;
reg Enable;

//outputs
reg [7:0] OutNum;

//instantiate
Register8bit uut(
    .D(D),
    .Clk(Clk),
    .Clear(Clear),
    .Enable(Enable)
);

initial begin
    D = 10001111;
    Clk = 1;

    //step 1
    #100;
    Clear = 0;
    Enable = 0;
    #100;

    //step 2
    Clear = 0;
    Enable = 1;
    #100;

    //step 3
    Clear = 1;
    Enable = 0;
    #100;

    //step 4
    Clear = 1;
    Enable = 1;
    #100;

    //step 5
    Clear = 0;
    Enable = 1;
    #100;
end
endmodule

1 个答案:

答案 0 :(得分:1)

您需要多次切换subscribe(SingleObserver)信号。您的代码只是将其设置为1,然后将其保留为1以用于整个SIM卡。

Clk