计算机组成cpu数据通路verilog实验报告

上传人:第*** 文档编号:31528790 上传时间:2018-02-08 格式:DOC 页数:12 大小:79KB
返回 下载 相关 举报
计算机组成cpu数据通路verilog实验报告_第1页
第1页 / 共12页
计算机组成cpu数据通路verilog实验报告_第2页
第2页 / 共12页
计算机组成cpu数据通路verilog实验报告_第3页
第3页 / 共12页
计算机组成cpu数据通路verilog实验报告_第4页
第4页 / 共12页
计算机组成cpu数据通路verilog实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《计算机组成cpu数据通路verilog实验报告》由会员分享,可在线阅读,更多相关《计算机组成cpu数据通路verilog实验报告(12页珍藏版)》请在金锄头文库上搜索。

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

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

3、nch,Jump,RegDst,ALUSrc,MemtoReg,RegWr,MemWr,ExtOp;output reg 2:0 ALUctr;always (op)case(op)6b000000:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;MemtoReg=0;RegWr=1;MemWr=0;case(func)6b100000:ALUctr=3b001;6b100010:ALUctr=3b101;6b100011:ALUctr=3b100;6b101010:ALUctr=3b111;6b101011:ALUctr=3b110;endcaseend6b00

4、1101:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;ALUctr=3b010;end6b001001:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3b000;end6b100011:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;ALUctr=3b000;end6b10101

5、1:beginBranch=0;Jump=0;ALUSrc=1;RegWr=0;MemWr=1;ExtOp=1;ALUctr=3b000;end6b000100:beginBranch=1;Jump=0;ALUSrc=0;RegWr=0;MemWr=0;ALUctr=3b100;end6b000010:beginBranch=0;Jump=1;RegWr=0;MemWr=0;endendcaseendmodule2)数据通路DataRoadmodule DataRoad(Run,Clk,RegWr,MemWr,MemtoReg,RegDst,Branch,Jump,ExtOp,ALUctr,A

6、LUSrc,busA,busB,busW,Instruction,Reg0,Reg1,Reg2,Reg3,Reg4,Mem1,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:

7、0 Rs,Rd,Rt;wire Overflow,Zero;QZL qzl(Clk,Branch,Jump,Zero,Instruction,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,A

8、LUctr,Zero,Overflow,Result);DataMem(Run,MemWr,Clk,busB,DataOut,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;w

9、ire 4:0 addmem;reg 29:0 PC;wire 29:0 Newpc,pc_1,pc_2,pc_3,pc_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

10、 pc_3=PC29:26,Instruction25:0;assign Branch_Zero=BranchMUX 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=6b100011,5b00000,5b00001,5b00000,5b00000,6b000001;Mem4=

11、6b100011,5b00000,5b00010,5b00000,5b00000,6b000010;Mem8=6b000000,5b00001,5b00010,5b00011,5b00000,6b100000;Mem12=6b101011,5b00000,5b00011,5b00000,5b00000,6b000010;Mem16=6b001101,5b00100,5b00100,5b11111,5b11111,6b111111;Mem20=6b000000,5b00011,5b00010,5b00010,5b00000,6b100010;Mem24=6b000100,5b00010,5b00

12、001,5b00000,5b00000,6b001000;Mem28=6b000010,5b00000,5b00000,5b00000,5b00000,6b000000;endalways (*)Instruction=Memaddmem;Endmodule4)ALUmodule ALU(A,B,ALUctr,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,Si

13、gnB,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;assign OVctr=!ALUctr1assign SIGctr=ALUctr0;assign OPctr1=ALUctr2assign OPctr0=!ALUctr2assign Cin=SUBctr;assign X=BnSUBctr;assign Y=A|B;Adder ad(Cin,A,X,A

14、dd_Carry,Add_Overflow,Add_Sign,Add_Result,Zero);assign SignA=CinAdd_Carry;assign SignB=Add_OverflowAdd_Sign;assign Overflow=Add_OverflowMUX 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

15、-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;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_Overflow=(Xk-1&Yk-1&

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号