Microsoft PowerPoint - Lec pptx

Similar documents
Microsoft PowerPoint - NxLecture ppt [互換モード]

Microsoft PowerPoint - CompArch_Exercise3.pptx

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - Lec pptx

Verilog HDL による回路設計記述

6. パイプライン制御

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - Lecture ppt [互換モード]

Microsoft PowerPoint - Chap4 [Compatibility Mode]

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

Microsoft Word - HW06K doc

ex04_2012.ppt


VelilogHDL 回路を「言語」で記述する

スライド 1

Microsoft PowerPoint - NxLec ppt

untitled

< B8CDD8AB B83685D>

.,. 0. (MSB). =2, =1/2.,. MSB LSB, LSB MSB. MSB 0 LSB 0 0 P

Microsoft PowerPoint - Chap2 [Compatibility Mode]

2.5. Verilog 19 Z= X + Y - Z A+B LD ADD SUB ST (X<<1)+(Y<<1) X 1 2 LD SL ST 2 10

スライド 1

3 SIMPLE ver 3.2: SIMPLE (SIxteen-bit MicroProcessor for Laboratory Experiment) 1 16 SIMPLE SIMPLE 2 SIMPLE 2.1 SIMPLE (main memo

Microsoft PowerPoint - vlsi4.ppt [互換モード]

Microsoft PowerPoint - Lec ppt [互換モード]

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

Microsoft PowerPoint - NxLec ppt

Microsoft PowerPoint - Chap5 [Compatibility Mode]

Microsoft PowerPoint - Sol7 [Compatibility Mode]

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

計算機アーキテクチャ特論 後半第2回 アウトオブオーダー実行 Out-of-Order Execution

xi21-x.dvi

「FPGAを用いたプロセッサ検証システムの製作」

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

Microsoft PowerPoint - ProcML-12-3.ppt

ソフトウェア基礎技術研修

Microsoft PowerPoint - 11Web.pptx

スライド 1

計算機アーキテクチャ

2005 1

ソフトウェア基礎技術研修

untitled

スライド 1

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

2016 3

スライド 1

Łñ“’‘‚2004


プリント

電卓の設計 1

PLDとFPGA

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

MIPSのマルチサイクル マイクロアーキテクチャ

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

main.dvi

User-defined Logic Application Memory Manager (Replacement) Application Specific Prefetcher (ASP) Application Kernel On-chip RAM (BRAM) On-chip RAM I/

目次 1. はじめに 1 2. マルチALUプロセッサ MAP MAP の構成 MAP 命令セットアーキテクチャ 並列 連鎖判定のアルゴリズムについて 5 3. Booth 乗算のアルゴリズム 次 Booth アルゴリズム 次 Bo

単位、情報量、デジタルデータ、CPUと高速化 ~ICT用語集~

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

スライド 1

計算機アーキテクチャ

Microsoft PowerPoint - arc7

MIPSのマイクロアーキテクチャ

main.dvi

スライド 1

hard3.pptx

/ FPGA LSI [1] CDP DDP 2 LSI FPGA PicoProcessor(pP)[2] (STP)[1] DDP 1.27 i

Design at a higher level

DELPHINUS EQUULEUS 2019 NASA SLS FPGA ( ) DELPHINUS 2

オンチップ・メモリ クイック・ガイド for Cyclone III

Microsoft PowerPoint - 01-VerilogSetup-2018.pptx

卒業論文 巡回冗長検査 CRC32 のハード / ソフト最適分割の検討 氏名 : 伊藤大喜学籍番号 : 指導教員 : 山崎勝弘教授提出日 : 2009 年 2 月 19 日 立命館大学理工学部電子情報デザイン学科

Microsoft PowerPoint - FPGA

VLD Kazutoshi Kobayashi

デザインパフォーマンス向上のためのHDLコーディング法

計数工学実験/システム情報工学実験第一 「ディジタル回路の基礎」

Microsoft PowerPoint - MieruPC_BOF.pptx[読み取り専用]

Microsoft PowerPoint - Lec ppt [互換モード]

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

PowerPoint プレゼンテーション

Microsoft PowerPoint - arch5kai.ppt [互換モード]

Microsoft PowerPoint - Chap3 [Compatibility Mode]

スライド 1

スライド 1

システムLSIとアーキテクチャ技術  (part II:オンチップ並列            アーキテクチャ)

Handsout3.ppt

Microsoft PowerPoint - 3.3タイミング制御.pptx

FabHetero FabHetero FabHetero FabCache FabCache SPEC2000INT IPC FabCache 0.076%

ディジタル電子回路 設計演習課題

PowerPoint プレゼンテーション

FPGAによる24時間時計回路

1

MDR-DS7100

(Microsoft Word - \216\346\220\340SiTCP-VME-Master\(Rev26\).doc)

Presentation Title

PowerPoint プレゼンテーション

Transcription:

Course number: CSC.T341 コンピュータ論理設計 Computer Logic Design 10. シングルサイクルプロセッサのデータパス Datapath for Single Cycle Processor 吉瀬謙二情報工学系 Kenji Kise, Department of Computer Science kise _at_ c.titech.ac.jp www.arch.cs.titech.ac.jp/lecture/cld/ W621 講義室月 10:4-12:1, 木 9:00-12:1 1

Inside module m_proc03 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), ライトバック (WB) の処理をおこなう加算命令 (add, addi) に対応したプロセッサ IF ID EX WB 4 16 w_imm SignExtImm w_imm r_pc 12 r_pc[13:2] m_memory m_imem (bit x 4096) w_ir w_rt w_rd w_rs w_rd2 m_regfile m_regs (bit x ) w_rrs w_rrt w_rrt2 w_rslt OP rs rt rd sa funct R format OP rs rt immediate I format 2

