计算机组成CPU数据通路verilog实验报告(共11页)

上传人:文**** 文档编号:53527094 上传时间:2022-02-10 格式:DOC 页数:11 大小:58.50KB
收藏 版权申诉 举报 下载
计算机组成CPU数据通路verilog实验报告(共11页)_第1页
第1页 / 共11页
计算机组成CPU数据通路verilog实验报告(共11页)_第2页
第2页 / 共11页
计算机组成CPU数据通路verilog实验报告(共11页)_第3页
第3页 / 共11页
资源描述:

《计算机组成CPU数据通路verilog实验报告(共11页)》由会员分享,可在线阅读,更多相关《计算机组成CPU数据通路verilog实验报告(共11页)(11页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上计算机组成与系统结构实验报告院(系): 计算机科学与技术学院专业班级: 学 号: 姓 名: 同 组 者: 指导教师: 实验时间: 2012 年 5 月 23 日 实验目的:完成处理器的单周期cpu的设计。实验仪器:PC机(安装Altebra 公司的开发软件 QuartusII)一台实验原理:控制器分为主控制器和局部ALU控制器两部分。主控制器的输入为指令操作码op,输出各种控制信号,并根据指令所涉及的ALU运算类型产生ALUop,同时,生成一个R-型指令的控制信号R-type,用它来控制选择将ALUop输出作为ALUctr信号,还是根据R-型指令中的func字段来产生

2、ALUctr信号。实验过程及实验记录:1. 设计过程:第一步:分析每条指令的功能,并用RTL来表示。第二步:根据指令的功能给出所需的元件,并考虑如何将它们互连。第三步:确定每个元件所需控制信号的取值。第四步:汇总各指令涉及的控制信号,生成所反映指令与控制信号之间的关系图。第五步:根据关系表,得到每个控制信号的逻辑表达式,据此设计控制电路。2.完成代码的编写,并调试运行。1)controlmodule Control(op,func,Branch,Jump,RegDst,ALUSrc,ALUctr,MemtoReg,RegWr,MemWr,ExtOp);input 5:0 op,func;out

3、put reg Branch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp;output reg 2:0 ALUctr;always (op)case(op)6b:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr=0;case(func)6b:ALUctr=3b001;6b:ALUctr=3b101;6b:ALUctr=3b100;6b:ALUctr=3b111;6b:ALUctr=3b110;endcaseend6b:beginBranch=0;Jump=0;RegDs

4、t=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;ALUctr=3b010;end6b:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3b000;end6b:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3b000;end6b:beginBranch=0;Jump=0;ALUSrc=1;RegWr=0;MemWr=1;E

5、xtOp=1;ALUctr=3b000;end6b:beginBranch=1;Jump=0;ALUSrc=0;RegWr=0;MemWr=0;ALUctr=3b100;end6b:beginBranch=0;Jump=1;RegWr=0;MemWr=0;endendcaseendmodule2)数据通路DataRoadmodule DataRoad(Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUctr,ALUSrc,busA,busB,busW,Instruction,Reg0,Reg1,Reg2,Reg3,Reg4,Mem

6、1,Mem2,Mem3,Result,Im);input Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUSrc;input 2:0 ALUctr;output 31:0 Instruction,busA,busB,busW,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,Mem2,Mem3,Result,Im;wire 31:0 busC,DataOut;wire 15:0 im;wire 4:0 Rs,Rd,Rt;wire Overflow,Zero;QZL qzl(Clk,Branch,Jump,Zero,In

7、struction,Run);assign Rs=Instruction25:21;assign Rt=Instruction20:16;assign Rd=Instruction15:11;assign im=Instruction15:0;Register register(Run,RegWr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);ALU alu(busA,busC,ALUctr,Zero,Overflow,Result);DataMem(Run,MemWr,Clk,busB,DataOu

8、t,Result,Mem1,Mem2,Mem3);MUX mux1(ALUSrc,busB,Im,busC);MUX mux2(MemtoReg,Result,DataOut,busW);Extender ext(im,Im,ExtOp);endmodule3)取指令module QZL(Clk,Branch,Jump,Zero,Instruction,Run);input Clk,Branch,Jump,Zero,Run;output 31:0 Instruction;wire 4:0 addmem;reg 29:0 PC;wire 29:0 Newpc,pc_1,pc_2,pc_3,pc_

9、12,imm30;wire Branch_Zero;assign addmem=PC2:0,2b00;InsMem GetIns(addmem,Instruction);always (negedge Clk)if(Run=1)beginPC=Newpc;endelsebeginPC=0;endassign pc_1=PC+1;assign imm30=14Instruction15,Instruction15:0;assign pc_2=pc_1+imm30;assign pc_3=PC29:26,Instruction25:0;assign Branch_Zero=Branch&Zero;

10、MUX m1(Branch_Zero,pc_1,pc_2,pc_12);MUX m2(Jump,pc_12,pc_3,Newpc);endmodulemodule InsMem(addmem,Instruction);input 4:0 addmem;output reg31:0 Instruction;reg 31:0 Mem31:0;always (*)beginMem0=6b,5b00000,5b00001,5b00000,5b00000,6b;Mem4=6b,5b00000,5b00010,5b00000,5b00000,6b;Mem8=6b,5b00001,5b00010,5b000

