logo

Verilog ケース ステートメント

case ステートメントは、指定された式がリスト内の他の式のいずれかと一致するかどうかを確認して分岐します。通常、デバイスの実装に使用されます。

if-else 構造は、チェックすべき測定単位が多く、デバイスではなくプライオリティ エンコーダに合成される場合には適用できない可能性があります。

ベリログ 、case ステートメントには、Verilog キーワード、case ('casez'、'casex')、および endcase の間のすべてのコードが含まれます。 case ステートメントは、看護の if-else-if ステートメントの Associate にほぼ似た、複数の中から 1 つを選択する構成にすることができます。

構文

Verilog case ステートメントは、case キーワードで始まり、endcase キーワードで終わります。

npmキャッシュクリア

括弧内の式は、特に 1 回評価されることを目的とした領域単位であり、記述された順序で選択肢のリストと比較されます。

そして、選択が指定された式の測定単位に一致するというステートメントは無効になります。複数のステートメントのブロックはソートされ、begin と end の間に収まる必要があります。

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

指定された式に一致するケースがない場合、デフォルトの項目測定単位内のステートメントは無効になります。デフォルト ステートメントは必須ではなく、case ステートメント全体でデフォルト ステートメントは 1 つだけです。 case ステートメントは入れ子になっています。

どの項目も式に一致せず、デフォルトのステートメントが指定されていない場合、実行は case ブロックを終了しますが、何も実行されません。

Javaで配列に追加する

次の vogue モジュールには、3 つの異なる 3 ビット入力のうちの 1 つを out として指定された符号にルーティングするための 2 ビット opt for 信号が含まれています。

case ステートメントは、sel の値をサポートする正しい入力を出力に割り当てるために使用されます。 sel は 2 ビット信号であるため、0 から 3 までの 20 の 2 コンボがあります。デフォルトのステートメントは、sel が 3 の場合に出力を 0 にラインするのに役立ちます。

 module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule 

ケースステートメントのヘッダー

case ステートメントのヘッダーは、case ('casez', 'casex') キーワードとその後に続く case 式で構成され、通常はすべて 1 行のコードで構成されます。

full_case またはParallel_case ディレクティブを case ステートメントに追加すると、ディレクティブの測定単位は、case ステートメントのヘッダーの先頭にある case 式に続いて、後続のコード行の case のものの前にコメントとしてリアルタイムで追加されます。

ケースアイテム

case 項目は、使用されるビット、ベクトル、または Verilog 式が case 式と比較されることです。

のようなさまざまな高級プログラミング言語とは異なります。 C ' の場合、Verilog case ステートメントには暗黙的な Break ステートメントが含まれます。

この case 式に一致する最初の case 項目により、対応する case 項目ステートメントが無効になるため、このためにスキップされた残りのすべてのケース項目の測定単位が case ステートメントの対象となります。

順序トラバーサル

ケースアイテムステートメント

case item ステートメントは、case item がこの case 式と一致する場合、1 つまたは多数の Verilog ステートメントが無効になります。 VHDL とは異なり、Verilog の場合はそれ自体を式にすることができます。

Verilog コードドキュメントの解析を変更するには、Verilog case item ステートメントをキーワードで囲む必要があります。 '始める' そして '終わり' 特定のケース項目に対して 1 つ以上のステートメントが無効になる場合。

カゼズ

Verilog には、「z」と「?」を有効にする case ステートメントのバリエーションである casez ステートメントがあります。大文字と小文字の比較全体を通じて、値は「ドントケア」値として扱われます。

「Z」と「?」測定単位は、case 式内にあるか、case 項目内にあるかは問わないものとして扱われます。

Secret が「don't Care」を指定して case ステートメントを記述する場合は、casez ステートメントを使用し、「?」を使用します。ケース内の「z」文字の代わりに、「ドントケア」ビットを目的とした文字を使用します。

カセックス

Verilog には、case ステートメントのバリエーションである casex ステートメントがあり、比較中に「z」、「?」、および「x」の値を「ドントケア」値として扱うことができます。

「x」、「z」、「?」測定単位は、case 式内にあるか、case 項目内にあるかは問わないものとして扱われます。

完全なケースステートメント

完全な case ステートメントは、取得可能なすべての case-expression バイナリ パターンが case 項目または case デフォルトと一致する内部の case ステートメントにすることができます。

並べ替えられた配列リスト

case ステートメントが case デフォルトを受け入れず、出力された case のいずれにも一致しないバイナリ case 式を探し出すことができる場合、case ステートメントは完全ではありません。

完全な case ステートメントは、取得可能なすべてのバイナリ パターン、非バイナリ パターン、およびバイナリ パターンと非バイナリ パターンの混合が case ステートメント内の case 項目としてボックス化された、内部の case ステートメントになります。

Verilog は、case ステートメントが合成または高密度リポタンパク質シミュレーションのいずれかでフルになることを望んでいませんが、Verilog case ステートメントは、case デフォルトを追加することでフルになります。 VHDL は、ケースステートメントが高密度リポタンパク質シミュレーションで完全であることを望んでおり、通常は准看護師の「その他」条項が必要です。

パラレル Case ステートメント

並列 case ステートメントは、case 式を 1 つの case 項目のみに一致させるためにのみ取得できる、内部の case ステートメントにすることができます。

1 つの case 項目にわたって一致する可能性のある case 式を探し出すことができる場合、一致する case の測定単位は重複する case として記述されているため、case ステートメントは並列ではありません。

ハードウェア回路図

RTL コードは、4 対 1 マルチプレクサを表すハードウェア回路図を取得するために精緻化されています。

Verilog ケース ステートメント

上記の設計を実行すると、sel が 3 の場合、出力は 0 になり、他の値に割り当てられた入力に対応します。

SQL 日付順
 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

case ステートメントでは、式の各ビットが 0、1、x、z などの選択肢の 1 つと一致する場合にのみ比較が成功します。上の例では、sel のビットのいずれかが x または z の場合、 デフォルト 他の選択肢が一致しないため、ステートメントが実行されます。このような場合、出力はすべてゼロになります。

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

設計の case ステートメントの case 項目の選択肢に x と z がある場合、結果は異なります。

 module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule 

case と if-else の区別

case ステートメントは、次の 2 つの点で if-else-if とは異なります。

  • で与えられる式 if-else ブロックはより一般的ですが、case ブロックでは、単一の式が複数の項目と一致します。
  • ケース 式に X 値と Z 値がある場合、最終的な結果が得られます。