收藏 分享(赏)

MIPS流水线CPU.doc

上传人:精品资料 文档编号:10144484 上传时间:2019-10-14 格式:DOC 页数:25 大小:1.08MB
下载 相关 举报
MIPS流水线CPU.doc_第1页
第1页 / 共25页
MIPS流水线CPU.doc_第2页
第2页 / 共25页
MIPS流水线CPU.doc_第3页
第3页 / 共25页
MIPS流水线CPU.doc_第4页
第4页 / 共25页
MIPS流水线CPU.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、1本科实验报告课程名称: 计算机组成与设计实验姓 名:学 院: 信息与电子工程学院专 业: 电子科学与技术学 号: 314010指导教师: 屈民军、唐奕2016 年 1 月 7 日2一、 实验目的1. 了解提高 CPU 性能的方法。2. 掌握流水线 MIPS 微处理器的工作原理。3. 理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。4. 掌握流水线 MIPS 微处理器的测试方法。二、 实验任务设计一个 32 位流水线 MIPS 微处理器,具体要求如下:1. 至少运行下列 MIPS32 指令。(1) 算术运算指令:ADD、ADDU、SUB 、SUBU、ADDI、ADDIU。(2) 逻辑运算

2、指令:AND、OR、NOR、XOR、ANDI 、ORI、XORI、SLT、SLTU、SLTI、SLTIU。(3) 移位指令:SLL、SLLV 、SRL 、SRLV 、SRA。(4) 条件分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ。(5) 无条件跳转指令:J、JR。(6) 数据传送指令:LW、SW。(7) 空指令:NOP。2. 采用 5 级流水线技术,对数据冒险实现转发或阻塞功能。3. 在 XUP Virtex- Pro 开发系统中实现 MIPS 微处理器,要求 CPU 的运行速度大于25MHz。三、 实验原理1. 总体设计流水线是数字系统中一种提高系统稳定性和工作速度的方

3、法,广泛应用于高档 CPU 的架构中。根据 MIPS 处理器的特点,将整体的处理过程分为取指令(IF) 、指令译码(ID) 、执行(EX ) 、存储器访问(MEM )和寄存器会写(WB)五级,对应多周期的五个处理阶段。一个指令的执行需要 5 个时钟周期,每个时钟周期的上升沿来临时,此指令所代表的一系列数据和控制信息将转移到下一级处理。由于在流水线中,数据和控制信息将在时钟周期的上升沿转移到下一级,所以规定流水线转移变量命名遵守如下格式:名称_流水线级名称例如:在 ID 级指令译码电路(Decode )产生的寄存器写允许信号 RegWrite 在 ID 级、EX 级、 MEM 级和 WB 级上的

4、命名分别为 RegWrite_id、 RegWrite_ex、RegWrite_mem 和RegWrite_wb。在顶层文件中,类似的变量名称有近百个,这样的命名方式起到了很好的识别作用。1) 流水线中的控制信号(1)IF 级:取指令级。从 ROM 中读取指令,并在下一个时钟沿到来时把指令送到ID 级的指令缓冲器中。该级控制信号决定下一个指令指针的 PCSource 信号、阻塞流水线3的 PC_IFwrite 信号、清空流水线的 IF_flush 信号。(2)ID 级:指令译码器。对 IF 级来的指令进行译码,并产生相应的控制信号。整个CPU 的控制信号基本都是在这级上产生。该级自身不需任何控

5、制信号。流水线冒险检测也在该级进行,冒险检测电路需要上一条指令的 MemRead,即在检测到冒险条件成立时,冒险检测电路产生 stall 信号清空 ID/EX 寄存器,插入一个流水线气泡。(3)EX 级:执行级。该级进行算术或逻辑操作。此外 LW、SW 指令所用的 RAM 访问地址也是在本级上实现。控制信号有 ALUCode、ALUSrcA、ALUScrB 和 RegDst,根据这些信号确定 ALU 操作、选择两个 ALU 操作数 A、B,并确定目标寄存器。另外,数据转发也在该级完成。数据转发控制电路产生 ForwardA 和 ForwardB 两组控制信号。(4)MEM 级:存储器访问级。只

