Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "第6回 dc_shellを使った論理合成 慶應義塾大学 理工学部 天野."— Presentation transcript:

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

2 6回の目的 前回のPICOは、フォワーディングと分岐命令の早期対処が付いていないため、場合によってはパイプラインがうまく働かない
この授業はコンピュータアーキテクチャの授業ではないので、CPU自体の理解はいい加減でも進めるようにしたい 情報工学科以外の方は、 命令セットのドキュメントは、pico.pdfを参照のこと cp –r ~hunga/vlsi07/6kai . でファイルを全部持ってくる

3 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

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

5 データハザード 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

6 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

7 データハザード:答えを書き込む前にレジスタファイルを読み出す
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

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

9 フォワーディング 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

10 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

11 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

12 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

13 コントロールハザード 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

14 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

15 フォワーディングの実装 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;

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

17 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

18 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

19 コントロールハザード改善 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);

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

21 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 メッセージを見るため

22 パス指定とファイルの読み出し 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は、設計を検討して修正した方が良いものと無視して良いものがある

23 クロックと入出力遅延の設定 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

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

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

26 合成の設定 ファンアウトの制限 面積は基本的に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にしておく クロック設定のチェック 最初のコンパイル 階層の破壊 インクリメンタルコンパイル

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

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

29 コンパイルオプション 面積方向 速度方向 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

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

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

32 結果のレポートと出力 大きい方から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形式の保存 終了

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

34 演習 ppico16.vにBMI(Branch Minus),BPL(Branch Plus)を付けよ


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

Similar presentations


Ads by Google