Lab3实验报告_第1页
Lab3实验报告_第2页
Lab3实验报告_第3页
Lab3实验报告_第4页
Lab3实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机组成体系结构实验报告简单的类MIPS单周期处理器实现 控制器,ALUSJTU | F0905103LAB3实验报告王红宾 509051906120121实验概述1.1实验名称简单的类MIPS单周期处理器实现 控制器,ALU1.2 实验目的1理解CPU控制器,ALU的原理1.3实验范围本次实验将覆盖以下范围1ISE的使用2Spartan-3E实验板的使用3使用Verilog HDL进行逻辑设计4CPU控制器的实现5ALU的实现1.4注意事项1. 本实验的逻辑设计工具为Xilinx ISE11.1。2实验内容 2.1实验步骤1 启动ISE 11.1。2 选择File &g

2、t; New Project 出现New Project Wizard。3 Project Name填写lab5,选择工程Project Location,Top-level Source Type选择HDL。点击Next。4. Device Properties 中各属性填写如下: Product Category: ALL Family: Spartan3E Device: XC3S500E Package: FG320 Speed: -4 Synthesis Tool: XST(VHDL/Verilog)Simulator: ISim (VHDL/Verilog) ,也可用Modelsi

3、m仿真。Preferred Language: Verilog 确认Enable Enhanced Design Summary 已勾选 5. 点击Next6. 在New Project Wizard Create New Source中点击Next7. 在 New Project Wizard Add Existing Sources中点击Next8. 在New Project Wizard Project Summary中点击Finish,结束建立工程3主控制单元模块CTR3.1 模块描述主控制单元输入为指令的opCode字段,即操作码。操作码经过主控制单元的译码,给ALUCtr,Data

4、 Memory,Registers,Muxs等部件输出正确的控制信号。Mips 基本指令格式主控制模块3.2 新建模块源文件1.新建文件命令:菜单栏 - Project New Source或:Hierarchy窗口中,在正确设备名 (xc2vp30-7ff896或类似)上右键鼠标,弹出菜单中点击New Source3.3 编写译码功能主控制模块真值表注:Jump指令编码是000010,Jump信号输出1,其余输出0用verilog代码写出上述真值表内容。实现方式多种多样,这里给出一种使用case语句的参考方案,如下图:3.4 仿真测试1.将Sources for: 下拉框选择为Behavio

5、ral Simulation2.添加Testbench文件进行行为级仿真。在Ctr (Ctr.v)模块上点击右键,选择New Source。3.文件类型为Verilog Test Fixture,文件名test_for_Ctr。4.Associate Source中选择Ctr,Next。工具会自动为Ctr创建Testbench模板文件。5.在该文件下添加如下激励,即输入信号的控制。6.双击Processes中的Simulate Behavioral Model,保持默认即可。若需要可选中Process Properties调整仿真运行时间。7.ISim进行仿真,观察波形,查看仿真结果是否满足设

6、计。如果有错,修改代码逻辑,重新仿真。(操作小技巧:小键盘 -, +,快速缩放波形视野)8.下面给出一个仿真波形样例:4 ALU单元模块ALUCTR4.1 模块描述AluCtr根据主控制器的ALUOp来判断指令类型。根据指令的后6位区分R型指令。综合这两种输入,控制ALU做正确的操作。4.2 新建模块源文件略4.3 编写译码功能我们约定aluCtrOut3:0的值与ALU操作的对应关系如下:aluCtrOut 和 alu操作的对应关系根据ALUOp控制位和R型指令的不同功能码来设ALU控制位 注: ALU control input实际上是ALU的输入,aluCtr的输出输入输出真值表用ver

7、ilog代码写出上述真值表内容。实现方式多种多样,这里给出一种使用casex语句的参考方案,如下图:4.4 仿真1. 根据之前叙述的方法进行行为级仿真。新建文件 test_for_aluCtr。2. 在Testbench中设定不同的输入。请覆盖所有的情况,以保证逻辑的正确。3. 观察波形是否满足逻辑。如果有错,检查代码,重新仿真。4. 下面给出仿真样例:5 ALU5.1 模块描述根据aluCtr,对两个输入做对应的操作。aluRes输出结果。如果是减法操作,若结果为0,zero输出置为1.输入:input1 (32bit),,input2 (32bit),aluCtr (4bit)输出:zer

8、o(1bit),aluRes (32bit)5. 2 新建模块源文件略5.3 实现功能用verilog代码实现ALU功能。实现方式多种多样,比如case语句。这里给出一种参考方案,如下图:5.4 仿真1. 根据之前叙述的方法新建文件 test_for_Alu 2. 在testBench中设定不同的输入。覆盖所有不同控制的情况,多选取一些输入数据,以保证逻辑的正确。3.用ISim仿真,观察波形是否满足逻辑。如果有错,检查代码,重新仿真。4. 下面给出仿真样例:6实验程序6.1 ctr.vmodule ctr(input 5:0 opcode,output regdst,output alusrc

9、,output memtoreg,output regwrite,output memread,output memwrite,output branch,output 1:0 aluop,output jump);reg regdst;reg alusrc;reg memtoreg;reg regwrite;reg memread;reg memwrite;reg branch;reg 1:0 aluop;reg jump;always (opcode)begincase (opcode)6'b000010: /jumpbeginregdst = 0;alusrc = 0;memto

