计算机组成原理实验指导书(下)_第1页
计算机组成原理实验指导书(下)_第2页
计算机组成原理实验指导书(下)_第3页
计算机组成原理实验指导书(下)_第4页
计算机组成原理实验指导书(下)_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业多周期处理器-MIPS CPU-7 Instructions设计一、设计说明1.处理器应支持MIPS CPU-7 Instructions指令集。1)MIPS CPU-7 Instructionsaddu,subu,ori,lw,sw,beq,jal。(1)指令:无符号加addu指令格式:addu rd,rs,rt指令功能:rd rs + rt 指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncrsrtrd00000(2)

2、指令:无符号减subu指令格式:subu rd,rs,rt指令功能:rd rs - rt 指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncrsrtrd00000(3)指令:或立即数ori指令格式:ori rt,rs,imm16指令功能:rt rs | (zero-extend)imm16 指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncrsrtimmediate(4)指令:加载字lw指令格式:lw rt, imm16(rs)指令功能:rt memoryrs + (sign-extend)imm1

3、6指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncrsrtimm16(5)指令:存储字sw指令格式:sw rt, imm16(rs)指令功能:memoryrs + (sign-extend)imm16 rt指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncrsrtimmediate(6)指令:等于转移beq指令格式:beq rs,rt, imm16指令功能:if (rs = rt) PC PC+4 + (sign-extend)imm162指令编码:31.2625.2120.1615.1110.6

4、5.0oprsrtrdshamtfuncrsrtimmediate(7)指令:跳转并链接jal指令格式:jal addr26指令功能:$31-PC+4;PC (PC+4)31.28,addr26,0,0指令编码:31.2625.2120.1615.1110.65.0oprsrtrdshamtfuncaddress2)所有运算类指令均可以不支持溢出。2.处理器为多周期设计,如图1所示。图1 5周期数据通路表1 5周期设计分段通路段内平行功能起始(读寄存器)中间逻辑结束(写寄存器)依赖读取指令PCIMIR读操作数读2个寄存器IRRFA/B读取指令读1个寄存器,立即数扩展A(/B),EXT执行R-R

5、运算A,BALUALUOut读操作数R-I运算A,EXT访存读存储ALUOutDMDR执行执行写存储ALUOut,BDM回写存储回写DRRF读存储访存计算回写ALUOutRF执行二、设计工具1.ModelSim或Xilinx ISE。2.Mars。三、设计要求1.多周期处理器由datapath(数据通路)和controller(控制器)组成。图多周期处理器1)数据通路应至少包括如下module:PC(程序计数器)、NPC(NextPC计算单元)、RF (通用寄存器组,也称为寄存器文件、寄存器堆)、ALU(算术逻辑单元)、EXT(扩展单元)、IM(指令存储器)、DM(数据存储器)等。2)控制器由

6、状态机控制。图控制器的状态机2.图为参考的数据通路架构图。1)该图支持MIPS-7 Instructions指令集。2)如果你对数据通路做了比较大的调整,请注意务必不要与要求矛盾。图 多周期数据通路3.多周期数据通路应必须包括PC、NPC、IM、DM这4个独立模块。其中:1)IM:容量为4KB(32bit1024字)。2)DM:容量为4KB(32bit1024字)。4.层次及模块实例化命名必须满足下列要求1)本project的顶层设计文件命名:mips.v。2)PC必须被实例化命名:U_PC。下面代码为示例。pc U_PC() ; / 实例化PC(程序计数器)3)指令存储器必须被实例化命名:U

