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