11、11,5b00000,6b;Mem12=6b,5b00000,5b00011,5b00000,5b00000,6b;Mem16=6b,5b00100,5b00100,5b11111,5b11111,6b;Mem20=6b,5b00011,5b00010,5b00010,5b00000,6b;Mem24=6b,5b00010,5b00001,5b00000,5b00000,6b;Mem28=6b,5b00000,5b00000,5b00000,5b00000,6b;endalways (*)Instruction=Memaddmem;Endmodule4)ALUmodule ALU(A,B,AL

12、Uctr,Zero,Overflow,Result);parameter n=32;input n-1:0 A,B;input 2:0 ALUctr;output Zero,Overflow;output n-1:0 Result;wire SUBctr,OVctr,SIGctr,SignA,SignB,Cin;wire 1:0 OPctr;wire n-1:0 X,Y,Z,Less,M,N,Add_Result;wire Add_Carry,Add_Overflow,Add_Sign;assign M=n1b0;assign N=n1b1;assign SUBctr=ALUctr2;assi

13、gn OVctr=!ALUctr1&ALUctr0;assign SIGctr=ALUctr0;assign OPctr1=ALUctr2&ALUctr1;assign OPctr0=!ALUctr2&ALUctr1&!ALUctr0;assign Cin=SUBctr;assign X=BnSUBctr;assign Y=A|B;Adder ad(Cin,A,X,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);assign SignA=CinAdd_Carry;assign SignB=Add_OverflowAdd_Sign;assign

14、Overflow=Add_Overflow&OVctr;MUX m1(SIGctr,SignA,SignB,Less);defparam m1.k=1;MUX m2(Less,M,N,Z);MUX3_1 m3(Add_Result,Y,Z,Result,OPctr);endmodulemodule MUX3_1(A,B,C,D,ctr);parameter k=32;input k-1:0 A,B,C;output reg k-1:0 D;input 1:0 ctr;always (A or B or C or ctr)if(ctr=2b00) D=A;elseif(ctr=2b01) D=B

15、;elseif(ctr=2b10) D=C;endmodulemodule Adder(Cin,X,Y,Add_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);parameter k=32;input k-1:0 X,Y;input Cin;output reg k-1:0 Add_Result;output Add_Carry,Add_Overflow,Add_Sign,Zero;reg Add_Carry;assign Zero=|Add_Result;assign Add_Sign=Add_Resultk-1;assign Add_Overflo

16、w=(Xk-1&Yk-1&Add_Resultk-1)|(Xk-1&Yk-1&Add_Resultk-1);always (X or Y or Cin)Add_Carry,Add_Result=X+Y+Cin;Endmodule5)数据存数module DataMem(Run,MemWr,Clk,DataIn,DataOut,Adr,Mem1,Mem2,Mem3);input Run,MemWr,Clk;input 31:0 DataIn,Adr;output 31:0 DataOut;output 31:0 Mem1,Mem2,Mem3;reg31:0 Mem31:0;assign Mem1

17、=Mem1;assign Mem2=Mem2;assign Mem3=Mem3;assign DataOut=MemAdr;always (negedge Clk)if(Run=0)beginMem0=0;Mem1=10;Mem2=20;Mem3=30;endelsebeginif(MemWr=1)MemAdr=DataIn;endendmodule6)寄存器module Register(Run,Regwr,Overflow,RegDst,Rd,Rs,Rt,busW,busA,busB,Clk,Reg0,Reg1,Reg2,Reg3,Reg4);input Regwr,Clk,RegDst,

18、Run,Overflow;input 31:0 busW;input 4:0 Rd,Rt,Rs;output reg 31:0 busA,busB;output 31:0 Reg0,Reg1,Reg2,Reg3,Reg4;reg 31:0 Mem31:0;reg 4:0 Rw;wire 4:0 Ra,Rb;wire RegWr;assign RegWr=Regwr&Overflow;assign Ra=Rs;assign Rb=Rt;assign Reg0=Mem0;assign Reg1=Mem1;assign Reg2=Mem2;assign Reg3=Mem3;assign Reg4=M

19、em4;always (Rd or Rt or RegDst)if(RegDst=1b1)Rw=Rd;elseRw=Rt;always (negedge Clk)if(Run=1b1)beginif(RegWr=1b1)MemRw=busW;endelsebeginMem0=0;Mem1=2;Mem2=4;Mem3=6;Mem4=8;endalways (Ra or Rb)if(Run=1b1)beginbusA=MemRa;busB=MemRb;endelsebeginbusA=0;busB=0;endendmodule7)数据选择module MUX(ctr,X,Y,Z);parameter k=32;input k-1:0 X,Y;output reg k-1:0 Z;input ctr;always (X or Y or ctr)if(ctr=1b0) Z=X;else Z=Y;endmodule3.进行仿真并验证其正确性:专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!