第6回 dc_shellを使った論理合成 慶應義塾大学 理工学部 天野.

Slides:



Advertisements
Similar presentations
CPU設計と パイプライン.
Advertisements

計算機システムⅡ 命令レベル並列処理とアウトオブオーダ処理
Chapter11-4(前半) 加藤健.
VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
第10回 電力見積もりと省電力設計 慶應義塾大学 理工学部 天野.
計算機システムⅡ 主記憶装置とALU,レジスタの制御
第2回 真理値表,基本ゲート, 組合せ回路の設計
Verilog HDL 12月21日(月).
コンピュータ工学基礎 パイプラインハザード テキスト9章 115~124
4.2.2 4to1セレクタ.
高性能コンピューティング論2 第1回 ガイダンス
計算機構成 第9回 POCOの性能評価と論理合成 テキスト7章
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
基本情報技術概論(第8回) 埼玉大学 理工学研究科 堀山 貴史
8. 順序回路の簡単化,機能的な順序回路 五島 正裕.
2005年11月2日(木) 計算機工学論A 修士1年 No, 堀江準.
第7回 2006/6/12.
VLSI設計論 慶應義塾大学 理工学部 情報工学科 山﨑 信行
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
OpenMPハードウェア動作合成システムの検証(Ⅰ)
Advanced Computer Architecture
・ディジタル回路とクロック ・プロセッサアーキテクチャ ・例外処理 ・パイプライン ・ハザード
プロジェクト実習 LSIの設計と実現 パイプライン実行とハザード.
アドバンスト コンピュータ アーキテクチャ RISC と 命令パイプライン
Damping ring単独運転用 Bucket Selectionサブルーティンについて
PCPU物理設計 ~マクロレベルの配置配線~
オープンソフトウェア利用促進事業 第3回OSSモデルカリキュラム導入実証
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
Advanced Computer Architecture
実行時情報に基づく OSカーネルのコンフィグ最小化
巡回冗長検査CRC32の ハード/ソフト最適分割の検討
第6回 6/4/2011 状態遷移回路とシングルサイクルCPU設計
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
Ibaraki Univ. Dept of Electrical & Electronic Eng.
通信機構合わせた最適化をおこなう並列化ンパイラ
計算機構成 第6回 分岐命令とプログラムの実行 テキスト第5章
ディジタル回路の設計と CADによるシステム設計
計算機構成 第2回 ALUと組み合わせ回路の記述
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機構成 第4回 アキュムレータマシン テキスト第3章
VLSI設計論第3回 順序回路の記述と論理合成
08. メモリ非曖昧化 五島 正裕.
情報処理 タイマの基礎 R8C タイマの基礎.
合成用システムの使い方 計算機構成用 天野.
計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴.
計算機構成 第5回 RISCの命令セットアーキテクチャ テキスト第4章
第11回 よく使われる順序回路 複数のFFを接続した回路を解析する際の考え方を学ぶ カウンタ回路の仕組みを理解し,設計できるようにする 瀬戸.
コンピュータアーキテクチャ 第 10 回.
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
09. メモリ・ディスアンビギュエーション 五島 正裕.
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
  第3章 論理回路  コンピュータでは,データを2進数の0と1で表現している.この2つの値,すなわち,2値で扱われるデータを論理データという.論理データの計算・判断・記憶は論理回路により実現される.  コンピュータのハードウェアは,基本的に論理回路で作られている。              論理積回路.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 9 回.
計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 河西良介
コンピュータアーキテクチャ 第 10 回.
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
第4回 CPUの役割と仕組み2 命令の解析と実行、クロック、レジスタ
コンピュータアーキテクチャ 第 5 回.
コンピュータアーキテクチャ 第 11 回.
高度プログラミング演習 (11).
ディジタル回路 8. 機能的な順序回路 五島 正裕.
コンピュータ工学基礎 マルチサイクル化とパイプライン化 テキスト9章 115~124
情報システム基盤学基礎1 コンピュータアーキテクチャ編
Presentation transcript:

第6回 dc_shellを使った論理合成 慶應義塾大学 理工学部 天野

6回の目的 前回のPICOは、フォワーディングと分岐命令の早期対処が付いていないため、場合によってはパイプラインがうまく働かない この授業はコンピュータアーキテクチャの授業ではないので、CPU自体の理解はいい加減でも進めるようにしたい 情報工学科以外の方は、http://www.am.ics.keio.ac.jp/picobookおよび「作りながら学ぶコンピュータアーキテクチャ:培風館」にPICOについての情報がある。しかし、これらはSFLで書かれているのであまり参考にならないかも、、、 命令セットのドキュメントは、pico.pdfを参照のこと cp –r ~hunga/vlsi07/6kai . でファイルを全部持ってくる