Computer Memory Read-only memory (ROM) Random-access memory (RAM) Verilog HDL では, ビット幅 B でワード数 W のメモリ cm_ram を reg [B-1:0] cm_ram [0:W-1] として宣言できる. r_pc 12 m_memory w_ir r_pc[13:2] m_imem (bit x 4096) code083.v module m_memory (w_clk, w_addr, w_we, w_din, r_dout); input wire w_clk, w_we; input wire [11:0] w_addr; input wire [31:0] w_din; output reg [31:0] r_dout; reg r_we=0; reg [11:0] r_addr=0; reg [31:0] r_din=0; reg [31:0] cm_ram [0:409]; // 4K word (4096 x bit) memory always @(posedge w_clk) begin r_addr <= w_addr; r_din <= w_din; r_we <= w_we; r_dout <= cm_ram[r_addr]; if (r_we) cm_ram[r_addr] <= r_din; end initial begin r_dout = 0; cm_ram[0] = {6'h0, 'd0, 'd0, 'd0, 'h0, 6'h20}; // add $0, $0, $0 cm_ram[1] = {6'h0, 'd2, 'd1, 'd2, 'h0, 6'h20}; // add $2, $2, $1 cm_ram[2] = {6'h0, 'd3, 'd1, 'd3, 'h0, 6'h20}; // add $3, $3, $1 cm_ram[3] = {6'h0, 'd4, 'd4, 'd4, 'h0, 6'h20}; // add $4, $4, $4 end 3

非同期式メモリの例 4

