S

ハードウェア設計論特論 (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