(完整版)类MIPS单周期处理器

合集下载

MIPS单周期CPU实验报告

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的性能表现。

MIPS芯片架构说明

MIPS芯片架构说明

MIPS芯片架构说明MIPS(Microprocessor without Interlocked Pipeline Stages)即无竞争流水线微处理器,是一种精简指令集(RISC)的芯片架构。

MIPS 架构由美国斯坦福大学的约翰·亨尼西等人于1981年提出,并于1984年成立MIPS公司进行商业化开发和推广。

MIPS架构在计算机领域有着广泛的应用,尤其在网络设备、数字视频处理、嵌入式系统等领域具有重要地位。

MIPS架构的设计理念是简化指令集,提高流水线效率,以提供高性能和高效能的微处理器。

MIPS指令集体系结构的特征包括:固定长度的32位指令;寄存器-寻址模式;延迟槽;无跳转偏移;定长延迟分支;乱序执行指令流水线;五级流水线等。

MIPS指令集是一种精简的指令集,通过减少指令种类、规定固定的指令格式和长度,以及简化指令的操作模式,达到提高指令执行效率的目的。

MIPS指令集包括加载存储指令,算术逻辑运算指令,分支和跳转指令,协处理器指令等。

MIPS架构采用寄存器-寻址模式来访问数据。

寄存器-寻址模式是指通过指定寄存器的编号来操作数据,而不是通过指定内存地址。

MIPS架构提供了32个通用寄存器,用于存储数据和中间结果,通过对寄存器的操作来实现数据的传输和计算。

这种设计简化了指令的编码和执行,提高了指令执行的效率。

MIPS架构中的延迟槽是指在条件分支指令后的一条或多条指令,不管条件是否满足都会执行。

延迟槽的设计可以充分利用流水线的性能,但需要程序员进行特殊的处理,以确保延迟槽的指令在分支满足或不满足时都能正确执行。

MIPS架构的指令集中,分支和跳转指令的目标地址是相对于当前指令的偏移地址。

相对地址的设计简化了指令的编码和目标地址的计算,提高了指令的执行效率。

MIPS架构中的乱序执行指令流水线是指将多条指令按照最大并行度进行重排序,在这个过程中可能会引入数据依赖、资源竞争等问题。

为了解决这些问题,MIPS架构采取了一系列的措施,如指令重排序、数据前推、动态分支预测等,以提高指令的并行度和流水线的效率。

mips单周期cpu课程设计

mips单周期cpu课程设计

mips单周期cpu课程设计一、课程目标知识目标:1. 掌握MIPS单周期CPU的基本结构和工作原理;2. 了解指令集、指令执行过程和指令周期;3. 学会分析并设计简单的MIPS指令;4. 理解CPU性能指标,如时钟频率、吞吐率等。

技能目标:1. 能够运用硬件描述语言(如Verilog)进行单周期CPU的设计与仿真;2. 能够独立编写简单的MIPS汇编程序,并在单周期CPU上运行;3. 能够分析单周期CPU的性能,并进行优化;4. 培养学生的团队合作能力和问题解决能力。

情感态度价值观目标:1. 培养学生对计算机组成原理和硬件设计的兴趣,激发学生的创新意识;2. 增强学生的工程素养,使其认识到工程实践在计算机科学领域的重要性;3. 培养学生严谨、细致、负责任的科学态度,提高学生的自主学习能力。

本课程针对高中年级学生,课程性质为实践性较强的硬件课程。

结合学生特点,课程目标注重理论与实践相结合,通过设计单周期CPU,使学生深入理解计算机硬件原理,提高实践能力。

在教学要求上,注重培养学生的团队合作精神,提高学生分析和解决问题的能力,为后续计算机组成原理及相关课程打下坚实基础。

通过本课程的学习,学生将能够独立完成单周期CPU的设计与仿真,具备一定的硬件编程能力。

二、教学内容1. 引言:介绍CPU在计算机系统中的作用,引出MIPS单周期CPU的概念及其重要性。

相关教材章节:第一章 计算机系统概述2. MIPS单周期CPU基本结构:讲解CPU的基本组成部分,包括寄存器组、控制单元、算术逻辑单元(ALU)、数据通路等。

相关教材章节:第二章 计算机组成原理3. 指令集与指令执行:分析MIPS指令集特点,讲解指令执行过程和指令周期。

相关教材章节:第三章 指令系统4. 硬件描述语言与单周期CPU设计:介绍Verilog硬件描述语言,通过实例讲解如何使用Verilog设计单周期CPU。

相关教材章节:第四章 硬件描述语言与数字电路设计5. 单周期CPU仿真与优化:指导学生进行单周期CPU的仿真,分析性能瓶颈,探讨优化方案。

MIPS微处理器原理-MIPS汇编语言

