单周期处理器
实验八单周期处理器的实现
实验目的:
进一步理解数据通路、控制通路等基本概念
掌握处理器中控制器的基本设计方法
进一步理解单周期处理器以及多周期处理器的工作原理和设计思路实验要求:
设计和实现一个单周期处理器(60%)
可执行至少7条MIPS指令,add、sub、ori、lw、sw、beq、j
编写测试程序的二进制代码,测试实现的电路
撰写实验报告,dead line:5.19
设计和实现一个多周期处理器(40%)
Dead line:6.6。
实验报告:
(1)实验过程
1 控制器的设计与实现
控制器的功能
根据当前指令,生成处理器内部各部件所需要的控制信号
控制器的输入输出
输入:op[5:0],func[5:0]
输出:RegDst,ALUSrc,MemtoReg,RegWrite,MemWrite,Branch,Jump,ExtOp,ALUctr[2:0]
图表1 主控的设计
图表2 ALUCTR的设计
图表3 控制器的封装
2 ALU的设计与实现
ALU的功能
根据控制信号ALUctr[2:0],将输入端口的两个32位的数据进行加、减、与、或操作,并判断结果是否为0
ALU的输入输出
输入:A[31:0],B[31:0],ALUctr[2:0]
输出:OUT[31:0],Zero
ALU的实现
将运算器实验中实现的加减法扩展为32位
增加32位与、或功能
增加结果判零电路
根据ALUctr[2:0]信号确定ALU的输出
图表4 加法器的设计与封装
(由于上一个实验已做成ALU,这里不再赘述加法器的制作)
根据ADD/SUB信号判断实现加法或是减法,并且设置Zero
项输出,用作Beq指令的判定依据
图表5 加减法器的设计
图表6 ALU的封装
三寄存器文件的设计与实现
寄存器文件的功能
寄存器读:根据Rs,Rt的值读出相应寄存器的值,Rs对应
BusA,Rt对应BusB。
用多路选择器实现寄存器数据的选择。
寄存器写:当RegWR=1时,clk上升沿,将busW的值写入
Rw对应的寄存器。
用译码器实现寄存器的实现。
寄存器文件的输入输出
输入:Rs,Rt,Rw,RegWr,busW,clk
输出:BusA,BusB
寄存器文件的实现
使用Memory库中的register元件搭建
图表7 寄存器文件的实现
四立即数扩展部件的设计与实现
立即数扩展部件的功能
根据控制信号Extop的值,将十六位的立即数进行符号位扩展(Extop = 1)或者无符号扩展(Extop = 0)
立即数扩展部件的输入输出
输入:imm16,Extop
输出:imm32
立即数扩展部件的实现
当Extop = 1,并且imm16的高位为1时,imm32的高16为全为1 否则,imm32的高16位全为0。
因此立即数的高位与ExtOp信号做“与”操作,当且仅当结果为一时做逻辑扩展。
图表8 位扩展的实现
五取指部件以及指令存储器的设计与实现
取指部件的功能
根据当前PC及当前指令,计算下一PC
使用当前PC到指令存储器取指令
取指部件的输入输出
输入:Jump,Branch,Zero,Imm32,CLK
输出:Instruction[31:0]
取指部件的实现
当前指令为普通指令时,PC=PC+4
当前指令为beq指令时,若Zero=1,则PC = PC + 4 +SignExt[imm16];否则PC=PC+4
当前指令为j指令时,PC={PC<31:28>,target<25:0> ,“00”}
数据在取指传输通路中为30位,当其进入PC时,扩展为32位,但RAM地址只有24位,考虑地址输入到本实验中指令数目较少,只取数据的低二十四位作为RAM地址输入
图表9 取指部件的实现
六处理器的封装
七处理器的执行
第一条指令执行一号寄存器加二号寄存器的值,以3+7为例。
并将
结果存入三号寄存器。
第二条指令将三号寄存器的值存入数据存储器的九号单元
第三条指令将数据存储器九号单元的数据存入四号寄存器
第四条
11。
《数字逻辑与计算机组成》实验讲义-实验5
实验5:单周期处理器的控制器设计实验一、实验目的1、理解随机访问存储器RAM和只读存储器ROM的操作原理。
2、理解指令类型与指令格式之间的关系,掌握取指部件、指令解析和立即数扩展器的设计方法。
3、理解每条目标指令的功能和数据通路,掌握单周期处理器的控制器设计方法。
二、实验环境Logisim-ITA V2.16.1.0。
三、实验内容1、利用Logisim中的RAM组件进行数据读写操作实验。
Logisim中RAM的地址位宽最多可设置为24位,数据位宽最多可设置为32位。
在属性窗口的数据接口中有三种不同的工作模式。
若设置为“分离的加载和存储引脚”模式,则有两个数据端口分别连接输入数据和输出数据(如图1所示);否则,使用同一数据端口连接数据总线。
注意:当设置数据位宽为32位时,采用按字编址方式(32位),而不是采用按字节编址方式。
图1 采用分离加载和存储模式的32位数据读取实验图实验要求RAM组件的地址位宽设置为12位,数据接口模式设置为分离的加载和存储引脚模式。
实验过程与验证步骤如下:(1)设置数据位宽为32位,即可访问空间大小为16KB;连接必要的输入输出信号并选择合适的控制信号;从0地址处开始顺序写入以下两个32位的十六进制数据:0x4E4A5543、0x53657200;然后再读出所存储的数据。
(2)设置数据位宽为8位,即可访问空间大小为4KB;将输出数据端口连接到如图2所示的文本终端TTY;从0地址开始顺序写入以下八个字节的十六进制数据:4E4A554353657200;然后按字节为单位读出并输出到文本终端TTY,观察显示的内容。
图2 采用分离加载和存储模式的8位数据读取实验图(3)Logisim中RAM和ROM组件的数据输入还可以采用Logisim十六进制编辑器和直接读取二进制编码文件的方法实现。
把鼠标移到存储器组件上,点击鼠标右键,则弹出菜单框(如图3所示),选中“编辑存储内容”,则打开Logisim十六进制编辑器(如图4所示),可按照存储器设置的数据位宽,直接使用键盘输入数据;输入数据后,可点击保存按钮,把输入的数据保存到数据镜像文件(image)中。
计算机专业基础综合(中央处理器)模拟试卷4(题后含答案及解析)
计算机专业基础综合(中央处理器)模拟试卷4(题后含答案及解析) 题型有:1. 单项选择题 2. 综合应用题单项选择题1-40小题,每小题2分,共80分。
下列每题给出的四个选项中,只有一个选项是最符合题目要求的。
1.通常所说的32位微处理器是指( )。
A.地址总线的宽度为32位B.处理的数据长度只能为32位C.CPU字长为32位D.通用寄存器数目为32个正确答案:C解析:通常所说的32位微处理器是指CPU字长为32位。
将运算器和控制器合称为中央处理器(CPU),在由超大规模集成电路构成的微型计算机中,往往将CPU制成一块芯片,称为微处理器。
CPU按照其处理信息的字长可以分为8位CPU、16位CPU、32位CPU、64位CPU等。
选项A、B、D均与微处理器的位数无关。
知识模块:中央处理器2.在微程序控制方式中,机器指令、微程序和微指令的关系是( )。
A.每一条机器指令由一条微指令来解释执行B.每一条机器指令由一段(或一个)微程序来解释执行C.一段机器指令组成的工作程序可由一条微指令来解释执行D.一条微指令由若干条机器指令组成正确答案:B解析:机器指令是由一段(或一个)微程序来解释执行的,一条微程序是由若干微指令构成的。
知识模块:中央处理器3.一个单周期处理器,各主要功能单元的操作时间为:指令存储器和数据存储器为0.3 ns,ALU为0.2 ns,寄存器文件为0.1 ns,则该CPU的时钟周期最少应该是( )。
A.0.4 nsB.0.3 nsC.0.2 nsD.1 ns正确答案:D解析:单周期处理器时钟周期取为“Load”指令的执行时间(最长),它等于读指令存储器(取指)的时间、读寄存器堆(取形式地址)的时间、ALU(计算有效地址)的时间、读数据存储器(取操作数)的时间以及写寄存器堆(将操作数写入目的寄存器)的时间之和,为1 ns。
知识模块:中央处理器4.微程序存放在( )。
A.主存中B.堆栈中C.只读存储器中D.磁盘中正确答案:C解析:微程序存放在控制存储器中,是只读存储器。
华中科技大学HUST类MIPS单周期微处理器设计实验报告
类MIPS单周期微处理器设计实验报告专业:班级:学号:姓名:一、微处理器各模块设计各模块的框图结构如上图所示。
由图可知,该处理器包含指令存储器、数据存储器、寄存器组、ALU单元、符号数扩张、控制器、ALU控制译码以及多路复用器等。
图中还忽略了一个单元:时钟信号产生器,而且以上各个部件必须在时钟信号的控制下协调工作。
1.指令存储器的设计指令寄存器为ROM类型的存储器,为单一输出指令的存储器。
因此其对外的接口为clk、存储器地址输入信号(指令指针)以及数据输出信号(指令)。
(1)在IP wizard 中配置ROM,分配128个字的存储空间,字长为32位宽。
(2)选择输入具有地址寄存功能,只有当时钟上升沿有效时,才进行数据的输出。
(3)配置ROM内存空间的初始化COE文件。
最后单击Generate按钮生成IROM模块。
2.数据存储器的设计数据存储器为RAM类型的存储器,并且需要独立的读写控制信号。
因此其对外的接口输入信号为clk、we、datain、addr;输出信号为dataout。
数据存储器基本建立过程同ROM的建立。
3.寄存器组设计寄存器组是指令操作的主要对象,MIPS中一共有32个32位寄存器。
在指令的操作过程中需要区分Rs、Rt、Rd的地址和数据,并且Rd的数据只有在寄存器写信号有效时才能写入,因此该模块的输入为clk、RegWriteAddr、RegWriteData、RegWriteEn、RsAddr、RtAddr、reset;输出信号为RsData、RtData。
由于$0一直输出0,因此当RsAddr、RtAddr为0时,RsData以及RtData 必须输出0,否则输出相应地址寄存器的值。
另外,当RegWriteEn有效时,数据应该写入RegWriteAddr寄存器。
并且每次复位时所有寄存器都清零。
代码如下: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;endendendmodule4.ALU设计在这个简单的MIPS指令集中,微处理器支持add、sub、and、or、slt运算指令,需要利用ALU单元实现运算,同时数据存储指令sw、lw也需要ALU单元计算存储器地址,条件跳转指令beq需要ALU来比较两个寄存器是否相等。
Project4 VerilogHDL完成单周期处理器开发(2013.12.2)
一、 设计说明
1. 处理器应 MIPS-Lite3 指令集。 a) MIPS-Lite3={MIPS-Lite2,addi,addiu, slt,j,jal,jr}。 b) MIPS-Lite2 指令集:addu,subu,ori,lw,sw,beq,lui。 c) addi 可以不支持溢出。 2. 处理器为单周期设计。
Figure2 参考的 project 目录组织
b) 顶层设计文件命名为 mips.v。 c) 建议 datapath 中的每个 module 都由一个独立的 VerilogHDL 文件组成。 d) 建议所有 mux (包括不同位数、 不同端口数等) 都建模在一个 mux.v 中。 可以有多个 module。 6. code.txt 中存储的是指令码 a) 用 VerilogHDL 建模 IM 时,必须以读取文件的方式将 code.txt 中指令加 载至 IM 中。 b) code.txt 的格式如 Figure3 所示。每条指令占用 1 行,指令二进制码以文 本方式存储。
15. 详细说明你的测试程序原理及测试结果。 【WORD】 a) 应明确说明测试程序的测试期望,即应该得到怎样的运行结果。 b) 每条汇编指令都应该有注释。
五、 问答【WORD】
16. C 语言是一种弱类型程序设计语言。C 语言中不对计算结果溢出进行处理, 这意味着 C 语言要求程序员必须很清楚计算结果是否会导致溢出。因此,如 果仅仅支持 C 语言,MIPS 指令的所有计算指令均可以忽略溢出。 a) 请说明为什么在忽略溢出的前提下, addi 与 addiu 是等价的, add 与 addu 是等价的。 提示: 阅读 《MIPS32® Architecture For Programmers Volume II: The MIPS32® Instruction Set》中相关指令的 Operation 部分。
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
单周期cpu课程设计
单周期cpu课程设计一、课程目标知识目标:1. 学生能理解单周期CPU的工作原理,掌握其内部结构及功能。
2. 学生能描述单周期CPU的指令执行过程,包括取指、译码、执行、访存、写回等阶段。
3. 学生能解释单周期CPU中时钟、指令和数据的关系,并分析其性能特点。
技能目标:1. 学生能运用所学知识,设计并实现一个简单的单周期CPU。
2. 学生能运用仿真软件对单周期CPU进行功能仿真,验证其正确性。
3. 学生能通过课程学习,培养自己的逻辑思维和问题解决能力。
情感态度价值观目标:1. 学生能对计算机硬件及CPU产生兴趣,激发学习热情。
2. 学生能认识到CPU在计算机系统中的核心地位,增强对计算机科学的尊重和热爱。
3. 学生能在团队协作中发挥积极作用,培养合作精神和沟通能力。
课程性质:本课程为计算机科学与技术专业核心课程,旨在让学生了解CPU的基本原理,掌握单周期CPU的设计方法。
学生特点:学生已经具备一定的数字逻辑电路基础,具有一定的编程能力和逻辑思维能力。
教学要求:结合学生特点,注重理论与实践相结合,引导学生通过课程学习,达到课程目标所规定的知识、技能和情感态度价值观要求。
在教学过程中,关注学生的个体差异,鼓励学生积极参与,培养其独立思考和解决问题的能力。
通过课程目标的分解,确保教学设计和评估的针对性和有效性。
二、教学内容1. 单周期CPU概述:介绍CPU的发展历程,单周期CPU的概念及其在计算机系统中的作用。
教材章节:第1章 计算机系统概述2. 单周期CPU内部结构:讲解CPU的内部组成部分,包括控制单元、算术逻辑单元(ALU)、寄存器组、程序计数器等。
教材章节:第2章 CPU内部结构3. 指令集与指令执行过程:分析指令集的设计,讲解单周期CPU指令执行过程中各阶段的任务和实现方法。
教材章节:第3章 指令集与指令执行4. 时序控制与性能分析:探讨时钟、指令和数据的关系,分析单周期CPU的性能特点。
教材章节:第4章 时序控制与性能分析5. 单周期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输⼊与门,依次类推。
(完整word版)32位单周期RISC处理器设计
第一章32 位单周期RISC处理器设计要设计一款处理器,首先要选择体系结构,本题选择的是RISC体系结构,因为它适合于流水线设计。
然后需要选择一个标准的指令集,本题选择的MIPS指令集并按照常规的五段流水的方式来实现流水线。
流水线的实现过程将在第二章介绍。
1.1目标处理器指令集与指令格式本题目标CPU以能实现部分MIPS指令为目标,具体指令如下表1:(slti)无条件跳跳转(jL)J转空操作空操作(nop)表1 目标CPU指令集1.2 从指令具体行为反推设计方案CPU要执行一条指令,不外乎需要完成以下几个过程:取指令,指令译码,将译码出的指令放到算术逻辑运算部件ALU上执行运算,根据ALU算得的访存地址进行访存和将访存的结果写回寄存器等。
当然,不同的指令类型(R、I、J)可能经过的过程稍有不同,即它们的数据通路有所不同,以下将具体介绍:1、R格式指令数据通路:1)从指令寄存器Instr MEM中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1和rs2的内容从寄存器堆Reg File中读出;3.)ALU根据功能码Opcoder确定操作方式,对从寄存器堆读出的数据进行计算;4.)ALU运算结果被写入寄存器堆,由rd确定写入的寄存器堆存储单元地址。
图1 R指令数据通路2. I 指令(除lw、sw和分支指令)数据通路如图2:1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;4.)ALU的运算结果被写入寄存器堆,由rt确定写入的寄存器堆存储单元地址。
图2 I 指令(除lw、sw和分支指令)数据通路3、Lw指令数据通路如图3:1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;4.)将ALU的运算结果作为数据存贮器的地址读出相应单元的内容;5)把从数据存储单元取出的数据写入寄存器堆,由rt确定写入的寄存器存储单元地址。
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的仿真,分析性能瓶颈,探讨优化方案。
【最新】CPU实验——单周期MIPS处理器设计
单周期MIPS处理器设计实验报告完成人:笪腾飞2012011263一、实验目的1、设计一个32位的单周期MIPS处理器,具备定时器、数码管等外设;2、编写一个编译器,可以将mips代码编译为二进制机器码;3、编写一个计算两个整数的最大公约数的汇编程序。
二、设计方案根据理论课所学的单周期MIPS处理器数据通路的知识,结合本次试验的具体要求,最终设计方案如下:1、系统时钟为了综合后能够在开发板上正确运行程序,我们决定采取50MHz的CPU时钟,因此编写了一个时钟分频模块,对开发板提供的100MHz时钟进行二分频,从而得到50MHz时钟。
2、PC产生模块原理图如下:如上图左半部分所示,多路选择器由一个always语句中的if…else if…else语句实现。
其中,将ALU中的加减法部分提取出来实现一个加法器,用于产生PC+4和ConBA两个PC来源。
将I型指令中的16位立即数左移两位后再符号位j m扩展成32位地址,与PC+4相加得到分支地址ConBA 。
将跳转指令中的26位目标地址左移两位后,与当前PC的高四位拼接得到跳转地址JT。
将第一个操作数寄存器中的值取出作为PC的一个输入,这是为了实现jr和jalr指令,从$Xp和$Ra寄存器中读取跳转地址。
ILLOP和XADR分别是发生中断和异常时的跳转地址。
下一指令地址的选择由PCSrc决定,而PCSrc是译码后由控制信号模块根据每条指令的操作码(opcode)和函数码(funct)产生。
3、译码模块原理图如上图右半部分所示,将PC作为ROM模块的地址输入,输出即为PC所对应的指令。
分别取出指令中的某些片段,得到$Rs,$Rt,$Rd,shamt,funct,16位立即数和26位跳转地址。
4、控制模块控制模块即控制信号产生模块,六位操作码OpCode,六位函数码[5:0] Funct,定时器中断信号irq和PC最高位PC31作为输入,输出为以下控制信号:(1) R型指令指示信号IsR,值为1表示当前指令为R型指令,否则非R型指令;(2) PC产生的选择信号[2:0] PCSrc,取值0,1,2,3,4及其它,分别选择下一指令不同的PC;(3) 目的寄存器选择信号[1:0]RegDst,被写入的寄存器有四种选择:$Rd,$Rt,$Ra,$Xp,分别由RegDst不同取值完成选择;(4) 写寄存器使能信号RegWr,值为1表示允许对寄存器进行写操作;(5) ALU第一个操作数选择信号ALUSrc1,值为1表示选择将移位量shamt 进行0扩展后作为输入,值为0表示将$Rs寄存器中的值作为输入;(6) ALU第一个操作数选择信号ALUSrc1,值为1表示选择将扩展后的32位立即数作为输入,值为0表示将$Rt寄存器中的值作为输入;(7) ALU运算控制信号[5:0] ALUFunc,作为ALU的输入选择不同的运算操作;(8) 有无符号数指示信号Sign,值为1表示有符号数,值为0表示无符号数;(9) 写存储器使能信号MemWr,值为1表示允许对存储器进行写操作;(10) 读存储器使能信号MemRd,值为1表示允许对存储器进行读操作;(11) 写寄存器值的选择信号[1:0] MemToReg,选择ALU结果,存储器读取结果和PC+4其中之一作为写入目的寄存器的值;(12) 符号位扩展指示信号EXTOp,值为1表示对16位立即数进行符号位扩展,值为0表示0扩展;(13) 立即数高位取指令指示信号LUOp,值为1表示当前指令为lui指令,选择将立即数载入高16位低位填0的32位立即数作为ALU输入,值为0表示将正常扩展后的32位立即数作为ALU输入;控制信号的具体产生过程此处略去,在控制信号说明文件中进行详述。