7、_IM。4)数据存储器必须被实例化命名:U_DM。5)寄存器文件必须被实例化命名:U_RF。5.建议datapath中的每个module都由一个独立的VerilogHDL文件组成。建议所有mux(包括不同位数、不同端口数等)都建模在一个mux.v中。同一个.v文件中可以有多个module。6.为使得代码更加清晰可读,建议多使用宏定义,并将宏定义组织在1个或多个头文件中。7.PC复位后初值为0 x0000_3000,目的是与MARS的Memory Configuration相配合。现场测试用的测试程序将通过MARS产生,其配置模式如下图所示。图 MARS存储配置模式(MARS memory co

8、nfiguration)8.图3中的状态机设计仅供你参考。你可以根据对指令的理解去构造不同的状态机。但仍然建议遵循下述原则:1)按类构造状态分支,而不是按指令。2)状态分支不宜过多。四、模块定义【WORD】仿照下面给出的PC模块定义,给出表中所有功能部件的模块定义。1)必须在VerilogHDL设计中建模这些模块。2)不允许修改模块名称、端口各信号的名称/类型/位宽。表 模块及模块接口定义序号文件模块接口定义1PC.vmodule PC( clk, rst, PCWr, NPC, PC );input clk;input rst;input PCWr;input 31:2 NPC;output

9、 31:2 PC;2NPC.vmodule NPC( PC, NPCOp, IMM, NPC ); input 31:2 PC; input 1:0 NPCOp; input 25:0 IMM; output 31:2 NPC;3dm.vmodule dm_4k( addr, din, DMWr, clk, dout ) ;input 11:2 addr ; / address businput 31:0 din ; / 32-bit input datainput DMWr ; / memory write enableinput clk ; / clockoutput 31:0 dout

10、; / 32-bit memory output4im.vmodule im_4k( addr, dout ) ;input 11:2 addr ; / address busoutput 31:0 dout ; / 32-bit memory output5EXT.vmodule EXT( Imm16, EXTOp, Imm32 );input 15:0 Imm16;input 1:0 EXTOp;output 31:0 Imm32;6alu.vmodule alu (A, B, ALUOp, C, Zero);input 31:0 A, B;input 1:0 ALUOp;output 3

11、1:0 C;output Zero;7IR.vmodule IR (clk, rst, IRWr, im_dout, instr);input clk;input rst;input IRWr; input 31:0 im_dout;output 31:0 instr;8mux.v9flopr.vmodule flopr #(parameter WIDTH = 8) (clk, rst, d, q);input clk;input rst;input WIDTH-1:0 d;output WIDTH-1:0 q;10RF.vmodule RF( A1, A2, A3, WD, clk, RFW

12、r, RD1, RD2 );input 4:0 A1, A2, A3; input 31:0 WD; input clk; input RFWr; output 31:0 RD1, RD2;11global_def.vctrl_encode_def.vinstruction_def.v12mips.vmodule mips(clk, rst) ;input clk ; / clockinput rst ;/ reset13ctrl.vmodule ctrl(clk,rst, Zero, Op, Funct, RFWr, DMWr, PCWr, IRWr, EXTOp, ALUOp, NPCOp

13、, GPRSel, WDSel, BSel);input clk, rst, Zero; input 5:0 Op;input 5:0 Funct;output RFWr;output DMWr;output PCWr;output IRWr;output 1:0 EXTOp;output 1:0 ALUOp;output 1:0 NPCOp;output 1:0 GPRSel;output 1:0 WDSel;output BSel;1.PC模块1)基本描述PC是指令计数器,主要功能是完成输出当前指令地址并保存下一条指令地址。复位后,PC指向0 x0000_3000,此处为第一条指令的地址。

14、2)模块接口信号名方向描述31:2NPCI下条指令的地址PCWrIPC写使能1:允许NPC写入PC内部寄存器0:禁止NPC写入PC内部寄存器clkI时钟信号rstI复位信号。1:复位0:无效31:2PCO30位指令存储器地址(最低2位省略)3)功能定义序号功能名称功能描述1复位if rst=1,PC0 x0000_3000。2保存NPC并输出Clk上升沿。if rst=0,PC NPC。4)模块描述module PC( clk, rst, PCWr, NPC, PC ); input clk; input rst; input PCWr; input 31:2 NPC; output 31:2

