- ベストアンサー
Verilogのcase文とif文の使い分け
- Verilogのcase文を使って0と1の場合で分岐させる方法について
- 上記のVerilogのプログラムでは、case文を使って0と1の場合で分岐させる予定ですが、うまくいっていません。
- case文ではなくif文のほうが適切なのかについて考えています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
同じラベルを重ねて書かない。 ステートメントが複数あるならbegin-endで囲む。 ---------------------------------------- always @(posedge CLK) begin case (DIP_SW) 0: begin Q[0] <= SW1_OUT; Q[1] <= Q[0]; Q[2] <= Q[1]; Q[3] <= Q[2]; Q[4] <= Q[3]; Q[5] <= Q[4]; Q[6] <= Q[5]; Q[7] <= Q[6]; end 1: begin Q[7] <= SW1_OUT; Q[6] <= Q[7]; Q[5] <= Q[6]; Q[4] <= Q[5]; Q[3] <= Q[4]; Q[2] <= Q[3]; Q[1] <= Q[2]; Q[0] <= Q[1]; end endcase end ---------------------------------------- ただ、Qが(レジスタ配列などではなく)ただの多ビット信号なら、 そもそも代入文を8つも並べる必要性がなさそう。 ---------------------------------------- always @(posedge CLK) begin case (DIP_SW) 0: Q <= {Q[6:0], SW1_OUT}; 1: Q <= {SW1_OUT, Q[7:1]}; endcase end ---------------------------------------- > case文ではなくif文のほうがよいでしょうか? これくらいならif文で十分なようには思える。