MIPS微处理器原理-MIPS汇编语言
每个字地址 都是4的倍数 width = 4 bytes 10
操作数:寄存器、存储器、常数
因常数的值可以立即访问,故又称为立即数(immediate)。
加立即数指令 ( addi ):
# $s0=a, $s1=b
addi $s0, $s1, 4 # a=b+4 addi $s1, $s0,-2 # b=a-2
没有NOT,可用下面代替 A NOR $0 = NOT A
Source Values $s1 0000 0000 0000 0000 0000 0000 1111 1111
andi rt、rs、imm
Assembly Code
imm 0000 0000 0000 0000 1111 1010 0011 0100
用途 常数0 汇编器临时变量 函数返回值 函数参数 临时变量 保存变量
名称 $t8 ~ $t9 $k0 ~$k1 $gp $sp $fp $ra
编号 24~25 26~27 28 29 30 31
用途
临时变量
操作系统临时变量
全局指针
栈指针
帧指针
保存变量
8
MIPS Register Set
Name $0 $at $v0-$v1 $a0-$a3 $t0-$t7 $s0-$s7 $t8-$t9 $k0-$k1 $gp $sp $fp $ra
4个准则: ① 简单设计有助于规整化; ② 加快常见功能; ③ 越小的设计越快; ④ 好的设计需要好的折中方法。
4
R I S C 指令集的特点
Reduced Instruction Set Computer Complex Instruction Set Computer
• 精简了指令系统,流水线以及常用指令均可用硬件执行;

MIPS单周期CPU实验报告

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能够正确地进行浮点数的加减乘除等运算,并将结果正确地写回寄存器。

CPU架构讲解X86、ARM、RISC、MIPS

CPU架构讲解X86、ARM、RISC、MIPS

CPU架构讲解X86、ARM、RISC、MIPS一、当前CPU的主流架构:1.X86架构采用CISC指令集(复杂指令集计算机),程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。

2.ARM架构是一个32位的精简指令集(RISC)架构。

3.RISC-V架构是基于精简指令集计算(RISC)原理建立的开放指令集架构。

4.MIPS架构是一种采取精简指令集(RISC)的处理器架构,可支持高级语言的优化执行。

CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,是区分不同类型CPU的重要标示。

二、目前市面上的CPU分类主要分有两大阵营:1.intel、AMD为首的复杂指令集CPU;2.IBM、ARM为首的精简指令集CPU。

两个不同品牌的CPU,其产品的架构也不相同,例如,Intel、AMD的CPU是X86架构的,而IBM的CPU是PowerPC架构,ARM是ARM架构。

三、四大主流CPU架构详解(X86、ARM、RISC、MIPS)1.X86架构X86是微处理器执行的计算机语言指令集,指一个Intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。

1978年6月8日,Intel 发布了新款16位微处理器8086,也同时开创了一个新时代:X86架构诞生了。

X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM 1981年推出的世界第一台PC机中的CPU–i8088(i8086简化版)使用的也是X86指令。

采用CISC(Complex Instruction Set Computer,复杂指令集计算机)架构。

与采用RISC不同的是,在CISC处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。

顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。

随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486直到今天的Pentium 4系列,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel所生产的所有CPU仍然继续使用X86指令集。

单周期MIPS CPU实验(8条指令)

单周期MIPS CPU实验(8条指令)