15、 PC; reg 31:2 PC; reg 1:0 tmp; always (posedge clk or posedge rst) begin if ( rst ) PC, tmp = 32h0000_3000; else if ( PCWr ) PC = NPC; end / end always endmodule2.NPC模块1)基本描述NPC是下条指令计数器,主要功能是计算下一条指令地址,NPCOp1:0决定如何计算NPC。2)模块接口信号名方向描述PC31:2I30位本条指令的地址(最低2位省略)Imm25:0I立即数(偏移量)NPCOp1:0I计算方式NPC31:2O30位下一条

16、指令地址(最低2位省略)3)功能定义序号功能名称功能描述1计算下一条指令地址NPCOp功能操作00顺序地址NPC PC + 101计算B指令转移地址NPC PC + sign_ext(imm16) 10计算J类指令转移地址NPC PC31:28, imm2611.4)模块描述include ctrl_encode_def.vmodule NPC( PC, NPCOp, IMM, NPC ); input 31:2 PC; input 1:0 NPCOp; input 25:0 IMM; output 31:2 NPC; reg 31:2 NPC; always (*) begin case (

17、NPCOp) NPC_PLUS4: NPC = PC + 1; NPC_BRANCH: NPC = PC + 14IMM15, IMM15:0; NPC_JUMP: NPC = PC31:28, IMM25:0; default: ; endcase end / end always endmodule 3.DM模块1)基本描述DM是数据存储器,主要功能是根据读写控制信号DMWr,读写对应addr地址的32位数据。 2)模块接口信号名方向描述clkI时钟信号din 31:0I需要写回的数据DMWrI读写操作的写使能端0:禁止写1:允许写addr11:2I访问地址dout31:0O读出的数据3)

18、功能定义序号功能名称功能描述1读存储输出地址所对应的数据,dout dmemaddr2写存储当写使能有效时,将待写数据写入对应地址clk上升沿时if DMWr then dmemaddr din4)模块描述module dm_4k( addr, din, DMWr, clk, dout ); input 11:2 addr; input 31:0 din; input DMWr; input clk; output 31:0 dout; reg 31:0 dmem1023:0; always (posedge clk) begin if (DMWr) dmemaddr = din; end /

19、 end always assign dout = dmemaddr; endmodule 4.IM模块1)基本描述IM是指令存储器,主要功能是根据读控制信号DMWr,读写对应addr地址的32位数据。2)模块接口信号名方向描述addr11:2I访问地址dout31:0O读出的指令3)功能定义序号功能名称功能描述1读指令存储器输出地址所对应的指令,dout imemaddr4)模块描述module im_4k( addr, dout ); input 11:2 addr; output 31:0 dout; reg 31:0 imem1023:0; assign dout = imemaddr

20、; endmodule 5.EXT模块1)基本描述EXT主要功能是将16位的数据扩展为32位数据。2)模块接口信号名方向描述Imm16 15:0I需要进行扩展的数据EXTOp1:0I扩展方式的控制信号00:0扩展01:符号扩展10:将立即数扩展到高位Imm32 31:0O扩展结果3)功能定义序号功能名称功能描述1扩展EXTOp功能操作00无符号扩展IMM32 16b0 , Imm1601符号扩展IMM32 16Imm1615, Imm1610高位扩展IMM32 Imm16 , 16b011。4)模块描述include ctrl_encode_def.vmodule EXT( Imm16, EX

21、TOp, Imm32 ); input 15:0 Imm16; input 1:0 EXTOp; output 31:0 Imm32; reg 31:0 Imm32; always (*) begin case (EXTOp) EXT_ZERO: Imm32 = 16d0, Imm16; EXT_SIGNED: Imm32 = 16Imm1615, Imm16; EXT_HIGHPOS: Imm32 = Imm16, 16d0; default: ; endcase end / end always endmodule 6.ALU模块1)基本描述ALU主要功能是完成对输入数据的算数逻辑计算,包

22、括加法、减法、按位或运算以及判断两个操作数是否相等。2)模块接口信号名方向描述A 31:0I操作数AB 31:0I操作数BALUOp1:0I需要进行的运算00:加法01:减法10:或运算ZeroO两操作数是否相等C 31:0O运算结果3)功能定义序号功能名称功能描述1运算ALUOp功能操作-A等于B?Zero (A=B) ? 1 : 00000加C A + B0001减C A B0010与C A & B0011或C A | B0100异或C A B.4)模块描述include ctrl_encode_def.vmodule alu (A, B, ALUOp, C, Zero); input 3

