Lab3实验报告

上传人:hs****ma 文档编号:488758952 上传时间:2023-05-30 格式:DOC 页数:20 大小:1.12MB
返回 下载 相关 举报
Lab3实验报告_第1页
第1页 / 共20页
Lab3实验报告_第2页
第2页 / 共20页
Lab3实验报告_第3页
第3页 / 共20页
Lab3实验报告_第4页
第4页 / 共20页
Lab3实验报告_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Lab3实验报告》由会员分享,可在线阅读,更多相关《Lab3实验报告(20页珍藏版)》请在金锄头文库上搜索。

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 New Project 出现

2、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) ,也可用Modelsim仿真。Preferred Lan

3、guage: 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 Memory,Registers

4、,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: 下拉框选择为Behavioral Simulation2.添

5、加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的输出输入输出真值表用verilog代码写出上述真值表内容。实

7、现方式多种多样,这里给出一种使用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)输出:zero(1bit),aluRes (3

8、2bit)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,output memtoreg,

9、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)6b000010: /jumpbeginregdst = 0;alusrc = 0;memtoreg = 0;regwrite = 0;m

10、emread = 0;memwrite = 0;branch = 0;aluop = 2b00;jump = 1;end6b000000: /R-formatbeginregdst = 1;alusrc = 0;memtoreg = 0;regwrite = 1;memread = 0;memwrite = 0;branch = 0;aluop = 2b10;jump = 0;end6b100011: /lwbeginregdst = 0;alusrc = 1;memtoreg = 1;regwrite = 1;memread = 1;memwrite = 0;branch = 0;aluop

11、 = 2b00;jump = 0;end6b101011: /swbeginregdst = 1;alusrc = 1;memtoreg = 1;regwrite = 0;memread = 0;memwrite = 1;branch = 0;aluop = 2b00;jump = 0;end6b000100: /beqbeginregdst = 0;alusrc = 0;memtoreg = 0;regwrite = 0;memread = 0;memwrite = 0;branch = 1;aluop = 2b01;jump = 0;enddefault:beginregdst = 0;a

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

13、p;/ 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 begin/ Initialize Inputsopcode = 0;/ Wait 100 ns for global reset to finis

14、h#100;#100 opcode = 6b000000;#100 opcode = 6b100011;#100 opcode = 6b101011;#100 opcode = 6b000100;#100 opcode = 6b000010;/ Add stimulus hereendendmodule6.3 alu.vmodule alu(input 31:0 input1,input 31:0 input2,input 3:0 aluctr,output zero,output 31:0 alures);reg zero;reg 31:0 alures;always (input1 or input2 or aluctr)beginif(aluctr = 4b0010)/addalures = input1 + input2;else if(aluctr = 4b0110)beginalures = input1

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

当前位置:首页 > 幼儿/小学教育 > 小学课件

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