单周期M I P S C P U设计实验目的⏹掌握硬布线控制器设计的基本原理⏹能利用相关原理在Logisim平台中设计实现MIPS单周期CPU⏹主要任务☐绘制MIPS CPU数据通路☐实现单周期硬布线控制器☐测试联调核心指令集(可实现内存区域冒泡排序)#MIPS指令RTL功能描述1add$rd,$rs,$rt R[$rd]←R[$rs]+R[$rt]溢出时产生异常,且不修改R[$rd] 2slt$rd,$rs,$rt R[$rd]←R[$rs]<R[$rt]小于置1,有符号比较3addi$rt,$rs,imm R[$rt]←R[$rs]+SignExt(imm)溢出产生异常16b4lw$rt,imm($rs)R[$rt]←Mem4B(R[$rs]+SignExt16b(imm))5sw$rt,imm($rs)Mem4B(R[$rs]+SignExt16b(imm))←R[$rt]6beq$rs,$rt,imm if(R[$rs]=R[$rt])PC←PC+SignExt18b({imm,00})7bne$rs,$rt,imm if(R[$rs]!=R[$rt])PC←PC+SignExt18b({imm,00})8syscall系统调用,这里用于停机单周期MIPS 参考数据通路MemtoReg MemWrite Branch AluOP ALUSrc RegDstRegWritePCSrcCLKPCRDA指令存储器指令字4PC+45:020:1625:2115:1115:0Sign ExtendSignImmR1#R2#W#WDWE 寄存器堆R1R2101011<<2+PCBranchSrcB SrcA EqualA L UALUResult WriteDataWERD A 数据存储器WD ReadData WriteBackData++BranchAddress31:26CLK CLKPC+4控制器FuncOp rsrtrd步骤1:构建MIPS主机通路⏹在MIPS单周期CPU子电路中,利用如下组件构建MIPS 单周期CPU数据通路☐PC、IMEM、RegFile、ALU、DMEM、Controller步骤2:设计单周期MIPS控制器⏹输入信号⏹指令字Opcode,Func字段(12位)⏹输出信号⏹多路选择器选择信号⏹内存访问控制信号⏹寄存器写使能信号⏹运算器控制信号、指令译码信号⏹纯组合逻辑电路、无时序逻辑控制信号功能说明(8条核心指令集)#控制信号信号说明产生条件1MemToReg写入寄存器的数据来自存储器lw指令2MemWrite写内存控制信号sw指令未单独设置MemRead信号3Beq Beq指令译码信号Beq指令4Bne Bne指令译码信号Bne指令5AluOP运算器操作控制符加法,比较两种运算6AluSrcB运算器第二输入选择Lw指令,sw指令,addi7RegWrite寄存器写使能控制信号寄存器写回信号8RegDst写入寄存器选择控制信号R型指令9Halt停机信号,取反后控制PC使能端syscall指令完善硬布线控制器内部逻辑⏹打开CPU.circ打开单周期硬布线控制器电路⏹实现指令译码、ALU控制逻辑完善控制信号逻辑⏹增加简单的组合逻辑⏹根据给出的指令译码信号,实现所有控制信号逻辑步骤3:CPU测试⏹在指令存储器中载入排序程序sort.hex⏹时钟自动仿真,Windows:Ctrl+k Mac: command+k运行程序⏹程序停机后,查看数据存储器中排序情况,有符号降序排列下节课再见…。

MIPS指令单周期CPU设计

MIPS指令单周期CPU设计
instruction memory
rd rs rt imm
sw rt rs imm Addr = R[rs] + SignExt(imm) MEM[Addr] = R[rt]
PC
Register File
ALU
+4
Data memory
4. MIPS指令——BEQ
比较指令BEQ
– beq rs rt imm
Phase 5: Register Write (WB for “write back”)
– Write the instruction result back into the Register File – Those that don’t (e.g. sw, j, beq) remain idle or skip this phase
– if R[rs] = R[rt] – then PC (PC +4)+ SignExt(imm) – Else PC PC+4
instruction memory rd rs rt imm MUX
PC
Register File
ALU
+4
Data memory
5. MIPS指令——Jump
Data memory
rd rs rt
Register File
PC
单周期CPU设计思路
指令的行
– 显然要设计一个时序逻辑电路 – 一条指令用一个CPU周期完成
执行步骤的实现
– 取指:从指令存储器中读指令(地址:PC)
– 读出一或两个源寄存器的值(寄存器组)
– 进行指令规定的运算(ALU) – 读/写数据存储器
– Zero extend imm16? – Pass imm16 to input of ALU? – Write result to rt?

单周期RISC处理器KMIPS说明文档

单周期RISC处理器KMIPS说明文档

单周期RISC处理器KMIPS说明文档作者:老邹zbzou_xy@ KMIPS下载/s/1nt2zT3r这个设计参照了网络上的一些资料,修改了设计,现在已经能够正确执行lw、sw、and、or、add、sub、addi、beq和bne九条指令,如果需要扩充部分指令,修改controler和alu 设计就可以了,比较方便。

【适合CPU设计初学者】下面就介绍一下,这个工程的设计、仿真和验证方法。

工程目录说明如下:VHDL:设计的源文件ISE :ISE的工程文件、CoreGen产生的ROM和RAM、约束文件MIPS.ucfTB : 测试文件MSIM:ModelSim仿真要使用的文件DOC :项目说明文档CODE:测试汇编程序及相应的COE文件1.设计整个设计是按照下面的框图进行设计的:设计思想基本上是从《计算机组成与设计硬件/软件接口3版》第五章上来的,只是ALU控制部分放在了ALU里面,以后有时间再改个一样的。

每个模块对应一个设计文件,对应关系如下:2.仿真2.1说明1、仿真环境使用的是ModelSimSE 6.1f。

2、仿真使用的文件放在MSIM目录中,有三个文件:compile.do、sim.do和wave.do。

compile.do设置了要编译的文件,wave.do设置了要加入波形窗口的信号及显示方式,sim.do 设置了仿真需要的命令。

