回路として合成可能な構成
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/09 07:27 UTC 版)
「Verilog」の記事における「回路として合成可能な構成」の解説
Verilogのいくつかの文は、たとえば$display文など、現実のハードウェアでは物理的に実装できないものもある。そのため、言語の多くの機能はハードウェアを記述するためには使用できない。以下に示す例では、直接物理的なゲートに対応する、合成可能な言語の典型的なサブセットを使用している。 // Mux の例 — 同じ動作をする例を3種類の方法で示す。// 1番目の例は連続束縛を使用している。wire out;assign out = sel ? a : b;// 2番目の例は同じことを行うために手続き的な表現を使用している。reg out;always @(a or b or sel) begin case(sel) 1'b0: out = b; 1'b1: out = a; endcase end// 3番目の例: 手続き構造の中で if/else 文を使用することもできる。reg out;always @(a or b or sel) if (sel) out = a; else out = b; 次の非常によく使われる例は、フリップフロップである。Verilogでは、D-フリップフロップが最も簡単に記述でき、以下のようにモデリングできる。 reg q;always @(posedge clk) q <= d; 例の中で注目すべき重要な点は、ノンブロッキング代入を使用していることである。基本的な経験則(rule of thumb(英語版))として、always節の中でposedgeまたはnegedge文を使用する場合には、<=を使用するとよい。Dフリップフロップの変種として、非同期リセット機能を付加したものがある。慣習として、以下のようにリセット状態をチェックするコードを文内の最初のif節とすることが多い。 reg q;always @(posedge clk or posedge reset) if(reset) q <= 0; else q <= d;
※この「回路として合成可能な構成」の解説は、「Verilog」の解説の一部です。
「回路として合成可能な構成」を含む「Verilog」の記事については、「Verilog」の概要を参照ください。
- 回路として合成可能な構成のページへのリンク