6、有在执行 LW、SW 指令时才对存储器进行读写,对其他指令只起到一个周期的作用。该级只需存储器写操作允许信号 MemWrite。(5)WB 级:写回级。该级把指令执行的结果回写到寄存器文件中。该级设置信号MemtoReg 和寄存器写操作允许信号 RegWrite,其中 MemtoReg 决定写入寄存器的数据来自于 MEM 级上的缓冲值或来自于 MEM 级上的存储器。2)数据相关与数据转发如果上一条指令的结果还没有写入到寄存器中,而下一条指令的源操作数又恰恰是此寄存器的数据,那么,它获得的将是原来的数据,而不是更新后的数据。这样的相关问题称数据相关。在设计中,采用数据转发和插入流水线气泡的方法解

7、决此类相关问题。(1)三阶数据相关与转发转发条件为:(操作数 A、B 同时满足)WB 级指令是写操作,即 RegWrite_wb=1;WB 级指令写回的目标寄存器不是$0,即 RegWriteAddr_wb0;WB 级指令写回的目标寄存器与在 ID 级指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_id 或 RegWriteAddr_wb=RtAddr_id。(2)二阶数据相关与转发(MEM 冒险)转发条件:WB 级指令是写操作,即 RegWrite_wb=1;WB 级指令写回的目标寄存器不是$0,即 RegWriteAddr_wb0;WB 级指令写回的目标寄存器与

8、在 EX 级指令的源寄存器是同一寄存器,即RegWriteAddr_wb=RsAddr_ex 或 RegWriteAddr_wb=RtAddr_ex;EX 冒险不成立,即 RegWriteAddr_memRsAddr_ex 或 RegWriteAddr_mem=RtAddr_ex。(3)一阶数据相关与转发(EX 冒险)转发条件 ForwardA、ForwardB 作为数据选择器的地址信号,转发条件不成立时,ALU 操作数从 ID/EX 流水线寄存器中读取;转发条件成立时,ALU 操作数取自数据旁路。转发条件:MEM 级指令是写操作,即 RegWrite_mem=1;MEM 级指令写回的目标寄存

9、器不是$0,即 RegWriteAddr_mem0;4MEM 级指令写回的目标寄存器与在 EX 级指令的源寄存器是同一寄存器,即RegWriteAddr_mem=RsAddr_ex 或 RegWriteAddr_mem=RtAddr_ex。3)数据冒险与数据转发这类冒险不同于数据相关冒险,需要单独一个“冒险检测单元(Hazard Detector) ”,它在 ID 级完成。冒险成立的条件为: 上一条指令是 lw 指令,即 MemRead_ex=1; 在 EX 级的 lw 指令与在 ID 级的指令读写的是同一个寄存器,即RegWriteAddr_ex=RsAddr_id 或 RegWriteAd

10、dr_ex=RtAddr_id。冒险的解决:为解决数据冒险,我们引入流水线阻塞。当 Hazard Detector 检测到冒险条件成立时,在 lw 指令和下一条指令之间插入阻塞,即流水线气泡(bubble) ,使后一条指令延迟一个时钟周期执行,这样就将该冒险转化为二阶数据相关,可用转发解决。如图所示流水线气泡的引入需要注意的是,如果处于 ID 级的指令被阻塞,那么处于 IF 级的指令也必须阻塞,否则,处于 ID 级的指令就会丢失。防止这两条指令继续执行的方法是:保持 PC 寄存器和IF/ID 流水线寄存器不变,同时插入一个流水线气泡。具体实现方法如下:在 ID 级检测到冒险条件时, Hazar

11、dDetector 输出两个信号:Stall 与 PC_IFWrite。Stall 信号将 ID/EX 流水线寄存器中的 EX、MEM 和 WB 级控制信号全部清零。这些信号传递到流水线后面的各级,由于控制信号均为零,所以不会对任何寄存器和存储器进行写操作,高电平有效。PC_IFWrite 信号禁止 PC 寄存器和 IF/ID 流水线寄存器接收新数据,低电平有效。52.3)分支冒险还有一类冒险是包含分支的流水线冒险流水线每个时钟周期都得取指令才能维持运行,但分支指令必须等到 MEM 级才能确定是否执行分支。这种为了确定预取正确的指令而导致的延迟叫做控制冒险或分支冒险。一种比较普遍的提高分支阻塞

