ハードウェア設計論特論 (4) 林田隆則 2009.10.29 2009.10.29 ハードウェア設計論特論 1 LSIの設計とは? -ディジタル回路の場合• 実現したいもの – 要求された機能の実現 • 実現の方法 – ディジタルシステム(有限状態機械またはその複数の結合)の半 導体集積回路による実現 • 設計者がやること – 要求された機能からそれを実現する有限状態機械を作る – 有限状態機械を論理回路で実現する – 実現した論理回路に対応するトランジスタ回路を作成し,それぞ れのトランジスタや配線のLSI上での位置や大きさを決定する – 最終的にマスクを作るのに必要な図形データを作る – 製造後の検査のためのテストデータを作る 今回の講義に 関係する範囲 2009.10.29 ハードウェア設計論特論 2 デジタルLSIの設計フロー プロセス開発 アーキテクチャ設計 プロセスパラメータ アーキテクチャ デバイス開発 デバイスパラメータ RTL設計 ライブラリ開発 HDL記述 ライブラリ情報 論理合成 ネットリスト テスト生成 デザインルール レイアウト設計 テストベクタ テスト 機器の 制御パ ラメータ マスクデータ 製造プロセス チップ 2009.10.29 ハードウェア設計論特論 3 RTL設計(機能・論理設計) 機能A 機能分割 設計仕様 X+Y=Z 機能設計 Z-V=S 機能C X*W=V 機能B 検証環境 機能A テストベンチ 機能C テストベンチ ************* ************* RTLデータ **** 機能B テストベンチ 論理合成 論理シミュレーション 2009.10.29 ハードウェア設計論特論 4 機能記述 module cnt10 (ck, reset, en, q, carry); input ck, reset, en; output[3:0] q; output carry; reg [3:0] q; wire q9; always @ ( posedge ck ) begin if ( reset ) q <= 0; else if ( en ) begin if (q9 ) q <= 0; else q <= q + 1; end end assign q9 = (q == 9); assign carry = q9 & en; endmodule 2008.10.29 2009.10.29 Verilog-HDL記述例 広範囲な機能の表現であり 具体的な回路表現ではない 10進カウンタ: ハードウェア設計論特論 5 動作確認 2009.10.29 ハードウェア設計論特論 6 論理合成(機能記述ー>論理回路) 製造技術で裏付けられた module cnt10 ( ck, reset, en, q, carry ); NORなどのプリミティブで記述される output [3:0] q; ネットリストと同様の情報を機能記述 input ck, reset, en; から自動的に生成する output carry; wire ¥q86[2] , n129, n130, n131, n132, n133, n134, n135, n136, n137, n138, n139, n140, n141, n142, n143, n144, ¥add_22/carry[2] , ¥dd_22/carry[3]; HAD1 ¥add_22/U1_1_2 ( .A(q[2]), .B(¥add_22/carry[2] ), .CO(¥add_22/carry[3] ), .SO(¥q86[2] ) ); NOR21 U35 ( .A(n129), .B(q[0]), .Y(¥add_22/carry[2] ) ); NOR2 U36 ( .A(reset), .B(n130), .Y(n144) ); 途中省略 AOI22 U41 ( .A(¥q86[2] ), .B(n136), .C(q[2]), .D(n135), .Y(n132) ); DF ¥q_reg[3] ( .C(ck), .D(n141), .Q(q[3]) ); DF ¥q_reg[2] ( .C(ck), .D(n142), .Q(q[2]) ); DF ¥q_reg[1] ( .C(ck), .D(n143), .Q(q[1]) ); DF ¥q_reg[0] ( .C(ck), .D(n144), .Q(q[0]) ); endmodule 2009.10.29 ハードウェア設計論特論 7 論理合成 入力 HDL記述 ネットリスト 論理式 真理値表 状態遷移表 タイミングチャート 論理合成 プログラム (Design Compiler Synopsys社など) 制約条件 (性能、面積、電力) 最適化の条件 タイミング条件 2009.10.29 出力 ネットリスト HDL 記述 セルライブラリ ハードウェア設計論特論 8 要求された機能から有限状態機械を作る ~論理回路の基礎と順序回路の設計~ 2009.10.29 ハードウェア設計論特論 9 組合せ回路と順序回路 • 組合せ回路 – 回路外部からの入力が決まると、出力が一意に 決定する論理回路 – 内部に記憶素子を持たない • 順序回路 – 回路外部からの入力値と、内部記憶の値から出 力値が決定する回路 • 外部の入力が同じでも内部記憶の値によって出力が 異なる場合がある – 内部に記憶素子を持つ 2009.10.29 ハードウェア設計論特論 10 組合せ回路 • 回路外部からの入力⇒出力が一意に決定 – 論理関数をそのまま回路化したもの – 基本論理関数の組合せで表現できる • NOT、 AND、 OR、 NAND、 NOR、 XOR • 入力値と出力値の対応が決まっているので検証しや すい • 論理関数を回路化して組合せ回路を設計する場合・・・ – 実現する論理が同じでも元になる論理関数の形によって回 路に必要な素子数が異なる 2009.10.29 ハードウェア設計論特論 11 真理値表・論理式と組合せ回路 • 論理関数の表現方法 – 真理値表:入出力の対応関係のみを表現 • 複数の組合せ回路に対応させることが可能 – 動作を規定したいときに向いている表現 – 論理式:出力を得るための演算手順を表す • 組合せ回路と基本的に1対1対応 – 回路構造まで規定したいときに向いている表現⇒ゲートレベル設計 inA inA inB outC 0 0 1 0 1 1 0 0 1 1 1 2009.10.29 inB inA inB outC ・・・ 1 outC ハードウェア設計論特論 outC= inA・inB outC= inA + inB outC= inA・inB + inA・inB + inA・inB 12 順序回路 • 順序回路=組合せ回路+記憶素子(FF) – 回路の出力が“回路外部からの入力値”と“FFが 記憶している値”から決定する – 次にFFが記憶すべき値も“回路外部からの入力 値”と“(現在)FFが記憶している値”から決定 – FFが記憶している値=状態だと思えば・・・ • 状態遷移(図)を回路化すると順序回路になる • 入力値と内部記憶の値で出力が異なるため 検証が組合せ回路に比べて大変 – 入力列のパターンによって内部状態が異なる – 様々な入力パターンで検証する必要がある 2009.10.29 ハードウェア設計論特論 13 出力決定回路 ... 入力 ... 順序回路の構成 出力 次状態決定回路 ... ... Q D ... Q D 記憶素子(FF) ⇒現状態記憶 Clk 2009.10.29 ハードウェア設計論特論 14 同期式順序回路の設計 • 同期式順序回路: – クロック信号に同期して内部状態が変化する 順序回路のこと • 設計手順 – 順序機械の定義 – 状態数の最小化 – 符号割り当て(入力・出力・状態) – 状態遷移関数と出力関数の導出 – 組合せ回路の構成 2009.10.29 ハードウェア設計論特論 15 順序機械の定義 • 問題を解析して順序機械を定義する • M=(I,O,S,δ,λ) – I:入力記号の集合 現在の状態と入力から – O:出力記号の集合 次の状態を決定する関数 – S:状態集合 – δ:状態遷移関数 S×I →S • s(t+1) = δ(s(t),i(t)) – λ:出力関数 S×I →O • o(t) = λ(s(t),i(t)) 現在の状態と入力から 出力を決定する関数 (ミーリ型) 現在の状態のみから出力を決定するのは「ムーア型」 2009.10.29 ハードウェア設計論特論 16 例題:000/111検出器 • 0または1が連続して入力される系列に対し て3個連続する0また1(000 or 111)を検出 する回路を設計する。 M=(I,O,S,δ,λ) I:{1,0} O:{φ,D} S:{s0,s1,s2,s3,s4} 2009.10.29 0 1 初期状態 0が1個 s0 s1/φ s3/φ s1 s2/φ s3/φ 0が2個連続 s2 s2/D s3/φ 1が1個 s3 s1/φ s4/φ 1が2個連続 s4 s1/φ s4/D ハードウェア設計論特論 現状態s0 の時、 1が入力 されたら 次状態 s3 出力 φ 17 状態数の最小化 • 等価な状態を見つけて状態数を減らす 等価な状態: 同じ入力に対する振舞い (状態遷移・出力)が等しい s1とs2が等価な状態なら s0とs1も等価 0 1 s0 s1/φ s3/φ s1 s2/φ s3/φ s2 s2/D s3/φ s3 s1/φ s4/φ s1/φ s4/D s1 s1× =s2 s2 × × s4 s3とs4は等価でないので s0とs3も等価でない s3 s3× =s4 s1× =s2 s3× =s4 × 今回の例では 等価な状態なし =状態数最小 s4 × × × × s0 s1 s2 s3 同じ入力(0)に対して 出力が異なるので 等価な状態であり得ない 2009.10.29 ハードウェア設計論特論 18 5状態の機械を考えられなくても... 0 s1 s 1≡ s s2 × × s3 × × 1 s0 s1/φ s4/φ s1 s2 /φ s4/φ s2 s3 /D s4 /φ s3 s3 /D s4 /φ s4 s1/φ s5/φ s5 s1 /φ s6 /D s6 s1 /φ s6 /D s4 × 2 s 4≡ s × 5 ○ s 1≡ s × 2 s× 4≡ s × × 5 s5 × × × × × s6 × × × × × ○ s0 s1 s2 s3 s4 s5 s2 =s3,s5 =s6 なので5状態になる. 2008.10.29 2009.10.29 ハードウェア設計論特論 ハードウェア設計論特論 19 符号割り当て/状態遷移関数・出力関数 • 入力・出力・状態を2値符号化する – I :{0,1} →x:{0,1} – O:{φ,D} →z:{0,1} – S :{s0,s1,s2,s3,s4} →y0y1y2:{000,001,010,101,110} y0y1y2 x 2009.10.29 0 1 000 001/0 101/0 001 010/0 101/0 010 010/1 101/0 101 001/0 110/0 110 001/0 110/1 ハードウェア設計論特論 0 1 s0 s1/φ s3/φ s1 s2/φ s3/φ s2 s2/D s3/φ s3 s1/φ s4/φ s4 s1/φ s4/D 20 組合せ回路の設計 • 状態遷移関数・出力関数を論 理関数に y1y2 Y0 xy0 00 01 11 10 0 1 000 001/0 101/0 001 010/0 101/0 010 010/1 101/0 101 001/0 110/0 110 001/0 110/1 y1y2 Y2 xy0 00 01 11 10 y1y2 Y1 xy0 00 01 11 10 00 0 0 * 0 00 0 1 * 1 00 1 0 * 0 01 * 0 * 0 01 * 0 * 0 01 * 1 * 1 11 * 1 * 1 11 * 1 * 1 11 * 0 * 0 10 1 1 * 1 10 0 0 * 0 10 1 1 * 1 Y0=x カルノー図法: 論理関数の簡単化 手法の一つ。 1と*に着目し 1x2,2x2,1x4,2x4,4x4 の、できるだけ大きな 固まりで括り、論理関数を 簡単化する。 2009.10.29 Y1=xy0+x’y0’y2+x’y0’y1 Y2=x’y0+xy0’ +y1’y2’ y1y2 z xy0 00 01 11 10 00 0 0 * 1 01 * 0 * 0 11 * 0 * 1 0 0 * 0 10 z=x’y0’y1+xy0y1 ハードウェア設計論特論 21 順序回路の構成 q本 z ... 入力 r本 y 組み合わせ論理回路 δ:{0,1}p+r→{0,1}r λ: {0,1}p+r→{0,1}q ... 出力 ... p本 x r本 Y ... Q D ... Q D clock 2009.10.29 フリップフロップ (記憶素子) ハードウェア設計論特論 22 順序回路の構成 入力x z=xy0y1+x’y’0y1 y0 出力z Y0=x Y0 y1 Y1=xy0+x’y’0y2+x’y’0y1 Y1 y2 Y2=x’y0+xy’0+y’1y’2 Y2 Q D Q D Q D clock 2009.10.29 ハードウェア設計論特論 23 ゲートレベル:順序回路の例 出力 z x z=xy0 y1+x’y’0 y1 Y1=xy0+x’y’0 y2+x’y’0 y1 Y2=x’y0+xy’0+y’1 y’2 Y0 Q D Q D Q D 2009.10.29 Clk ハードウェア設計論特論 Y1 Y2 24 レジスタ転送レベル設計 2009.10.29 ハードウェア設計論特論 25 レジスタ転送レベル(RTL)設計 • レジスタ転送レベル(RTL:Register Transfer Level) – 演算器とレジスタ(フリップフロップ)とその間の接続関係を明確に規定する – HW設計に最も多く用いられている設計レベル(抽象度) • RTL設計情報に含まれるもの⇒RTL設計の対象 – 回路全体の入出力の定義 • 信号名,信号線幅(ビット幅) – 状態を記憶するための内部レジスタの定義 • レジスタの名称,レジスタの記憶容量 – 状態を更新するための組合せ回路部の機能/構成 – 出力を決定するための組合せ回路部の機能/構成 • 各回路の入力,出力の信号名 • 各回路の入出力関係⇒機能定義 • どうしても構造を詳細に定義したい部分はゲートレベルでの表現も可能 – レジスタと組合せ回路間の接続関係の定義 2009.10.29 ハードウェア設計論特論 26 RTL設計の手順 • モジュール分割と各モジュールの実現すべき機能は決定済み – 実現すべき機能は手続き的に記述されているとする • モジュールの入出力を決める – データそのものの入出力 – 付加情報を示すための入出力 • 入力(出力)されているデータは有効な値か? • 回路内部の制御状態 – クロックやリセット • データ用レジスタの構成を決める – 出力を得る(計算する)ために必要なデータ(変数) • 状態遷移を考える⇒機能記述にクロックの概念を導入する – 機能を実現する際に発生する処理の流れ(分岐など)を考える – 状態遷移図を作成する • 状態に名前をつける • 各状態において行われる処理を洗い出す – 初期状態を追加し、状態遷移をループ化する • HWは動き続ける⇒処理が終われば最初に戻る • 状態用レジスタを決める – 状態数から必要な状態用レジスタの記憶量が決定する 2009.10.29 ハードウェア設計論特論 27 例題: 000/111検出器 • モジュールの機能 – 連続した3個の0または1が入力された時zに1を出力,そ れ以外のときは0を出力 • モジュールの入力 – – – – 1ビットの入力:in 1ビットの出力:out クロック信号:clk リセット信号:rst • 内部に必要な変数 – 過去2回分の入力を保持する変数:2ビット分 q1,q2 – 状態を記憶する変数(状態数未定):s 2009.10.29 ハードウェア設計論特論 28 例題: 000/111検出器 • 状態遷移と内部変数の更新 – クロックごとに過去2個分の入力を常に保持すればよい – 初期状態→1個目入力→2個目入力→ • ここまでは何が入力されても出力outは”0”なので個別の状態にし ておく – 3個目入力以降 • ここから先は過去2個分の入力を更新するだけでよい • 出力の決定 – 初期状態・1個目入力・2個目入力の状態→out=”0” – 入力3個目以降 • 過去2個分の入力が”00”で,現在の入力が”0”→out=”1” • 過去2個分の入力が”11”で,現在の入力が”1” →out=”1” • それ以外→out=”0” 2009.10.29 ハードウェア設計論特論 29 RTLの動作を考える クロックが入力される毎に以下の動作を行えばよい (1)リセット信号が有効→「初期状態」へ戻す (2)リセット信号が無効→通常の状態遷移動作を行う 現在の状態で動作を分岐する 「初期状態」:次の状態は「1個目入力」 「1個目入力」:次の状態は「2個目入力」 「2個目入力」:次の状態は「3個目入力以降」 「3個目入力以降」:次の状態は「3個目入力以降」 (3)内部変数の更新動作を決定 「現在の入力」→「時刻(t-1)の入力」へ保存 「時刻(t-1)の入力」→ 「時刻(t-2)の入力」へ保存 (4)出力を決定 現在の状態が 「初期状態」 「1個目入力」 「2個目入力」 →”0” 現在の状態が「3個目入力以降」→「現在」「時刻(t-1)」「時刻(t-2)」の入力で出力決定 2009.10.29 ハードウェア設計論特論 30 RTLの動作をHDLで表現する Verilog-HDLでの記述例 クロックが立ち上がる毎の動作を記述 module detector(in,out) input in; output out; reg [1:0]s; reg q1,q2; 4状態の記憶 →2ビット必要 過去2個分の 入力保存用 always@(posedge clk) begin if(rst) s <= `INIT; else begin case(s) 状態遷移制御 `INIT: s <= `IN1; `IN1: s <= `IN2; 内部変数更新 `IN2: s <= `IN3; 出力決定 begin if(rst) {q1,q2} <= 2’b00; else {q1,q2} <= {in,q1}; end `IN3: s <= `IN3; endcase end endmodule always@(posedge clk) クロック毎のレジスタ間の データのやりとりを記述 end out = (s==‘IN3)&&(({in,q1,q2}==3’b111)||({in,q1,q2}==3’b000)); ※状態値の割り当てに関する記述を省略している 2009.10.29 ハードウェア設計論特論 31 ハードウェア記述に用いられる言語 • VHDL – ハードウェアの構成を意識的に記述 – 「回路部品(モジュール)」に対して •複数の実現方法(内部構造)を定義可能 •どの構成を選択するかはモジュールを呼び出す上位の階層で指定できる • Verilog-HDL – C言語に良く似た書式を使う • その他の言語 – SFL(単相クロック同期前提のHDL) (HDL:Hardware Description Language) ¾ ソフトウェア設計言語との大きな違い – データのビット幅を任意に指定することができる ⇒ RTL記述から論理合成したときの結果に影響する 2009.10.29 ハードウェア設計論特論 32 状態割当てと動作速度・回路規模 • クロックサイクル時間(動作周波数) – 任意の1ステップの処理を確実に完了できるまでの時間に依存 – どれか一つでも処理に時間がかかるステップがあれば全ステップの処理時 間(クロックサイクル時間)がその部分の処理時間に統一される • 回路の面積 – 回路に含まれる演算器の数に依存 • 状態の分け方,ある1状態で行う処理の内容によって最終的に出来上が るハードウェアの性能やコストが大きく変わる! RTL設計の質は最終的なLSIの質に大きく影響する 2009.10.29 ハードウェア設計論特論 33 例:RTL設計の違いが生む回路の差 実現したい機能:Y=x1+x2+x3+x4+x5+x6+x7+x8 100ns以内 使用できる演算器:2入力加算器,遅延10ns 設計(1) x1~x8を並列に入力 1クロックで全ての加算を完了 + + + + + + 設計(2) x1~x8を1クロックごとに順次入力 8クロックで全ての加算を完了 + DFF + (1) (2) サイクル 時間 (周波数) 30ns 33MHz 10ns 100MHz 演算サイ クル数 1 8 演算時間 30ns 80ns 面積 7ADD 1ADD + 1DFF + 1DFF [注]上表の時間・面積は、DFFの安定 動作に必要な時間、配線の面積や遅 延、制御部などは考慮していない DFF 2009.10.29 設計 ハードウェア設計論特論 34 RTL設計以降の工程 ~論理合成を経てレイアウトへ~ 2009.10.29 ハードウェア設計論特論 35 論理合成の基本的作業 HDL記述 言語処理 標準演算モジュール合成 順序回路合成 組み合わせ回路合成 テクノロジーマッピング ネットリスト レイアウト設計へ 2009.10.29 ハードウェア設計論特論 36 論理合成結果 2009.10.29 ハードウェア設計論特論 37 RTL記述と論理合成 • 論理合成・・・パターンマッチングの集大成 – 論理合成ツールはRTL記述から論理回路(ネットリスト)を生成・出力する – RTL記述のパターンから回路構造を推定する • 逆にパターンにあわせてRTL記述を作れば、設計者のイメージどおりの回路 を出力させることができる – 回路化したあと、その回路に最適化を施す • 回路が巨大な場合は局所的な最適化を施す • RTL記述のレベルで最適化を施すわけではないことに注意 • 論理合成ツールの限界 – 状態(遷移)の最適化は困難 • 状態機械の制御はRTL設計のとおりに行う – 巨大な真理値表の最適化には時間がかかる • 論理式を機械的に回路化するのは簡単 • 巨大な組合せ回路の最適化にはそれなりの時間がかかる 2009.10.29 ハードウェア設計論特論 38 RTL記述のパターン例 RTL記述は合成される回路を意識しながら 記述することが重要 Dフリップフロップのパターン always@(posedge clk or negedge rst) d q begin if(!rst) q <= 1’b0; clk else q <= d; end rst マルチプレクサのパターン a y = s ? a : b; 1 y b always@(a or b or s) begin s if(s) y <= a; else end 2009.10.29 y <= b; 0 同じ回路を合成する書き方が 複数パターン存在する ハードウェア設計論特論 39 まとめ • 論理設計とは – 機能仕様から有限状態機械を作ること • 有限状態機械の設計法 – 状態遷移表で状態数を最小化 – 状態遷移関数を計算やカルノー図等で求める • RTL設計の考え方 – クロック毎の状態遷移と内部変数の更新動作 – RTLの表現方法→HDL – 論理合成のことを意識したRTL記述 2009.10.29 ハードウェア設計論特論 40
© Copyright 2025 ExpyDoc