3、测试要使用的文件放在目录TB中,有MIPS.vhd(顶层文件,为了便于仿真,没有使用分频模块)、myeDmem.vhd(数据存储器,加了读使能信号)、ram.vhd(可以在ISE 下综合的ram)、myeImem.vhd(指令寄存器,要执行的指令都定义在此。

因为是16进制MIPS指令代码,很难看懂,所以要了解代码对应的程序,请看CODE目录下的all_instr.asm 文件)和test_kmips.vhd(testbench)。

2.2仿真步骤1、启动ModelSim后,改变工作目录(File Change Directory)到目录KMIPS_OK\MSIM 中,在命令窗口运行do compile.do(编译工程需要的设计文件),这样需要的设计文件就加入到库WORK中,如图所示:2、在命令窗口运行do sim.do,就开始仿真,并得到相应的仿真波形。

计算机组成原理-第11章 MIPS处理器设计(单周期、多周期)1 [兼容模式]

计算机组成原理-第11章 MIPS处理器设计(单周期、多周期)1 [兼容模式]
– 后写(late write):在前半周期读数据,在后半周期写数据。 – 先写(early write):与后写刚好相反。
llxx@
12
A conceptual view – computational instructions
• Both source
operands and
Read data 2
Register File
Datapath Control Points
RegWrite (“write enable” control point)
寄存器号 Instruction
R-type指令的执行
Read
register 1
Read
Read
data 1
register 2
– beq为相对寻址:以npc为基准,指令中的 target为16位,进行32位有符号扩展后左移两 位(补“00”,字对准)。
– jump为pseudodirect:指令中的target为26位, 而PC为32位。将target左移2位拼装在PC的低 28位上,PC高4位保持不变。
J-type
op(6 bits) rs(5 bits) rt(5 bits) op(6 bits)
data
16 Sign 32 extend
I-type
MemRead
R-type
llxx@
22
Instruction
条件转移beq
PC + 4 from instruction datapath
Add Sum
Branch target
Read
register 1
Read
Read
rt:ld的目的,sw的源

MIPS CPU详细介绍

MIPS CPU详细介绍

MIPS CPU详细介绍MIPS是世界上很流行的一种RISC处理器。

MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。

它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。

MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。

这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。

和英特尔采用的复杂指令系统计算结构(CISC)相比, RISC 具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。

MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。

1986年推出R2000处理器,1988年推出R3000处理器,1991年推出第一款64位商用微处理器R4000。

之后,又陆续推出R8000(于 1994年)、R10000(于1996年)和R12000(于1997年)等型号。

1999年,MIPS公司发布MIPS 32和MIPS 64架构标准。

2000年,MIPS公司发布了针对MIPS 32 4Kc的新版本以及未来64位MIPS 64 20Kc处理器内核。

在MIPS芯片的发展过程中,SGI公司在1992年收购了MIPS计算机公司,1998年,MIPS公司又脱离了SGI,成为MIPS技术公司; MIPS32 4KcTM 处理器是采用MIPS技术特定为片上系统(System-On-a-Chip)而设计的高性能、低电压32位MIPS RISC 内核。

采用MIPS32TM体系结构,并且具有R4000存储器管理单元(MMU)以及扩展的优先级模式,使得这个处理器与目前嵌入式领域广泛应用的 R3000和R4000系列(32位)微处理器完全兼容.新的 64 位 MIPS 处理器是RM9000x2,从“x2”这个标记判断,它包含了不是一个而是两个均具有集成二级高速缓存的64位处理器。

MIPS单周期CPU实验报告

MIPS单周期CPU实验报告

《计算机组成原理实验》实验报告(实验二)学院名称:专业(班级):学生姓名:学号:时间:2017 年11 月25 日成绩: 实验二:单周期CPU设计与实现一.实验目的(1) 掌握单周期CPU数据通路图的构成、原理及其设计方法;(2) 掌握单周期CPU的实现方法,代码实现方法;(3) 认识和掌握指令与CPU的关系;(4) 掌握测试单周期CPU的方法;(5) 掌握单周期CPU的实现方法。

二.实验内容设计一个单周期的MIPSCPU,使其能实现下列指令:==> 算术运算指令==> 逻辑运算指令功能:rd←rs | rt;逻辑或运算。

==>移位指令==>比较指令==> 存储器读/写指令将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。

即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。

==> 分支指令功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。

immediate 符号扩展之后左移2位再相加。

为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。

12特别说明:与beq不同点是,不等时转移,相等时顺序执行。