12、速度的方法是假设分支不发生,并继续执行顺序的指令流。如果分支发生的话,就丢弃已经预取并译码的指令,指令的执行沿着分支目标继续。由于分支指令直到 MEM 级才能确定下一条指令的 PC,这就意味着为了丢弃指令必须将流水线中的 IF、ID 和 EX 级的指令都清除掉(flush) 。这种优化方法的代价较大,效率较低。如果我们能在流水线中提前分支指令的执行过程,那么就能减少需要清除的指令数。这是一种提高分支效率的方法,降低了执行分支的代价。因此我们采用提前分支指令的方法解决分支冒险。提前分支指令需要提前完成两个操作:计算分支的目的地址:判断分支指令的跳转条件:在提前完成以上两个操作之外,我们还需丢弃

13、IF 级的指令。具体做法是:加入一个控制信号 IF_flush,做为 IF/ID 流水线寄存器的清零信号。当分支冒险成立,即 Z=1,则IF_flush=1,否则 IF_flush=0,故 IF_flush = Z。考虑到本系统还要实现的无条件跳转指令:J 和 JR,在执行这两个指令时也必须要对IF/ID 流水线寄存器进行清空,因此, IF_flush 的表达式应表示为:IF_flush = Z | J | JR。2. MIPS 指令格式1) R 型指令格式本实验要实现的 R 型指令有:算术逻辑运算指令:ADD、ADDU、SUB 、SUBU、AND、OR、NOR、XOR 、SLT、SLTU移位

14、指令:SLLV、SRLV、SRAV、SLL 、SRL 、SRA寄存器跳转指令:JR2) I 型指令格式本实验要实现的 I 型指令有:存储器访问指令:LW、SW立即数算术逻辑运算指令:ADDI、 ADDIU、ANDI、ORI、XORI、SLTI、SLTIU6分支指令:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ3) J 型指令格式本实验要实现的 I 型指令有:无条件跳转指令:J3. ID 的设计指令译码模块的主要作用是从机器码中解析出指令,并根据解析结果输出各种控制信号。ID 模块主要有指令译码(Decode ) 、寄存器堆(Registers) 、冒险监测、分支检测和加法器等组成。I

15、D 模块的接口信息如下表所示:引脚名称 方向 说 明clk 系统时钟Instruction_id31:0 指令机器码NextPC_id31:0 指令指针RegWrite_wb 寄存器写允许信号,高电平有效RegWriteAddr_wb4:0 寄存器的写地址RegWriteData_wb31:0 写入寄存器的数据MemRead_exRegWriteAddr_ex4:0Input冒险检测的输入MemtoReg_id 决定回写的数据来源(0:ALU 1:存储器)RegWrite_id 寄存器写允许信号,高电平有效MemWrite_id 存储器写允许信号,高电平有效MemRead_id 存储器读允许信

16、号,高电平有效ALUCode_id4:0 决定 ALU 采用何种运算ALUSrcA_id 决定 ALU 的 A 操作数的来源(0:rs 1:Sa)ALUSrcB_id 决定 ALU 的 B 操作数的来源(0:rt 1:Imm)RegDst_id 决定 Register 回写是采用的地址(rt/rd)Stall ID/EX 寄存器清空信号,高电平插入一个流水线气泡Z 分支指令的条件判断结果J 跳转指令JR 寄存器跳转指令PC_IFWrite 阻塞流水线的信号,低电平有效BranchAddr31:0 条件分支地址JumpAddr31:0 跳转地址Imm_id31:0 符号扩展成 32 位的立即数S

17、a_id31:0 0 扩展成 32 位的移位立即数RsData_id31:0OutputRs 寄存器数据7RtData_id31:0 Rt 寄存器数据RdAddr_id4:0 Rd 寄存器地址RsAddr_id4:0 Rs 寄存器地址RtAddr_id4:0 Rt 寄存器地址(1) 指令译码(Decode)子模块的设计Decode 控制器的主要作用是根据指令确定各个控制信号的值,是一个组合电路。我们将指令分成八类:R_type1:ADD、ADDU、SUB、SUBU、AND、OR、NOR、XOR 、SLT、SLTU、SLLV、SRLV、SRAV R 型指令R_type2:SLL、SRL 、SRA

