if 文
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 52/90。
if statementは、conditionがtrueであるwhenにonlyコードをexecutesする意志決定ブロックです。if statementはconditionをチェックします。
条件が true (1) の場合、内部のコードが実行されます。条件が false (0) の場合、コードはスキップされます。
構文:
if (condition) begin
// condition が true のときにコードが実行される
endシンプルな例
if (reset) begin
count = 0;
endこの例では:
beginとendは、コードブロックの開始と終了をマークするために使用されます
resetが 1 (true) の場合、beginとendの間のコードが実行されます →countは 0 になりますresetが 0 (false) の場合、内部のコードはスキップされます → 何も起こりません
begin と end は、他のプログラミング言語における波括弧 { } のように機能します。これらは文をグループ化し、どのコードが if の条件に属しているかをVerilogが認識できるようにします。ここでは文が1つしかありませんが、一貫性のために begin と end を使用することは依然として良いプラクティスです。
Always ブロック内の If 文
always @(posedge clk) begin
if (reset)
count <= 0;
end注: 単一の statement の場合、begin と end は省略可能です。たとえば、上記の always ブロックでは、if の後に statement が1つしかないため、begin/end は必要ありません。
Condition は任意の式を指定可能
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
end重要なルール
| ルール | 説明 |
|---|---|
| Condition はどのような式にすることもできます | 非ゼロ(かつ既知)の値は true として扱われ、ゼロは false として扱われます |
複数の statement には begin / end が必要です | 他の言語の { } のようなものです |
begin/end がないと、1つの statement のみが続きます | 次の行のみ |
チャレンジ
作業内容:
- これを動作させるために不足している
ifstatementを追加してください。
enableが1のとき、outはa & bと等しくなるshouldenableが0のとき、outは0のまま維持されるshould(変更しない)
スターターコードは 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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。