23、1:0 A, B; input 1:0 ALUOp; output 31:0 C; output Zero; reg 31:0 C; always ( A or B or ALUOp ) begin case ( ALUOp ) ALUOp_ADDU: C = A + B; ALUOp_SUBU: C = A - B; ALUOp_OR: C = A | B; default: ; endcase end / end always; assign Zero = (A = B) ? 1 : 0;endmodule 7.IR模块1)基本描述IR主要功能是完成对来自IM的指令的缓冲。2)模块接口信号

24、名方向描述31:0 im_dout;I指令输入IRWrI写使能信号rstI复位信号clkI时钟信号31:0 instr;O指令输出3)功能定义序号功能名称功能描述1复位if rst=1, instr02缓冲if rst=0, instrim_dout4)模块描述module IR (clk, rst, IRWr, im_dout, instr); input clk; input rst; input IRWr; input 31:0 im_dout; output 31:0 instr; reg 31:0 instr; always (posedge clk or posedge rst)

25、begin if ( rst ) instr = 0; else if (IRWr) instr = im_dout; end / end always endmodule 8.mux模块1)基本描述mux主要功能是多路选择器。mux.v文件包含二选一、四选一、八选一、十六选一4中多路选择器。实例化多路选择器时,可使用#(XXX),实例化位宽为XXX的多路选择器。2)模块接口信号名方向描述d0、d1、d2.I供选择数据(d0、d1)sI片选信号yO片选后的数据3)功能定义序号功能名称功能描述1选择s功能操作00选择d0y d001选择d1y d110选择d2y d2.4)模块描述/ mux2m

26、odule mux2 #(parameter WIDTH = 8) (d0, d1, s, y); input WIDTH-1:0 d0, d1; input s; output WIDTH-1:0 y; assign y = ( s = 1b1 ) ? d1:d0; endmodule/ mux4module mux4 #(parameter WIDTH = 8) (d0, d1, d2, d3, s, y); input WIDTH-1:0 d0, d1, d2, d3; input 1:0 s; output WIDTH-1:0 y; reg WIDTH-1:0 y_r; always

27、( * ) begin case ( s ) 2b00: y_r = d0; 2b01: y_r = d1; 2b10: y_r = d2; 2b11: y_r = d3; default: ; endcase end / end always assign y = y_r; endmodule/ mux8module mux8 #(parameter WIDTH = 8) (d0, d1, d2, d3, d4, d5, d6, d7, s, y); input WIDTH-1:0 d0, d1, d2, d3; input WIDTH-1:0 d4, d5, d6, d7; input 2

28、:0 s; output WIDTH-1:0 y; reg WIDTH-1:0 y_r; always ( * ) begin case ( s ) 3d0: y_r = d0; 3d1: y_r = d1; 3d2: y_r = d2; 3d3: y_r = d3; 3d4: y_r = d4; 3d5: y_r = d5; 3d6: y_r = d6; 3d7: y_r = d7; default: ; endcase end / end always assign y = y_r; endmodule/ mux16module mux16 #(parameter WIDTH = 8) (

29、d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, s, y); input WIDTH-1:0 d0, d1, d2, d3; input WIDTH-1:0 d4, d5, d6, d7; input WIDTH-1:0 d8, d9, d10, d11; input WIDTH-1:0 d12, d13, d14, d15; input 3:0 s; output WIDTH-1:0 y; reg WIDTH-1:0 y_r; always ( * ) begin case ( s ) 4d0: y_

30、r = d0; 4d1: y_r = d1; 4d2: y_r = d2; 4d3: y_r = d3; 4d4: y_r = d4; 4d5: y_r = d5; 4d6: y_r = d6; 4d7: y_r = d7; 4d8: y_r = d8; 4d9: y_r = d9; 4d10: y_r = d10; 4d11: y_r = d11; 4d12: y_r = d12; 4d13: y_r = d13; 4d14: y_r = d14; 4d15: y_r = d15; default: ; endcase end / end always assign y = y_r; end