18、 JR_type:JRJ_type:J J 型指令I_type: ADDI、ADDIU、ANDI、ORI、XORI、SLTI 、SLTIUBranch:BEQ、BNE、BGEZ、BGTZ、BLEZ、BLTZ I 型指令LW:LWSW:SWDecode 输出的九组控制信号: RegWrite决定是否对寄存器(Registers)进行写操作。当 RegWrite 高电平有效时,将数据写入指定的寄存器中。需要写回寄存器的指令有:LW、R_type1、R_type2 和 I_type,则RegWrite_id= LW | R_type1 | R_type2 | I_type RegDst决定目标寄存器

19、是 rt 还是 rd。当 RegDst=0 时,rt 为目标寄存器;当RegDst=1 时, rd 为目标寄存器。需要写回寄存器的指令类型有:LW、R_type1、R_type2 和 I_type。其中, R_type1 和 R_type2 的目标寄存器是 rd,而 LW 和 I_type 的目标寄存器是 rt。所以:RegDst_id= R_type1 | R_type2 MemWrite决定是否对数据存储器进行写操作。当 MemWrite 有效时,将数据写入数据存储器指定的位置。需要对写存储器的指令只有 SW,所以:MemWrite_id= SW MemRead决定是否对数据存储器进行读操

20、作。当 MemRead 有效时,读取数据存储器指定位置的数据。需要对读存储器的指令只有 LW,所以:8MemRead_id= LW MemtoReg决定写入寄存器(registers) 的数据来自 ALU 还是数据存储器。 当MemtoReg=0 时,数据来自 ALU;当 MemtoReg=1 时,数据来自数据存储器。需要写回寄存器的指令类型有:LW、R_type1、R_type2 和 I_type。其中,只有 LW 写回寄存器的数据取自存储器,所以:MemtoReg_id= LW ALUSrcA决定 ALU 第一操作数来源。当 ALUSrcA=0 时,ALU 第一操作数 A(详见转发电路设计

21、) ;当 ALUSrcA=1 时,ALU 第一操作数来源于 0 扩展的用于移位指令的 5 位 sa。八种指令类型中 J_tpye、JR_tpye 及 Branch 类型指令没有使用 ALU;其他使用 ALU 的指令类型中 LW、SW、R_type1 和 I_type 均采用的 rs 作为 ALU 第一操作数,只有 R_type2 的第一操作数采用的是 0 扩展的 sa,所以:ALUSrcA_id= R_type2 ALUSrcB决定 ALU 第二操作数来源。当 ALUSrcB=0 时,ALU 第二操作数 B。当ALUSrcB=1 时,ALU 第二操作数来源于符号扩展的 16 位 Imm。八种指

22、令类型中 J_tpye、JR_tpye 及 Branch 类型指令没有使用 ALU。其他使用 ALU 的指令类型中 R_type1 和 R_type2 采用 rt 作为 ALU 第二操作数,而LW、SW 、I_type 的第二操作数采用的是符号扩展的立即数 Imm 段,所以:ALUSrcB_id= LW | SW | I_type PCSource决定写入 PC 寄存器的来源。PCSource 由 JR_tpye 、J_tpye 及 Z 决定:即:PCSource=JR, J, ZPCSource=000时, 写入值为下一条指令的地址 PC+4;PCSource=001时, 写入值为 Bran

