【问题标题】:Serial output shift register indetermination串行输出移位寄存器不确定
【发布时间】:2013-06-08 17:47:08
【问题描述】:

我写了一个并行输入串行输出移位寄存器,我在这里展示。

module shiftreg32b (clk, reset, shift, carrega, in, regout);
    input clk;
    input reset, shift;
    input carrega;
    input [31:0] in;

    output regout;

    reg [31:0] inreg;

    assign regout = inreg[31];

    always @ (posedge clk)
    begin
        if (reset == 1) inreg <= 32'd0;
            else if (carrega) inreg <= in;
                else if (shift) inreg <= {inreg[30:0], 1'b0};
    end

endmodule

我发现的问题是这个移位寄存器的输出总是未知的(StX),即使我已经设置了assign regout = 0; 来确定。测试非常简单,其他一切都运行良好(inreg 在启用shift 时切换,等等)。

我是否以错误的方式使用了分配?谁能指出问题所在?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    assign 是正确的。

    由于您没有提供测试平台,我最好的猜测是您有多个 regout 驱动程序,很可能是您将输出端口连接到其他设备时。

    使用这个最小的测试平台,我看到 regout 从 X 变为 0,正如预期的那样

    module tb;
    
        reg clk;
        reg reset, shift;
        reg carrega;
        reg [31:0] in;
        wire regout;
    
    initial begin
        $monitor($time, " regout=%b", regout);
        $dumpvars;
        clk = 0;
        reset = 1;
        carrega = 0;
        shift =0;
        in=0;
        #50 $finish;
    end
    
    always #5 clk = !clk;
    
    shiftreg32b shiftreg32b (clk, reset, shift, carrega, in, regout);
    
    endmodule
    

    打印:

                       0 regout=x
                       5 regout=0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多