PICOのパイプライン構造 WB IF RF EX 2 + ALU Data Memory Instruction Memory RFPC rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

パイプラインハザード データハザード コントロールハザード 命令間の依存性により発生 先行する命令の結果を次の命令が利用する 結果をレジスタファイルに書き込む前に次の命令がこれを読み出してしまう コントロールハザード 分岐命令により発生 飛び先が決まるまで、次の命令をパイプラインに入れることができない

データハザード ADDI r3,#2 LD r3,(r1) LDLI r1,#0 IF RF EX WB 2 + ALU Data RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory ST (r1),r3 ADDI r3,#2 LD r3,(r1) LDLI r1,#0 RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

データハザード:答えを書き込む前にレジスタファイルを読み出す ST (r1),r3 ADDI r3,#2 LD r3,(r1) RFPC IF RF EX WB a 2 rega regc + U ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

フォワーディング 計算した結果をすぐに次の命令で利用可能にする 先行命令の書き込みレジスタ番号と後続命令の読み出しレジスタ番号が一致 先行命令がST、分岐命令ではない(つまり結果をレジスタファイルに書き込む命令である) ALUの出力からのフォワーディングデータfdataをレジスタからの値と入れ替える

フォワーディング fdata IF RF EX WB 2 + ALU Data Memory Instruction Memory RFPC rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory ADDI r3,#2 LD r3,(r1) LDLI r1,#0 RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory ST (r1),r3 ADDI r3,#2 LD r3,(r1) LDLI r1,#0 RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory ST (r1),r3 ADDI r3,#2 LD r3,(r1) RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

コントロールハザード NOP2 NOP1 BEQZ r3,-6 IF RF EX WB 2 + 飛び先 ALU Data Memory RFPC IF RF EX WB a 2 rega regc + 飛び先 ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory NOP3 NOP2 NOP1 BEQZ r3,-6 RFPC IF RF EX WB a 2 rega regc + ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

フォワーディングの実装 RFステージ assign frega = (ifir[`DecRd] == rfir[`DecRd])&rwen ? fdata: dout1; assign fregb = (ifir[`DecRs] == rfir[`DecRd])&rwen ? fdata: dout2; このfrega, fregbをaレジスタ、bレジスタにセットする EXステージ assign fdata = // when LD datain ((rfir[`DecOpe] == `ROP) & (rfir[`DecFunc] == `LD)) ? ddatain : aluout; assign rwen = // Disable when Braches or ST (rfir[`DecOpe] == `BEQZ) | (rfir[`DecOpe] == `BNEZ) | ((rfir[`DecOpe] == `ROP) & (rfir[`DecFunc] == `ST)) | ((rfir[`DecOpe] == `ROP) & (rfir[`DecFunc] == `NOP)) ? `Disable : `Enable;

コントロールハザードの回避 分岐の判断、分岐先アドレスをRFステージで計算 1クロックのNOPは必要 EXステージは分岐命令については何もやらない 1クロックのNOPは必要 しかし、これを有効な命令で置き換えることができる→ 遅延分岐

Data Memory Instruction Memory BEQZ r3,-6 NOP1 IF RF EX WB + 2 rega regc + a ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

Data Memory Instruction Memory Next Inst. NOP1 BEQZ r3,-6 IF RF EX WB + 2 rega regc + a ALU IFPC regb c b Imm. wadr IFIR RFIR Data Memory Instruction Memory

