EDA(Quartus II)-10進数の加算カウンターの設計

目次

目的:

実験プレビュー:

実験説明1:

DフリップフロップとラッチのVerilogHDL記述:

実験説明2:

Dフリップフロップの設計

実験内容:10進加算カウンターの設計

実験概要


目的:

  1. Quartus IIソフトウェアの使用に精通しており、EDAプロセスを習得している。
  2. 基本的な順序論理回路の設計方法を習得します。
  3. 複雑な順序論理回路の設計の基礎を築くための10進加算カウンターの設計を学びます。

実験プレビュー:

  1. 10進加算カウンターの設計原理を習得します。
  2. 同期および非同期回路の実現。
  3. ifステートメントの使用法。

実験説明1:

DフリップフロップとラッチのVerilogHDL記述:

module D_ff(D,clk,q);    //D触发器
input D,clk;
output reg q;
always@(posedge clk)
q<=D;
end
endmodule

module latchl(D,clk,q);    //锁存器
input D,clk;
output reg q;
always@(D or clk)
if(clk)
q<=D;
end
endmodule

ラッチとフリップフロップの共通点:0と1の2つの安定した状態があります。状態が確認されると、それ自体を維持できます。ラッチ/フリップフロップは、1ビットのバイナリコードを格納できます。

ラッチとフリップフロップの違い:ラッチ---パルスレベルに敏感で、特定の入力パルスレベルの作用下で状態を変化させるストレージ回路。フリップフロップ---パルスのエッジに敏感なメモリ回路。クロックパルスの立ち上がりエッジまたは立ち下がりエッジが変化した瞬間に状態が変化します。

構文ポイント1:

タイミングの象徴的な説明posedgeclk:すべてのエッジトリガータイミングコンポーネントはposedge(negedge)clkを使用する必要があり、この説明なしで生成されたタイミング回路はレベルセンシティブタイミング回路です。その中で、ポーズclkは立ち上がりエッジトリガーを意味し、ネガエッジclkは立ち下がりエッジトリガーを意味します。

実験説明2:

Dフリップフロップの設計

module d_ff(rst,D,clk,q);//异步
input rst,D,clk;
output reg q;
always@ (posedge clk or posedge rst)
begin 
if(rst)
q<=0;
else 
q<=D;
end
endmodule
 非同期リセットDフリップフロップのシミュレーション波形
module d_fft(rst,D,clk,q);//同步
input rst,D,clk;
output reg q;
always@ (posedge clk  )
begin 
if(rst)
q<=0;
else 
q<=D;
end
endmodule
同期リセットDフリップフロップのシミュレーション波形

構文ポイント2:非同期および同期

非同期:クロック制御から独立したリセット制御端子を指します。つまり、rst = 1または0である限り、クロックの状態に関係なく、フリップフロップの出力はすぐに0にクリアされます。

使用されたステートメント:

always @(posedgeclkまたはposedgerst)

ベギン

      if(rst)q <= 0;

      そうでなければq <= D;

終わり

同期:最初のものが有効であるだけでなく、フリップフロップの出力がクリアされる前にクロックの立ち上がりエッジが到着する必要があります。

使用されたステートメント

always @(posedge clk)

ベギン

      if(rst)q <= 0;

      そうでなければq <= D;

終わり

Verilogのクロックプロセスの説明は次の点に注意してください。センシティブシグナルテーブルにキーワードposedgeまたはnegedgeがない場合、センシティブシグナルの配置を変更してロジック機能を変更しようとすることは無効です。センシティブシグナルテーブルにキーワードposedgeまたはnegedgeが含まれている場合、センシティブシグナルの配置を変更することで包括的な結果に影響を与える可能性があります。

構文ポイント3:条件ステートメント(ifステートメント)

条件文は、条件が確立されているかどうかに基づいて次の操作を決定することです。ifの後の条件式は、通常、論理式または関係式であり、括弧で囲む必要があります。

ifステートメントが実行されると、式の値が最初に計算されます。結果が0、x、またはzの場合、「false」として処理されます。結果が1の場合、「true」として処理され、対応するステートメントが実行されます。

Verilog言語のifステートメントには次の3つの形式があります。

形式1は、以下に示すように、順序回路を生成するために使用される不完全な条件ステートメントです。

if(condition_expr)true_statement;

フォーマット2は、組み合わせ論理回路を生成する完全な条件ステートメントです。次のように、ポーズCLKで表されるエッジセンシティブ信号など、特定の状況で順序回路が生成されます。

if(condition_expr)true_statement;