31、module 9.flopr模块1)基本描述DR、A、B、ALUOut由flopr模块实例化,主要功能是数据缓冲,由带复位的D触发器构成。2)模块接口信号名方向描述WIDTH-1:0 dI输入数据rstI复位信号clkI时钟信号WIDTH-1:0 qO输出数据3)功能定义序号功能名称功能描述1数据复位if rst=0, qd2数据缓冲if rst=1, q04)模块描述module flopr #(parameter WIDTH = 8) (clk, rst, d, q); input clk; input rst; input WIDTH-1:0 d; output WIDTH-1:0 q;

32、 reg WIDTH-1:0 q_r; always (posedge clk or posedge rst) begin if ( rst ) q_r = 0; else q_r = d; end / end always assign q = q_r; endmodule10.RF模块1)基本描述RF主要功能是保存寄存器文件,并支持对通用寄存器的访问。2)模块接口信号名方向描述A1 4:0I需要读的寄存器1的地址A2 4:0I需要读的寄存器2的地址A3 4:0I需要写的寄存器的地址WD 31:0I需要写的寄存器的数据RFWrI寄存器写使能端0:寄存器不写1:寄存器写clkI时钟信号RD1

33、31:0O需要读的寄存器1的数据RD2 31:0O需要读的寄存器2的数据3)功能定义序号功能名称功能描述1读取通用寄存器根据输入的RS、RT域的值,输出相应通用寄存器所存储的数据。RD1RFA1;RD2RFA22写回通用寄存器当RF写使能有效时,将待写的数据写入给定地址的通用寄存器中。Clk上升沿时if (RFWr) then RFA3WD4)模块描述include global_def.vmodule RF( A1, A2, A3, WD, clk, RFWr, RD1, RD2 ); input 4:0 A1, A2, A3; input 31:0 WD; input clk; input

34、 RFWr; output 31:0 RD1, RD2; reg 31:0 rf31:0; integer i; initial begin for (i=0; i32; i=i+1) rfi = 0; end always (posedge clk) begin if (RFWr) rfA3 = WD; ifdef DEBUG $display(R00-07=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X, 0, rf1, rf2, rf3, rf4, rf5, rf6, rf7); $display(R08-15=%8X, %8X, %8X, %8X, %8X

35、, %8X, %8X, %8X, rf8, rf9, rf10, rf11, rf12, rf13, rf14, rf15); $display(R16-23=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X, rf16, rf17, rf18, rf19, rf20, rf21, rf22, rf23); $display(R24-31=%8X, %8X, %8X, %8X, %8X, %8X, %8X, %8X, rf24, rf25, rf26, rf27, rf28, rf29, rf30, rf31); endif end / end always ass

36、ign RD1 = (A1 = 0) ? 32d0 : rfA1; assign RD2 = (A2 = 0) ? 32d0 : rfA2; endmodule 11.宏定义文件1)global_def.v定义DEBUG宏,控制是否调试。define DEBUG 1 2)instruction_def.v定义7条指令的OPCODE/FUNCT域的。/ OPdefine INSTR_RTYPE_OP 6bdefine INSTR_LW_OP 6bdefine INSTR_SW_OP 6bdefine INSTR_ORI_OP 6b define INSTR_BEQ_OP 6bdefine INS

37、TR_JAL_OP 6b/ Functdefine INSTR_ADDU_FUNCT 6bdefine INSTR_SUBU_FUNCT 6b3)ctrl_encode_def.v相关控制信号的宏。其中使用Verilog描述控制器的控制信号时,需与该宏保持一致。也可根据情况增加控制信号的宏。/ NPC control signaldefine NPC_PLUS4 2b00define NPC_BRANCH 2b01define NPC_JUMP 2b10 / B control signaldefine EXT 1b1define B1b0/ EXT control signaldefine

