ImageVerifierCode 换一换
格式:DOC , 页数:36 ,大小:1.06MB ,
资源ID:10581631      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10581631.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单周期CPU实验报告.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

单周期CPU实验报告.doc

1、北京工业大学 MIPC-CPU 设计课程第 1 页MIPS-CPU 设计实验报告实验名称:32 位单周期 MIPS-CPU 设计北京工业大学 MIPC-CPU 设计课程第 2 页姓名学号:刘 高 斯 11072205实验日期:2014 年 12 月 19 日目录前言 MIPS 简介 - 3实验目的 - 3第一部分 VERILOG HDL 语言实现部分实验内容 - 4试验环境 - 4模块简介 - 4实验截图 - 5实验感想 - 5北京工业大学 MIPC-CPU 设计课程第 3 页实验代码 - 6第二部分 LOGISIM 语言实现部分实验内容 - 16实验环境 - 16模块设计 - 16试验感想

2、- 23北京工业大学 MIPC-CPU 设计课程第 4 页前言一、MIPS 简介MIPS 是世界上很流行的一种 RISC 处理器。MIPS 的意思“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学 Hennessy教授领导的研究小组研制出来的。MIPS 公司的 R 系列就是在此基础上开发的 RISC 工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。MIPS技术公司是美国著名的芯片

3、设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC 具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。MIPS 是出现最早的商业RISC 架构芯片之一,新的架构集成了所有原来 MIPS 指令集,并增加了许多更强大的功能。MIPS 处理器是八十年代中期 RISC CPU 设计的一大热点。MIPS 是卖的最好的 RISC CPU,可以从任何地方,如 Sony, Nintendo 的游戏机,Cisco 的路由器和 SGI 超级计算机,看见 MIPS 产品在销售。目前随着 RISC 体系结构遭到

4、x86芯片的竞争,MIPS 有可能是起初RISC CPU 设计中唯一的一个在本世纪盈利的。和英特尔相比,MIPS 的授权费用比较低,也就为除英特尔外的大多数芯片厂商所采用。MIPS 的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系 MIPS I、MIPS II、MIPS III、MIPS IV 到 MIPS V,嵌入式指令体系 MIPS16、MIPS32到 MIPS64的发展已经十分成熟。在设计理念上 MIPS 强调软硬件协同提高性能,同时简化硬件设计。2、实验目的我们通过 VERILOG HDL 语言和 LOGISIM 语言分别用语句和图形完成对32位 MIPS-CPU的设计,

5、通过前8周的学习我们基本掌握了 MIPS 的概念和原理,认识到 RISC 架构的特征和优缺点。通过过老师的讲解,了解到每一条语句的从设计到硬件实现的全过程。通过本次实验我们要更加深入的理解硬件组成的结构,语句逻辑实现的原理。掌握硬件编程语言和硬件图形语言编程的方法。透彻的理解 MIPS 的特征和优点。北京工业大学 MIPC-CPU 设计课程第 5 页VERILOG HDL 语言实现部分实验内容利用 VERILOG 设计一种 32 位单周期 MIPS CPU。首先设计各个子模块,并将已做好的各个模块进行模块合并,实现单周期 CPU 的各项指令。实验环境Window Xp Quartus II各个

6、子模块的简单介绍此程序将数据通路(SingleDataLoad)设定为顶层模块,下面的模块包括:算术逻辑运算单元(ALU) 、数据存储器( DataStore) 、数据寄存器( Registers) 、取指令部件(GetCode) 、总控制器( Control) ,通过顶层模块对各个子模块的调用从而实现了整个单周期 CPU。1) 数据通路(SingleDataLoad):进行数据的运算、读取以及存储功能,通过总控制器产生的各个控制信号,进而实现对数据的各项操作。2) 算术逻辑运算单元(ALU):数据通路调用此模块,根据得到的控制信号对输入数据进行处理,处理功能有:addu、add、or、sub