23、ch 指令的分支地址;PCSource=010时,写入值为 J 指令的跳转地址;PCSource=100时,写入值为 JR 指令的跳转地址。 ALUCode决定 ALU 的功能,由指令中的 op 段、rt 段和 funct 段决定。功能表如下:op funct rt 运算 ALUCodeBEQ_op Z=(A=B) 5d10BNE_op Z=(A=B) 5d11BGEZ_op 5d1 Z=(A0) 5d12BGTZ_op 5d0 Z=(A0) 5d13BLEZ_op 5d0 Z=(A0) 5d14BLTZ_op 5d0 Z=(AA 5d17SRA_funct SRAV_funct BA 5d1

24、8op funct rt 运算 ALUCodeADDI_op ADDIU_op 加 5d0ANDI_op 与 5d6XORI_op 异或 5d7ORI_op 或 5d8SLTI_op AAalu_sra = 5b10010 BA13alu_slt = 5b10011AID Registerwire31:0 NextPC_id;dffre #(.WIDTH(32) IF_ID1(.d(Instruction_if),.en(PC_IFWrite),.r(IF_flush|reset),.clk(clk),.q(Instruction_id);dffre #(.WIDTH(32) IF_ID2(.

25、d(NextPC_if),.en(PC_IFWrite),.r(IF_flush|reset),.clk(clk),.q(NextPC_id);/ ID Module wire4:0 RtAddr_id,RdAddr_id,RsAddr_id;wire RegWrite_wb,MemRead_ex,MemtoReg_id,RegWrite_id,MemWrite_id;wire MemRead_id,ALUSrcA_id,ALUSrcB_id,RegDst_id,Stall;wire4:0 RegWriteAddr_wb,RegWriteAddr_ex,ALUCode_id;wire31:0

26、RegWriteData_wb,Imm_id,Sa_id,RsData_id,RtData_id;ID ID (.clk(clk),.Instruction_id(Instruction_id), .NextPC_id(NextPC_id), .RegWrite_wb(RegWrite_wb), .RegWriteAddr_wb(RegWriteAddr_wb), .RegWriteData_wb(RegWriteData_wb), .MemRead_ex(MemRead_ex), .RegWriteAddr_ex(RegWriteAddr_ex), .MemtoReg_id(MemtoReg

27、_id), .RegWrite_id(RegWrite_id), .MemWrite_id(MemWrite_id), .MemRead_id(MemRead_id), .ALUCode_id(ALUCode_id), .ALUSrcA_id(ALUSrcA_id), .ALUSrcB_id(ALUSrcB_id), .RegDst_id(RegDst_id), .Stall(Stall), .Z(Z), .J(J), .JR(JR), .PC_IFWrite(PC_IFWrite), .BranchAddr(BranchAddr), .JumpAddr(JumpAddr), .JrAddr(

28、JrAddr),.Imm_id(Imm_id), 21.Sa_id(Sa_id), .RsData_id(RsData_id), .RtData_id(RtData_id),.RtAddr_id(RtAddr_id),.RdAddr_id(RdAddr_id),.RsAddr_id(RsAddr_id);/ ID-EX Registerwire MemtoReg_ex,RegWrite_ex,ALUSrcA_ex,ALUSrcB_ex,RegDst_ex;wire 4:0 ALUCode_ex,RdAddr_ex,RsAddr_ex,RtAddr_ex;wire 31:0 Sa_ex,Imm_

29、ex,RsData_ex,RtData_ex;dffr #(.WIDTH(2) MEM_WB3(.d(MemtoReg_id,RegWrite_id),.r(Stall|reset),.clk(clk),.q(MemtoReg_ex,RegWrite_ex);dffr #(.WIDTH(2) MEM_WB4(.d(MemWrite_id,MemRead_id),.r(Stall|reset),.clk(clk),.q(MemWrite_ex,MemRead_ex);dffr #(.WIDTH(8) EX_ALU1(.d(ALUCode_id,ALUSrcA_id,ALUSrcB_id,RegD

30、st_id),.r(Stall|reset),.clk(clk),.q(ALUCode_ex,ALUSrcA_ex,ALUSrcB_ex,RegDst_ex);dffr #(.WIDTH(32) Data_Sa(.d(Sa_id),.r(Stall|reset),.clk(clk),.q(Sa_ex);dffr #(.WIDTH(32) Data_Imm(.d(Imm_id),.r(Stall|reset),.clk(clk),.q(Imm_ex);dffr #(.WIDTH(32) Data_Rs(.d(RsData_id),.r(Stall|reset),.clk(clk),.q(RsDa

31、ta_ex);dffr #(.WIDTH(32) Data_Rt(.d(RtData_id),.r(Stall|reset),.clk(clk),.q(RtData_ex);dffr #(.WIDTH(15) Data_I2( .d(RdAddr_id,RsAddr_id,RtAddr_id),.r(Stall|reset),.clk(clk),.q(RdAddr_ex,RsAddr_ex,RtAddr_ex);/ EX Module wire31:0 ALUResult_mem,ALUResult_ex,MemWriteData_ex;wire4:0 RegWriteAddr_mem;wir