功能:if(rs>0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4==>跳转指令==> 停机指令三.实验原理1.时间周期:单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。

单总线结构mips cpu工作原理

单总线结构mips cpu工作原理

单总线结构mips cpu工作原理
单总线结构MIPS CPU的工作原理主要分为指令周期和数据周期两个阶段。

在指令周期中,CPU从内存中获取指令,然后解码并执行该指令。

指令周
期状态机(FSM)负责管理指令周期的各个阶段。

在数据周期中,CPU根
据指令的需要,从内存中读取或写入数据。

数据周期状态机(FSM)负责管理数据周期的各个阶段。

在MIPS CPU中,指令和数据共享同一条总线,即单总线。

这意味着在任
何给定的时间点,CPU只能进行指令读取或数据读取,而不是同时进行。

这种设计有助于简化硬件结构,减少硬件复杂度和成本,并提高资源利用率和系统响应速度。

以上内容仅供参考,如需更多信息,建议查阅MIPS CPU的相关书籍或咨
询专业技术人员。

经典的MIPS五级流水介绍

经典的MIPS五级流水介绍


第二个ALU操作数来自第 二个寄存器堆的输出(读 出数据2) PC的值替换为计算PC+4 的加法器的输出
PCSrc MemRead M器写数据的 输入值
三种流水线冒险
结构冒险 如果由于资源争夺导致几条指令 不能在同一时钟周期内执行,就称处理器 中含有结构冒险。 阻塞(stall)也叫气泡(bubble),解决结 构冒险的一种方式。
op op
rs
rt
constant or address
address
五种寻址模式:
1)寄存器寻址,操作数是寄存器 2)基址或偏移寻址,操作数在内存中,其地址是指令中 基址寄存器和常数的和。 3)立即数寻址,操作数是指令中的常数. 4)PC相对寻址,地址是PC计数器和指令中常数的和。 5)伪直接寻址,跳转地址是指令中26位和PC计数器的高 位相连而成

三种流水线冒险
数据冒险 一个操作必须等待另一个操作完成后才 能进行时,流水线必须停顿,我们称这种情况为 数据冒险。 转发(forward) 也叫旁路(bypass)。上一个 操作的结果产生以后不必写回寄存器,直接转发 给下一条指令。可以消除部分数据冒险。 阻塞(stall)当一条指令试图读取一个寄存器而 它前一条指令是load指令,并且该load指令写入 的是同一寄存器时,必须采用相应的机制阻塞流 水线。
引入流水线寄存器图
流水线每级的工作
流水线中的控制
一共9条控制线,根据流水线的五个步骤将 控制线分为五组: 1)取指令:读取指令内存和写PC的控制信 号总是确定的,没特别需控制的。 2)指令译码/读取寄存器:每个时钟周期内 这个步骤所完成的工作都是相同的,不需 设置控制线。
3)指令执行/地址计算:设置的控制线有RegDst、 ALUOp和ALUSrc。根据这些信号选择结果寄存器, 确定ALU的操作,同时读取数据2或经过符号扩展后 得到的立即数。 4)内存访问:设置的控制线有Branch、MemRead 和MemWrite,这些控制信号分别由相等分支、取和 存指令设定。除非控制信号指示这是一条分支指令 同时ALU输出为0,将选择线性地址中的下一条指令 作为PCSrc信号。 5)写回:两条控制线分别是MemtoReg和RegWrite, 前者决定是将ALU结果还是将内存数据传送寄存器堆, 后者记录所要写入的数据。

(完整版)MIPS处理器设计说明

(完整版)MIPS处理器设计说明

西安邮电大学实践课程报告书课程名称:计算机组成与实践院(系)名称:电子工程学院专业班级:**学号/姓名:**实习时间:2015年3月6日至2015年6月19日1 课程主要目的本课程是在上学期《计算机组成与设计》课程学习的基础上,通过实践课的方式,依照集成电路设计流程,完成一个简单独立硬件功能电路模块的设计,从而到达对《计算机组成与设计》课程的深入理解和提高电路设计的实践能力,从理论和实验的结合中巩固计算机基本知识,熟练掌握电路设计的基本流程和原理,同时,加深对MIPS系统的组成部件及其电路结构,原理和功能的理解,掌握利用硬件描述语言和EDA工具进行MIPS设计的一般方法。

2 课程的主要内容和任务MIPS是典型的32位定长指令字RISC处理器,要求深入理解MIPS处理器的内部结构及工作原理。

采用verilogHDL设计一个兼容MIPS指令格式,具有10条以上指令功能的单周期CPU硬件电路,该32位MIPS设计内容主要包括系统中的基本组成部件(存储器,指令寄存器,寄存器堆,算术逻辑运算器,程序计数器,多路选择器,符号扩展等)的设计,仿真及硬件下载的方法和过程。

设计过程中使用ISE仿真工具完成设计电路的仿真验证。

3总体设计方案3.1指令及其功能表:(1)R型指令:(2)I型指令:(3)J型指令:3.2总体结构设计:该MIPS主要由8个模块组成,各个子模块分别设计其特定的功能,最终利用一个总的模块进行子模块间连接,使得整个CPU能连贯执行指令,在仿真结果中观察设计结果,最终进行硬件下载,验证设计。