7、u、sub 、sltu 、slt 等。3) 数据存储器(DataStore):当 WrEn 控制信号为 1 时,此时就将输入数据存储到此存储器中,当 WrEn 为 0 时,则根据输入的地址,找到地址对应的单元将单元北京工业大学 MIPC-CPU 设计课程第 6 页中的数据输出。4) 数据寄存器(Registers): 在此程序中功能和实现基本和数据存储器相同,但在实际 CPU 当中使用的逻辑器件及获取数据的方式还是有所区别的。5) 取指令部件(GetCode ): 指根据 PC 所提供的地址从指令寄存器中取出要执行的指令,再根据各控制信号,得出下一次要执行的指令的地址。 (总控制器(Contr

8、ol):总控制器通过从取指令部件获得的指令,进而产生各个控制信号,并将控制信号返回个数据通路,就此实现各项功能。北京工业大学 MIPC-CPU 设计课程第 7 页程序截图及说明上图为执行下列指令产生的图像:Mem0=6b000100,5b00001,5b00010,5b00000,5b00000,6b000001; /beq $1,$2,1Mem4=6b000000,5b00001,5b00010,5b00100,5b00000,6b101011; /sltu $4,$1,$2Mem8=6b000010,5b00000,5b00000,5b00000,5b00000,6b000010; /j

9、2当$1 、$2 所指的寄存器的值相同时,执行上述指令,得到的图如下:可以看出 CPU 跳过了第二条指令,直接执行了第三条,而上图执行了第一条指令后接着执行第二条,最后才执行第三条指令,区别就在于第一幅图表示的是$1、$2 中的值不相等所执行的情况,第二幅图表示的是$1、$2 中的值相等的情况,由此可以得北京工业大学 MIPC-CPU 设计课程第 8 页知测试正确。实验收获及感想VERILOG 语句将二进制元器件的原理整合到类汇编语言上,通过这次实验我从理解上从这语言本身理解到逻辑与函数不分家的道理,每一条连线和与、非、或都是一个个对应的函数。任一个复杂的 CPU 都是从一条条简单的逻辑一条一

10、条实现的。任何一条语句都是通过不同的函数和赋值分分合合直到被执行完毕。实验代码:数据通路(SingleDataLoad)module SingleDataLoad(clk,RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr,ALUctr);input clk;/input31:0 Instruction;output RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr;output2:0 ALUctr;wire RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,

11、MemtoReg,MemWr;wire2:0 ALUctr;wire 31:0 Instruction;wire 4:0 Rd,Rt,Rs;wire 5:0 op,func;wire4:0 Rx;wire P1,P2,Zero,Overflow;北京工业大学 MIPC-CPU 设计课程第 9 页wire 31:0 busW,busA,busB,out1,dataout,busB1,busBo;wire 15:0 imm16;Control con(Instruction,RegWr,ExtOp,ALUSrc,ALUctr,Branch,Jump,RegDst,MemtoReg,MemWr);a

12、ssign op=Instruction31:26;assign func=Instruction5:0;assign Rs=Instruction25:21;assign Rt=Instruction20:16;assign Rd=Instruction15:11;assign imm16=Instruction15:0;assign P1=P2MUX2 mux2(RegDst,Rt,Rd,Rx);assign busB1=16imm1615 MUX2TO1 mux1(ALUSrc,busB,busB1,busBo);Registers Reg(clk,busW,P1,Rx,Rs,Rt,bu

13、sA,busB);ALU alu(busA,busBo,ALUctr,out1,Overflow,Zero);assign P2=!Overflow;DataStore datas(clk,busB,out14:0,MemWr,dataout);MUX2TO1 mux3(MemtoReg,out1,dataout,busW);GetCode get(Branch,Zero,Jump,clk,Instruction);endmodule module MUX2TO1(op,X,Y,Z);input op;input 31:0 X,Y;output31:0 Z;北京工业大学 MIPC-CPU 设计

14、课程第 10 页reg 31:0 Z;always(op)beginif(op=1)Z=Y;elseZ=X;endendmodulemodule MUX2(op,x,y,z);input op;input 4:0 x,y;output4:0 z;reg 4:0 z;always(op)beginif(op=1)z=y;elsez=x;endendmodule算数逻辑运算单元(ALU)module ALU(A,B,ALUctr,Result,Overflow,Zero);北京工业大学 MIPC-CPU 设计课程第 11 页parameter n=32; input n-1:0 A,B;input

15、 2:0 ALUctr;output n-1:0 Result;output Overflow,Zero;wire Zero,Overflow;wire n-1:0 Result;wire SUBctr,OVctr,SIGctr;wire 1:0 OPctr;wire n-1:0 H,M,N,Add_Result;wire K,G,I,Add_Sign,Add_Overflow,Add_carry;assign SUBctr=ALUctr2;assign OVctr=!ALUctr1 assign SIGctr=ALUctr0;assign OPctr1=ALUctr2 assign OPct

16、r0=!ALUctr2 assign H=BnSUBctr;assign M=A|B; Adderk nbit_add(SUBctr,A,H,Add_carry,Add_Sign,Add_Result,Zero); /,Add_Overflowassign Add_Overflow= An-1 assign K=SUBctr Add_carry;assign I=Add_Sign Add_Overflow;assign Overflow=OVctr IMUX2to1 YN(K,I,SIGctr,G);IMUX2to1 yn(0,1,G,N);MUX3to1 nbit_Result(Add_Re

17、sult,M,N,OPctr,Result);endmodulemodule Adderk (Cin, X, Y,Add_carry,Add_sign,Add_result,Zero); /Add_Overflow,parameter k = 32;input k-1:0 X, Y;input Cin;output k-1:0 Add_result;output Add_carry,Add_sign,Zero; /,Add_Overflowreg k-1:0 Add_result;reg Add_carry,Zero,Add_sign; /,Add_Overflowalways(X or Y

18、or Cin)beginAdd_carry, Add_result = X + Y + Cin; if(Add_result=0)Zero=1;elseZero=0;北京工业大学 MIPC-CPU 设计课程第 13 页if(Add_result31=1)Add_sign=1;elseAdd_sign=0;endendmodulemodule MUX3to1 (V,W,U,Selm,F);parameter k = 32;input k-1:0 V,W,U;input 1:0 Selm;output k-1:0 F;reg k-1:0 F;always (V or W or U or Selm)

19、case(Selm)2b00: F = V; 2b01: F = W;2b10: F=U;endcase endmodulemodule IMUX2to1 (V,W,SIGctr,Less);input31:0 V,W;北京工业大学 MIPC-CPU 设计课程第 14 页input SIGctr;output31:0 Less;reg31:0 Less;always (V or W or SIGctr)if (SIGctr = 0) Less = V;else Less = W;Endmodule数据存储器(DataStore):module DataStore(clk,DataIn,Adr,

20、WrEn,Out);input 31:0 DataIn;input 4:0 Adr;input WrEn,clk;output 31:0 Out;reg 31:0 Out;reg 31:0 Store 31:0;always(negedge clk)beginif(WrEn=1)StoreAdr=DataIn;endalways(Adr or WrEn)北京工业大学 MIPC-CPU 设计课程第 15 页if(WrEn=0)Out=StoreAdr;endmodule数据寄存器(Registers):module Registers(clk,busW,wr,Rw,Ra,Rb,busA,busB

21、);input 31:0 busW;input clk,wr;input 4:0 Rw,Ra,Rb;output 31:0 busA,busB;reg 31:0 busA,busB;reg 31:0 Regist 31:0;always(negedge clk)beginRegist1=32d25; Regist2=32d25;if(wr=0)RegistRw=busW;endalways(Ra or Rb or wr)beginif(wr=1)beginbusA=RegistRa;北京工业大学 MIPC-CPU 设计课程第 16 页busB=RegistRb;endendendmodule取

22、指令部件(GetCode ):module GetCode(Branch,Zero,Jump,clk,Instruction);input Zero,Branch,Jump,clk;output31:0 Instruction;reg29:0 PC=25;wire29:0 M,M2;wire 4:0 addmem;wire K;reg reset=1;assign addmem=PC2:0,2b00;wire29:0 O1,O2,O3,O4;wire15:0 imm16;instruct InsMem(addmem,Instruction);always(negedge clk)beginif

23、 (reset=1)beginPC =0;reset=0;end北京工业大学 MIPC-CPU 设计课程第 17 页elsebegin PC = O4;endendassign imm16=Instruction15:0;assign M=PC;assign K=Zero Adder adder1(M,1,O1);assign M1=14imm1615,imm1615:0;Adder adder2(O1,M1,O2);MUX2T1 mux1(K,O1,O2,O3);assign M2=M29:26,Instruction25:0;MUX2T1 mux2(Jump,O3,M2,O4);endmo

24、dulemodule Adder(M,N,O);input29:0 M;input29:0 N;output29:0 O;wire29:0 M,N,O;assign O=M+N;endmodule 北京工业大学 MIPC-CPU 设计课程第 18 页module MUX2T1(op,X,Y,Z);input op;input 29:0 X,Y;output29:0 Z;reg 29:0 Z;always(op)beginif(op=1)Z=Y;elseZ=X;endendmodulemodule instruct(addr,inst);input 4:0 addr;output 31:0 in

25、st;reg 31:0 inst;/ Declare the RAM variablereg 31:0 Mem 31:0;/ write instruction: add 3=(1)+(2),sub 6=(4)-(5),jump 0always (*)begin/Mem0=6b000000,5b00001,5b00010,5b00011,5b00000,6b100000; /add $3,$1,$2北京工业大学 MIPC-CPU 设计课程第 19 页/ Mem4=6b000000,5b00011,5b00001,5b00100,5b00000,6b100010; /sub $4,$3,$1/

26、Mem0=6b000000,5b00001,5b00010,5b00011,5b00000,6b101010; /slt $3,$1,$2/ Mem4=6b000000,5b00011,5b00001,5b00100,5b00000,6b100011; /subu $4,$3,$1/ Mem0=6b000000,5b00001,5b00010,5b00011,5b00000,6b101010; /slt $3,$1,$2/ Mem4=6b000000,5b00001,5b00010,5b00100,5b00000,6b101011; /sltu $4,$1,$2/Mem0=6b001101,5

27、b00001,5b00011,5b10000,5b00000,6b000101; /ori $3,$1,32773/ Mem4=6b001001,5b00010,5b00100,5b00000,5b00000,6b001000; /addiu $4,$2, 8/ Mem4=6b001001,5b00010,5b00100,5b11111,5b11111,6b111000; /addiu $4,$2, -8/ Mem0=6b101011,5b00001,5b00011,5b00000,5b00000,6b000101; /sw $3,$1,5/ Mem4=6b100011,5b00001,5b0

28、0100,5b00000,5b00000,6b000101; /lw $4,$1,5Mem0=6b000100,5b00001,5b00010,5b00000,5b00000,6b000001; /beq $1,$2,1Mem4=6b000000,5b00001,5b00010,5b00100,5b00000,6b101011; /sltu $4,$1,$2Mem8=6b000010,5b00000,5b00000,5b00000,5b00000,6b000010; /j 2end/ readalways (addr)begininst = Memaddr;endendmodule总控制器(C

29、ontrol):module Control(Instruction,RegWr,ExtOp,ALUSrc,ALUctr,Branch,Jump,RegDst,MemtoReg,MemWr);output RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,MemtoReg,MemWr;input31:0 Instruction;北京工业大学 MIPC-CPU 设计课程第 20 页reg RegWr,RegDst,ExtOp,ALUSrc,Branch,Jump,clk,MemtoReg,MemWr;output 2:0 ALUctr;reg 2:0 ALUctr;wi

30、re 5:0 op,func;assign op=Instruction31:26;assign func=Instruction5:0;parameter S0=6b100000,S1=6b100010,S2=6b100011,S3=6b101010,S4=6b101011,S5=6b001101,S6=6b001001,S7=6b100011,S8=6b101011,S9=6b000100,S10=6b000010;always(op or func)beginif(op=6b000000)begincase(func)S0:beginBranch=0;Jump=0;RegDst=1;AL

31、USrc=0;ALUctr=3b001;MemtoReg=0;RegWr=1;MemWr=0;北京工业大学 MIPC-CPU 设计课程第 21 页endS1:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3b101;MemtoReg=0;RegWr=1;MemWr=0;endS2:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3b100;MemtoReg=0;RegWr=1;MemWr=0;endS3:北京工业大学 MIPC-CPU 设计课程第 22 页beginBranch=0;Jump=0;RegD

32、st=1;ALUSrc=0;ALUctr=3b111;MemtoReg=0;RegWr=1;MemWr=0;endS4:beginBranch=0;Jump=0;RegDst=1;ALUSrc=0;ALUctr=3b110;MemtoReg=0;RegWr=1;MemWr=0;endendcaseendelse北京工业大学 MIPC-CPU 设计课程第 23 页begincase(op)S5:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3b010;MemtoReg=0;RegWr=1;MemWr=0;ExtOp=0;endS6:beginBran

33、ch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3b000;MemtoReg=0;RegWr=1;MemWr=0;北京工业大学 MIPC-CPU 设计课程第 24 页ExtOp=1;endS7:beginBranch=0;Jump=0;RegDst=0;ALUSrc=1;ALUctr=3b000;MemtoReg=1;RegWr=1;MemWr=0;ExtOp=1;endS8:beginBranch=0;Jump=0;ALUSrc=1;ALUctr=3b000;RegWr=0;MemWr=1;ExtOp=1;end北京工业大学 MIPC-CPU 设计课程第 25 页S

34、9:beginBranch=1;Jump=0;ALUSrc=0;ALUctr=3b100;RegWr=0;MemWr=0;endS10:beginBranch=0;Jump=1;RegWr=0;MemWr=0;endendcaseendendendmodule北京工业大学 MIPC-CPU 设计课程第 26 页LOGISIM 实现部分实验内容利用 LOGISIM 软件,实现通过图形硬件语言完成对 32 位单周期 MIPS-CPUD 设计工作。利用各种逻辑门完成各个子模块向上构建完成的 CPU试验环境Windows 7 JavaScript Logisim 2.7.1子模块设计1bit-ADDer北京工业大学 MIPC-CPU 设计课程第 27 页Com-1bit-ADDER32bits-ADDer 132bits-ADDer 2 北京工业大学 MIPC-CPU 设计课程第 28 页32bits-ADDer 32bits Subtract 北京工业大学 MIPC-CPU 设计课程第 29 页32bits Ori以上次级子模块构成 ALU北京工业大学 MIPC-CPU 设计课程第 30 页

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报