If文
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 52/90。
if文は、条件が真の場合にのみコードを実行する、判断を行うブロックです。if文は条件を確認します。
条件が真(1)の場合、中のコードが実行されます。条件が偽(0)の場合、コードはスキップされます。
構文:
if (condition) begin
// condition が true のとき、コードが実行されます
end簡単な例
if (reset) begin
count = 0;
endこの例では:
beginとendは、コードブロックの開始と終了を示すために使われます
- 「reset」が1(真)の場合、
beginとendの間のコードが実行される →countは0になる - 「reset」が0(偽)の場合、中のコードはスキップされる → 何も起こらない
begin と end は、ほかのプログラミング言語の波かっこ { } と同じように機能します。これらを使って文をまとめることで、Verilog はどのコードが if 条件に属するのかを認識できます。ここでは文が1つしかありませんが、一貫性を保つために begin と end を使うのは、やはりよい習慣です。
alwaysブロック内のif文
always @(posedge clk) begin
if (reset)
count <= 0;
end注: 1つの文の場合、beginとendは省略できます。たとえば、上記のalwaysブロックでは、文が1つだけなので、ifの後にbegin/endは必要ありません。
条件には任意の式を指定できます
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
end重要なルール
| ルール | 説明 |
|---|---|
| 条件には任意の式を指定できます | ゼロ以外の(既知の)値はtrue、ゼロはfalseとして扱われます |
複数の文にはbegin / endが必要です | 他の言語の{ }と同様です |
begin/endがない場合、後に続く文は1つだけです | 次の文だけがifに属します |
チャレンジ
行うこと:
- これが動作するように、不足している
if文を追加してください。
enableが1のとき、outはa & bと等しくなる必要がありますenableが0のとき、outは0のまま(変化しない)である必要があります
スターターコードでは out = 0 を初期化し、両方のケースをテストします。
自分で試してみよう
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// テストケース 1: enable = 1
enable = 1;
// TODO: if文を追加する (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// テストケース 2: enable = 0
enable = 0;
out = 0;
// TODO: outは0のままにする
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