}右のリストを実行したと
2. システム入出力、ユーザインタフェース定義 3. 構成要素間インタフェース定義
論理設計入門 演習ノート
54
10進加算のアーキテクチャ設計
• 使用可能な資源
•
4ビット入力2本、桁上げ入力、5ビット出力を有する2 進加算器を1つ使用•
入力データを選択するデータセレクタ(マルチプレク サ)–
入力データの数は前回の要求分析結果より判断•
出力データを一時保持するレジスタ(フリップフロップ)資源として不足があれば、随時追加を検討すること
55
10進電卓のシステム設計
• データの流れを整理しデータパスを設計
• 制御の流れを整理し状態遷移図を設計
• データパス上のデータ移動タイミングをタイミ ングチャートを作成し確認
• 資源抽出が終了した時点で、主要な資源と データの転送路を結ぶブロック図を作成
–
ブロック図の書き方はテキストP129
を参照56
練習課題
2進12ビット加算器
R
hR
mR
lQ
hQ
mQ
lOc
O
hO
mOl
0selAddH selAddM selAddL
A B c
selCin0 selCinC
ブロック図の回路を12ビット加算器として動作させる状態遷移図を作成せよ レジスタ
R
とQ
にはあらかじめ値が入っており、レジスタO
に計算結果を格納 レジスタへの入力とレジスタの書き込み信号は同一状態内で発行する4 4
4 4
4 4 4
1 4
4
wOc wOl
wOm wOh
データ選択回路 レジスタ4ビット桁上げ入力付 加算回路
57
状態遷移図の設計
起動待ち 状態
Olの計算
selAddL=1
selCin0=1 wOc=1
wOl=1
Omの計算selAddM=1 selCinC=1
wOc=1 wOm=1
Ohの計算
selAddH=1
selCinC=1 wOc=1 wOh=1
計算開始起動しない制御信号は記載しない 初期状態
論理設計入門 演習ノート
58
10進計算の基礎知識
z 2進加算器を用いて10進計算を行う
z
8+2=10となって欲しいが、2進加算器ではz
1000+0010=1010 となる。これを補正す るには、加算結果にさらに6(0110)を加えるz
1010+0110=1 0000z
加算結果が1010以上の場合、および、桁上げが発生した場合には6を加える
z
8+8=16 1000+1000=1 0000z
これに6を加えると 1 0110 1659
10進加算器作成
R
hRm
R
lQ
hQ
mQ
lOc Ot
Oh
Om
O
l 01010以上判定
selAddH selAddM selAddL
A B
selAinT selAinR
selBin6 selBinQ
6 c
selCin0 selCinC
演習問題 10
ブロック図の回路を10進加算器として動作させる状態遷移図を作成せよ レジスタ
R
とQ
にはあらかじめ値が入っており、レジスタO
に計算結果を格納wOm wOh
wOc wOl wOt
4 4
1
論理設計入門 演習ノート
60
演習問題 11
• 加算を行う3桁電卓を設計せよ
–
4ビット入力および桁上げ入力を持つ加算器を用 いるものとする–
フリップフロップは必要な数用意すること–
入力は10個の数字キーと+、AC
、=キー•
キーが押されたら、4ビットのデータが入力される•
また、同時にキー入力の制御線が1となる–
出力は10進3桁(各桁4ビットの出力線とする)• 要求分析、構成要素抽出を行った後、ブロッ
ク図、状態遷移図を作成せよ
61
電卓ブロック図参考例
キーボード
R
hRm
R
lQ
hQ
mQ
l 0Oc Ot
Oh
Om
O
l 00 0 0 0
0
1010以上判定
0〜9判定
+記号判定
=記号判定 AC判定
selQin0 selQinkey selRin0 selRinkey
selAddH selAddM selAddL
selOin0 selOinAdd selOinKey
A B
selAinT selAinR
selBin6 selBinQ
Kin
6 c
selCin0 selCinC
0
0
0
レジスタの書き込み信号は各自定義せよ
論理設計入門 演習ノート
62
電卓ブロック図参考例(改良版)
キーボード
R
hRm
R
lQ
hQ
mQ
l 0Oc Ot
Oh
Om
O
l 00 0 0 0
0
1010以上判定
0〜9判定
+記号判定
=記号判定 AC判定
selQin0 selQinkey selRin0 selRinkey
selAddH selAddM selAddL
selOin0 selOinAdd selOinKey
A B
selAinT selAinR
selBin6 selBinQ
Kin
6 c
selCin0 selCinC
0
0
Oh
0Om
Ol
63
まとめ
• システムLSI設計の考え方
–
要求分析–
アーキテクチャ設計–
システム設計• システムLSI設計のための基礎知識
–
組合せ回路–
順序回路–
表現形式• システムLSI設計演習
論理設計入門 演習ノート
64
付録
• ハードウェア記述言語の講習を受けた後、各 自設計した電卓をHDLで実現してみよう。
• まずは2進12ビット加算器の例題を見てから、
設計の流れに沿って、検討しよう。
65
2進12ビット加算器HDL記述例
/* 2進12ビット加算器の例題 */
/* 例題ではレジスタはあらかじめ設定済みとしたが、
ここでは、各レジスタ設定を外部から行う */
module add12 { input key<4>;
instrin setRh, setRm, setRl, setQh, setQm, setQl;
instrin doadd;
output outH<4>, outM<4>, outL<4>;
reg Rh<4>, Rm<4>, Rl<4>, Qh<4>, Qm<4>, Ql<4>, Oc;
reg Oh<4>, Om<4>, Ol<4>;
instrself selAddH, selAddM, selAddL, selCin0, selCinC;
instrself wOc, wOh, w0m, wOl, exec_add;
sel addinA<4>, addinB<4>, addinC, addOut<5>;
stage_name exec {task t();}
par { outH = Oh; outM = Om; outL = Ol; } instruct doadd generate exec.t();
instruct setRh Rh := key;
instruct setRm Rm := key;
instruct setRl Rl := key;
instruct setQh Qh := key;
instruct setQm Qm := key;
instruct setQl Ql := key;
instruct selAddH par { addinA = Rh; addinB = Qh; } instruct selAddM par { addinA = Rm; addinB = Qm; } instruct selAddL par { addinA = Rl; addinB = Ql; } instruct selCin0 addinC = 0b0;
instruct selCinC addinC = Oc;
instruct wOc Oc := addOut<4>;
instruct wOh Oh := addOut<3:0>;
instruct wOm Om := addOut<3:0>;
instruct wOl Ol := addOut<3:0>;
instruct exec_add addOut = addinA + addinB + addinC;
stage exec {
state_name invoke_wait, calcL, calcM, calcH;
first_state invoke_wait;
state invoke_wait goto calcL;
state calcL par { selAddL(); selCin0(); wOc(); wOl();
exec_add(); goto calcM;}
state calcM par { selAddM(); selCinC(); wOc(); wOm();
exec_add(); goto calcH;}
state calcH par { selAddH(); selCinC(); wOc(); wOh();
exec_add(); goto invoke_wait; finish;}
} }
論理設計入門 演習ノート
66
電卓を実現する SFL 記述
• 電卓を実現する SFL 記述の作成を行ってみよ う
モジュール名
: calculator
入力端子: key<4>
出力端子
: outL<4>, outM<4>, outH<4>
制御入力端子
: keyin
、制御出力端子: keyreq
入力を要求するときには