360 likes | 592 Views
平成 1 7年度 VLSI 設計工学(夏学期 月曜3限) (資料1) VDEC ・電子工学専攻・藤田昌宏. 導入と VLSI の種類と設計の流れ( 1 ) (4/11) 論理合成(2) (4/18,25) LSI のレイアウト( 5/9 ) シミュレーション (5/16) ハードウェア記述言語 (5/23) システムレベル設計・高位レベル合成(2) (5/30,6/7) 低消費電力化設計技術 (6/14) 設計検証・検査(2) (6/21,28) ソフトウェア開発技術 (7/5) まとめ( 7/12 )
E N D
平成17年度VLSI設計工学(夏学期 月曜3限)(資料1) VDEC・電子工学専攻・藤田昌宏平成17年度VLSI設計工学(夏学期 月曜3限)(資料1) VDEC・電子工学専攻・藤田昌宏 • 導入とVLSIの種類と設計の流れ(1) (4/11) • 論理合成(2) (4/18,25) • LSIのレイアウト(5/9) • シミュレーション(5/16) • ハードウェア記述言語 (5/23) • システムレベル設計・高位レベル合成(2) (5/30,6/7) • 低消費電力化設計技術 (6/14) • 設計検証・検査(2) (6/21,28) • ソフトウェア開発技術(7/5) • まとめ(7/12) • 従来のVLSI設計は、システムLSI(System on Chip, SoC)設計となり、基本的にハードウェア・ソフトウェア協調設計である • 設計対象の多くは、組み込みシステムと呼ばれるものである Traditional LSI design methods Higher abstraction: System level design methods
組み込みシステム メモリシート エアコン パワーステアリング 車載用 ワイパー制御 ハイマウント ストップランプ エンジン制御 変速制御 エアバッグ制御 パワーウインドウ オートドアロック クルーズ制御 電子制御 サスペンション カーナビ・システム オーディオ・システム アンチロック・ブレーキ システム キーレス・エントリ
設計生産性の危機 • 回路規模:年率約58%で増大 • 設計生産性:年率約21%で向上 • ギャップ:年率約37%で拡大 回路規模 58%/Y 規模 設計生産性 21%/Y 年
デジタルとアナログ • アナログ:信号は連続値=連続関数 • デジタル:信号は0か1=離散数学 • Discrete Mathematics • 論理関数、整数関数、離散関数 • AND, OR, NOT, EXOR • 質問:n変数の論理関数は全部でいくつあるか? • 質問:x AND b = x を満たす論理関数xを求めよ? • 質問:a OR ((NOT a) and b) = a OR bを証明せよ? • 離散関数の計算機上での効率的な操作法 • ほとんどの設計最適化・検証問題は、NP-completeあるいは、NP-hard
VLSI設計工学VLSIの種類と設計の流れ 藤田昌宏 VDEC 東京大学大学院工学系研究科電子工学専攻 fujita@ee.t.u-tokyo.ac.jp http://www.cad.t.u-tokyo.ac.jp
説明の流れ • LSIの種類 • 同期回路とは? • ハードウェア設計の流れ • 論理関数と論理ゲート • 設計記述とシミュレーション • 動作合成 • 論理合成 • 配置・配線 • テスト • 検証
デジタルLSIとアナログLSI • デジタルLSI • 0,1などの特定の離散値のみを用いて計算 • 実際の信号値は0 ~ 2ボルトまでを信号値の0とみなし、3 ~ 5ボルトまでは1とみなす、など • 高集積化に向く • 最先端LSIでは、2つの入力の間の積(AND)を計算する要素(ゲートと呼ばれる)を数千万個集積できる • アナログLSI • 例: オペアンプなどの増幅、演算器、無線機 • 信号値は、連続的に変化 • 高集積化はたいへん • ユーザインタフェイスは基本的にアナログ • 本講義では、基本的にデジタルLSIを対象とする • トランジスタは完全なスイッチとみなす
LSIの種類: 機能 • マイクロプロセッサ: 例 Pentium(パソコンなど) • 算術演算、データ転送、条件分岐などの命令を逐次実行 • 特化プロセッサ: マルチメディアプロセッサ(デジタルテレビなど) • マイクロプロセッサと同じだが、マルチメディアアプリケーション(画像処理、音声処理など)用の専用命令を多く持つ • 組み込み型プロセッサ: 例 DSP (携帯電話など) • 命令数は少ないが、応用に合わせた特殊な命令をもつ • 例: for (i=0;i<100;i++) c := c + a[i] + b[i] が1命令 • 専用ハードウェア(ASIC: Application Specific Integrated Circuit) • 与えられた関数(数式など)を直接ハードウェアで実現 • その応用に限っては、もっとも小さくてかつ高性能。ただし、設計大変 • フィールドプログラマブルLSI: 例 FPGA(Field Programmable Gate Array) • チップを製造してから、チップの機能をプログラムできる
LSIの種類:作り方 • フルカスタム • 全て手作り: 例えば、Pentium III • セミカスタム: スタンダードセル、ゲートアレイ • 使用できるセルの種類をあらかじめ決めて設計しておく • 配線も、配線領域を設定してそこだけで行う • FPGA(フィールドプログラマブルゲートアレイ) • プログラム可能なセルを配置 • プログラム可能な配線領域を設定 • すべて、LSIを作ってからプログラムできる • マイクロコントローラ+追加ハードウェア • 基本的にソフトウェアプログラムで行う • 速度など性能が不足する部分は追加ハードウェアで実行
フルカスタムLSI • LSIの全ての部分を自由に設計する • 自由度が大きい→高性能化が可能だが、一方自動設計は大変 • 設計効率から部分的にセミカスタムの手法を導入するのが普通 演算を するところ 配線領域
セミカスタムLSI • 演算をする部分と配線する領域を規則的に並べる • 設計の自由度は制限されるが、自動設計は相対的に容易 • 設計期間は短くできる • ASICと呼ばれているのもは、通常これ 演算を するところ 配線領域 演算を するところ 配線領域 演算を するところ
演算を するところ 演算を するところ 演算を するところ 演算を するところ 演算を するところ 演算を するところ 演算を するところ 演算を するところ 演算を するところ フィールドプログラマブルゲートアレイ • 演算をする部分と配線する領域は規則的に並べてあり、また、具体的な演算の種類や配線の仕方は、LSIを製造してからプログラムできる • 簡単にプロトタイプを作れる • 最後の最後で仕様変更できる 演算の種類は メモリに格納してある 配線領域 配線パターンは メモリに格納してある 配線領域
マイクロコントローラ+追加ハードウェア • 基本的にマイクロコントローラ(通常のマイクロプロセッサと同じ)上でプログラムで実行 • 速度など性能不足の部分は、専用の追加ハードウェアで処理 • 最後の最後で仕様変更できる マイクロ コントローラ (マイクロ プロセッサ) 追加ハードウェア(専用ハードウェア) プログラム格納メモリ
組合せ回路と順序回路 • 組合せ回路 • 記憶を持たない回路、フィードバックループのない回路、現在の入力のみで出力が決る • 順序回路 • 記憶を持つ回路、フィードバックループのある回路、出力は現在および過去の入力に依存 • 同期式順序回路 • クロック信号に同期して動作する順序回路
同期式順序回路の概念図 • 組み合せ回路とエッジトリガフリップフロップ 外部入力 外部出力 n m 組み合せ回路 k k 状態変数 (現状態) 状態変数 (次状態) クロック エッジトリガフリップフロップ
エッジトリガ フリップフロップ の動作 • クロックの変化時(立ち上りまたは立ち下がり)の入力を見て出力を決める • クロック変化の前(セットアップ)と後(ホールド)は入力が安定であること 入力 set-up hold クロック delay 出力
同期回路の詳細なモデル • レジスタ転送 (RT) レベル回路 組み合せ回路 組み合せ回路 組み合せ回路 組み合せ回路 クロック
設計の流れ(基本) module WaitState(load,lo input load; input [1:0] loadValue always @(positive Clk) if (load) 仕様(RTL) 動作合成 論理合成 より詳細な設計レベルほど: ・ 面積・遅延見積もりはより正確 ・ 回路変換の余地はより小さい 配置 配線 LSIの大規模化により、計算機設計支援技術(CAD: Computer Aided Design)なしでは設計できない!
実際のLSI設計 • 広く一般に使われる基本回路素子 • 基本ゲート • 演算器 • 組合せ素子: 加算器、ALU、(掛算器) • 順序素子: フリップフロップ、カウンタ、レジスタ • 大きな回路ブロック(マクロ) • レジスタファイル • メモリ • プロセッサ全体 • LSI=設計ごとに異なるもの+基本回路素子 • 設計ごとに異なるもの • 全体を制御する制御回路(ランダムロジックとも呼ばれる) • どの設計でもよく使われる回路 • ライブラリに登録してあるものから選ぶ
論理式と論理ゲート • 基本論理演算 • AND 入力全てが1なら出力1、それ以外は0 • OR 入力の1つが1なら出力1、入力全て0なら出力0 • NOT 入力1なら出力0、入力0なら出力1 • 論理ゲート(テクノロジライブラリに登録されている) • 半導体を作る上で作りやすいものを基準に構成される • NAND=AND+NOT • NOR=INV=OR+NOT • AND-OR-INVERTER(AOI) • AOI21: Out = ((a AND b) OR c) a Out b c
論理ゲート • 論理回路を構成する基本単位 • AND,OR,NOT,NAND,NOR,EOR, ... • 真理値表 a a a b c c b b a b c 0 0 0 0 1 1 1 0 1 1 1 1 a b c 0 0 0 0 1 0 1 0 0 1 1 1 a b 0 1 1 0 a a a c c b c b b a b c 0 0 0 0 1 1 1 0 1 1 1 0 a b c 0 0 1 0 1 0 1 0 0 1 1 0 a b c 0 0 1 0 1 1 1 0 1 1 1 0
論理ゲートの作り方 • MOSトランジスタは完全なスイッチとみなす • pMOS: ゲートが0ならソースとドレインが導通 • nMOS: ゲートが1ならソースとドレインが導通 • CMOSゲート (complimentary MOS) • NANDゲート、NORゲートなどは作りやすい • ANDゲート、ORゲートなどはNAND+NOT、NOR+NOTとなる
論理合成とは? • 与えられた論理式を簡単化し、テクノロジライブラリに登録されたゲートのみの回路に変換すること • 論理式簡単化 • テクノロジマッピング • 主に、回路中のランダムロジックと呼ばれるものに適用される
cd cd cd cd ab 1 1 ab 1 1 ab 1 1 ab 積和形論理式簡単化 • 積和形論理式: 積項(変数のAND)をORでつなげたもの • (a AND b AND (NOT c) OR ((NOT b) AND c) • abc + bc • 積項の縮小と拡大操作を繰り返して、積項数を最小化を試みる操作 cd cd cd cd cd cd cd cd ab ab 1 1 1 1 ab ab 1 1 1 1 ab ab 1 1 1 1 ab ab abc + abd + abc abc + acd + bcd + abc abc + abcd + abcd + abc
c 4 b 1 d 5 o1 e 2 8 9 o2 a 3 b f c c c 4 b 1 d o1 5 e 2 6 8 o2 X d 9 7 a 1 3 b f 多段化と多段論理式簡単化 • 積和形論理式の多段化 • 論理関数 Fを「うまく割る」関数 Dをみつける • 論理関数の因数分解(ただし、余りあり) • ac+bc+ad+bd+ef=(a+b)(c+d)+ef • 多段論理式簡単化 • 基本的に回路変換や接続変換でゲート数・配線数を減らす F = D • q + r
NAND2 NAND3 INV AOI21 NAND3 テクノロジマッピング • ライブラリのセルを使って、分割された回路各々をカバーする、コスト最小のセルの集合求める • カバー: 分割された回路の各ノードは、少なくとも1つのセルに含まれること • 一般的な回路に対して、コスト最小のカバーを求める問題はNP完全
設計記述とシミュレーション • プログラミング言語 • ソフトウェアプログラム(たとえば、マイクロプロセッサで実行)を記述するための言語: C、C++、Java、など • ハードウェア記述言語(HDL: Hardware Description Language) • ハードウェア(たとえば、LSI)の動作を記述するための言語 • 歴史は、プログラミング言語と同じくらい古い • 重要な概念 • メモリ、レジスタ: ものを記憶できる • ターミナル、配線: 信号値はその場限りで忘れる • クロック: 通常、同期回路を対象としている • 並列動作: ハードウェアは、物理的に存在するものは基本的に並列に動作する • 回路遅延: 何を計算するにも時間がかかることを意識する • ハードウェア量は一定: 実行中にハードウェアは追加できない • スタックや再帰的呼び出しなどは認めない • Cのポインタなどは、ハードウェアでの実現が不可能・困難 • プログラミング言語を実行するように、HDLの実行できる • 様々なHDLや設計レベルに応じたシミュレータが存在する
高位レベル合成(動作合成)とは? • 入力: 与えられた動作記述 • Cなどのプログラミング言語の記述と同じように、if-then-else, for loop, 代入、算術演算などを使って記述 • 出力: 算術演算などは演算マクロ(ブロック)へ、また、if-then-elseなどの制御は論理式へ変換したもの • ライブラリに登録されたマクロを利用 • 制御は、論理式に変換し、論理合成にかける • 注意: すべて論理式に変換し、論理合成することも可能だげ、良い回路は生成できない
動作合成例 Out = a*u + b*v + c*w + d*x - e*y
配置配線 • 配置: 各ゲートをLSI上に並べていく • 配線: 各ゲート間をつなぐ • コスト関数 • 面積、総配線長 • 最長配線を短く • 基本的に自動配置配線ツールを利用 • 大規模なので、時間のかかる処理 • もし、自動でできなかったときは: • ツールのパラメータを変えて、もう一度 • 自分でつなぐ • フルカスタムの場合は、人手配置配線となることも多い
テスト • 製造されたLSIが設計どおり動作するかを調べること • LSIに入力信号を送り、所望の出力がでるかどうかを調べる • 完全に調べる=可能な全入力パターンを調べる=不可能 • 可能性の高い故障モデルを作り、それのみを調べる • 縮退故障=入力に関係なく出力値が固定される • ブリッジ故障=回路中に配線のショートがある • 電源消費が異常に大きくなる • 通常、大規模回路のテストは大変なので、テスト容易化設計が施される • 内部のフリップフロップはすべて外部から見える
検証 • 設計が仕様を満たすか否かを調べる • 通常は、いろいろなパターンでシミュレーションして、結果を人手でチェック • 自動化 • シミュレーションパターンの自動生成 • シミュレーション結果の自動解析 • 形式的検証: 設計の正しさを数学的に証明する • 基本的には、すべての場合をしらみつぶしにチェックすることと等価 • 具体的問題 • 2つの設計の等価性検証 • ある設計が特定の性質を満たすかどうかの検証(プロパティチェッキング) • 今は、設計技術している時間よりも、設計の正しさを検証している時間の方がずっと長い!