计组-单时钟CPU设计报告

上传人:ji****72 文档编号:39537916 上传时间:2018-05-16 格式:DOCX 页数:7 大小:394.53KB
返回 下载 相关 举报
计组-单时钟CPU设计报告_第1页
第1页 / 共7页
计组-单时钟CPU设计报告_第2页
第2页 / 共7页
计组-单时钟CPU设计报告_第3页
第3页 / 共7页
计组-单时钟CPU设计报告_第4页
第4页 / 共7页
计组-单时钟CPU设计报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《计组-单时钟CPU设计报告》由会员分享,可在线阅读,更多相关《计组-单时钟CPU设计报告(7页珍藏版)》请在金锄头文库上搜索。

1、第 1 页/共 7 页实验八实验八 单时钟单时钟 CPU 设计实验报告设计实验报告姓名:XXX学号:XXX专业: 计算机科学与技术课程名称: 计算机组成同组学生姓名: 无实验时间:实验地点:指导老师: XXX一、一、实验目的和要求实验目的和要求1.理解数据通路的原理并掌握数据通路的设计方法 2.理解单时钟 CPU 的原理并掌握单时钟 CPU 的设计方法 3.掌握用程序验证 CPU 的方法二、实验内容和原理二、实验内容和原理实验内容:实验内容:1. 设计数据通路,将基本单元结合在单时钟 CPU 中 基本单元包括: CPU 控制器、ALU 和 ALU controller、register fil

2、e、instruction memory、data memory 、和寄存器、加法器、符号位扩展、移位器、多路复用器等模块。2. 用程序验证 CPU,并观察程序的执行情况实验原理:实验原理: 1.数据通路原理图第 2 页/共 7 页2.测试的实例(要求实现的指令程序)三、主要仪器设备三、主要仪器设备1.Spartan-III 开发板1 套 2.装有 ISE 的 PC 机 1 台第 3 页/共 7 页四、操作方法与实验步骤四、操作方法与实验步骤实验步骤:实验步骤:1. 创建新的工程和新的源文件 2. 编写 verilog 代码(包括以下模块 top,c_dat_mem,c_instr_mem,d

3、isplay,single_mux5,single_mux9,single_mux32,pb debounce,single_add,single_alu,single_aluc,single_ct1,single_gpr,single_pc,si ngle_pc_plus4,single_signext) 并创建和编写 Instr.Mem 和 DataMem 的 coe 文件 3. 编写 UCF 引脚文件,通过编译。 5. 生成 FPGA 代码,下载到实验板上并调试,看是否与实现了预期功能实验代码:已全部打包在文件夹中,在此只粘贴了实验代码:已全部打包在文件夹中,在此只粘贴了 top.vmo

4、dule top(clk_btn, rst_btn, disp_clk, switch, seg, anode, led); input clk_btn;/ 按键给入时钟 input rst_btn;/ 按键进行复位input disp_clk;/ T9 用于指令存储器,数据存储器 input6:0 switch;/ 选择显示的拨位输入output7:0 seg;/ 数码管输出 output3:0 anode;/ 数码管位选 output5:0 led;/ 通过 LED 表示指令类型 / wire cpu_clk; / CPU 系统时钟 wire rst; / 复位信号 reg7:0 clk_

5、cnt; / 计时 wire15:0 disp_num;/ 显示数据wire8:0 i_pc; / PC 寄存?鞯氖淙? wire8:0 o_pc; / PC 寄存器的输出 wire8:0 pc_plus4; / PC+4 wire31:0 instr;/ instruction memory 中取出的指令 wire31:0 op2; / ALU 的第二个输入数据 wire4:0 W1; wire31:0 o_op1, o_op2, o_op3; / 寄存器输出数据 wire31:0 WriteData;/ 寄存器写入数据 wire ALUsrc;/ 控制 mux32_1 的选择信号 wire

6、 RegDst;/ 控制 mux5 的选择信号 wire MemtoReg;/ 控制 mux32_2 的选择信号 wire1:0 ALUOp;/ 控制 ALUC 的信号第 4 页/共 7 页wire2:0 operation; / ALUC 输出,即 ALU 控制码 wire31:0 signext_out32;/ 符号位扩展后的数据 wire o_zf;/ALU zero detector wire31:0 alu_result;/ALU result wire31:0 ReadData_out;/ Data memory 读取出的数据wire31:0 o_add;/BEQ 跳转地址 wir

7、e o_and; / 与门的输出结果 wire8:0 o_mux9;/ mux9 1 输出的数据 /wire31:0 jump_addr; / jump 跳转输入值 wire Branch, Jump, MemWrite, RegWrite;/Pc 寄存器 single_pc m_sp(cpu_clk, rst, i_pc, o_pc);/Pc+4 模块 single_pc_plus4 m_sp4(o_pc, pc_plus4);/指令存储器,从内存中读取指令,PC 寄存器的输出为读取地址 c_instr_mem m_cim(o_pc, disp_clk, instr);/5 位 2 选 1,