38、EXT_ZERO 2b00define EXT_SIGNED 2b01define EXT_HIGHPOS 2b10/ ALU control signaldefine ALUOp_ADDU 2b00define ALUOp_SUBU 2b01define ALUOp_OR 2b10/ RF control signaldefine RFSel_RD 2b00define RFSel_RT 2b01define RFSel_31 2b10define WDSel_FromALU 2b00define WDSel_FromMEM 2b01define WDSel_FromPC 2b1012.mi

39、ps模块1)基本描述mips模块是一个CPU,只含有复位信号rst和时钟信号clk,内部由PC、NPC、DM、IM、EXT、ALU、IR、Ctrl等模块以及一些多路选择器和缓冲器组成。2)模块接口信号名方向描述clkI时钟信号rstI复位信号3)功能定义序号功能名称功能描述1构建CPU数据通路连接内部组成模块,构建数据通路。4)数据通路设计(1) addu rd,rs,rta)RTL建模分析周期阶段操作1Fetch(读取指令)Op1:IM中读出的数据(即指令)写入IROp2:计算PC=PC+4(PC指向下条指令)Op2部署在同一个cycle的理由:硬件设计基本原则之一是“尽早执行”即便后续操作

40、需要再次改变PC也无所谓注意1:由于寄存器时序特点,因此Op2不影响Op1注意2:所有指令都必须包括该step2DCD/RF(读取操作数)Op1和Op2分别把RS和RT写入A、B所有指令都必须包括该step该周期隐含包括另一重要步骤:指令译码(控制器内完成)3Exe(执行)Op:ALU完成无符号加法计算并写入ALUOut4ALUWB(结果回写)Op:ALUOut写入RF的RD寄存器b)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch(读取指令)读取指令;计算下条指令地址IRIMPC; PCNPC(PC)IRNPCPCIRWr1; NPCOp+4;PCWr12DCD/R

41、F(读取操作数)2个操作数存入A/BARFrs; BRFrt3Exe(执行)执行加法,结果存入ALUOutALUOutALU(A,B)ALUALUOpALUOp_ADDU4ALUWB(结果回写)计算结果回写至rd寄存器RFrdALUOutRFRFWr1c)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdADDU rd,rs,rt1PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.I

42、RWr2rsrtRF.RD1RF.RD23A.qB.qCtrl.ALUOpALUOut.d4rdALUOut.qCtrl.RFWrPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtrdaLUOut.qctrl.RFWrRF.RD1RF.RD2A.qB.q(2) subu rd,rs,rta)RTL建模分析周期阶段操作1Fetch(读取指令)Op1:IM中读出的数据(即指令)写入IROp2:计算PC=PC+4(PC指向下条指令)Op2部署在同一个cycle的理由:硬件设计基本原则之一是“尽早执行”即便后续操作需要再次改变PC也无所谓注意1:由于寄存器时

43、序特点,因此Op2不影响Op1注意2:所有指令都必须包括该step2DCD/RF(读取操作数)Op1和Op2分别把RS和RT写入A、B所有指令都必须包括该step该周期隐含包括另一重要步骤:指令译码(控制器内完成)3Exe(执行)Op:ALU完成无符号减法计算并写入ALUOut4ALUWB(结果回写)Op:ALUOut写入RF的RD寄存器b)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch(读取指令)读取指令;计算下条指令地址IRIMPC; PCNPC(PC)IRNPCPCIRWr1; NPCOp+4;PCWr12DCD/RF(读取操作数)2个操作数存入A/BARFr

44、s; BRFrt3Exe(执行)执行加法,结果存入ALUOutALUOutALU(A,B)ALUALUOpALUOp_SUBU4ALUWB(结果回写)计算结果回写至rd寄存器RFrdALUOutRFRFWr1c)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdsubu rd,rs,rt1PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr2rsrtRF.RD1RF.RD23A

45、.qB.qCtrl.ALUOpALUOut.d4rdALUOut.qCtrl.RFWrPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtrdaLUOut.qctrl.RFWrRF.RD1RF.RD2A.qB.qCtrl.ALUOpALUOut.d(3) ori rt,rs,imm16a)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch(读取指令)读取指令;计算下条指令地址IRIMPC; PCNPC(PC)IRNPCPCIRWr1; NPCOp+4;PCWr12DCD/RF(读取操作数)操作数存入A无符号扩展ARFrs; EX