其中各个模块简单功能如下:(1)存储器模块:具备基本的读写功能,用于存放数据和指令。

(2)寄存器堆模块:由32个32位的寄存器组成,提供较大的存储空间,用于存放暂存数据和指令。

(3)算术逻辑运算器模块:执行加减法等算术运算,与非或等逻辑运算,以及比较移位传送等操作的功能部件,是该CPU的设计核心部分,存在不同的运算处理功能,是体现实验设计结果正确性的模块。

单周期处理器

单周期处理器

数字逻辑与处理器基础大作业单周期处理器一、处理器结构阅读处理器的结构图,理解其中各控制信号的含义。

注意与教材(第三版)204 页图 5-24 的异同。

1.试回答以下问题:a)由 RegDst 信号控制的多路选择器,输入 2 对应常数 31。

这里的 31 代表什么?在执行哪些指令时需要 RegDst 信号为 2?为什么?答:该项输入对应的是寄存器编号,31即对应了$ra寄存器,而$ra寄存器的作用是用来返回地址的,只有在执行跳转指令jal时,需要对$ra寄存器写入,这,时候应该有Writeregister=31,亦即RegDst=2。

b)由 ALUSrc1 信号控制的多路选择器,输入 1 对应的指令[10-6]是什么?在执行哪些指令时需要 ALUSrc1 信号为 1?为什么?答: ALUSrc1信号控制的是ALU的第一个输入,在ALUSrc1=0时ALU的第一个输入是从由rs字段所确定的寄存器中读取出来的值,而ALUSrc1=1时,ALU的第一个输入则会变为Instruction[10:6],这段所对应的是shamt[4:0]字段,它的意义在于确定逻辑左移sll,逻辑右移srl,算术右移sra,所需要移动的二进制位数。

c)由MemtoReg 信号控制的多路选择器,输入 2 对应的是什么?在执行哪些指令时需要MemtoReg 信号为 2?为什么?答: MentoReg=2时,从所给的数据通路来看的结果是对应输入为PC+4。

在执行jal 指令的时候,会跳转到一个地址的同时将下一条指令的地址保存在寄存器堆(寄存器$ra)中。

这时便需要MemtoReg=2。

没有其他的指令需要将程序的地址写会寄存器堆中。

d)图中的处理器结构并没有 Jump 控制信号,取而代之的是 PCSrc 信号。

PCSrc 信号控制的多路选择器,输入 2 对应的是什么?在执行哪些指令时需要 PCSrc 信号为 2?为什么?答: PCSrc=2时对应输入为从Instruction[25:21]段(rs段)确定的寄存器序号中读取的数据ReadData1传输到PC,作为下一条指令的地址。

32位MIPS处理器说明

32位MIPS处理器说明

32位MIPS处理器说明一、实验目的熟悉现代处理器的基本工作原理;掌握单周期和流水线处理器的设计方法。

二、实验原理及实验内容该32位MIPS处理器主要需要设计ALU、单周期、流水线。

下面分别讲述这三个部分的设计原理及实验内容。

1.ALUALU即算数逻辑单元,要求设计一个32位的ALU,实现基本的算术、逻辑、关系、位与移位运算。

输入32bit的A和B作为操作数,5bit的控制输入ALUFun和一位控制输入Sign,输出32bit的结果Z。

其功能表如下图所示:根据功能表和要求,我们在顶层模块中设计了32bit输入ALUSrc1和ALUSrc2,以及5bit控制ALUFunc,1bit控制Sign,32bit输出ALUOut。

设计了四个主要模块:ALU_ADD_SUB,ALU_CMP,ALU_Logic,ALU_Shift,并根据ALUFunc的值来确定使用的模块。

设计框图思路如下:(1)ALU_ADD_SUB这部分是ALU设计中最重要的一部分。

采用了8位超前进位级联,用与门来实现32位全加器。

减法由加法实现,在运算的开始由ALUFunc判断进行的是加法还是减法,如果是加法则直接将两个操作数输入全加器,最低进位为0,如果是减法则取ALUSrc2的反码之后再做加法运算,最低进位是1。

需要注意的是运算结束之后需要判断结果是否为0(这个在branch指令中尤为重要),是否为负数,还有是否溢出。

是否为溢出还需要检查控制符号,如果控制符号为有效(即有符号计算)则两正数相加得负或两负数相加得正则溢出,溢出则结果符号位反了,再进而判断是否为负。

若为无符号运算,加法结果溢出则最高进位为1,且结果不为负;减法结果溢出等价于结果为负,即最高进位为0。

而结果为0等价于全部位都取0。

