CPU实验 - 单周期MIPS处理器设计
更新时间:2023-09-23 00:52:01 阅读量: 人文社科 文档下载
- cpu实验总结推荐度:
- 相关推荐
单周期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位立即数左移两位后再符号位扩展成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输入;
控制信号的具体产生过程此处略去,在控制信号说明文件中进行详述。
下图为数据通路的总体原理图:
5、寄存器堆模块
寄存器堆模块RegFile根据$Rs,$Rt,$Rd的值和写寄存器使能信号RegWr完成对寄存器堆的读写操作。
6、ALU模块
根据指令内容进行选择后得到两个ALU操作数和ALU运算控制信号ALUFunc及有无符号数指示信号作为ALU输入,完成算术运算、位运算、逻辑运算、移位运算和比较运算,输出为运算结果ALUResult。
7、数据存储器模块
通过读写使能信号、读写地址和写入内容完成对数据存储器的读写操作。
8、外设模块
完成对除UART部分的外设的读写操作,以及实现定时器功能,此模块为实验提供模块。
9、UART模块
此模块通过对串口对应外设地址的读写操作,完成串口收发器的数据接收和数据发送功能。
10、存储器读取结果
读存储器的结果可能是数据存储器或外设中的内容,因此要通过读存储器的地址进行选择,此处该地址即为ALU的计算结果ALUResult(lw指令的读取地址为$Ra寄存器的值加上偏移量),若ALUResult高两位为00表示读取的是数据存储器,若高两位为其它(实际上是01)表示读取的是外设。若ALUResult[5]为1或ALUResult[4]、[3]为0表示读取UART内容,否则表示读取其他外设的内容。
三、关键代码及文件清单
1、分频模块 CPU_clk.v 2、PC产生模块
assign imm16_sll_2bits = {{14{imm16[15]}},{imm16,2'b00}}; assign JT = {PC[31:28],target,2'b00}; assign ILLOP = 32'h80000004; assign XADR = 32'h80000008;
Adder add1(.A(PC),.B(4),.CIN(1'b0),.S(PC_Add_4));
Adder add2(.A(PC_Add_4),.B({imm16_sll_2bits}),.CIN(1'b0),.S(ConBA));
always @ (posedge clk or negedge reset) begin if (!reset) PC <= 32'h8000_0000; else if (PCSrc == 0) PC <= PC_Add_4; else if (PCSrc == 1 && ALUResult[0] == 1'b0) PC <= PC_Add_4; else if (PCSrc == 1 && ALUResult[0] == 1'b1) PC <= ConBA; else if (PCSrc == 2) PC <= JT;
else if (PCSrc == 3) PC <= DataBusA; else if (PCSrc == 4) PC <= ILLOP; else PC <= XADR; end 3、数据通路
ROM IF(.addr(PC),.data(Instruction));
OpcodeToControl control(.OpCode(OpCode),.Funct(Funct),.irq(irq),
.PC31(PC[31]),.IsR(IsR),.PCSrc(PCSrc),.RegDst(RegDst),.RegWr(RegWr),.ALUSrc1(ALUSrc1),.ALUSrc2(ALUSrc2), .ALUFunc(ALUFunc),.Sign(Sign),.MemWr(MemWr), .MemRd(MemRd),.MemToReg(MemToReg),.EXTOp(EXTOp),.LUOp(LUOp));
RegFile RF(.reset(reset),.clk(clk),.addr1(Rs),.data1(DataBusA),.addr2(Rt), .data2(DataBusB), .wr(RegWr),.addr3(RegWrAddr),.data3(DataBusW));
ALU alu(.SrcA(SrcA),.SrcB(SrcB),.ALUFunc(ALUFunc),.Sign(Sign),
.ALUResult(ALUResult),.Zero(Zero),.OverFlow(OverFlow),.Negative(Negative)); DataMem dm(.reset(reset),.clk(clk),.rd(MemRd),.wr(MemWr),.addr(ALUResult), .wdata(DataBusB),.rdata(DataMemResult));
Peripheral per(.reset(reset),.clk(clk),.rd(MemRd),.wr(MemWr),.addr(ALUResult), .wdata(DataBusB),.rdata(PeripheralResult),.led(led),.switch(switch),.digi(digi),.irqout(irq) ); UART uart(.clk(clk),.rd(MemRd),.wr(MemWr),.wdata(DataBusB),.reset(reset), .DataIn(UARTIn),.addr(ALUResult),.DataOut(UARTOut),.rdata(UARTResult));
assign MemRdData = (ALUResult[31:30] == 2'b00) ? DataMemResult :
(ALUResult[5] == 1'b1 | (ALUResult[4] && ALUResult[3])) ? UARTResult : PeripheralResult;
代码文件见附件。
四、仿真结果及分析
第一组输入为00001111(15)和00000101(5),输出为00000101(5); 第二组输入为00000011(3)和00001001(9),输出为00000011(3); 计算结果正确,UART、led、数码管均显示正确。
正在阅读:
CPU实验 - 单周期MIPS处理器设计09-23
供货进度计划及保证措施的承诺08-07
合成氨工艺流程图08-31
天源液化气站质量手册(doc 65页)05-06
2016考研政治:《论十大关系》解读12-13
拼一拼习题(带答案)-人教版数学一年级下第一章认识图形(二)第2节03-20
河北艺考网:2016河北艺考报名时间02-08
党员党性分析02-16
X62W万能铣床工作原理12-10
20年后的家乡作文02-04
- 粮油储藏基础知识
- 论文范文(包括统一封面和内容的格式)
- 经典解题方法
- 综合部后勤办公用品管理办法+领用表
- 学生宿舍突发事件应急预案
- 16秋浙大《生理学及病理生理学》在线作业
- 四分比丘尼戒本(诵戒专用)
- 浙江财经大学高财题库第一章习题
- 九大员岗位职责(项目经理、技术负责人、施工员、安全员、质检员、资料员、材料员、造价员、机管员)
- 旅游财务管理习题(学生版)
- 德阳外国语高二秋期入学考试题
- 投资学 精要版 第九版 第11章 期权市场
- 控制性详细规划城市设计认识
- bl03海运提单3国际贸易答案
- 2010-2011学年湖北省武汉市武珞路中学七年级(上)期中数学试卷
- VB程序填空改错设计题库全
- 教师心理健康案例分析 - 年轻班主任的心理困惑
- 民间借贷司法解释溯及力是否适用?
- 三联书店推荐的100本好书
- 《化工原理》(第三版)复习思考题及解答
- 处理器
- 周期
- 实验
- 设计
- MIPS
- CPU
- 新系统上线切换系统的方法和注意事项
- 人教版数学四年级下册第一单元四则运算教案
- 常州技术人员继续教育沟通与协调能力试题答案
- 第七章信号处理电路
- 《草房子》练习(1 - 4章)
- 11-047高级技师-配电线路工
- 高中化学专题复习九(铁及其化合物)
- 卓达集团与重庆市合川区政府签约共建长江经济带上游生态产业新城 - 图文
- 地面施工考试题有答案
- 2016届高三生物二轮复习第一部分知识落实篇专题三细胞的生命历程第1讲细胞增殖和受精作用配套作业
- 屯祥苑高层施工组织设计 - 图文
- 大石朱氏 - 图文
- 最新审定2018-2019年新人教版三年级上册数学期末测试题
- 技术交底(底板模板)
- 许真君《玉匣记》日期
- 对外经贸大学434国际商务2014年真题参考答案
- 中国平安保险(集团)股份有限公司资产负债表分析
- 质量手册2011年(批准页、公正性声明、目录)
- 城市规划论文
- 北京市重点中学2014-2015学年高一上学期期中数学试卷