欢迎来到天天文库
浏览记录
ID:47413979
大小:264.13 KB
页数:23页
时间:2020-01-10
《系统硬件综合设计说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、........计算机与信息学院《系统硬件综合设计》课程设计报告学生姓名:李学号:1234567890.专业学习资料.........专业班级:计算机2017年07月01日一、实验原理及设计.专业学习资料.........本次试验我主要根据上图进行理解和编程,起先参考了5个基础实验,期间又翻阅了自己动手写cpu,并且在网上查了很多资料,下面我将对该图做出我的理解和设计:1.pcf部分always@(posedgeClk)beginPCPlus4F_Reg=PCPlus4F;if(BranchM&ZeroM)PCF=PCBranchM;elsePCF=PCPlus4F;Instr
2、uctionF_Reg=InstructionF;if(InstructionF[31:26]==6'b000010)beginPCF={6'h0,InstructionF[25:0]};PCF=PCF<<2;endEndassignPCPlus4F=PCF+4;assignImemRdAddrF=PCF;.专业学习资料.........每个时钟上升沿到来,根据上一个时钟的PCSrcM判断是否为分支指令,若是,则选择PCBranchM作为这个时钟的指令地址,否则选PCF+4作为这个指令的指令地址,另外对于J类指令,我设计了一个特定的OpCode==“000010”,即为跳转指令
3、,因为每个指令以字节格式存储,占用,4个字节,故将后26位立即数进行位扩展后将其左移两位,效果等同于乘4,再将其赋值给PCF,这样下一跳的指令地址即为所要跳转的地址。对于这个部分,我起先是准备将其设计成一个模块的,之后由于模块接口连接时出现了无法解决的错误:输出PCF要作为InstructionMemory的输入,又要作为自身模块下一跳的输入,导致三者关联一起变化,程序报错,后来我又想到将PCF的输出改成两个,PCFout及PCFnext,PCFout作为InstructionMemory的输入,PCFnext作为自身模块下一跳的输入,但是程序仍无法正常运行,最后我想到了在to
4、p模块中对PCF进行处理并得以实现。2.InstructionMemory模块initialbegin$readmemh("instruction",InstMem,8'h0);endalways@(ImemRdAddr)beginInstruction<=InstMem[ImemRdAddr>>2];end这个模块很简单,主要是通过instructin文档来存储指令,以PCF作为地址取出指令输出至Control,SignExtend,Register三个模块。3.Ctr模块always@(OpCode)begincase(OpCode).专业学习资料.........//R-
5、I//addiu6'b001001:beginRegDstD=1;ALUSrcD=1;MemtoRegD=0;RegWriteD=1;MemWriteD=0;BranchD=0;ALUOp=2'b10;end//addi......endcaseendalways@(ALUOporFunct)begincasex({OpCode,ALUOp,Funct})14'b10001100xxxxxx:ALUControlD=5'b00010;//LW:add14'b00010001xxxxxx:ALUControlD=5'b00110;//SW:substractbeq.......专
6、业学习资料.........endcaseendendmoduleControl模块主要对来自InstructionMemory模块的指令进行分解,得到OpCode(指令高六位),Funct(指令低六位),在通过分析OpCode得到RegDstD,ALUSrcD,MemtoRegD,RegWriteD,BranchD,ALUOp这六个信号量,用于后面的运算,再使用OpCode,ALUOp,Funct三者的组合对指令的运算方法进行分析,得到相应的ALUControlD输出至ALU模块。4.Register模块initialbegin$readmemh("register",reg
7、File,32'h0);end//writeonfallingclockedgealways@(posedgeClk)beginif(RegWrite==1'b1)regFile[RegWrAddr]<=RegWrData;endassignRegARdData=(RegARdAddr>=0)?regFile[RegARdAddr]:0;.专业学习资料.........assignRegBRdData=(RegBRdAddr>=0)?regFile[RegBRdAddr]:0;通过信号量Re
此文档下载收益归作者所有