(2)ALU_Shift移位运算分别有逻辑左移,逻辑右移,算术右移三种情况。

首先判断是逻辑移位还是算术移位来决定填充0还是填充逻辑位。

之后采取先将操作数根据左移还是右移的判断做出32位扩充,再根据shamt从最高位到最低位判断是否为0来决定取那几位操作数,最后得到移位的结果。

单周期cpu设计代码解读

单周期cpu设计代码解读

单周期cpu设计代码解读⽬录写在前⾯欢迎转载,转载请说明出处。

单周期cpu设计代码讲解概念回顾⼀、电⼦计算机的部件分为:中央处理器(cpu)、内部存储器(Memory)、输⼊/输出(I/O)设备,以及连接它们的总线(Bus)。

下图为图⽰,注意⾊块的区分。

⼆、cpu⼜包括控制器(Controller)和数据通路(Data Path)。

下图为图⽰,注意⾊块区分。

三、控制器分为主控(Main Control)和局控(Local Control或ALU Control)。

将⼆进制指令输⼊控制器,⽣成控制信号,该过程称为译码。

控制信号控制数据通路⼯作。

且不同的指定对应不同的控制信号。

下图为在控制器中译码的逻辑⽰意图:下图为在控制器中译码的物理⽰意图:讲解⼀下从逻辑图到物理图的转换:1. ⾸先由主控解析op指令,如果发现该指令为“000000”则表⽰该指令是R指令,输出中间信号R-Type为1,否则为0;如果发现该指令是其他值,则按照逻辑图,为RegDst等信号赋相应的值;2. 中间信号R-Type起到⼆路选择的作⽤,如图。

3. 中间信号ALUop,在R-Type为0(选择0路)时,直接通过局控,输出成为ALUctr信号,对应上⾯逻辑图的最后⼀⾏后5列;在R-Type为1时,局控起作⽤。

4. 局控解析R指令的func部分,输出对应指令的ALUctr信号。

四、数据通路:是包括运算器、寄存器组、存储器(⾼速缓存)、多路选择器等等在内的元件的有结构的组合。

如下图所⽰:【数据通路各部分的讲解将结合代码完成】Verilog代码讲解在代码讲解之前有必要放⼏张图:shift.v/*移位*//*输⼊⼀个数,返回移位之后的结果*//*输⼊d(待移的数)、sa(移动的位数)、right(移动⽅向)、arith(空位补全⽅式)*//*输出sh(移位后的结果)*/module shift (d,sa,right,arith,sh);input [31:0] d;input [4:0] sa;input right,arith;output [31:0] sh;reg [31:0] sh;// 组合逻辑always @* beginif (!right) begin // right为逻辑0时,左移sh = d << sa;end else if (!arith) begin // right为逻辑1,且arith为逻辑0时,右移、0补空sh = d >> sa;end else begin // 右移、1补空sh = $signed(d) >>> sa;endendendmodulescinstmem.v/*从ROM(只读存储器)读数据*//*输⼊⽬标数据在ROM中的地址a*//*输出地址对应的数据inst*/module scinstmem (a,inst);input [31:0] a;output [31:0] inst;wire [31:0] rom [0:31]; // 定义32个32位的存储器ROM// 想ROM中写⼊⼀组指令,指令对应的汇编含义见⾏注释assign rom[5'h00] = 32'h3c010000; // (00) main: lui r1,0assign rom[5'h01] = 32'h34240050; // (04) ori r4,r1,80assign rom[5'h02] = 32'h20050004; // (08) addi r5,r0, 4assign rom[5'h03] = 32'h0c000018; // (0c)call: jal sumassign rom[5'h04] = 32'hac820000; // (10) sw r2,0(r4)assign rom[5'h05] = 32'h8c890000; // (14) lw r9, 0(r4)assign rom[5'h06] = 32'h01244022; // (18) sub r8, r9. r4assign rom[5'h07] = 32'h20050003; // (lc) addi r5, r0. 3assign rom[5'h08] = 32'h20a5ffff; // (20) loop2: addi r5, r5, -1assign rom[5'h09] = 32'h34a8ffff; // (24) ori r8, r5, 0xffffassign rom[5'h0A] = 32'h39085555; // (28) xori r8. r8, 0x5555assign rom[5'h0B] = 32'h2009ffff; // (2c) addi r9, rO, -1assign rom[5'h0C] = 32'h312affff; // (30) andi rlO, r9, 0xffffassign rom[5'h0D] = 32'h01493025; // (34) or r6. rlO, r9assign rom[5'h0E] = 32'h01494026; // (38) xor r8, rlO, r9assign rom[5'h0F] = 32'h01463824; // (3c) and r7, rlO, r6assign rom[5'h10] = 32'h10a00001; // (40) beq r5, r0, shiftassign rom[5'h11] = 32'h08000008; // (44) j loop2assign rom[5'h12] = 32'h2005ffff; // (48) shift: addi r5. r0, -1assign rom[5'h13] = 32'h000543c0; // (4c) sll r8. r5. 15assign rom[5'h14] = 32'h00084400; // (50) sll r8, r8, 16assign rom[5'h15] = 32'h00084403; // (54) sra r8, r8, 16assign rom[5'h16] = 32'h000843c2; // (58) srl r8. r8. 15assign rom[5'h17] = 32'h08000017; // (5c) finish: j finishassign rom[5'h18] = 32'h00004020; // (60) sum: add r8, r0, r0assign rom[5'h19] = 32'h8c890000; // (64) loop: lw r9, (r4)assign rom[5'h1A] = 32'h20840004; // (68) addi r4, r4, 4assign rom[5'h1B] = 32'h01094020; // (6c) add r8, r8, r9assign rom[5'h1C] = 32'h20a5ffff; // (70) addi r5, r5, -1assign rom[5'h1D] = 32'h14a0fffb; // (74) bne rS, r0, loopassign rom[5'h1E] = 32'h00081000; // (78) sll r2f r8f 0assign rom[5'h1F] = 32'h03e00008; // (7c) jr r31// 将地址对应的数据放⼊instassign inst = rom[a[6:2]];endmodulescdatamem.v/*将数据写⼊RAM中(随机存取存储器)的指定位置*//*输⼊待写数据datain、⽬标地址addr;写使能信号we;时钟信号clk、inclk、outclk*//*输出将被覆盖的数据dataout*/module scdatamem (clk,dataout,datain,addr,we,inclk,outclk);input [31:0] datain;input [31:0] addr ;input clk, we, inclk, outclk;output [31:0] dataout;reg [31:0] ram [0:31]; // 定义32个32位RAM// 把将被覆盖的数据放⼊dataoutassign dataout =ram[addr[6:2]];// 时序逻辑,clk的上升沿触发always @ (posedge clk) beginif (we) ram[addr[6:2]] = datain; // 如果写使能信号we为1,将数据写⼊⽬标地址end// 为RAM赋值,这⼀步不是必要的,只是欲运⾏的⾃定义程序的需要。

