Download presentation
Presentation is loading. Please wait.
1
計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 07801614 河西良介
回路記述早分かり 計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 河西良介
2
論理合成前提の主な回路記述 assign文による組み合わせ回路 functionによる組み合わせ回路 always文による順序回路
下位モジュール呼び出し *always組み合わせ、taskによる回路記述も可だが、一般的ではない。
3
assign文による組み合わせ回路 *assign→継続的代入 常駆動、値の保持ができない(保持できる例:DFF)
よって、代入される左辺にはwire宣言したネット型のみ セレクタと加算回路ではビット数を明示していない。 信号をwire宣言部で定義しておけば一箇所変更するだけですむ。 Carryでは条件演算を用い、代入する値を明示してもよい。 また、assignはほかの回路とあわせて用いモジュールを構成するのが普通。 2入力NAND セレクタ 桁上がり信号 加算回路 carry d0 a dout =9 sum d1 b sel Cnt10 [3:0] assign na = ~( in1 & in2 ); assign dout = (sel==1) ? d1: d0; assign carry = (cnt10==4’h9); assign sum = a + b;
4
function文による組み合わせ回路 2 to 4 デコーダ function文:条件分岐を含むような「複雑」な回路の時に用いる
*if,case文はfunction内で記述する。 モジュール宣言直後等は文法エラー din dout [0] [0] [1] [1] [2] [3]
5
always文による順序回路 例1 ラッチやフリップフロップ等の順序回路をalways文で表現する レジスタ型ビット数無し宣言
DFF レジスタ型ビット数無し宣言 D Q クロック立上がりで入力DにQを代入 CK
6
always文による順序回路2 resが1ならqは0を代入 例2 それ以外ならqへ+1 4bit binary counter 4 CK
7
2 to 4 デコーダ シミュ結果
8
3.2.4 下位モジュール呼び出し(P.72) ~ 4.1 基本ゲート回路(P.77)
計算機工学特論A 3.2.4 下位モジュール呼び出し(P.72) ~ 4.1 基本ゲート回路(P.77) 2007/11/21 弓仲研究室 修士1年 高橋 靖典 「パルス幅変調プリエンファシスを用いた高速信号伝送技術とその評価」について、弓仲研究室、学部4年の高橋が発表いたします。
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
Verilog HDLでの記述方法 モジュールの呼び出し モジュール名 インスタンス名 (ポート・リスト) ;
モジュール名 インスタンス名 (ポート・リスト) ; 例) DFF DFF0 ( ck, d[0], q[0] ) ; 同一モジュールを複数呼び出す場合 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での記述方法 ポートの記述方法 ① 順番によるポート接続 ② 名前によるポート接続
① 順番によるポート接続 DFF DFF0 ( ck, d[0], q[0] ) ; 順番の変更不可 ② 名前によるポート接続 DFF DFF2 ( .CK(ck), .D(d[2]), .Q(q[2]) ); . 定義側ポート名 (接続信号) 順番の変更可能 DFF DFF2 ( .D(d[2]), .Q(q[2]) , .CK(ck) ); これでもOK
14
シミュレーション 1ビットDFF D Q CK クロックの立ち上がりで 入力信号Dの値を保持する
15
シミュレーション 4ビットDFF 両方可
16
シミュレーション(失敗例①) 4ビットDFF 順番によるポート接続 では、ポートの順番を 間違えるとエラーになる
17
シミュレーション(失敗例②) 4ビットDFF 接続信号の記述では 順番と名前を混在して 書くとエラーになる
18
第4章 組み合わせ回路のHDL記述 プリミティブ・ゲートを用いたゲート回路 記述方法
Verilog HDLには、あらかじめ基本的なゲート回路(プリミティブ・ゲート)が用意されている AND、NAND、OR、NOR、インバータ など 記述方法 ゲート・タイプ ゲート名 ( 出力信号名, 入力信号名1, 入力信号名2, ・・・ ) ; 例) or or2 ( out_or2 , in , in ) ; ※ ポートの記述では、「順番による接続」は使えるが、「名前による接続」は使えない ※ ゲート名を省略することができる
19
シミュレーション① プリミティブ・ゲートを用いたゲート回路 2入力OR回路 真理値表
20
シミュレーション② 論理式を用いたゲート回路 記述方法 真理値表 assign 出力信号 = 論理式 ;
例) assign or2_out = in0 | in1 ; 記述方法 真理値表 2入力OR回路
22
4.2.1 2to1セレクタ 図4.4 2to1セレクタ 2 in1 2 dout 2 in0 sel
2ビットの2本の信号から一本の選択するセレクタを記述します。 2 in1 2 dout ・仕様 2ビットの入力in0とin1をsel信号で選択し2ビットdoutに出力します。 sel=0でin0を、sel=1でin1を選択。 2 in0 sel
23
条件演算子による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 条件演算子部分にビット幅の記述が含まれないため、ビット幅の変更を用意に行えます。
24
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 記述から動作を理解しにくく、ビットを分解して記述しているため、ビット幅変更による対応がよくありません。
25
if文による2to1セレクタ ・if文はモジュール構成要素ではないので、function内で用いる。
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記述と論理合成後のゲート回路で、シミュレーション結果が異なることがある。
26
case文による2to1セレクタ ・if文と同様にfunctionの中で用いる。
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は不定となる。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.