版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5CPU2019年6月6I/OVerilogquartus20MIPS5段流水CPU设计。采用I/O统一编址方式,即将输入输出的I/O地址空间,作为数据存I/OlwDE2实验板上的按键等输入设备信息。即将外部设备状态,读到CPU内部寄存器。利用设计的I/O端口,通过sw指令,输出对DE2实验板上的LED从CPU内部的寄存器,写入到外部设备的相应控制寄存器(或可直利用自己编写的程序代码,在自己设计的CPU上,实现对板载输入LED7段LED数码管显示出来。4bit4bit二进制输入相加,利用两LED10进制形式显示“和”等(具体任务形式不做MIPS20供以上两种指令集(MIPS和Y86)应用功能的程序设计代码,并提DE1-SOC就能够实现一个5段流水CPU。首先我仔细观察了5段流水线的CPU设flush信号,清10pipepcpipepc模块的主要作用是在时钟上升沿时,将下一条指令的地址( 写入pc。为IF阶段从instructionrom正确的下一条指令做准备。当resetn信号下降沿时,需要将pc复位到-4。需要注意的是,wpcir为低电平时,代表流水线因为lw指令发生了数据,需要插入一条nop指令。对 modulepipepc(,wpcir,clock,resetn,pc [31:0] clock,resetn output[31:0] [31:0] always@(negedgeresetnorposedge if(resetn== pc<= if(wpcir!=pc; 18pipeifpipeif模块的主要作用就是根据pc值取出下一条指令。总体的代码与单周期cpu中的非常相似。其中 _mux需要的四个信号产生在流水线需要注意的是mem_clock与单周期cpu有较大区别。因为需要给pc信号 modulepipeif(pcsource,pc,bpc,da,jpc,,pc4,ins,mem_clock [31:0]pc,bpc,jpc, output[31:0],pc4,ins6 [31:0],pc4,ins mux4x32_mux(pc4,bpc,da,jpc,pcsource, assignpc4=pc+ sc_instmemimem(pc,ins,mem_clock11pipeirpipeir模块就是IF/ID阶段的段间寄存器。在时钟上升沿处写入寄存时,flush为高电平,需要清空这一条读入的指令。1modulepipeir(pc4,ins,wpcir,flush,clock,resetn,dpc4,inst2 pc4,ins3wpcir,flush,clock,resetn4outputdpc4,inst56 dpc4,inst7 always@(posedgeclockornegedge if(resetn== dpc4<= inst<= if(wpcir!= dpc4<= if(flush==0)inst<= elseinst<= 23pipeid及控制信号的产生。从寄存器堆中取数据与单周期cpu较为类似(时钟信号需要注意。pipeif3pc的来源(bpc,jpc,da)也在而cu才是关键中的关键,需要用来管理等操作。我在着手编写程所有的控制信号都应该与wpcirwpcir信号为低电判断数据时,需要辨别当前的指令是r型、i型还是j型,它们指fwdafwdb的表达式可以通过分析,直接通过组合逻辑给出,不一定要按课件的伪代码一样通过if判断。按照上述思路,完成cu的编写后,pipeid模块中其他部分并不, modulepipeid(mwreg,mrn,ern,ewreg,em2reg,mm2reg,dpc4, wrn,wdi,ealu,malu,mmo,wwreg,clock, bpc,jpc,pcsource,wpcir,flush,dwreg,dm2reg,dwmem, daluimm,da,db,dimm,drn,dshift,djal56mrn,ern,7mm2reg,em2reg,mwreg,ewreg,wwreg,clock,8inst,wdi,ealu,malu,mmo, output[31:0]bpc,dimm,jpc,da, output wpcir,flush,dwreg,dm2reg,dwmem,daluimm,dshift,djal;q1,q2,da,fwda,rsrtequ=(da==regrt,e=sext&instdimm={{16{e}},jpc={dpc4[31:28],inst[25:0],1’offset={{14{e}},inst[15:0],1’bpc=dpc4+reg_clock= regfilerf(inst[25:21],inst[20:16],wdi,wrn,wwreg,reg_clock,resetn,q1,q2); mux4x32da_mux(q1,ealu,malu,mmo,fwda,da mux4x32db_mux(q2,ealu,malu,mmo,fwdb,db mux2x5rn_mux(inst[15:11],inst[20:16],regrt,drn sc_cucu(inst[31:26],inst[5:0],rsrtequ,dwmem,dwreg,regrt,dm2reg,daluc,dshift,daluimm,pcsource,djal,sext,wpcir,flush,inst[25:21],inst[20:16],mrn,mm2reg,mwreg,ern,em2reg,ewreg,fwda,fwdb);32cucpu中提供的代码完1modulesc_cu(op,func,rsrtequ,wmem,wreg,regrt,m2reg,aluc,shift aluimm,pcsource,jal,sext,wpcir,flush,rs,rt,mrn,mm2reg,mwreg,ern,em2reg,ewreg,fwda, assignwpcir=~(em2reg&(~(i_j|i_jal)&(r_type&ern==rt|ern==rs)));5 assignflush=(i_beq&rsrtequ)|(i_bne&~rsrtequ7 assignpcsource[1]=i_jr|i_j|i_jal assignpcsource[0]=(i_beq&rsrtequ)|(i_bne&~rsrtequ)||i_jal assignwreg=wpcir&(i_add|i_sub|i_and|i_or|i_xor i_sll|i_srl|i_sra|i_addi|i_andi i_ori|i_xori|i_lw| | assignaluc[3]=wpcir& assignaluc[2]=wpcir&(i_sub|i_or|i_lui|i_srl|i_sra| assignaluc[1]=wpcir&(i_xor|i_lui|i_sll|i_srl|i_sra| assignaluc[0]=wpcir&(i_and|i_or|i_sll|i_srl|i_sra|i_andi|i_ori); assign =wpcir&(i_sll|i_srl| assignaluimm=wpcir&(i_addi|i_andi|i_ori|i_xori|i_lw| assign =wpcir&(i_addi|i_lw|i_sw|i_beq| assignwmem=wpcir& assignm2reg=wpcir& assignregrt =wpcir&(i_addi|i_andi|i_ori|i_xori|i_lw| =wpcir& assignfwda[1]=~(ewreg&(ern!=0)&(ern==rs)&~em2reg)&(mwreg&(mrn!=0)&(mrn==rs)); assignfwda[0]=(ewreg&(ern!=0)&(ern==rs)&~em2reg)|(mwreg&(mrn!=0)&(mrn==rs)&mm2reg); assignfwdb[1]=~(ewreg&(ern!=0)&(ern==rt)&~em2reg)&(mwreg&(mrn!=0)&(mrn==rt)); assignfwdb[0]=(ewreg&(ern!=0)&(ern==rt)&~em2reg)|(mwreg&(mrn!=0)&(mrn==rt)&mm2reg);32pipederegpipederegID/EX段间寄存器,并无值得赘述的部分,完全就pipeexe1modulepipeexe(ealuc,ealuimm,ea,eb,eimm,eshift,ern0,epc4,ejalern,ealu [31:0]ea,eb,eimm, ealuimm,eshift,ejal output[31:0] output [31:0]a,b,r [31:0]epc8=epc4+ [4:0]ern=ern0| mux2x32a_mux(ea,eimm,eshift,a mux2x32b_mux(eb,eimm,ealuimm,b mux2x32ealu_mux(r,epc8,ejal,ealu al_unit(a,b,ealuc,r15pipeemregpipeemregEX/MEM段间寄存器,同样没有值得赘述的部分,pipememipemem经完成了IO唯一值得注意的就是时钟信号,此前实验的代码中write_enable=we也就是clock下降沿处。因此,在写入时,恰好write_enable也处于跳变过 问题。因此只要简单地令write_enable=we即可,这样做的一个前提是,we50MHz的频率下并不构除此以外,sc_datamem模块及其调用的模块与单周期实验中完全相1modulepipemem(resetn,mwmem,malu,mb,clock,mem_clock,mmo,in_port0,in_port1,in_port2,out_port0,out_port1,out_port2);2mwmem,clock,3 malu,mb,in_port0,in_port1,45outputmmo,out_port0,out_port1,6mem_clock= sc_datamemdmem(resetn,malu,mb,mmo,mwmem,mem_clock,in_port0,in_port1,in_port2,out_port0,out_port1,8pipemwregpipemwregMEM/WB由于I/O部分的代码与上次实验中完全相同,因此不再一一展示。直接进入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工装吊顶合同范本
- 二零二四年度店面买卖合同
- 二零二四年份生态园艺租赁合同
- 个人车辆租赁合同
- 二零二四年度挂靠出租车企业品牌宣传合同
- 二零二四年度火锅店加盟协议
- 购买床铺合同范本
- 二零二四年度专利实施许可合同(含许可范围与实施方式)
- 二零二四年度安置房室内空气质量检测合同
- 二零二四年度配送车燃油补贴协议
- 泸州老窖“浓香文酿杯”企业文化知识竞赛考试题库大全-下(多选、填空题)
- 《Excel数据分析》考试复习题库(含答案)
- 智能建筑的通信网络
- YC/T 613-2024烟草企业有限空间作业安全技术规范
- 离婚返还彩礼起诉状范本合集
- DZ∕T 0211-2020 矿产地质勘查规范 重晶石、毒重石、萤石、硼(正式版)
- 国家基层糖尿病神经病变诊治指南(2024版)
- 人体常见病 知到智慧树网课答案
- SJG 164-2024 自密实混凝土应用技术规程
- 2.1.1 中国的地形(山脉纵横交织)(课件) 八年级地理 (湘教版)
- 《雁门太守行》复习省公开课一等奖全国示范课微课金奖课件
评论
0/150
提交评论