32、e RegWrite_mem;EX EX(.RegDst_ex(RegDst_ex), .ALUCode_ex(ALUCode_ex), .ALUSrcA_ex(ALUSrcA_ex), .ALUSrcB_ex(ALUSrcB_ex), .Imm_ex(Imm_ex), .Sa_ex(Sa_ex), .RsAddr_ex(RsAddr_ex), .RtAddr_ex(RtAddr_ex), .RdAddr_ex(RdAddr_ex),.RsData_ex(RsData_ex), .RtData_ex(RtData_ex), .RegWriteData_wb(RegWriteData_wb),

33、.ALUResult_mem(ALUResult_mem), 22.RegWriteAddr_wb(RegWriteAddr_wb), .RegWriteAddr_mem(RegWriteAddr_mem), .RegWrite_wb(RegWrite_wb), .RegWrite_mem(RegWrite_mem), .RegWriteAddr_ex(RegWriteAddr_ex), .ALUResult_ex(ALUResult_ex), .MemWriteData_ex(MemWriteData_ex), .ALU_A(ALU_A), .ALU_B(ALU_B);assign ALUR

34、esult=ALUResult_ex;/EX-MEMwire MemtoReg_mem,MemWrite_mem;wire 31:0 MemWriteData_mem;dffr #(.WIDTH(2) EX_MEM1(.d(MemtoReg_ex,RegWrite_ex),.r(reset),.clk(clk),.q(MemtoReg_mem,RegWrite_mem);dffr #(.WIDTH(1) EX_MEM2(.d(MemWrite_ex),.r(reset),.clk(clk),.q(MemWrite_mem);dffr #(.WIDTH(32) ALU_Result1(.d(AL

35、UResult_ex),.r(reset),.clk(clk),.q(ALUResult_mem);dffr #(.WIDTH(32) MemWriteData(.d(MemWriteData_ex),.r(reset),.clk(clk),.q(MemWriteData_mem);dffr #(.WIDTH(5) dffr_RegWrite(.d(RegWriteAddr_ex),.r(reset),.clk(clk),.q(RegWriteAddr_mem);/MEM ModuleDataRAM DataRAM(.addr(ALUResult_mem7:2),.clk(clk),.din(

36、MemWriteData_mem),.dout(MemDout_wb),.we(MemWrite_mem);/MEM-WBwire MemtoReg_wb;wire 31:0 ALUResult_wb;dffr #(.WIDTH(2) MEM_WB5(.d(MemtoReg_mem,RegWrite_mem),.r(reset),.clk(clk),.q(MemtoReg_wb,RegWrite_wb);dffr #(.WIDTH(32) ALUResultM_W(.d(ALUResult_mem),.r(reset),.clk(clk),.q(ALUResult_wb);dffr #(.WI

37、DTH(5) dffr_M_W(.d(RegWriteAddr_mem),.r(reset),.clk(clk),.q(RegWriteAddr_wb);23/WBassign RegWriteData_wb=MemtoReg_wb?MemDout_wb:ALUResult_wb;endmoduleALU/*/ MIPS verilog model/ ALU.v/ The ALU performs all the arithmetic/logical integer operations / specified by the ALUsel from the decoder. / / veril

38、og written QMJ/ modified by / modified by /*module ALU (/ OutputsResult,overflow,/ InputsALUCode, A, B);input 4:0 ALUCode; / Operation selectinput 31:0 A, B;output reg31:0 Result;output overflow;/*/ Shift operation: “ will perform an arithmetic shift, but the operand/ must be reg signed/*reg signed

39、31:0 B_reg;always (B) begin24B_reg = B;end/ Decoded ALU operation select (ALUsel) signalsparameter alu_add= 5b00000;parameter alu_and= 5b00001;parameter alu_xor= 5b00010;parameter alu_or= 5b00011;parameter alu_nor= 5b00100;parameter alu_sub= 5b00101;parameter alu_andi= 5b00110;parameter alu_xori= 5b

40、00111;parameter alu_ori= 5b01000;parameter alu_sll= 5b10000;parameter alu_srl= 5b10001;parameter alu_sra= 5b10010; parameter alu_slt= 5b10011;parameter alu_sltu= 5b10100;/*/ ALU Result datapath/*always (*)case(ALUCode)alu_add: Result=A+B;alu_and: Result=Aalu_xor: Result=AB;alu_or: Result=A|B;alu_nor: Result=(A|B);alu_sub: Result=A-B;alu_andi: Result=(Aalu_xori: Result=(A16d0,B15:0);alu_ori: Result=(A|16d0,B15:0);alu_sll: Result=BA; alu_sra: Result=BA;alu_slt: Result=(AB?1:0); alu_sltu: Result=(AB?1:0); endcaseendmodule25

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报