Timing Optimization Techniques

Download Report

Transcript Timing Optimization Techniques

VLSI設計支援工学
1 LSI設計の流れ
藤田昌宏
東京大学大学院工学系研究科電子工学専攻
[email protected]
http://www.cad.t.u-tokyo.ac.jp
1
システムLSIはいたるところで使われている
2
説明の流れ
•
•
•
•
•
•
•
•
LSIの種類
同期回路とは?
ハードウェア設計の流れ
設計記述とシミュレーション
動作合成
論理合成
配置・配線
テスト
3
デジタルLSIとアナログLSI
• デジタルLSI
– 0,1などの特定の離散値のみを用いて計算
• 実際の信号値は0 ~ 2ボルトまでを信号値の0とみなし、3 ~
5ボルトまでは1とみなす
– 高集積化に向く
• 最先端LSIでは、2つの入力の間の積(AND)を計算する要素(
ゲートと呼ばれる)を数千万個集積できる
• アナログLSI
– 例: オペアンプなどの増幅、演算器、無線機
– 信号値は、連続的に変化
– 高集積化はたいへん
– ユーザインタフェイスは基本的にアナログ
• 本講義では、基本的にデジタルLSIを対象とする
• トランジスタは完全なスイッチとみなす
4
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)
– チップを製造してから、チップの機能をプログラムできる
5
LSIの種類:作り方
• フルカスタム
– 全て手作り: 例えば、Pentium III
• セミカスタム: スタンダードセル、ゲートアレイ
– 使用できるセルの種類をあらかじめ決めて設計しておく
– 配線も、配線領域を設定してそこだけで行う
• FPGA(フィールドプログラマブルゲートアレイ)
– プログラム可能なセルを配置
– プログラム可能な配線領域を設定
– すべて、LSIを作ってからプログラムできる
• マイクロコントローラ+追加ハードウェア
– 基本的にソフトウェアプログラムで行う
– 速度など性能が不足する部分は追加ハードウェアで実行
6
フルカスタムLSI
• LSIの全ての部分を自由に設計する
– 自由度が大きい→高性能化が可能だが、一方自動設計は大変
– 設計効率から部分的にセミカスタムの手法を導入するのが普通
演算を
するところ
配線領域
7
セミカスタムLSI
• 演算をする部分と配線する領域を規則的に並べる
– 設計の自由度は制限されるが、自動設計は相対的に容易
– 設計期間は短くできる
– ASICと呼ばれているのもは、通常これ
演算を
するところ
配線領域
演算を
するところ
配線領域
演算を
するところ
8
フィールドプログラマブルゲートアレイ
• 演算をする部分と配線する領域は規則的に並べてあり、また、具体
的な演算の種類や配線の仕方は、LSIを製造してからプログラムで
きる
– 簡単にプロトタイプを作れる
– 最後の最後で仕様変更できる
演算を
するところ
演算を
するところ
演算を
するところ
演算の種類は
メモリに格納してある
配線領域
演算を
するところ
演算を
するところ
演算を
するところ
配線パターンは
メモリに格納してある
配線領域
演算を
するところ
演算を
するところ
演算を
するところ
9
マイクロコントローラ+追加ハードウェア
• 基本的にマイクロコントローラ(通常のマイクロプロセッサと同じ)上
でプログラムで実行
– 速度など性能不足の部分は、専用の追加ハードウェアで処理
– 最後の最後で仕様変更できる
マイクロ
コントローラ
(マイクロ
プロセッサ)
追加ハード
ウェア(専用
ハードウェア
)
プログラム
格納メモリ
10
組合せ回路と順序回路
• 組合せ回路
– 記憶を持たない回路、フィードバックループのない回路、現在の
入力のみで出力が決る
• 順序回路
– 記憶を持つ回路、フィードバックループのある回路、出力は現在
および過去の入力に依存
• 同期式順序回路
– クロック信号に同期して動作する順序回路
11
同期式順序回路の概念図
• 組み合せ回路とエッジトリガフリップフロップ
外部入力
n
m
外部出力
組み合せ回路
状態変数
(現状態)
k
k
状態変数
(次状態)
クロック
エッジトリガフリップフロップ
12
エッジトリガ フリップフロップ の動作
• クロックの変化時(立ち上りまたは立ち下がり)の入力を見て出力を
決める
– クロック変化の前(セットアップ)と後(ホールド)は入力が安定で
あること
入力
set-up
hold
クロック
delay
出力
13
同期回路の詳細なモデル
• レジスタ転送 (RT) レベル回路
組み合せ回路
組み合せ回路
組み合せ回路
組み合せ回路
クロック
14
設計の流れ(基本)
module WaitState(load,lo
input load;
input [1:0] loadValue
always @(positive Clk)
if (load)
仕様(RTL)
動作合成
論理合成
より詳細な設計レベルほど:
・ 面積・遅延見積もりはより正確
・ 回路変換の余地はより小さい
LSIの大規模化により、計算機
設計支援技術(CAD: Computer
Aided Design)なしでは設計で
きない!
配置
配線
15
設計記述とシミュレーション
•
•
•
プログラミング言語
– ソフトウェアプログラム(たとえば、マイクロプロセッサで実行)を記述する
ための言語: C、C++、Java、など
ハードウェア記述言語(HDL: Hardware Description Language)
– ハードウェア(たとえば、LSI)の動作を記述するための言語
– 歴史は、プログラミング言語と同じくらい古い
– 重要な概念
• メモリ、レジスタ: ものを記憶できる
• ターミナル、配線: 信号値はその場限りで忘れる
• クロック: 通常、同期回路を対象としている
• 並列動作: ハードウェアは、物理的に存在するものは基本的に並
列に動作する
• 回路遅延: 何を計算するにも時間がかかることを意識する
• ハードウェア量は一定: 実行中にハードウェアは追加できない
– スタックや再帰的呼び出しなどは認めない
• Cのポインタなどは、ハードウェアでの実現が不可能・困難
プログラミング言語を実行するように、HDLの実行できる
16
– 様々なHDLや設計レベルに応じたシミュレータが存在する
動作記述例: GCD(最大公約数)の計算
compare_var := COMPARE(xvar, yvar);
-- If compare returns 11 then inputs are equal
-- If compare returns 10 then xvar > yvar
-- If compare returns 01 then xvar < yvar
while (compare_var /= "11") loop
-- Loop till the numbers are equal
if (compare_var = "01") then
yvar := yvar - xvar;
else
xvar := xvar - yvar;
end if;
compare_var := COMPARE(xvar, yvar);
end loop;
gcd_output <= xvar;
else
gcd_output <= "00000000";
end if;
17
動作合成例
Out = a*u + b*v + c*w + d*x + e*y
18
ハードウェアリソースの共有
• 実行が排他的であるような実行パス上のRTL 演算 (+, -, *, …) は
ハードウェアを共有できる
– 回路面積を削減できる。ただし、クリティカルパス上ではできない
• 例
最小面積
M
a
S
b
mux delay
if (c1)
M = M +1 a;
else {
S = S +2 b;
if (c2)
M = M +3 a;
}
adder delay
+1,2,3
a
M
最小遅延
+1,3
b
S
+2
adder delay
19
論理式と論理ゲート
• 基本論理演算
– 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
20
論理合成とは?
• 与えられた論理式を簡単化し、テクノロジライブラリに登
録されたゲートのみの回路に変換すること
– 論理式簡単化
– テクノロジマッピング
• 注意: フルカスタムだったら、自分の好きなゲートを独自
に定義してもよい
– 設計の効率化のためには、各設計プロジェクトごとに
前もって、それ専用のテクノロジライブラリを定義して
使うのが普通
• 例: Pentium III 浮動小数点演算器用ライブラリ
21
積和形論理式簡単化
• 積和形論理式: 積項(変数のAND)をORでつなげたもの
– (a AND b AND (NOT c) OR ((NOT b) AND c)
– abc + bc
• 積項の縮小と拡大操作を繰り返して、積項数を最小化を試
みる操作
cd
cd
cd
ab
cd
cd
1
1
ab
1
1
1
1
abc + acd + bcd + abc
cd
cd
cd
1
1
ab
1
ab
1
ab
ab
cd
cd
ab
ab
ab
cd
cd
1
1
1
1
abc + abcd + abcd + abc
ab
1
ab
ab
1
1
1
abc + abd +22abc
論理ゲート
• 論理回路を構成する基本単位
– AND, OR, NOT, NAND, NOR, EOR, ...
• 真理値表
a
a
a
b
c
c
b
b
a
b
abc
000
010
100
111
c
abc
001
011
101
110
a
b
abc
000
011
101
111
ab
01
10
c
abc
001
010
100
110
a
b
c
abc
000
011
101
110
23
多段化と多段論理式簡単化
• 積和形論理式の多段化
– 論理関数 F を「うまく割る」関数 D をみつける F = D • q + r
• 論理関数の因数分解(ただし、余りあり)
• ac+bc+ad+bd+ef=(a+b)(c+d)+ef
• 多段論理式簡単化
– 基本的に回路変換や接続変換でゲート数・配線数を
減らす
c
b
d
e
c
d
a
b
f
c
4
b
d
1
5
o1
2
6
3
X
7
8
1
9
o2
e
c
a
b
f
4
1
2
5
o1
8
9
o2
3
24
テクノロジマッピング
• ライブラリのセルを使って、分割された回路各々をカバーする、コス
ト最小のセルの集合求める
– カバー: 分割された回路の各ノードは、少なくとも1つのセルに含
まれること
NAND2
NAND3
INV
AOI21
NAND3
• 一般的な回路に対して、コスト最小のカバーを求める問題はNP完
全
25
配置配線
•
•
•
•
•
配置: 各ゲートをLSI上に並べていく
配線: 各ゲート間をつなぐ
コスト関数
– 面積、総配線長
– 最長配線を短く
基本的に自動配置配線ツールを利用
– 大規模なので、時間のかかる処理
– もし、自動でできなかったときは:
• ツールのパラメータを変えて、もう一度
• 自分でつなぐ
フルカスタムの場合は、人手配置配線となることも多い
26
テスト
• 製造されたLSIが設計どおり動作するかを調べること
• LSIに入力信号を送り、所望の出力がでるかどうかを調
べる
• 完全に調べる=可能な全入力パターンを調べる=不可
能
• 可能性の高い故障モデルを作り、それのみを調べる
– 縮退故障=入力に関係なく出力値が固定される
– ブリッジ故障=回路中に配線のショートがある
– 電源消費が異常に大きくなる
• 通常、大規模回路のテストは大変なので、テスト容易化
設計が施される
– 内部のフリップフロップはすべて外部から見える
27
検証
• 設計が仕様を満たすか否かを調べる
– 仕様は、一般的には自然言語と図で表現される
• 仕様の形式化が重要
• 通常は、いろいろなパターンでシミュレーションして、結果を人手でチェ
ック
– 自動化
• シミュレーションパターンの自動生成
• シミュレーション結果の自動解析
• 形式的検証: 設計の正しさを数学的に証明する
– 基本的には、すべての場合をしらみつぶしにチェックすることと等価
• 具体的問題
– 2つの設計の等価性検証
– ある設計が特定の性質を満たすかどうかの検証(プロパティチェッ
キング)
• 今は、設計記述している時間よりも、設計の正しさを検証している時間
の方がずっと長い!
• 海外では活発な研究活動
28
さて、これから
• 本講義では、基本的にこれからは、論理合成の話だけをします
• 4月10日
LSI設計、導入、
2分決定グラフ(Binary Decision Diagrams, BDD)
• 4月17日 積和形論理式簡単化: Unate 関数の利用
• 4月24日 繰り返しによる積和形論理式簡単化
• 5月1日
多段論理回路の生成法
• 5月8日
休講を予定
• 5月15日 多段論理回路の簡単化
• 5月22日 テクノロジマッピング
• 5月29日 論理回路のタイミング最適化
• 6月以降は中野先生へ
29
参考: VLSI設計工学
学部4年 木曜2限
VLSI設計手法、設計支援手法(CAD)を広く (浅く) 説明
•
4月19日 LSI設計、導入、CMOS論理回路
•
4月26日 基本的な論理回路、論理回路の計算機処理(2分決定グラフ)
•
5月10、17日 論理合成(積和形、多段論理)
•
5月24,31日 論理検証(組合せ回路、順序回路)
•
6月7日 設計のシミュレーション技術
•
6月14,21日 1回休講、1回ハードウェア記述言語(代講)
•
6月28日
•
7月5日 プログラミング言語レベルからのハードウェア合成
•
7月12日 特殊ハードウェアをもつプロセッサのためのコンパイラ
•
7月19日 ハードウェア/ソフトウェア協調設計
製造故障のテスト
30