8、由指令的20:16,15:11决定 rd 的地址 single_mux5 m_sm5(instr20:16, instr15:11, RegDst, W1); /寄存器组?三路读(两路用于程序,一路用于检测) ,一路写single_gpr m_sg(cpu_clk, rst, instr25:21, instr20:16, switch6:2, W1, WriteData, RegWrite, o_op1, o_op2, o_op3);/ALU 控制器 single_aluc m_sac(ALUOp, instr5:0, operation); / op1:0, func3:0, operat

9、ion2:0/16 位至 32 位符号拓展 single_signext m_sse(instr15:0, signext_out32); / i_16, o_32/32 位 2 选 1, 输出到 ALU 的 B 端 single_mux32 m_sm32_1(o_op2, signext_out32, ALUsrc, op2);/A, B, Ctrl, S/ALU single_alu m_ma(o_op1, op2, operation, o_zf, alu_result);/ i_a, i_b, ALUoper, o_zf, disp_code/数据存储器?读写?32 位?寻址,512

10、字地址空间第 5 页/共 7 页c_dat_mem m_cdm(alu_result8:0, disp_clk, o_op2, ReadData_out, MemWrite);/32 位数据二选一,从 ALU 和数据存储器输出选择一路,输出到寄存器组 的写入数据端 single_mux32 m_sm32_2(alu_result, ReadData_out, MemtoReg, WriteData); /A, B, Ctrl, S/32 位加法器,计算 pc+4 与指令中立即数的和,用作 BEQ 转移地址选项single_add m_sa(23b0,pc_plus4, signext_out3

11、2, o_add);/i_op1, i_op2, o_out/9 位数据二选一,根据 BEQ 与门结果,与 JUMP 的 2 选 1 single_mux9 m_sm9_1(pc_plus4, o_add8:0, o_and,o_mux98:0); /A, B, Ctrl, S/9 位数据二选一,接 mux32_3,与 jump 选择最后写?雙 c? single_mux9 m_sm9_2(o_mux98:0, instr8:0, Jump, i_pc8:0);/单时钟 CPU 控制器,根据操作码产生控制信号 single_ctl m_sc(rst, instr31:26, Jump, ALU

12、Op, Branch, MemWrite, RegWrite, MemtoReg, ALUsrc, RegDst);/ 防抖动函数 pbdebounce I1(disp_clk, clk_btn, cpu_clk); pbdebounce I2(disp_clk, rst_btn, rst); / 显示函数 display M1(disp_clk, disp_num15:0, anode3:0, seg7:0);initial clk_cnt = 8b0; /计时初始化 always(posedge cpu_clk or posedge rst)begin if(rst = 1) clk_cn

13、t = 8b0; else clk_cnt = clk_cnt+1; endassign led0 = clk_btn;/ 表示是否在执行指令 assign led1 = RegDst;/ R 型指令 assign led2 = MemtoReg;/ LW 指令 assign led3 = MemWrite;/ SW 指令 assign led4 = Branch;/ BEQ 指令 assign led5 = Jump;/ Jump 指令第 6 页/共 7 页assign o_and = Branch /BEQ 判断结果,用于选择 PC 地址 /assign jump_addr27:0 = i

14、nstr25:0 2; /assign jump_addr31:28 = 4b0;/ 将 pc+4 和 instr27:0拼接成 jump 地 址 assign disp_num = (switch1:0 = 2b00) ? o_op315:0 : (switch1:0 = 2b01) ? o_op331:16 :(switch1:0 = 2b10) ? 7b0, o_pc8:0 : clk_cnt);endmodule五、实验结果与分析五、实验结果与分析1. 程序运行成功后,将代码下载到实验板 spartan3 上验证:a)先按复位键,查看各寄存器的内容查看寄存器寄存器低 16 位00_00

15、01($1)000B (11)00_0010($2)000000_0011($3)000100_0100($4)0001b)继续按键,查看状态PC(10_xxxx)显示数位 4,5,6,7,4,5,6,7,4.表明程序正在执行循环。 $2(00_0010)中显示每次相加的数:0000,0001,0003,0006 $3(00_0011)中显示每次相加的数:0000,0001,0002,0003. 时钟计数(11_xxxx)显示按键次数:0003,0004,0005,0006最后发现程序正确执行,得到1+2 +10 的结果为 55,运算正确。c) led 显示 在执行指令的过程中,led 灯的显示也是正确的,对于每一种不同的指令,都有不同的 led 灯亮2.程序实现的功能模块图第 7 页/共 7 页六、六、讨论、心得讨论、心得这个单周期实验做了很久,可能因为需要实现的模块较多,所以小错误不断。 在实际中应该以模块为单位,认真检查是否有错。但在不断改正错误的过程 中,我也在不断吸

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

当前位置:首页 > 行业资料 > 其它行业文档

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