elsefault_ステートメント;

 形式3は、複数のネストされた条件ステートメントであり、より豊富な条件記述を生成でき、順序回路と組み合わせ回路の両方を生成できます。

if(condition_expr1)true_statement1;

else if(condition_expr2)true_statement2;

else if(condition_expr3)true_statement3;

       ……

else default_statement;

実験内容:10進加算カウンターの設計

実験計画要件:非同期リセットと同期イネーブルを備えた10進加算カウンターを設計します。このうち、RSTは非同期リセット信号、ENは同期イネーブル信号、CLKはクロック信号です。CQはカウント出力、COUTはキャリー出力です。

10進加算カウンタ設定ソースプログラム:

module cnt_10(rst,en,clk,q,cout);//十进制加法器
input rst,en,clk;
output reg[3:0] q;
output reg cout;
always@(posedge clk or negedge rst)
begin
if(~rst) begin q<=4'b0000; cout<=1'b0;end//是0就执行此行
		else if(en)
		if(q==4'b1001) begin q<=4'b0000;cout<=1'b1; end
				else begin q<=q+1'b1; cout<=1'b0;end
end
endmodule

構文ポイント4:プロセス割り当てステートメント(VHDLの変数割り当てに相当)

プロシージャの割り当てステートメントは、最初のステートメントと常にブロックステートメントに表示されます。割り当て記号は「=」で、形式は次のとおりです。

                      代入変数=式;

プロシージャの代入ステートメントでは、代入記号 "="の左側にある代入変数はreg(レジスタ)変数である必要があり、その値はステートメントの最後で取得できます。ブロックステートメントに複数のプロシージャ割り当てステートメントが含まれている場合、これらのプロシージャ割り当てステートメントは、ステートメントが記述された順序で上から下に1つずつ実行されます。前のステートメントが完了していない場合、次のステートメントは実行できません。同じようにブロックされた場合。したがって、プロシージャ割り当てステートメントは、ブロッキング割り当てステートメントとも呼ばれます。

Verilogプログラムのプロセス構造では、ブロッキング割り当ては、遅延動作なしですぐに発生する理想的なデータ送信です。

同じプロセス構造では、同じターゲット変数への複数の割り当てが許可されます。つまり、同じターゲット変数に対して複数のドライブソースが許可されます。

これには、順次割り当ての特性があります。つまり、プロセス内のブロッキング割り当てステートメントのシーケンスは、最終結果または包括的な結果に直接影響します。

構文ポイント5:非ブロッキング割り当てステートメント(VHDLでの信号割り当てと同等)

非ブロック割り当てステートメントは、最初の常にブロックステートメントにも表示されます。割り当て記号は「<=」で、形式は次のとおりです。

                  代入変数<=式;

 非ブロッキング代入ステートメントでは、代入記号 "<="の左側にある代入変数もreg変数である必要があります。その値は、プロシージャの代入ステートメントとは異なります。プロシージャの代入ステートメントは、ステートメントですが、ブロックステートメントの最後でのみ取得できます。

推奨事項:順序論理回路の設計では、非ブロッキング割り当てステートメントを使用します。

Verilogプログラムのプロセスでは、ノンブロッキング割り当てステートメントは実際の回路の割り当てと出力に近く、特別な遅延操作があり、割り当てプロセス中の他の同様のステートメントの割り当て操作には影響しません。ブロッキング割り当てと同様に、複数の割り当てまたは同じターゲット信号の駆動が許可されます。Verilogは、割り当てられたターゲット変数がプロセスの最後に最も近い駆動ソースのデータを受け入れることを規定しています。

たとえば、次のブロックステートメントには4つの割り当てステートメントが含まれています

常に@(ポーズクロック)

m = 3;

n = 75;

n <= m;

r = n;

ステートメントの実行後、3行目は非ブロッキング代入ステートメント "n <= m"であるため、rの値は3ではなく75になります。このステートメントは、ブロックステートメントが終了するまで変更されません。

実験課題1:

学生は、小数加算カウンターのコード入力、合成、およびソフトウェアシミュレーションを理解し、ソフトウェアシミュレーションの結果を注意深く分析し、ソフトウェアシミュレーションの結果を通じて設計を変更します。

実験課題2:

学生は、10進加算カウンタの入力ポートと出力ポートに従って回路モードを選択し、対応するピンロック、プログラミングダウンロード、およびハードウェア検証を実行します。

[時計はシステムのclkB0またはB1によって入力され、イネーブル信号とリセット信号はボタンによって入力され、出力coutはLEDライトによって表示され、残りはデジタルチューブによって表示されます]

実験概要

 

 

おすすめ

転載: blog.csdn.net/XZ_ROU/article/details/113436361