Inside module m_amemory 非同期式メモリの記述の例を示す. メモリの読み出しの遅延を 20nsec とした. main.v を code112.v と code111.v の内容となるように入力して, シミュレーションする. code112.v `default_nettype none module m_top (); reg r_clk=0; initial forever #0 r_clk = ~r_clk; reg [31:0] r_pc = 0; always @(posedge r_clk) r_pc <= #3 r_pc 4; wire [31:0] w_data; m_amemory m (r_clk, r_pc[13:2], 0, 0, w_data); initial begin m.cm_ram[0] = {6'h0, 'd0, 'd0, 'd0, 'h0, 6'h20}; // add $0, $0, $0 m.cm_ram[1] = {6'h0, 'd0, 'd1, 'd4, 'h0, 6'h20}; // add $4, $0, $1 m.cm_ram[2] = {6'h0, 'd1, 'd2, 'd, 'h0, 6'h20}; // add $, $1, $2 m.cm_ram[3] = {6'h0, 'd4, 'd, 'd6, 'h0, 6'h20}; // add $6, $4, $ end code111.v module m_amemory (w_clk, w_addr, w_we, w_din, w_dout); input wire w_clk, w_we; input wire [11:0] w_addr; input wire [31:0] w_din; output wire [31:0] w_dout; reg [31:0] cm_ram [0:409]; // 4K word (4096 x bit) memory always @(posedge w_clk) if (w_we) cm_ram[w_addr] <= w_din; assign #20 w_dout = cm_ram[w_addr]; always@(*) #80 $write("%3d %d %x n", $time, r_pc, w_data);

プロセッサが命令を処理するための基本的な つのステップ IF (Instruction Fetch) メモリから命令をフェッチする. ID (Instruction Decode) 命令をデコード ( 解読 ) しながら, レジスタの値を読み出す. EX (Execution) 命令操作の実行またはアドレスの生成を行う. MEM (Memory Access) 必要であれば, データ メモリ中のオペランドにアクセスする. WB (Write Back) 必要であれば, 結果をレジスタに書き込む. 6

MIPS Memory Access Instructions MIPS has two basic data transfer instructions for accessing memory lw $t0, 4($s3) # load word from memory sw $t0, 8($s3) # store word to memory Adapted from Computer Organization and Design, Patterson & Hennessy, 200 7

Inside module m_proc04 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), メモリアクセス (MEM), ライトバック (WB) の処理をおこなう add, addi, lw 命令に対応したプロセッサ IF ID EX MEM WB 4 16 w_imm SignExtImm w_imm r_pc 12 r_pc[13:2] m_amemory m_imem (bit x 4096) w_ir w_rt w_rd w_rs w_rd2 m_regfile m_regs (bit x ) w_rrs w_rrt w_rrt2 w_rslt 12 m_amemory m_dmem (bit x 4096) w_ldd w_rslt2 OP rs rt rd sa funct R format OP rs rt immediate I format 8

Inside module m_proc04 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), メモリアクセス (MEM), ライトバック (WB) の処理をおこなうadd, addi, lw 命令に対応したプロセッサ main.vを code{093, 111, 114, 113}.v となるように編集して, シミュレーションする. 加算, レジスタの更新, メモリ読み出しにシミュレーションのための遅延を挿入 code114.v module m_top (); reg r_clk=0; initial forever #0 r_clk = ~r_clk; wire [1:0] w_led; m_proc04 p (r_clk, 0, 1, w_led); always@(*) #80 $write("%4d %x %x %x %x %x n", $time, p.r_pc, p.w_ir, p.w_rrs, p.w_rrt2, p.w_rslt2); initial begin p.m_imem.cm_ram[0] = {6'h0, 'd0, 'd0, 'd0, 'h0, 6'h20}; // add $0, $0, $0 p.m_imem.cm_ram[1] = {6'h23,'d0, 'd4, 16'h4}; // lw $4, 4($0) p.m_imem.cm_ram[2] = {6'h0, 'd1, 'd2, 'd, 'h0, 6'h20}; // add $, $1, $2 p.m_imem.cm_ram[3] = {6'h0, 'd4, 'd, 'd6, 'h0, 6'h20}; // add $6, $4, $ p.m_imem.cm_ram[4] = {6'h8, 'd6, 'd8, 16'h}; // addi $8, $6, p.m_dmem.cm_ram[0] = 'h222; p.m_dmem.cm_ram[1] = 'h333; end initial #0 $finish; code113.v module m_proc04 (w_clk, w_btnu, w_btnd, w_led); input wire w_clk, w_btnu, w_btnd; output wire [1:0] w_led; reg [31:0] r_pc = 0; wire [31:0] w_ir, w_rrs, w_rrt, w_imm, w_rrt2, w_rslt, w_ldd, w_rslt2; always @(posedge w_clk) r_pc <= #3 r_pc 4; m_amemory m_imem (w_clk, r_pc[13:2], 0, 0, w_ir); wire [:0] w_op = w_ir[31:26]; wire [4:0] w_rs = w_ir[2:21]; wire [4:0] w_rt = w_ir[20:16]; wire [4:0] w_rd = w_ir[1:11]; wire [4:0] w_rd2 = (w_op!=0)? w_rt : w_rd; wire [1:0] w_imm = w_ir[1:0]; m_regfile m_regs (w_clk, w_rs, w_rt, w_rd2, 1, w_rslt2, w_rrs, w_rrt); assign w_imm = {{16{w_imm[1]}}, w_imm}; assign w_rrt2 = (w_op>6'h)? w_imm : w_rrt; assign #10 w_rslt = w_rrs w_rrt2; m_amemory m_dmem (w_clk, w_rslt[13:2], 0, 0, w_ldd); assign w_rslt2 = (w_op>6'h19 && w_op<6'h28)? w_ldd : w_rslt; assign w_led = (w_btnu w_btnd)? w_rslt[31:16] : w_rslt[1:0]; 9

Inside module m_proc04 code114.v と code113.v のシミュレーション結果の波形 lw $4, 4($0) add $, $1, $2 add $6, $4, $ addi $8, $6, Vivado Demo 10

Inside module m_proc0 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), メモリアクセス (MEM), ライトバック (WB) の処理をおこなう add, addi, lw, sw 命令に対応したプロセッサ IF ID EX MEM WB 4 16 w_imm SignExtImm w_imm r_pc 12 r_pc[13:2] m_amemory m_imem (bit x 4096) w_ir w_rt w_rd w_rs w_rd2 m_regfile m_regs (bit x ) w_rrs w_rrt w_rrt2 w_rslt 12 m_amemory m_dmem (bit x 4096) w_ldd w_rslt2 OP rs rt rd sa funct R format OP rs rt immediate I format 11

Inside module m_proc0 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), メモリアクセス (MEM), ライトバック (WB) の処理をおこなうadd, addi, lw, sw 命令に対応したプロセッサ main.vを code{093, 111, 116, 11}.v となるように編集して, シミュレーションする. code116.v module m_top (); reg r_clk=0; initial forever #0 r_clk = ~r_clk; wire [1:0] w_led; m_proc0 p (r_clk, 0, 1, w_led); always@(*) #80 $write("%4d %x %x %x %x %x n", $time, p.r_pc, p.w_ir, p.w_rrs, p.w_rrt2, p.w_rslt2); initial begin p.m_imem.cm_ram[0] = {6'h0, 'd0, 'd0, 'd0, 'h0, 6'h20}; // add $0, $0, $0 p.m_imem.cm_ram[1] = {6'h8, 'd0, 'd9, 16'h}; // addi $9, $0, p.m_imem.cm_ram[2] = {6'h2b,'d0, 'd9, 16'd}; // sw $9, ($0) p.m_imem.cm_ram[3] = {6'h23,'d0, 'd7, 16'd}; // lw $7, ($0) p.m_imem.cm_ram[4] = {6'h0, 'd7, 'd2, 'd6, 'h0, 6'h20}; // add $6, $7, $2 p.m_dmem.cm_ram[0] = 'h222; p.m_dmem.cm_ram[1] = 'h333; end initial #0 $finish; code11.v module m_proc0 (w_clk, w_btnu, w_btnd, w_led); input wire w_clk, w_btnu, w_btnd; output wire [1:0] w_led; reg [31:0] r_pc = 0; wire [31:0] w_ir, w_rrs, w_rrt, w_imm, w_rrt2, w_rslt, w_ldd, w_rslt2; always @(posedge w_clk) r_pc <= #3 r_pc 4; m_amemory m_imem (w_clk, r_pc[13:2], 0, 0, w_ir); wire [:0] w_op = w_ir[31:26]; wire [4:0] w_rs = w_ir[2:21]; wire [4:0] w_rt = w_ir[20:16]; wire [4:0] w_rd = w_ir[1:11]; wire [4:0] w_rd2 = (w_op!=0)? w_rt : w_rd; wire [1:0] w_imm = w_ir[1:0]; wire w_w = (w_op==0 (w_op>6'h && w_op<6'h28)); m_regfile m_regs (w_clk, w_rs, w_rt, w_rd2, w_w, w_rslt2, w_rrs, w_rrt); assign w_imm = {{16{w_imm[1]}}, w_imm}; assign w_rrt2 = (w_op>6'h)? w_imm : w_rrt; assign #10 w_rslt = w_rrs w_rrt2; wire w_we = (w_op>6'h27); m_amemory m_dmem (w_clk, w_rslt[13:2], w_we, w_rrt, w_ldd); assign w_rslt2 = (w_op>6'h19 && w_op<6'h28)? w_ldd : w_rslt; assign w_led = (w_btnu w_btnd)? w_rslt[31:16] : w_rslt[1:0]; 12

Inside module m_proc0 code116.v と code11.v のシミュレーション結果の波形 sw $9, ($0) addi $9, $0, lw $7, ($0) add $6, $7, $2 13

MIPS Control Flow Instructions MIPS conditional branch instructions: bne $s0, $s1, Lbl # go to Lbl if $s0 $s1 beq $s0, $s1, Lbl # go to Lbl if $s0=$s1 4 r_pc w_pc4 16 w_imm SignExtImm Shift left 2 w_imm w_tpc Adapted from Computer Organization and Design, Patterson & Hennessy, 200 14

Inside module m_proc06 命令フェッチ (IF), デコードとオペランドフェッチ (ID), 実行 (EX), メモリアクセス (MEM), ライトバック (WB) の処理をおこなう add, addi, lw, sw, beq 命令に対応したプロセッサ w_npc IF ID EX MEM WB Shift left 2 w_tpc r_pc 4 12 r_pc[13:2] w_pc4 m_amemory m_imem (bit x 4096) w_ir 16 w_imm w_rt w_rd SignExtImm w_rs w_rd2 w_imm m_regfile m_regs (bit x ) w_rrs w_rrt w_rrt2 == 1 w_taken w_rslt 12 m_amemory m_dmem (bit x 4096) w_ldd w_rslt2 OP rs rt rd sa funct R format OP rs rt immediate I format 1

Inside module m_proc06 main.v を code{093, 111, 118, 117}.v となるように編集して, シミュレーションする. code117.v code118.v module m_top (); reg r_clk=0; initial forever #0 r_clk = ~r_clk; wire [1:0] w_led; m_proc06 p (r_clk, 0, 1, w_led); always@(*) #80 $write("%4d %x %x %x %x %x n", $time, p.r_pc, p.w_ir, p.w_rrs, p.w_rrt2, p.w_rslt2); initial begin p.m_imem.cm_ram[0] = {6'h0, 'd0, 'd0, 'd0, 'h0, 6'h20}; // add $0, $0, $0 p.m_imem.cm_ram[1] = {6'h8, 'd0, 'd9, 16'h}; // addi $9, $0, p.m_imem.cm_ram[2] = {6'h2b,'d0, 'd9, 16'd}; // sw $9, ($0) p.m_imem.cm_ram[3] = {6'h23,'d0, 'd7, 16'd}; // lw $7, ($0) p.m_imem.cm_ram[4] = {6'h0, 'd7, 'd2, 'd7, 'h0, 6'h20}; // L1: add $7, $7, $2 p.m_imem.cm_ram[] = {6'h4, 'd0, 'd0, 16'hfffe}; // beq $0, $0, L1 p.m_dmem.cm_ram[0] = 'h222; p.m_dmem.cm_ram[1] = 'h333; end initial #1000 $finish; module m_proc06 (w_clk, w_btnu, w_btnd, w_led); input wire w_clk, w_btnu, w_btnd; output wire [1:0] w_led; reg [31:0] r_pc = 0; wire [31:0] w_ir, w_rrs, w_rrt, w_imm, w_rrt2, w_rslt, w_ldd, w_rslt2; wire [:0] w_op = w_ir[31:26]; wire [4:0] w_rs = w_ir[2:21]; wire [4:0] w_rt = w_ir[20:16]; wire [4:0] w_rd = w_ir[1:11]; wire w_taken = (w_op==6'h4 && w_rrs==w_rrt2); wire [31:0] w_npc = r_pc 4; wire [31:0] w_tpc = w_npc {w_imm[29:0], 2'h0}; always @(posedge w_clk) r_pc <= #3 (w_taken)? w_tpc : w_npc; m_amemory m_imem (w_clk, r_pc[13:2], 0, 0, w_ir); wire [4:0] w_rd2 = (w_op!=0)? w_rt : w_rd; wire [1:0] w_imm = w_ir[1:0]; wire w_w = (w_op==0 (w_op>6'h && w_op<6'h28)); m_regfile m_regs (w_clk, w_rs, w_rt, w_rd2, w_w, w_rslt2, w_rrs, w_rrt); assign w_imm = {{16{w_imm[1]}}, w_imm}; assign w_rrt2 = (w_op>6'h)? w_imm : w_rrt; assign #10 w_rslt = w_rrs w_rrt2; wire w_we = (w_op>6'h27); m_amemory m_dmem (w_clk, w_rslt[13:2], w_we, w_rrt, w_ldd); assign w_rslt2 = (w_op>6'h19 && w_op<6'h28)? w_ldd : w_rslt; assign w_led = (w_btnu w_btnd)? w_rslt[31:16] : w_rslt[1:0]; 16

Inside module m_proc06 main.v を code{093, 111, 118, 117}.v となるように編集して, シミュレーションする. 17