46、T(Imm16)EXTEXTOpUE3Exe(执行)执行加法,结果存入ALUOutALUOutALU(A,EXT)ALUALUOp ALUOp_OR4ALUWB(结果回写)计算结果回写至rt寄存器RFrtALUOutRFRFWr1b)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdori rt,rs,imm161PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr2rsRF.

47、RD1Imm16Ctrl.EXTOp3A.qEXT. Imm32Ctrl.ALUOpALUOut.d4rtALUOut.qCtrl.RFWrPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtrdaLUOut.qctrl.RFWrRF.RD1Imm16Ctrl.EXTOpA.qEXT. Imm32Ctrl.ALUOpALUOut.d(4) lw rt, imm16(rs)a)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch取指令读取指令;计算下条指令地址IRIMPC; PCNPC(PC)IRNPCPCIRWr1; NPCOp+

48、4;PCWr12DCD/RF读操作数基地址存入A;偏移符号扩展ARFrs;EXT(Imm16)EXTEXTOpSE3MA计算地址执行加法,结果存入ALUOutALUOutALU(A,EXT)ALUALUOpALUOp_ADD4MR读存储器读取DM,数据存储DRDRDMALUOut5MemWB回写DR写入rt寄存器RFrtDRRFRFWr1b)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdlw rt, imm

49、16(rs)1PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr2rsRF.RD1Imm16Ctrl.EXTOp3A.qEXT. Imm32Ctrl.ALUOpALUOut.d4ALUOut.qDM.dout5rtDR.qCtrl.RFWrPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtDR.qctrl.RFWrRF.RD1Imm16Ctrl.EXTOpA.qEXT. Imm32Ctrl.ALUOpALUOut.dALUOut.qDM.dout(5) sw rt, imm16(rs)a)RTL描述表周期阶段语义R

50、TL需控制的功能部件功能部件控制信号1Fetch取指令读取指令;计算下条指令地址IRIMPC; PCNPC(PC)IRNPCPCIRWr1 NPCOp+4PCWr12DCD/RF读操作数基地址存入A;偏移符号扩展ARFrsEXT(Imm16)EXTEXTOpSE3MA计算地址执行加法,结果存入ALUOutALUOutALU(A,EXT)ALUALUOpALUOp_ADD4MW写存储器rt寄存器写入DMDMALUOutRFrtDMDMWr1b)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrst

51、A1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdsw rt, imm16(rs)1PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr2rsRF.RD1Imm16Ctrl.EXTOp3A.qEXT. Imm32Ctrl.ALUOpALUOut.d4ALUOut.qRF.RD2Ctrl.DMWrPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsRF.RD1Imm16Ctrl.EXTOpA.qEXT. Imm32Ctrl.ALUOpALUOut.dALUOut.qRF.RD2Ctrl.DMW

52、r(6) beq rs,rt, imm16a)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch取指令读取指令;计算下条指令地址IRIMPC; PCNPC(PC)NPCPCIRIRWr1 NPCOp+4PCWr12DCD/RF读操作数RS操作数存入A;RS操作数存入BARFrs; BRFrt;3Br执行执行减法,判断ZeroALUOutALU(A,B)PCNPC(PC,imm16)ALUNPCPCALUOpALUOp_SUBNPCBNPCPCWrZerob)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrr

53、staddrim_doutIRWrrstA1A2A3WDRFWrImm16EXTOpABALUOpaddrdinDMWrdbeq rs,rt, imm161PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr2rsrtRF.RD1RF.RD2Imm16Ctrl.EXTOp3Imm16Ctrl.NPCOpCtrl.PCWrA.qB.qCtrl.ALUOpALUOut.dPC.PCImm16Ctrl.NPCOpNPC.NPCCtrl.PCWrPC.PCIM.doutCtrl.IRWrrsrtRF.RD1RF.RD2Imm16Ctrl.EXTOpA.qB.qCtrl