10、reg = 0;regwrite = 0;memread = 0;memwrite = 0;branch = 0;aluop = 2'b00;jump = 1;end6'b000000: /R-formatbeginregdst = 1;alusrc = 0;memtoreg = 0;regwrite = 1;memread = 0;memwrite = 0;branch = 0;aluop = 2'b10;jump = 0;end6'b100011: /lwbeginregdst = 0;alusrc = 1;memtoreg = 1;regwrite = 1

11、;memread = 1;memwrite = 0;branch = 0;aluop = 2'b00;jump = 0;end6'b101011: /swbeginregdst = 1;alusrc = 1;memtoreg = 1;regwrite = 0;memread = 0;memwrite = 1;branch = 0;aluop = 2'b00;jump = 0;end6'b000100: /beqbeginregdst = 0;alusrc = 0;memtoreg = 0;regwrite = 0;memread = 0;memwrite = 0

12、;branch = 1;aluop = 2'b01;jump = 0;enddefault:beginregdst = 0;alusrc = 0;memtoreg = 0;regwrite = 0;memread = 0;memwrite = 0;branch = 0;aluop = 2'b00;jump = 0;endendcaseendendmodule6.2 test_for_ctr.vmodule test_for_ctr;/ Inputsreg 5:0 opcode;/ Outputswire regdst;wire alusrc;wire memtoreg;wire

13、 regwrite;wire memread;wire memwrite;wire branch;wire 1:0 aluop;wire jump;/ Instantiate the Unit Under Test (UUT)ctr uut (.opcode(opcode),.regdst(regdst),.alusrc(alusrc),.memtoreg(memtoreg),.regwrite(regwrite),.memread(memread),.memwrite(memwrite),.branch(branch),.aluop(aluop),.jump(jump);initial be

14、gin/ Initialize Inputsopcode = 0;/ Wait 100 ns for global reset to finish#100;#100 opcode = 6'b000000;#100 opcode = 6'b100011;#100 opcode = 6'b101011;#100 opcode = 6'b000100;#100 opcode = 6'b000010;/ Add stimulus hereendendmodule6.3 alu.vmodule alu(input 31:0 input1,input 31:0 in

15、put2,input 3:0 aluctr,output zero,output 31:0 alures);reg zero;reg 31:0 alures;always (input1 or input2 or aluctr)beginif(aluctr = 4'b0010)/addalures = input1 + input2;else if(aluctr = 4'b0110)beginalures = input1 - input2;if(alures = 0)zero = 1;elsezero = 0;endelse if(aluctr = 4'b0000)a

16、lures = input1 & input2;else if(aluctr = 4'b0001)alures = input1| input2;else if(aluctr = 4'b1100)alures = (input1 | input2);else if(aluctr = 4'b0111)beginif(input1 < input2)alures = 1;elsealures = 0;endendendmodule6.4 test_for_alu.vmodule test_for_alu;/ Inputsreg 31:0 input1;reg

17、31:0 input2;reg 3:0 aluctr;/ Outputswire zero;wire 31:0 alures;/ Instantiate the Unit Under Test (UUT)alu uut (.input1(input1),.input2(input2),.aluctr(aluctr),.zero(zero),.alures(alures);initial begin/ Initialize Inputsinput1 = 0;input2 = 0;aluctr = 0;/ Wait 100 ns for global reset to finish#100;#10

18、0begininput1 = 1;input2 = 1;aluctr = 2;end#100begininput1 = 1;input2 = 1;aluctr = 6;end#100begininput1 = 2;input2 = 1;aluctr = 6;end#100begininput1 = 2;input2 = 3;aluctr = 0;end#100begininput1 = 1;input2 = 2;aluctr = 1;end#100begininput1 = 1;input2 = 2;aluctr = 7;end#100begininput1 = 2;input2 = 1;al

19、uctr = 7;end#100begininput1 = 32'b10000000000000000000000000000001;input2 = 32'b00000000000000000000000000000010;aluctr = 12;end/ Add stimulus hereendendmodule6.5 aluctr.vmodule aluctr(input 1:0 aluop,input 5:0 funct,output 3:0 aluctr);reg 3:0 aluctr;always (aluop or funct)casex(aluop,funct)

20、8'b00xxxxxx: aluctr = 4'b0010;8'b01xxxxxx: aluctr = 4'b0110;8'b10100000: aluctr = 4'b0010;8'b10100010: aluctr = 4'b0110;8'b10100100: aluctr = 4'b0000;8'b10100101: aluctr = 4'b0001;8'b10101010: aluctr = 4'b0111;endcaseendmodule6.6 test_for_aluctr.vmodule test_for_aluctr;/ Inputsreg 1:0 a

温馨提示

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

评论

0/150

提交评论