类MIPS单周期处理器.doc
一、实验目的1.了解微处理器的基本结构。
2.掌握哈佛结构的计算机工作原理。
3.学会设计简单的微处理器。
4.了解软件控制硬件工作的基本原理。
二、实验任务利用 HDL 语言,基于 Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS 指令集的单周期类MIPS 处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII 码存入 RAM 的连续内存区域。
(1)支持基本的算术逻辑运算如 add,sub,and ,or,slt ,andi 指令(2)支持基本的内存操作如 lw, sw 指令(3)支持基本的程序控制如 beq,j 指令三、实验过程1、建立工程在ISE 14.7软件中建立名为 Lab1 的工程文件。
芯片系列选择 Artix7, 具体芯片型号选择 XC7A100T,封装类型选择 CSG324,速度信息选择 -1 。
2、分模块设计1)指令存储器 ROM 设计新建 IP core Generator,命名为 irom 。
设定的指令存储器大小为128 字,指令存储器模块在顶层模块中被调用。
输入为指令指针(PC)与时钟信号(clkin),输出为 32 位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立即数符号扩展模块进行相应的处理。
然后制作 COE 文件。
先使用 UltraEdit 编辑代码,代码如下main:addi $2,$0,85sw $2,0($3)addi $2,$0,50sw $2,4($3)addi $2,$0,48sw $2,8($3)addi $2,$0,49sw $2,12($3)addi $2,$0,53#sw $2,16($3)addi $2,$0,49#sw $2,20($3)addi $2,$0,51#sw $2,24($3)addi $2,$0,52#sw $2,28($3)addi $2,$0,54#sw $2,32($3)addi $2,$0,52#sw $2,36($3)j main将其导入 QtSpim 中,选中机器码,加上前缀并将最后一行0x08100009 修改为 0x08000000,代码如下MEMORY_INITIALIZATION_RADIX=16;MEMORY_INITIALIZATION_VECTOR=20020055,ac620000,20020032,ac620004,20020030,ac620008,20020031,ac62000c,20020035,ac620010,20020031,ac620014,20020033,ac620018,20020034,ac62001c,20020036,ac620020,20020034,ac620024,08000000,保存为 .coe 文件,在 ROM 模块里调用。
2)数据存储器 RAM 设计新建 IP core Generator ,命名为 dram 。
数据存储器为RAM 类型的存储器,并且需要独立的读写信号控制。
因此其对外的接口为clk、we、datain 、addr ;输出信号为 dataout 。
当时钟上升沿到来时,如果写信号(we)为真,根据 addr 所表示的地址找到对应的存储单元,并将输入的数据(datain )写到对应的存储单元中;如果写信号为假,则根据addr 所表示的地址,将对应存储单元的数据送到输出端( dataout )。
在本实验中调用 ISE提供的 IP 核进行设计,设定的数据存储器大小为 64 字。
数据存储器模块在顶层模块中被调用。
输入的时钟信号来自于顶层模块的clkin,addr 信号来自于ALU 单元的输出端(对基地址与偏移量执行加操作),datain 来自于寄存器组的第二个数据输出端(Rtdata),而控制信号we则来自于控制器对指令的译码。
输出数据dataout 通过一个选择器( MUX3 )决定是否写入到相应的寄存器。
初始化 dram 值: 0x55555555,在以后的仿真过程中可以用于验证是否正确调用3)立即数符号扩展模块设计对于 I 型指令,将指令的低十六位作为立即数符号扩展模块的输入inst[15:0], 如果十六位立即数的最高位(即符号位)为1,则在 inst[15:15]前面补 16 个 1,如果为 0,则在前面补 16 个 0。
然后将符号扩展之后的data[31:0] 通过一个选择器(即 MUX2)输送到 ALU 单元的第二个源操作数输入端(即input2 )。
代码如下:module signext(input [15:0] inst,output [31:0] data);assign data=inst[15:15]?{16'hffff,inst}:{16'h0000,inst};endmodule4)寄存器组模块该模块的输入为 clk、RegWriteData 、RegWriteAddr 、RegWriteEn、RsAddr、RtAddr 和 reset,输出信号为RsData 和 RtData。
由于 $0 一直输出0,因此当RsAddr、RtAddr 为 0 时,RsData 以及 RtData 必须输出 0,否则输出相应地址寄存器数据。
另外,当 RegWriteEn 信号有效时,数据应该写入 RegWriteAddr 寄存器,并且每次复位时所有寄存器都清零。
寄存器组模块在顶层模块中被调用。
clk 信号来自于顶层模块的clkin,reset 信号来自于顶层模块的reset,RegWriteData 来自于 ALU 单元的运算结果输出端或者是数据存储器的输出端(通过一个选择器MUX3 进行选择),RegWriteAddr 、RsAddr、RtAddr 来自于指令的对应位, RegWriteEn 来自于控制器对指令的译码。
输出信号 Rsdata 与 Rtdata 则分别来自于 Rsaddr 与 Rtaddr 对应的寄存器。
代码如下:module regFile(input clk,input reset,input [31:0] regWriteData,input [4:0] regWriteAddr,input regWriteEn,output [31:0] RsData,output [31:0] RtData,input [4:0] RsAddr,input [4:0] RtAddr);reg[31:0] regs[0:31];assign RsData = (RsAddr == 5'b0)?32'b0:regs[RsAddr];assign RtData = (RtAddr == 5'b0)?32'b0:regs[RtAddr];integer i;always @(posedge clk)beginif(!reset)beginif(regWriteEn==1)beginregs[regWriteAddr]=regWriteData;endendelsebeginfor(i=0;i<31;i=i+1)regs[i]=0;regs[31]=32'hffffffff;endendendmodule5)控制器模块控制器输入为指令的opCode 字段,即操作码。
操作码经过主控制单元的译码,给 ALUCtrl、Data Memory 、Registers、Muxs 等部件输出正确的控制信号。
该模块在顶层模块中被调用,输入的opcode 来自于指令的前 6 位,而输出信号 aluSrc、MemToReg 、RegWrite 、MemRead 、MemWrite 、branch 、aluop 和jmp 则是对 6 位 opcode 的译码。
代码如下:module ctr(input [5:0] opCode,output regDst,output aluSrc,output memToReg,output regWrite,output memRead,output memWrite,output branch,output [1:0] aluop,output jmp);reg regDst;reg aluSrc;reg memToReg;reg regWrite;reg memRead;reg memWrite;reg branch;reg[1:0] aluop;reg jmp;always @(opCode) begincase(opCode)6'b000010://jmpbeginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=0;aluop=2'b00;jmp=1;end6'b000000://R beginregDst=1; aluSrc=0; memToReg=0; regWrite=1; memRead=0; memWrite=0; branch=0; aluop=2'b10; jmp=0;end6'b100011://lw beginregDst=0; aluSrc=1; memToReg=1; regWrite=1; memRead=1; memWrite=0; branch=0; aluop=2'b00; jmp=0;end6'b101011://sw beginregDst=0; aluSrc=1; memToReg=0; regWrite=0; memRead=0; memWrite=1;branch=0;aluop=2'b00;jmp=0;end6'b000100://beq beginregDst=0;aluSrc=0; memToReg=0; regWrite=0; memRead=0; memWrite=0; branch=1;aluop=2'b01;jmp=0;end//6'b001100://andi 6'b001000://andi beginregDst=0;aluSrc=1; memToReg=0; regWrite=1; memRead=0; memWrite=0; branch=0;//aluop=2'b11; aluop=2'b00;jmp=0;enddefault:beginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=0;aluop=2'b00;jmp=0;endendcaseendendmodule6)运算器 (ALU)模块微处理器支持的 add 、sub、and 、or 和 slt 运算指令,需要利用ALU 单元实现运算,同时数据存储指令sw 和 lw 也需要通过 ALU 单元计算存储器地址,条件跳转指令 beq 需要 ALU 来比较两个寄存器是否相等。
MIPS单周期CPU实验报告材料
《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩 :实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令说明:以助记符表示,是汇编指令;以代码表示,是机器指令功能:rd←rs + rt。
reserved为预留部分,即未用,一般填“0”。
符号扩展再参加“加”运算。
(3)sub rd , rs , rt功能:rd←rs - rt==> 逻辑运算指令(4)ori rt , rs ,immediate功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
(5)and rd , rs , rt功能:rd←rs & rt;逻辑与运算。
功能:rd←rs | rt;逻辑或运算。
==>移位指令==>比较指令功能:if (rs<rt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,带符号==> 存储器读/写指令(9)sw rt ,immediate(rs) 写存储器功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。
即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
(10) lw rt , immediate(rs) 读存储器功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。
微机原理实验类MIPS单周期微处理器设计
微机原理实验类MIPS单周期微处理器设计MIPS单周期微处理器设计是一种常见的计算机体系结构,采用简化指令集和单个时钟周期执行指令的方式。
下面将详细介绍MIPS单周期微处理器的设计。
1.指令集架构MIPS单周期微处理器采用五个基本的指令类型,包括加载/存储指令、算术逻辑指令、跳转指令、分支指令和数据传输指令。
这些指令类型可以通过相应的操作码和寄存器编号来确定具体的指令操作。
2.寄存器文件MIPS单周期微处理器使用了32个通用寄存器,每个寄存器的位宽为32位。
其中,除了$0寄存器始终为零,其他的寄存器可用于存储数据和进行运算。
3.控制单元控制单元是MIPS单周期微处理器的核心部分,负责解码指令,生成相应的控制信号,控制数据通路的各个部件以正确执行指令。
控制单元包括指令寄存器、程序计数器、指令解码器等。
4.数据通路MIPS单周期微处理器的数据通路由多个组成部分组成,包括寄存器文件、算术逻辑单元(ALU)、数据存储器(DM)等。
数据通路用于执行指令的各个操作步骤,如指令的读取、寄存器操作、运算和数据存储。
5.指令执行过程MIPS单周期微处理器的指令执行过程包括指令的取指、指令解码、操作数的读取、指令执行和结果的写回等步骤。
在每个时钟周期中,通过控制信号控制数据通路的各个部件,按照指令的操作要求完成相应的操作。
总体而言,MIPS单周期微处理器设计简洁高效,适用于大多数应用场景。
然而,由于单周期处理器的指令执行时间较长,且不支持流水线技术,所以在一些对性能要求较高的应用中可能会受到限制。
综上所述,MIPS单周期微处理器设计是一种常用的计算机体系结构,通过合理的指令集架构、寄存器文件、控制单元和数据通路的设计,实现了对指令的有效执行和数据操作。
该设计具有一定的优势和限制,需要根据实际需求进行选用和改进。
MIPS指令单周期CPU设计
Data memory
rd rs rt
Register File
PC
执行步骤(3/5)
instruction memory
ALU
MUX
+4
imm 2. Decode/ Register Read
1. Instruction Fetch
3. Execute 4. Memory 5. Register Write
– 将结果写入目的寄存器
需要保存的值
– PC、寄存器组、存储器
二、典型指令的数据通路
ADDU and SUBU – addu rd,rs,rt
31 op 6 bits 31 op 6 bits 26 rs 5 bits 26 rs 5 bits 21 rt 5 bits 21 rt 5 bits 16 immediate 16 bits 16 rd 5 bits 11 6 shamt 5 bits funct 6 bits 0 0
ALU
MUX
+4
imm 2. Decode/ Register Read
1. Instruction Fetch
3. Execute 4. Memory5. Register Write
Phase 1: Instruction Fetch (IF)
– Fetch 32-bit instruction from memory – Increment PC (PC = PC + 4)
Data memory
rd rs rt
Register File
PC
执行步骤(2/5)
instruction memory
ALU
MUX
MIPS单周期CPU实验报告
MIPS单周期CPU实验报告一、实验目的本实验旨在设计一个基于MIPS指令集架构的单周期CPU,具体包括CPU的指令集设计、流水线的划分与控制信号设计等。
通过本实验,可以深入理解计算机组成原理中的CPU设计原理,加深对计算机体系结构的理解。
二、实验原理MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的处理器设计,大大简化了指令系统的复杂性,有利于提高执行效率。
MIPS指令集由R、I、J三种格式的指令组成,主要包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。
在单周期CPU设计中,每个指令的执行时间相同,每个时钟周期只执行一个指令。
单周期CPU的主要部件包括指令内存(IM)、数据存储器(DM)、寄存器文件(RF)、运算单元(ALU)、控制器等。
指令执行过程主要分为取指、译码、执行、访存、写回等阶段。
三、实验步骤1.设计CPU指令集:根据MIPS指令集的格式和功能,设计符合需求的指令集,包括算术逻辑运算指令、存储器访问指令、分支跳转指令等。
2.划分CPU流水线:将CPU的执行过程划分为取指、译码、执行、访存、写回等阶段,确定每个阶段的功能和控制信号。
3.设计控制器:根据CPU的流水线划分和指令集设计,设计控制器实现各个阶段的控制信号生成和时序控制。
4.集成测试:进行集成测试,验证CPU的指令执行功能和正确性,调试并优化设计。
5.性能评估:通过性能评估指标,如CPI(平均时钟周期数)、吞吐量等,评估CPU的性能优劣,进一步优化设计。
四、实验结果在实验中,成功设计了一个基于MIPS指令集架构的单周期CPU。
通过集成测试,验证了CPU的指令执行功能和正确性,实现了取指、译码、执行、访存、写回等阶段的正常工作。
同时,通过性能评估指标的测量,得到了CPU的性能参数,如CPI、吞吐量等。
通过性能评估,发现了CPU的性能瓶颈,并进行了相应的优化,提高了CPU的性能表现。
Logisim完成MIPS单周期处理器开发实验报告
Logisim完成MIPS单周期处理器开发实验报告Project3Logisim完成单周期处理器开发实验报告⼀.总体设计⼆.模块定义(1)IFU(2)GPR(3)ALU(4)EXT(5)DM(6)Controller四.控制器设计单周期真值表Func100000100010N/AOp000000000000001101100011000100001111add sub ori lw sw beq lui RegDst1100X X0 ALUSrc0011101 MemtoReg0001X X X RegWrite1111002 MemWrite0000100 nPC_sel0000010 ExtOp X X000X1ALUctr Add Subtract Or Add Add Subtract X五.测试要求16.测试程序lui$t0,0x0004#lui测试程序要实现:⽴即数0x0004加载⾄t0寄存器的⾼位lui$t1,0x0008#lui测试程序要实现:⽴即数0x0008加载⾄t1寄存器的⾼位ori$t3,$zero,0x00002000#ori测试程序要实现:zero寄存器中的内容与⽴即数0x00002000进⾏或运算,储存在t3寄存器中sw$t0,4($t3)#sw测试程序要实现:把t0寄存器中值(1Word),存储到t3的值再加上偏移量4,所指向的RAM中sw$t0,8($t3)#sw测试程序要实现:把t0寄存器中值(1Word),存储到t3的值再加上偏移量8,所指向的RAM中loop:add$t2,$t2,$t1#add测试程序要实现:t1寄存器中的值加上t2寄存器中的值后存到t2寄存器中lw$t4,4($t3)#lw测试程序要实现:把t3寄存器的值+4当作地址读取存储器中的值存⼊t4 lui$t5,0x0004#lui测试程序要实现:⽴即数0x0004加载⾄t5寄存器的⾼位sub$t7,$t6,$t5#sub测试程序要实现:t6寄存器中的值减去t5寄存器中的值后存到t7寄存器中add$t0,$t0,$t5#sub测试程序要实现:t0寄存器中的值减去t5寄存器中的值后存到t0寄存器中add$t6,$t6,$t0#add 测试程序要实现:t6寄存器中的值加上t0后存到t6寄存器中beq$t0,$t1,loop#beq测试程序要实现:判断t0的值和t1的值是否相等,相等转loopadd$t0,$t0,$t5#add测试程序要实现:t0寄存器中的值加上t5后存到t0寄存器中lui$v0,0x0001#lui测试程序要实现:⽴即数0x0001加载⾄v0寄存器的⾼位lui$v1,0x0002#lui测试程序要实现:⽴即数0x0002加载⾄v1寄存器的⾼位add$v0,$v0,$v1#add测试程序要实现:v0寄存器中的值加上v1后存到v0寄存器中add$v1,$v0,$v1#add测试程序要实现:v0寄存器中的值加上v1后存到v1寄存器中ori$a0,$v0,0xffff#ori测试程序要实现:v0寄存器中的内容与⽴即数0xffff进⾏或运算,储存在a0寄存器中sub$a1,$a0,0x0000ffff#sub测试程序要实现:a0寄存器中的值减去⽴即数0x0000ffff后存到a1寄存器中loop2:sub$a2,$v1,$v0#sub测试程序要实现:v1寄存器中的值减去v0中的值后存到a2寄存器中add$a1,$a2,$a1#add测试程序要实现:a2寄存器中的值加上a1后存到a1寄存器中beq$a1,$v1,loop2#beq测试程序要实现:判断a1的值和v1的值是否相等,相等转loop2机器码:3c0800043c090008340b2000ad680004014950208d6c00043c0d000401cd7822010d402001c870201109fff9010d40203c0200013c03000200431020004318203444ffff3c010*******ffff008128220062302200c52820 10a3fffdMARS模拟结果:Logism:GPR:DM:六、问答18.对于Figure5、Figure6中的与或阵列来说,1个3输⼊与门最终转化为2个2输⼊与门,1个4输⼊与门最终转化为3个2输⼊与门,依次类推。
MIPS单周期CPU实验报告材料
《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩:实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。
二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令(1)add rd , rs, rt(说明:以助记符表示,是汇编指令;以代码表示,是机器指令)功能:rd←rs + rt。
reserved为预留部分,即未用,一般填“0”。
(2)addi rt , rs ,immediate功能:rt←rs + (sign-extend)immediate;immediate符号扩展再参加“加”运算。
(3)sub rd , rs , rt功能:rd←rs - rt==> 逻辑运算指令(4)ori rt , rs ,immediate功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
(5)and rd , rs , rt功能:rd←rs & rt;逻辑与运算。
(6)or rd , rs , rt功能:rd←rs | rt;逻辑或运算。
==>移位指令(7)sll rd, rt,sa功能:rd<-rt<<(zero-extend)sa,左移sa位,(zero-extend)sa==>比较指令(8)slt rd, rs, rt 带符号数功能:if (rs<rt) rd =1 else rd=0, 具体请看表2 ALU运算功能表,带符号==> 存储器读/写指令(9)sw rt ,immediate(rs) 写存储器功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。
类MIPS单周期微处理器设计实验报告
课程名称:微机原理与接口技术实验类MIPS单周期微处理器设计1.实验任务、目标利用Verilog HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。
▪支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令▪支持基本的内存操作如lw,sw指令▪支持基本的程序控制如beq,j指令(由于特殊情况,此次实验仅完成Reg、ALU、ALUCtr三个模块并分别加以仿真和验算)2.微处理器各个模块硬件设计原理、verilog代码(1)Reg设计Reg是指令操作地主要对象,MIPS微处理器中一共32个32位寄存器。
该模块输入为 RsAddr,RtAddr,WriteAddr,RegWr,WriteData,clk,reset有两项输出 RsData,RtData。
其中当复位信号reset为1时所有寄存器清零,当复位信号为0且写信号有效时数据才写入writedata寄存器。
(其中0号寄存器永远为0)具体代码如下:module RegFile(input [4:0] RsAddr,input [4:0] RtAddr,input [4:0] WriteAddr,input RegWr,input [31:0] WriteData,input clk,input reset,output [31:0] RsData,output [31:0] RtData);reg [31:0] regs[0:31];assign RsData =(RsAddr==5'b0) ? 32'b0:regs[RsAddr];assign RtData =(RtAddr==5'b0) ? 32'b0:regs[RtAddr];integer i;always @(negedge clk) //下降沿回写到寄存器if(!reset&RegWr)regs[WriteAddr]=WriteData;else if(reset)for(i=0;i<32;i=i+1)regs[i]=4*i; //寄存器的值初始化为编号乘以4Endmodule(2)ALU设计微处理器支持add,sub,and,or,slt运算指令,需要用ALU单元实现运算,同时sw,lw,beq等指令也要用到ALU单元计算地址,比较数据,因此我们设计此模块输入为in1,in2,(此处要设置为signed类型,不然无法执行slt指令),ALUctr两个输出Res,zero。
MIPS单周期CPU实验报告
MIPS单周期CPU实验报告一、实验目标本次实验的主要目标是设计并实现一个基于MIPS单周期CPU的计算机系统。
具体要求如下:1.能够识别并执行MIPS指令集中的常见指令,包括算术逻辑运算、分支跳转和存取指令等。
2.实现基本的流水线结构,包括指令译码阶段、执行阶段、访存阶段和写回阶段。
3.能够在基本结构的基础上添加异常处理和浮点数运算支持。
二、实验环境三、实验过程1.确定CPU的基本组成部分,包括指令存储器、数据存储器、寄存器、ALU和控制单元等,并进行电路设计。
2.编写MIPS汇编程序,并使用MARS进行仿真调试,验证指令的正确性和计算结果的准确性。
3.将MIPS汇编程序烧录到指令存储器中,并将数据存储器中的初始数据加载进去。
4.运行程序,观察CPU的工作状态,并进行时序仿真,验证CPU设计的正确性。
5.对CPU进行性能测试,包括执行时间、指令吞吐量和时钟周期等指标的测量。
四、实验结果经过实验和测试,我们成功地设计并实现了一个基于MIPS单周期CPU的计算机系统。
该系统能够正确执行MIPS指令集中的常见指令,并支持流水线结构、异常处理和浮点数运算。
1.指令执行的正确性:通过在MARS中进行调试和仿真,我们发现CPU能够正确地执行各种指令,包括算术逻辑运算、分支跳转和存取指令等。
并且,在时序仿真中,CPU的各个组件的信号波形也符合预期。
2.流水线结构的实现:我们根据MIPS指令的特点和处理流程,设计了基本的流水线结构,并在MARS中进行了时序仿真。
仿真结果表明,各个流水线级的操作都能够正确无误地进行,并且能够顺利地在一个时钟周期内完成。
3.异常处理和浮点数运算的支持:通过在MIPS汇编程序中加入异常处理和浮点数运算的指令,我们验证了CPU对这些功能的支持。
在异常处理时,CPU能够正确地转入异常处理程序,并根据异常类型进行相应的处理。
在浮点数运算时,CPU能够正确地进行浮点数的加减乘除等运算,并将结果正确地写回寄存器。
02-6.13 单周期MIPS CPU(1)
第六章 6.13 单周期MIPS CPU(1)
3 R型指令格式
R 型指令
6bits OP
5bits Rs
5bits Rt
5bits Rd
add $s1,$s2,$s3
5bits shamt
6bits funct
0
18
19
17
0
32
sub $s0,$s1,$s2
0
17
18
16
0
34
sll $s0,$s1,2
0
0
17
16
2
0
第六章 6.13 单周期MIPS CPU(1)
4 I型指令格式
I 型指令
6bits OP
5bits RS
5bits Rd
16bits 立即数
addi $s1,$s2,200
8
lw
18
17
200
$s1,300($s2)
35
18
17
300
beq $s1,$s2,400
4
18
17
400
第六章 6.13 单周期MIPS CPU(1)
6 R型指令数据通路
PC CLK
A
RD
指令字 25:21 20:16
Rs Rt
指令 存储器
15:11 Rd
IM
RegWrite
AluOP
WE
R1#
R1
RR22##
WW##
R2
寄存器组
WD
CLK
(Rs) (Rs)+(Rt)
(Rt)
(Rs)+(Rt) Rd
ALU
add $s0,$s1,$s2
3(5)-CPU子系统-MIPS-3-单周期-3-控制系统(上传)
(控制单元设计)
Байду номын сангаас1/28
※CPU设计的主要任务
※拟定指令集√ ※数据通路设计√ ※控制器设计
2/28
单周期微架构
ADD
MUX
+4
PC
rst Addr Data
指令存储器
clock
R、I、J型指令
未包括R型移位 未包括控制信号通路
Instruction
55
16
5
MUX
仿真、硬件实现
9/28
单周期微架构 01
10 PCSrc 00
+4
U
4
28
ADD ADD
Instruction
26 <<2
PC
rst addr
55
16
5
10
<<2
Regdst operation
Data 指令存储器
Ra Rb Rw aluSrc
Regwrite A
zero
clock
分析控制信号
WD
Ra Rb Rw
Wn
A
WD
B
clock
E
ADD
U
4
28
26 <<2
<<2
alu_op FR
ALU
We Re addr RD
WD
MUX
MUX
clock
3/28
控制信号(微命令)产生部件
指令:
OP(6) … func(6) [31:26] [5:0] 时钟信号
控制单元CU
… RegWrite
