プロセッサ

CPU実験について
2006年10月13日金曜日
平野貴仁
CPU実験の成績
• プロセッサ、アセンブラ、シミュレータを担当
• 2005年度CPU実験優勝
– 間違ってP3形式で出場(規約上問題はない)
– P6形式だと100MHz 25.186秒
• CPU実験延長戦
– id:namasute0氏によりスケジューラが改良され
100MHz 21.951秒を達成
本日の内容
• 設計のやり方
– Processor [2x]のアーキ
テクチャ
• 作業のやり方
攻めた点
• 昨年Super ScalarやVLIWが挑戦されたが、
ひょっとして費用対効果が見合わないのでは
• まだ実現していない100MHzの可能性に魅力
を感じた
• 要するに紅魔館中島氏の煽りに乗っかった
日和った点
• 命令種はたったの30種
– 即値命令は、ADDIのみ
– FABS, FNEGは、なし ( AND, XNOR )
– RS232C命令は、ノンブロッキングのみ
• レジスタ本数はたったの 64本
• スライス使用率はたったの 26%
空間的な構成
各モジュールに1bitから数bitの制御
シグナルを適切なタイミングで発行
する、いわば心臓部
命令キャッシュ
命令供給パイプライン
制御回路
レジスタ
32bit
x 64
分岐 整数加減算
判定 論理演算
RS RS 浮動小数点数 浮動小数点数
SRAM
Get Put
加減乗算
逆数平方根 Load/Store
時間的な構成
IF
命
フ令
ェキ
ッャ
チッ
シ
ュ
タ命
グ令
フキ
ェャ
ッッ
チシ
ュ
タ命
グ令
フキ
ェャ
ッッ
チシ
ュ
RD
EX2
EX1
EX3
EX4
WB
分岐判定
レ
ジ
ス
タ
リ
ー
ド
依
存
関
係
解
析
バ
イ
パ
ス
回
路
命令
デコード
整数演算
RS232C
SRAM (hit)
SRAM (miss)
浮動小数点数加減乗算
まだ完了していない命令の書き込みレジ
浮動小数点数逆数平方根
スタを読み込んでしまった場合は、
ENABLE信号を反転させ、再試行する
データハザード
レ
ジ
ス
タ
ラ
イ
ト
データハザード
IF
RD EX1 EX2 EX3 EX4 WB
IF
EX3で完了する命令 X
RD EX1 EX2 EX3 EX4 WB
IF
RD EX1 EX2 EX3 EX4 WB
IF
命令 Xの結果を使用したい
RD EX2 EX3 EX4 WB
RD EX1
IF
RD
IF EX1 EX2 EX3 EX4 WB
IF
RD EX1 EX2 EX3 EX4 WB
制御ハザード
分岐命令X
IF
RD EX1 EX2 EX3 EX4 WB
IF
RD EX1 EX2 EX3 EX4 WB
IF
RD EX1 EX2 EX3 EX4 WB
IF
キャッシュにない
次の命令
RD
IF EX1
IF EX2
IF EX3 EX4 WB
IF
VALID信号を反転させ
RD
WB EX2 EX3 EX4 WB
EX1 EX2 EX3
IF EX4
RD EX1
以降の処理を無視させる
IF 制御ハザード
RD EX1 EX2 EX3 EX4 WB
命令キャッシュ
• 4K ワード (16K バイト)
• アドレス 20bit のうち下位11bitをキーとして
タグ9bitとエントリ32bitを引く
• アドレスの上位9bitとタグが一致すれば
キャッシュヒット、一致しなければキャッシュミ
スと判定
• データキャッシュもほぼ同じ
命令供給パイプラインと構造ハザード
WRITE
WAIT1
ア
ド
アドレス レ
計算 ス
ラ
イ
ト
タ命
グ令
フキ
ェャ
ッッ
チシ
ュ
WAIT2
READ
Load/Store命令が優先のため、
Load/Store命令と衝突していれ
ば同じアドレスを再試行する
構造ハザード
タ命
グ令
チキ
ェャ
ッッ
クシ
ュ
UPDATE
デ
ー
タ
リ
ー
ド
タ
グ命
ア令
ッキ
プャ
デッ
ーシ
トュ
ア命
ッ令
プキ
デャ
ーッ
トシ
ュ
本日の内容
• 設計のやり方
– 100MHzプロセッサ [2x]
のアーキテクチャ
• 作業のやり方
とりあえずやるべき事柄
• CPUの部品を知る
– 汎用的な部品(ワイヤ、フリップフロップ、ラッチ)
– FPGAの部品(LUT, 分散RAM, ブロックRAM,
18x18乗算器)
– CPU実験基盤の部品(USB, SRAM, RS232C)
• デバッグの手法を知る
汎用的な部品を知る
• 意外と完全に理解していなかったりする
A <= B + C when X = ’0’ else
B – C when X = ’1’;
• まだ理解していなければ早急に理解しておく
• 慣れないうちは生成される回路図を確認する
といいかも
FPGAの部品を知る
• 膨大なマニュアルだがとにかく目を通す
– Libraries Guide
– Constraints Guide
– XST User Guide
–…
CPU実験基盤の部品を知る
• USBはさっさと動かそう
• SRAMは甘く見るな
– テストはいろいろな方法で試す
– それでもハマる
• RS-232Cは罠を避けよ
– かつてRS-232Cのせいで動かなかった班あり
デバッグの手法を知る
• 自班のシミュレータはbit accurateにしておく
– FPU係はシミュレータ係を兼ねるといいか
– FPUの誤差評価にも使える
• Modelsimでfib 5や4x4のレイトレを走らせる
• STORE命令の番地と内容のログを、
Modelsimと自班のシミュレータとで取る
• diffを調べるとどこにバグがあるか一目瞭然
プロセッサ(初代)の開発履歴
• 10/6 LED動作せず
• 10/21 USB動作
• 11/6 SRAM動作し、再帰によるfib 38動作
– 50MHz 23.454秒
• 12/15 FPU動作
• 12/29 Modelsim上完全動作(USB使用)
• 1/18 実機上完全動作(USB使用)
– 50MHz 236.731秒
プロセッサ [2x]の開発履歴
•
•
•
•
1/24
2/22
3/10
3/11
着手
RS232C動作
夜 Modelsim上完全動作(RS232C使用)
夜 実機上完全動作
– 100MHz 40秒
• 3/12 朝 データキャッシュ搭載
– 100MHz 27.530秒
• 3/12 夜 コンパイラ改良に伴う誤動作に対処
最も心得るべき点
• 人任せにしない
– 進捗状況が上がっていないというのは、やってい
ないということと同義
• 身の丈にあわせる
– 経験がなければまずプロトタイプを完成させよ
• 端末室に来る
– 他班のWikiは見られなくても、会話は聞こえる
というわけで
• 楽しんでください