コントロールハザード改善 RFステージ assign immex= {{8{ifir[7]}},ifir[`DecImm]}; assign badr = ifpc + immex ; assign pcset = (ifir[`DecOpe] == `BEQZ) & (frega == 16'b0) | (ifir[`DecOpe] == `BNEZ) & (frega != 16'b0);

論理合成と圧縮 これで一通り16ビットプロセッサの設計ができた 命令が不完全なので、少しずつ付け足していく→ 演習 命令が不完全なので、少しずつ付け足していく→ 演習 今までとは違ってdc_shellを使って合成してみよう

dc_shellとは 論理合成圧縮ツールDesign Compilerに対して直接コマンドを与えて、合成圧縮を行うためのシェルスクリプト 柔軟かつ繰り返しを含めてコマンドを与えることが可能 dc_shellスクリプトが長年使われてきたが、2005年9月よりTclスクリプトに移行 design_visionはDesign CompilerのGUI、複雑かつ大きな回路の設計時には絶対的にdc_shellが有利 実行コマンド   dc_shell-xg-t –f ppico16.tcl | tee ppico16.rpt メッセージを見るため

パス指定とファイルの読み出し verilogファイルの読み出し 対象デザインの指定 デザインのチェック パスの指定:実験室は /usr/local/vdec/lib/rohm/synopsys set search_path [concat "/home/vdec/lib/rohm0.6/EXD/synopsys/" $search_path] read_verilog if_stage.v read_verilog regfile.v read_verilog rf_stage.v read_verilog ex_stagef.v read_verilog ppico16.v current_design "ppico16" check_design verilogファイルの読み出し 対象デザインの指定 デザインのチェック check_designで出るWarningは、設計を検討して修正した方が良いものと無視して良いものがある

クロックと入出力遅延の設定 3ns 10ns 4ns create_clock -period 10 clk -waveform {0 5} set_input_delay 3 -clock clk [all_inputs] set_output_delay 4 -clock clk [all_outputs] D Q D Q 3ns 10ns 4ns

入力ポート接続側遅延設定 clk,reset_ 入力側にドライバを想定し、遅延を制限 は対象外 set_driving_cell -lib_cell INV1 -library rohm06_tbl.db:ROHM06 [remove_from_collection [all_inputs] {clk reset_}] clk,reset_ は対象外 入力側にドライバを想定し、遅延を制限

出力側容量設定 INV1 A インバータ5個分の仮想容量を付加する set_load [expr 5 * [load_of rohm06_tbl_db:ROHM06/INV1/A] ] [all_outputs] INV1 A インバータ5個分の仮想容量を付加する

合成の設定 ファンアウトの制限 面積は基本的に0にしておく クロック設定のチェック 最初のコンパイル 階層の破壊 インクリメンタルコンパイル set_max_fanout 12 [current_design] set_max_area 0 derive_clocks compile -map_effort medium -area_effort medium ungroup -all –flatten compile -incremental 面積は基本的に0にしておく クロック設定のチェック 最初のコンパイル 階層の破壊 インクリメンタルコンパイル

最適化 Design Wareの利用 共有化 アーキテクチャレベル 平坦化 構造化 論理レベル オプション設定 ゲートレベル インクリメンタルコンパイル ゲートレベル

平坦化と構造化 平坦化 set_flatten true 構造化 set_structure –boolean true 全ての論理を一度AND-OR型に変換 -effort high 回路規模に関係なく実行 -phase true 正負の論理の両方で実行 速度方向の最適化に有効だが、回路規模が大きいと時間がかかる 構造化 set_structure –boolean true 論理式のレベルで共通項をくくりだす デフォルトで実行される 面積方向の最適化を行うには –boolean trueを設定し、ブール式レベルの最適化を行う 速度方向の最適化を行うにはset_structure falseとする場合がある

コンパイルオプション 面積方向 速度方向 set_structure –boolean true compile … ungroup –all –flatten compile –incremental –area_effort high 速度方向 クロック周期を短く設定 set_flattern true –ph true –effort high compile –incremental –map_effort high

最適化の基本的な考え方 まずは面積方向に最適化する それから速度を少しずつ上げていく 速度はタイミング解析でどこに問題があるかは明確。しかし面積のどこが削減可能かは判断が困難 それから速度を少しずつ上げていく Design Compilerは、速度をある程度以上高速化するためには、面積を非常に大きくしてしまう 配置配線を考えると速度的にも不利になることも考えられる

トップダウンとボトムアップ 今回は回路規模が小さいので全ての設計を読み込んで、一度に合成をかけた トップダウン合成 回路規模が大きい場合、それぞれのブロックに対して制約をかけて合成し、最後にこれをまとめる ボトムアップ合成 ACS(Automated Chip Synthesis)では、これらを組み合わせる方法をサポートしている

結果のレポートと出力 大きい方から10本表示 面積の表示 中間形式の保存 Verilog形式の保存 終了 report_timing -max_paths 10 report_area write -hier -format ddc -output ppico16.ddc write -hier -format verilog -output ppico16.vnet quit 面積の表示 中間形式の保存 Verilog形式の保存 終了

仮遅延シミュレーション verilog ppico16_test_net.v ppico16.vnet memory.v –v /usr/local/vdec/lib/rohm/cadence/rohm06.v または ./netsim ← 中に実行コマンドが書いてあるだけ、、 simvisionで結果を確認しよう

演習 ppico16.vにBMI(Branch Minus),BPL(Branch Plus)を付けよ 面積をあまり酷く大きくしない程度に、速度重視の最適化を行い面積と最大遅延を確認、天野(hunga@am.ics.keio.ac.jp)までソースと最大遅延、面積をメールのこと