




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子线路设计实验测试 单 周 期 类 MIPS 微 处 理 器 设 计 专业: 电子信息工程 姓名: 朱 东 福 班级: 201401 班 学号: 日期: 年 月 日 专业 电子信息与通信学院 班级 电信 1401班 日期 2016/11/12 第 2 次试验 姓名 组别 15 指导老师 左冬红 成绩 实验课题 单周期类 MIPS微处理器设计 一、 实验目的 1. 了解微处理器的基本结构。 2. 掌握哈佛结构的计算机工作原理。 3. 学会设计简单的微处理器。 4. 了解软件控制硬件工作的基本原理。 二、 实验环境 1、 Windows7操作系统 2、 QtSpim 3、 Xilinx ISE14.3 三、 实验任务 利用 HDL语言,基于 Xilinx FPGA nexys4实验平台,设计一个能够执行以下 MIPS 指令集的单周期类 MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执 行的正确性。并且要求编写汇编程序将本人学号的 ASCII码存入 RAM的连续内存区 域 支持基本的内存操作如 lw,sw 指令 支持基本的算术逻辑运算如 add,sub,and,or,slt,addi 指令 支持基本的程序控制如 beq,j 指令 基本要求编写汇编程序将本人学号的 ASCII码存入 RAM的连续内存区域(仿真) 提高要求:能够将开关状态输入,显示在发光二极管上(下载) 四、 实验原理 1、 基本原理 a d d a d d 指令存储器 地址总线 指令 P C 4 寄存器组 读寄存器 1 地址 读寄存器 2 地址 写寄存器地址 写数据 寄存器 1 数据 寄存器 2 数据 符号扩展 M U X A L U M U X 数据存储器 数据总线 数据总线 地址总线 左移两位 + P C 的高 4 位 2 8 位 2 6 位 3 2 位 M U X M U X z e r o 1 6 位 3 2 位 左移两位 M U X 指令 2 5 : 0 指令 5 : 0 指令 1 5 : 0 指令 1 5 : 1 1 指令 2 0 : 1 6 指令 2 5 : 2 1 A L U 控 制译码 J u m p B r a n c h A L U S r c M e m T o R e g R e g D s t R e g W r i t e M e m W r i t e M e m R e a d A L U O p 1 : 0 0 1 0 1 1 0 0 1 控 制 器 指令 3 1 : 2 6 2、 各模块实现原理 1. coe文件制作 (1) 汇编指令如下: main: add $4,$2,$3 lw $4,4($2) sw $2,8($2) addi $4,$4,0 sub $2,$4,$3 or $2,$4,$3 and $2,$4,$3 slt $2,$4,$3 beq $4,$3,exit addi $3,$0,85 #U sw $5,0($6) addi $3,$0,50 #2 sw $5,4($6) addi $3,$0,48 #0 sw $5,8($6) addi $3,$0,49 #1 (2) 用 qtspim运行汇编指令得到相应机器码如下: sw $5,12($6) addi $3,$0,52 #4 sw $5,16($6) addi $3,$0,49 #1 sw $3,20($6) addi $3,$0,51 #3 sw $3,24($6) addi $3,$0,50 #2 sw $3,28($6) addi $3,$0,55 #7 sw $3,32($6) addi $3,$0,56 #8 sw $3,36($4) j main exit:lw $2,0($3) j main MEMORY_INITIALIZATION_RADIX=16; MEMORY_INITIALIZATION_VECTOR= 00432020, 8c440004, ac420008, 00831022, 00831025, 00831024, 0083102a, 10830002, 20030055, ac830000, 20030032, ac830004, 20030030, ac830008, 20030031, ac83000c, 2. 指令存储器设计 指令存储器为 ROM类型的存储器,为单一输出指令的存储器。设置一个程序计数器指 针 PC指向指令存储器,当时钟上升沿到来时,取出 PC所指的指令,当时钟的下降沿到来 时,修改 PC的值,使其指向下一条要执行的指令。因此其对外的接口为 clk、存储器地址 输入信号(指令指针)以及数据输出信号(指令) 。在本实验中调用 ISE提供的 IP核进行 设计,设定的指令存储器大小为 128字。 指令存储器模块在顶层模块中被调用。输入为指令指针(PC)与时钟信号(clkin) , 输出为 32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立 即数符号扩展模块进行相应的处理。 3. 数据存储器设计 数据存储器为 RAM类型的存储器,并且需要独立的读写信号控制。因此其对外的接口 为 clk、we、datain、addr;输出信号为 dataout。当时钟上升沿到来时,如果写信号 (we)为真,根据 addr所表示的地址找到对应的存储单元,并将输入的数据(datain)写 到对应的存储单元中;如果写信号为假,则根据 addr所表示的地址,将对应存储单元的数 据送到输出端(dataout) 。在本实验中调用 ISE提供的 IP核进行设计,设定的数据存储器 大小为 64字。 数据存储器模块在顶层模块中被调用。输入的时钟信号来自于顶层模块的 clkin,addr 信号来自于 ALU单元的输出端(对基地址与偏移量执行加操作) ,datain 来自 于寄存器组的第二个数据输出端(Rtdata) ,而控制信号 we则来自于控制器对指令的译码。 输出数据 dataout通过一个选择器(MUX3)决定是否写入到相应的寄存器。 4. 立即数符号扩展模块设计 对于 I型指令,将指令的低十六位作为立即数符号扩展模块的输入 inst15:0,如果 十六位立即数的最高位(即符号位)为 1,则在 inst15:15前面补 16个 1,如果为 0,则 在前面补 16个 0。然后将符号扩展之后的 data31:0通过一个选择器(即 MUX2)输送到 ALU单元的第二个源操作数输入端(即 input2) 。 代码如下: 20030034, ac830010, 20030031, ac830014, 20030033, ac830018, 20030032, ac83001c, 20030037, ac830020, 20030038, ac830024, 08000000, 8c620000, 08000000, module signext( input 15:0 inst, output 31:0 data ); assign data=inst15:15?16hffff,inst:16h0000,inst; endmodule 5. 寄存器组设计 寄存器组是指令操作的主要对象,MIPS 中一共有 32个 32位寄存器。在指令的操作过 程中需要区分 Rs、Rt、Rd 的地址和数据,并且 Rd的数据只有在寄存器写信号有效时才能 够写入,因此该模块的输入为 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 ); reg31:0 regs0:31; assign RsData = (RsAddr = 5b0)?32b0:regsRsAddr; assign RtData = (RtAddr = 5b0)?32b0:regsRtAddr; integer i; always (posedge clk) begin if(!reset) begin if(regWriteEn=1) begin regsregWriteAddr=regWriteData; end end else begin for(i=0;i31;i=i+1) regsi=0; regs31=32hffffffff; end end endmodule 6. 控制器设计 控制器输入为指令的 opCode字段,即操作码。操作码经过主控制单元的译码,给 ALUCtrl、Data Memory、Registers、Muxs 等部件输出正确的控制信号。 指令 opcode R型:add,sub,and,or,slt 000000 I型:lw 100011 I型:sw 101011 I型:beq 000100 J型:J 000010 I型:addi 001000 该模块在顶层模块中被调用,输入的 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; reg1:0 aluop; reg jmp; always (opCode) begin case(opCode) 6b000010:/jmp begin regDst=0; aluSrc=0; memToReg=0; regWrite=0; memRead=0; memWrite=0; branch=0; aluop=2b00; jmp=1; end 6b000000:/R begin regDst=1; aluSrc=0; memToReg=0; regWrite=1; memRead=0; memWrite=0; branch=0; aluop=2b10; jmp=0; end 6b100011:/lw begin regDst=0; aluSrc=1; memToReg=1; regWrite=1; memRead=1; memWrite=0; branch=0; aluop=2b00; jmp=0; end 6b101011:/sw begin regDst=0; aluSrc=1; memToReg=0; regWrite=0; memRead=0; memWrite=1; branch=0; aluop=2b00; jmp=0; end 6b000100:/beq begin regDst=0; aluSrc=0; memToReg=0; regWrite=0; memRead=0; memWrite=0; branch=1; aluop=2b01; jmp=0; end 6b001100:/andi begin regDst=0; aluSrc=1; memToReg=0; regWrite=1; memRead=0; memWrite=0; branch=0; aluop=2b11; jmp=0; end default: begin regDst=0; aluSrc=0; memToReg=0; regWrite=0; memRead=0; memWrite=0; branch=0; aluop=2b00; jmp=0; end endcase end endmodule 7. ALU控制设计 ALU单元对应的 5种操作的编码。 MIPS指令中具有 6位操作码,如果为 R型指令,进一步采用 6位功能码来表示 R型指 令的具体操作。由于设计的微处理器支持的运算类指令全部为 R型指令,因此可以通过对 R型指令的 6位功能码编码产生 ALU的 4为控制信号。但是 lw、sw 以及 beq、j 型指令没 有功能码,因此需要区分指令的类型。由于只有三类指令需要 ALU单元,因此可以采用两 位二进制码对指令的 ALU操作类型进行编码。指令的 ALU操作类型编码由指令译码器产生。 通过 2 位操作类型码以及 6 位指令功能码就可以产生 ALU 单元的 4 位控制信号。 指令 2 位操作码 指令功能 6 位功能码 ALU 的运算 ALU 的控制信号 LW 00 取字 XXXXXX 加 0010 SW 00 存字 XXXXXX 加 0010 BEQ 01 相等跳转 XXXXXX 减 0110 R 型指令 10 加 100000 加 0010 R 型指令 10 减 100010 减 0110 R 型指令 10 与 100100 与 0000 R 型指令 10 或 100101 或 0001 R 型指令 10 小于设置 101010 小于设置 0111 ADDI 11 加立即数 XXXXXX 加 0010 因此该模块的主要功能就是根据译码控制单元产生的 2 位操作码以及 6 位功能码产生 4 位 ALU 控制信号,因此输入信号为 aluop(2 位) 、funct(6 位) ,输出信号为 aluctr(4 位) 。ALU 控制模块在顶层模块被调用。aluop 来自于控制器对指令的 6 位 opcode 的译码,而 funct 来自于指令的后 6 位。 module aluctr( input 1:0 ALUOp, input 5:0 funct, output 3:0 ALUCtr ); reg3:0 ALUCtr; always (ALUOp or funct) casex(ALUOp,funct) 8b00xxxxxx:ALUCtr=4b0010; 8b01xxxxxx:ALUCtr=4b0110; 8b11xxxxxx:ALUCtr=4b0000; 8b10xx0000:ALUCtr=4b0010; 8b10xx0010:ALUCtr=4b0110; 8b10xx0100:ALUCtr=4b0000; 8b10xx0101:ALUCtr=4b0001; 8b10xx1010:ALUCtr=4b0111; endcase endmodule 8. ALU设计 在这个简单的 MIPS指令集中,微处理器支持的 add、sub、and、or 和 slt运算指令, 需要利用 ALU单元实现运算,同时数据存储指令 sw和 lw也需要通过 ALU单元计算存储器 地址,条件跳转指令 beq需要 ALU来比较两个寄存器是否相等。所有这些指令包含的操作 为加、减、与、或和小于设置 5钟不同的操作。 该模块根据输入控制信号对输入数据进行相应的操作,并获得输出结果以及零标识, 由于 MIPS处理器 ALU单元利用 4根输入控制信线的译码决定执行何种操作,于是该操作的 输入接口为 input1、input2 和 aluCtr,输出端口为 zero和 aluRes。 ALU 模块在顶层模块被调用。input1 来自于寄存器组模块输出信号 Rsdata,input2 来 自于寄存器组模块输出信号 Rtdata 或者是立即数符号扩展模块的输出信号(通过一个选择 器 MUX2 进行选择) ,aluCtr 来自于 aluctr 模块的输出端。 aluRes 与 zero 为 ALU 单元的运算 结果,其中 zero 主要用于 beq 指令。 代码如下: module ALU( input 31:0 input1, input 31:0 input2, input 3:0 aluCtr, output 31:0 aluRes, output zero ); reg zero; reg31:0 aluRes; always (input1 or input2 or aluCtr) begin case(aluCtr) 4b0110: begin aluRes=input1-input2; if(aluRes=0) zero=1; else zero=0; end 4b0010: aluRes=input1+input2; 4b0000: aluRes=input1 4b0001: aluRes=input1|input2; 4b1100: aluRes=(input1|input2); 4b0111: begin if(input1input2) aluRes = 1; end default: aluRes = 0; endcase end endmodule 9. 顶层设计 顶层模块需要将前面的多个模块实例化后,通过导线以及多路复用器将各个部件连接 起来,并且在时钟的控制下修改 PC的值,PC 是一个 32位的寄存器,每个时钟沿自动增加 4。 多路复用器 MUX直接通过三目运算符实现,例如 assign OUT = SEL ? INPUT1 : INPUT2; 其中,OUT、SEL、INPUT1 和 INPUT2都是预先定义的信号。 代码如下: module top( input clkin, input reset ); reg31:0 pc,add4; wire choose4; wire31:0 expand2,mux2,mux3,mux4,mux5,address,jmpaddr,inst; wire4:0 mux1; /wire for controller wire reg_dst,jmp,branch,memread,memwrite,memtoreg; wire1:0 aluop; wire alu_src,regwrite; /wire for aluunit wire zero; wire31:0 aluRes; /wire for aluctr wire3:0 aluCtr; /wire for memory wire31:0 memreaddata; /wire for register wire31:0 RsData,RtData; /wireforext wire31:0 expand; always (negedge clkin) begin if(!reset) begin pc=mux5; add4=pc+4; end else begin pc=32b0; add4=32h4; end end ctr mainctr( .opCode(inst31:26), .regDst(reg_dst), .aluSrc(alu_scr), .memToReg(memtoreg), .regWrite(reg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南基础知识试题及答案
- 2024年纺织品检验员考前复习细节探讨试题及答案
- 新手护肤测试题及答案
- 深度挖掘考试难点的技巧试题及答案
- 2024年国际设计师考试思维方式试题及答案
- 现代广告设计的多维空间应用试题及答案
- 广告设计师考试设计反馈与改进题型及答案
- 助理广告师考试广告文案评估试题及答案
- 如何提升个人设计作品的影响力试题及答案
- 2024年纺织品检验员考试考题变化分析试题及答案
- HDC56海盗船(A级)设计计算书
- 汉语与中国文化教学大纲(汉语国际教育)
- 珠海住建局质量问题防治脱落和开裂防治篇
- 【初中历史】史前时期:原始社会与中华文明的起源检测题-2024-2025学年统编版七年级历史上册
- 职业暴露应急预案演练
- 2024年秋江苏开放大学文献检索与论文写作参考范文一:行政管理专业
- DB11T 1493-2017 城镇道路雨水口技术规范
- 2024关于深化产业工人队伍建设改革的建议全文解读课件
- 《民法典》2024年知识考试题库(含答案)
- 高中化学新课标知识考试题库大全(新版)
- 2024年江苏南京金陵中学特长生选拔考试数学试题(含答案详解)
评论
0/150
提交评论