54、.ALUOpALUOut.d(7) jal imm26a)RTL描述表周期阶段语义RTL需控制的功能部件功能部件控制信号1Fetch取指令读取指令;计算下条指令地址IRIMPC; PCNPC(PC)NPCPCIRIRWr1 NPCOp+4PCWr12DCD/RF读操作数3JMP执行计算并保存转移PC;保存PCRF31PCPCNPC(PC,imm26)RFNPCPCRFWr1NPCOpJNPCPCWr1b)数据通路目标模块周期NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDRFWrImm16EX

55、TOpABALUOpaddrdinDMWrdjal addr261PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWr23PC.PCImm26Ctrl.NPCOpCtrl.PCWrd31PC.PCCtrl.RFWrPC.PCImm26Ctrl.NPCOpNPC.NPCCtrl.PCWrPC.PCIM.doutCtrl.IRWrd31PC.PCCtrl.RFWr5)数据通路合成综合各指令的数据通路,得表:目标模块NPCPCIMIRRFABEXTALUALUOutDMDRPCIMMNPCOpNPCPCWrrstaddrim_doutIRWrrstA1A2A3WDR

56、FWrImm16EXTOpABALUOpaddrdinDMWrdaddu rd,rs,rtPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtrdaLUOut.qctrl.RFWrRF.RD1RF.RD2A.qB.qsubu rd,rs,rtPC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtrdaLUOut.qctrl.RFWrRF.RD1RF.RD2A.qB.qCtrl.ALUOpALUOut.dori rt,rs,imm16PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IR

57、WrrsrtrdaLUOut.qctrl.RFWrRF.RD1Imm16Ctrl.EXTOpA.qEXT. Imm32Ctrl.ALUOpALUOut.dlw rt, imm16(rs)PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsrtDR.qctrl.RFWrRF.RD1Imm16Ctrl.EXTOpA.qEXT. Imm32Ctrl.ALUOpALUOut.dALUOut.qDM.doutsw rt, imm16(rs)PC.PCCtrl.NPCOpNPC.NPCPC.PCIM.doutCtrl.IRWrrsRF.RD1Imm16Ctrl.EXT

58、OpA.qEXT. Imm32Ctrl.ALUOpALUOut.dALUOut.qRF.RD2Ctrl.DMWrbeq rs,rt, imm16PC.PCImm16Ctrl.NPCOpNPC.NPCCtrl.PCWrPC.PCIM.doutCtrl.IRWrrsrtRF.RD1RF.RD2Imm16Ctrl.EXTOpA.qB.qCtrl.ALUOpALUOut.djal addr26PC.PCImm26Ctrl.NPCOpNPC.NPCCtrl.PCWrPC.PCIM.doutCtrl.IRWrd31PC.PCCtrl.RFWr合成PC.PCImm26Ctrl.NPCOpNPC.NPCCtr

59、l.PCWrPC.PCIM.doutCtrl.IRWrrsrtrdDR.qCtrl.RFWrRF.RD1RF.RD2Imm16Ctrl.EXTOpA.qB.qCtrl.ALUOpALUOut.dALUOut.qRF.RD2Ctrl.DMWrDM.doutrt aLUOut.qEXT. Imm32d31PC.PC多路选择器MUX4_RF_A3MUX4_RF_WDMUX2_ALU_B6)模块描述module mips( clk, rst ); inputclk; inputrst; wireRFWr; wire DMWr; wirePCWr; wireIRWr; wire 1:0 EXTOp; w

60、ire 1:0 ALUOp; wire 1:0 NPCOp; wire 1:0 RF_A3_sel; wire 1:0 RF_WD_sel; wire B_sel; wire Zero; wire 29:0 PC, NPC; wire 31:0 im_dout, dm_dout; wire 31:0 DR_dout; wire 31:0 instr; wire 4:0 rs; wire 4:0 rt; wire 4:0 rd; wire 5:0 Op; wire 5:0 Funct; wire 15:0 Imm16; wire 31:0 Imm32; wire 25:0 Imm26; wire

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论