1

私は、ここで紹介するパラレル イン シリアル アウト シフト レジスタを作成しました。

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

割り当てを間違った方法で使用していますか? 誰でも問題を指摘できますか?

4

1 に答える 1

0

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
于 2013-06-08T18:24:47.350 に答える