1 / 26

回路記述早分かり

回路記述早分かり. 計算機工学特論 スライド 電気電子工学専攻  修士1年 弓仲研究室 07801614      河西良介. 論理合成前提の主な回路記述. assign 文による組み合わせ回路 function による組み合わせ回路 always 文による順序回路 下位モジュール呼び出し. * always 組み合わせ、 task による回路記述も可だが、一般的ではない。. assign 文による組み合わせ回路. assign 文:論理演算や算術回路等で1行で記述できる回路の場合に用いる. * assign→ 継続的代入.

signa
Download Presentation

回路記述早分かり

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 回路記述早分かり 計算機工学特論 スライド 電気電子工学専攻  修士1年 弓仲研究室 07801614      河西良介

  2. 論理合成前提の主な回路記述 • assign文による組み合わせ回路 • functionによる組み合わせ回路 • always文による順序回路 • 下位モジュール呼び出し *always組み合わせ、taskによる回路記述も可だが、一般的ではない。

  3. assign文による組み合わせ回路 • assign文:論理演算や算術回路等で1行で記述できる回路の場合に用いる *assign→継続的代入 常駆動、値の保持ができない(保持できる例:DFF) よって、代入される左辺にはwire宣言したネット型のみ セレクタ 2入力NAND 桁上がり信号 加算回路 carry a d0 =9 sum dout b d1 sel Cnt10 [3:0] assign sum = a + b; assign na = ~( in1 & in2 ); assign dout = (sel==1) ? d1: d0; assign carry = (cnt10==4’h9);

  4. function文による組み合わせ回路 • function文:条件分岐を含むような「複雑」な回路の時に用いる    →functionブロックは関数の定義部分なので実体を書く必要がある *「名前の接続」はfunction文には無い  ので引数の並びの順番は大切 2 to 4 デコーダ *if,case文はfunction内で記述する。  モジュール宣言直後等は文法エラー din dout [0] [0] [1] [2] [1] [3]

  5. always文による順序回路 • ラッチやフリップフロップ等の順序回路をalways文で表現する 例1 レジスタ型ビット数無し宣言 DFF Q D クロック立上がりで入力DにQを代入 CK

  6. always文による順序回路2 resが1ならqは0を代入 例2 4bit binary counter それ以外ならqへ+1 4 CK res

  7. 2 to 4 デコーダ シミュ結果

  8. 計算機工学特論A 3.2.4 下位モジュール呼び出し(P.72) ~ 4.1 基本ゲート回路(P.77) 2007/11/21 弓仲研究室 修士1年 高橋 靖典

  9. 下位モジュール呼び出し 回路の階層構造化 一つのモジュールですべてを記述せず、 複数の階層に分けて記述するのが一般的 回路の階層構造 理由 ・ 機能ごとの小ブロックに分割 → 設計・検証の効率が良い ・ ブロックの大きさの条件 → 論理合成ツールの実用範囲内 ・ 必要以上の大きさのブロックの論理合成 → メモリと時間の浪費

  10. 4ビットDフリップフロップ 1ビットのDフリップフロップを下位モジュールとして 呼びだし、4ビットのDフリップフロップを構成する。 トップ・モジュール  (4ビットDFF) 下位モジュール (1ビットDFF)

  11. 下位モジュールの呼び出し方法 「Quartus II 7.2 Web Edition」でのシミュレーション方法 プロジェクトウィザードで、あらかじめ用意した「Verilog HDL File」を追加することができる ① ② Verilog HDL Fileが追加された

  12. モジュール名インスタンス名 (ポート・リスト) ;モジュール名インスタンス名 (ポート・リスト) ; 例)   DFFDFF0( ck, d[0], q[0] ) ; Verilog HDLでの記述方法 モジュールの呼び出し 同一モジュールを複数呼び出す場合 DFF DFF0( ck, d[0], q[0] ), DFF1( ck, d[1], q[1] ), DFF2( ck, d[2], q[2] ), DFF3( ck, d[3], q[3] ); このように、コンマ(,)で区切って連続して記述する

  13. Verilog HDLでの記述方法 ポートの記述方法 ① 順番によるポート接続 DFFDFF0( ck,d[0],q[0] ) ; 順番の変更不可 ② 名前によるポート接続 . 定義側ポート名 (接続信号) DFFDFF2( .CK(ck),.D(d[2]),.Q(q[2]) ); 順番の変更可能 DFFDFF2( .D(d[2]),.Q(q[2]) ,.CK(ck) ); これでもOK

  14. D Q CK シミュレーション 1ビットDFF クロックの立ち上がりで 入力信号Dの値を保持する

  15. シミュレーション 4ビットDFF 両方可

  16. シミュレーション(失敗例①) 4ビットDFF 順番によるポート接続 では、ポートの順番を 間違えるとエラーになる

  17. シミュレーション(失敗例②) 4ビットDFF 接続信号の記述では 順番と名前を混在して 書くとエラーになる

  18. 第4章 組み合わせ回路のHDL記述 プリミティブ・ゲートを用いたゲート回路 Verilog HDLには、あらかじめ基本的なゲート回路(プリミティブ・ゲート)が用意されている AND、NAND、OR、NOR、インバータ など 記述方法 ゲート・タイプゲート名 ( 出力信号名, 入力信号名1, 入力信号名2, ・・・ ) ; 例) oror2( out_or2 , in0 , in1 ) ; ※ ポートの記述では、「順番による接続」は使えるが、「名前による接続」は使えない ※ ゲート名を省略することができる

  19. シミュレーション① プリミティブ・ゲートを用いたゲート回路 2入力OR回路 真理値表

  20. 2入力OR回路 真理値表 シミュレーション② 論理式を用いたゲート回路 assign出力信号 = 論理式 ; 例) assign or2_out = in0|in1 ; 記述方法

  21. 4.2.12to1セレクタ 図4.42to1セレクタ 2ビットの2本の信号から一本の選択するセレクタを記述します。 2 in1 2 dout ・仕様 2ビットの入力in0とin1をsel信号で選択し2ビットdoutに出力します。 sel=0でin0を、sel=1でin1を選択。 2 in0 sel

  22. 条件演算子による2to1セレクタ //条件演算子による2to1セレクタ Module sel2to1_cond( in0 , in1 , sel , dout ); input [1:0] in0 , in1; input sel; output [1:0] dout; assign dout = (sel==1’b1) ? in1: in0; endmodule 条件演算子部分にビット幅の記述が含まれないため、ビット幅の変更を用意に行えます。

  23. AND-ORによる2to1セレクタ //AND-ORによる2to1セレクタ Module sel2to1_andor( in0 , in1 , sel , dout ); input [1:0] in0 , in1; input sel; output [1:0] dout; assign dout [0] = (~sel & in0 [0] ) | (sel & in1 [0] ) ; assign dout [1] = (~sel & in0 [1] ) | (sel & in1 [1] ) ; endmodule 記述から動作を理解しにくく、ビットを分解して記述しているため、ビット幅変更による対応がよくありません。

  24. if文による2to1セレクタ //if文による2to1セレクタ Module sel2to1_if( in0 , in1 , sel , dout ); input [1:0] in0 , in1; input sel; output [1:0] dout; function [1 : 0] select; input [1 : 0] in0, in1; input sel; if ( sel==1’b0 ) select = in0 ; else select = in1; endfunction assign dout = select (in0, in1, sel ); endmodule ・if文はモジュール構成要素ではないので、function内で用いる。 ・if文では条件式が’x’または’z’ならば偽とみなすため、selが’x’でもin1が選択される。 ・論理合成語のゲート回路では不定値が伝播するため、HDL記述と論理合成後のゲート回路で、シミュレーション結果が異なることがある。

  25. case文による2to1セレクタ //case文による2to1セレクタ Module sel2to1_case( in0 , in1 , sel , dout ); input [1:0] in0 , in1; input sel; output [1:0] dout; function [1 : 0] select; input [1 : 0] in0, in1; input sel; case ( sel ) 1’ b0 : select = in0 ; 1’ b1 : select = in1 ; default : select = 1’ bx ; endcase endfunction assign dout = select (in0, in1, sel ); endmodule ・if文と同様にfunctionの中で用いる。 ・selが指定した値以外を取る場合はdefault以降を実行し、戻り値selectは不定となる。

More Related