2016-12-22 67 views
-1

次のVerilogシフトレジスタコードのヘルプを探しますか?次のコードが私に与えられました。私の仕事はそれを回路図形式に変換することです。シフトレジスタ用のVerilog

module shift_register(
    output reg [9:0] out_q, 
    input clk, 
    input reset, 
    input test, 
    input in_cg, 
    input in_sr); 

always @(posedge clk or negedge reset) begin 
    if (reset ==0) begin 
    out_q <= 10'd0; 
    end 
    else if (test == 0) begin 
    out_q <= {out_q[8:0], in_cg}; 
    end 
    else begin 
    out_q<={out_q[8:0],in_sr}; 
    end 
end //end always 

endmodule //endmodule 

私はここShiftRegisterとして添付としての私の概略図を起草ました。誰かがVerilog RTLコードから手動で "合成"することが正しい回路図であることを確認するのを手伝ってください。ありがとう。

+1

「場合は、他のエンド始まる」 – Krouitch

+1

あなたは間違いなくLogisimのようなシミュレータを使用して、それを確認することができますし が「あれば他の終了」に置き換える必要があります。 –

答えて

0

あなたは私には正しいようだ

always @(posedge clk or negedge reset) begin 
    if (reset ==0) begin 
     out_q <= 10'd0; 
    end else begin 
     if (test == 0) begin 
      out_q <= {out_q[8:0], in_cg}; 
     end else begin 
      out_q<={out_q[8:0],in_sr}; 
     end 
    end 
end //end always 
+0

なぜですか?あなたのコードは元のコードと機能的に同等です。 – toolic

+0

@toolicこの場合、それは問題ではありませんが、レジスタへの入力のための非同期リセットを残りの組み合わせ論理から分離するので、上記のスタイルを持つ方が一般的に優れています。同期クリアと非同期リセットがあって、(reset || clr)q <= '0の場合、常に@(posedge clkまたはposedge reset)を持っています。他にも... '、Iveは合成ツールの経験がありませんでした。これは、共有された条件文から間違った振る舞いを生み出しました。あなたがその罠に陥ってはいけないことを確かめるために、私は上記のスタイルを推進します。 – Unn