02-6.13 单周期MIPS CPU(1)

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

高等计算机体系结构-单周期vs.多周期微体系结构

高等计算机体系结构-单周期vs.多周期微体系结构

高等计算机体系结构作业2:单周期vs.多周期微体系结构1MIPS单周期微体系结构分析75分图1为基本的单周期MIPS实现。

图11.1 不同单元有不同的延迟时间。

在图1中有七种主要单元。

对一条指令而言,关键路径(产生最长延迟的那条路径)上各个单元的延迟时间决定了该指令的最小延迟。

假设个单元的延迟时间如下表所示,回答下列3个问题。

9分指令存储器(IM) -> 寄存器堆(RF) -> 多路数据选择器(MUX) -> 算术逻辑单元(ALU) -> 多路数据选择器(MUX)关键路径延迟:400+200+30+120+30 = 780ps(b) 对一条MIPS的装载指令(LW)而言,关键路径是什么?指令存储器(IM) -> 寄存器堆(RF) -> 多路数据选择器(MUX) -> 算术逻辑单元(ALU) -> 数据存储器(DM) -> 多路数据选择器(MUX)关键路径延迟:400+200+30+120+350+30 = 1130ps(c) 对一条MIPS的相等则分支指令(BEQ)而言,关键路径是什么?指令存储器(IM) -> 寄存器堆(RF) -> 多路数据选择器(MUX) -> 算术逻辑单元(ALU) -> 多路数据选择器(MUX)关键路径延迟:400+200+30+120+30+200 = 780ps1.2 图1中基本的单周期MIPS实现仅能实现某些指令。

可以在这个指令集中加入新的指令,但决定是否加入取决于给处理器的数据通路和数据通路增加的复杂度。

对于下表中的新指令而言,试回答下列3个问题。

18分(a) 对上述指令而言,哪些已有的单元还可以被使用?指令存储器(IM)、寄存器堆(RF)现存的读取数据端口和数据输出端口、算术逻辑单元(ALU)(b) 对上述指令而言,还需要增加哪些功能单元?寄存器的另一个读取端口(用于读取Rx)和第二个ALU(用于将Rx与Rs+Rt相加)(c) 为了支持这些指令,需要在控制单元增加哪些信号?需要一个控制信号来告诉新的ALU做什么,或者如果我们扩展了现有的ALU,我们需要添加一个新的ADD3操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的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://jmp beginregDst=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来比较两个寄存器是否相等。

相关文档
最新文档