Presentation is loading. Please wait.

Presentation is loading. Please wait.

VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション

Similar presentations


Presentation on theme: "VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション"— Presentation transcript:

1 VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
慶應義塾大学 理工学部 情報工学科 天野

2 アキュムレータマシン 合成部分 ir ALU accum ‘1’ pc + Instruction Memory Data Memory
op.code ALU ‘1’ accum pc operand idata aout ddata we_ Instruction Memory Data Memory iadr dadr

3 状態遷移 Instruction Execution Fetch pc←pc+1 ir ← idata rst_
BEQ: if (accum == 0) pc← ir[3:0] BNQ: if (accum != 0) pc← ir[3:0] ST: we_ = L else: accum ← ALU出力

4 アキュムレータの記述(1) `include "my1.h" `define STNUM 2 `define IF `STNUM'b01
`define EX `STNUM'b10 `define EX_BIT 1'b1 module accum(clock, rst_, ddata, idata, iadr, dadr, acout, we_); input clock, rst_; input [`DataBus] ddata; input [`InstBus] idata; output [`DataBus] iadr; output [`DataBus] dadr; output [`DataBus] acout; output we_; reg [`DataBus] accum; // Accumulator reg [`DataBus] pc;        // Program Counter reg [`InstBus] ir; // Instruction Register reg [`STNUM-1:0] stat; // State register wire [`DataBus] alu_y; assign acout = accum; assign iadr = pc; assign dadr = ir[3:0]; assign we_ = ~(stat[`EX_BIT] & ir[7:4] == `ST) ; alu alu0(.ina(accum), .inb(ddata), .com(ir[6:4]), .y(alu_y));

5 アキュムレータの記述(2) この記述は命令により様々なレジスタを 制御している リソースシュアリングが 可能だが、やりすぎると
clock) begin if(rst_ == `Enable_) begin stat <= `IF; pc <= 4'b0000; end else case (stat) //Case文 `IF: begin ir <= idata; pc <= pc+1; stat <= `EX; end `EX: begin case (ir[7:4])   //Case文入れ子 `BEQ: if (accum == 4'b0000) pc <= ir[3:0]; `BNE: if (accum != 4'b0000) pc <= ir[3:0]; default: if(ir[7]==1'b0) accum <= alu_y; endcase stat <= `IF; end end endmodule この記述は命令により様々なレジスタを 制御している リソースシュアリングが 可能だが、やりすぎると バグの元なので注意!

6 テストベンチ(1) `include "my1.h" `timescale 1ns/1ps module datapat_test;
parameter STEP = 10; reg rst_, clk; reg [`DataBus] dmem[`MemSize]; reg [`InstBus] imem[`MemSize]; wire [`DataBus] acout, ddata; wire [`InstBus] idata ; wire [`AdrBus] iadr, dadr; wire we_; accum ac0( .clock( clk ), .rst_( rst_ ), .ddata( ddata ), .idata( idata ), .iadr( iadr ), .dadr( dadr ), .acout (acout), .we_ (we_) );

7 テストベンチ(2) always #( STEP / 2 ) begin clk <= ~clk; end
assign idata = imem[iadr]; clk ) if (!we_) dmem[dadr] <= acout; assign ddata = dmem[dadr]; initial begin #0 clk <= `Low; rst_ <= `Enable_; #(STEP/4) #(STEP) rst_ <= `Disable_; #(STEP*100) $finish; negedge clk ) begin $display( "stat = %b pc = %x ir = %x, accum = %x", ac0.stat, iadr, ac0.ir, acout); $readmemb("imem.dat", imem); $readmemb("dmem.dat", dmem); $shm_open(); $shm_probe("AC");

8 design_visionによる最適化 accmu.vとalu.vをReadする

9 クロックと面積の指定 create_clock –period 100 clock set_max_area 0
100nsecに設定(非常にゆっくり) set_max_area 0 面積は最小を指定 Design → Compile Designで合成 Design → Report Cellsで使用セル数 Timing → Report Timing Pathで遅延を見る

10 面積重視の合成

11 速度重視の設定 create_clock –period 2 clock
2nsecに設定(非常に高速) フリップフロップ間の遅延とセットアップ時間がクロック周期より小さくなるようにがんばってくれる Design → Compile Designで合成 Design → Report Cellsで使用セル数 Timing → Report Timing Pathで遅延を見る

12 速度重視の合成

13 クリティカルパス上の信号名をクリックすると表示してくれる
回路の解析 クリティカルパス上の信号名をクリックすると表示してくれる

14 Highlight -> Critical Pathでクリティカルパス全体を表示してくれる
クリティカルパスの表示 Highlight -> Critical Pathでクリティカルパス全体を表示してくれる

15 合成後Verilogファイルの保存 File→Save As→Formatでverilogを指定
名前を付けて保存する(ソースファイルと重なっては駄目:ここではaccum_s.v) accum_s.vを表示してみよう AND, ORなどのゲートの形になっていることがわかる 合成後のシミュレーション(仮遅延シミュレーション) verilog accum_test.v accum.v -v /usr/local/vdec/lib/rohm/cadence/rohm06.v

16 仮遅延シミュレーション 遅延があるのがわかる

17 演習 アキュムレータにイミィデエイト命令を付け、テストし、合成、速度重視の最適化を行え。


Download ppt "VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション"

Similar presentations


Ads by Google