《单周期CPU的设计与实现》-实验指导书(7)
计算机组成原理实验单周期CPU的设计与实验
//Create control signal
assign wreg = i_add | i_sub | i_and | i_or | i_xor |
i_sll | i_srl |i_sra | i_addi | i_andi |
i_ori | i_or | i_xori | i_lw | i_lui |i_jal;
assign regrt = i_addi | i_andi | i_ori | i_xori |i_lw |i_lui; assign jal = i_jal; assign m2reg = i_lw;
assign shift = i_sll | i_srl |i_sra;
assign aluimm = i_addi | i_andi | i_ori | i_xori | i_lw |
i_lui |i_sw;
assign sext = i_addi | i_lw | i_sw | i_beq | i_bne;
assign aluc[3] = i_sra;
assign aluc[2] = i_sub |i_or | i_srl | i_sra | i_ori |i_lui; assign aluc[1] = i_xor | i_sll | i_srl | i_sra | i_xori |
i_beq | i_bne | i_lui;
assign aluc[0] = i_and | i_or | i_sll | i_srl |i_sra |
i_andi | i_ori;
assign wmem = i_sw;
assign pcsource[1] = i_jr | i_j | i_jal;
assign pcsource[0] = i_beq & z | i_bne&~z | i_j | i_jal; endmodule
在控制器的Verilog实现代码中,首先对指令的功能进行译码,以“i_”开头的变量表示批令的功能,例如i_add为1表示该指令的功能是加法(add),其余的以此类指。然后根据指令的功能产生相应的控制信号,例如:
assign regrt = i_addi | i_andi | i_ori | i_xori | i_lw | i_lui;
表示当指令的功能是:i_addi(立即数加)、i_andi(立即数与)、i_ori(立即数或)、i_xori(立即数异或)、i_lw(取整数数据字)或i_lui(设置高位)功能时控制信号regrt为1。
aluc[3:0]的设计参见表5-1中各运算的编码。
计算机科学与工程学院 29
计算机组成原理实验单周期CPU的设计与实验
8. CPU的封装
当CPU的所有功能部件分别设计完成后,就要将其进行封装,以构成一个完整的CPU。本实验封装后CPU如图8-1所示。
Clock Reset Inst[31:0] mem[31:0] pc[31:0] 图8-1 CPU的封装
wmem
CPU Result[31:0] Data[31:0]
在图8-1中CPU各引脚的功能: ? Clock:输入,1位,时钟脉冲信号; ? Reset:输入,1位,复位信号;
? Inst[31:0]:输入,32位,CPU要执行的指令; ? Mem[31:0]:输入,32位,内存操作数;
? pc[31:0]:输入,32位,下一条要执行指令的地址; ? wmem:输出,1位,存储器写信号; ? Result[31:0]:输出,32位,运行结果;
? Data[31:0]:输出,32位,寄存器B;端口输出数据。
CPU封装的基本原理就是根据单单周期CPU的总体电路(图3-2)将各功能部件连接起来。CPU封装的Verilog代码如下:
module Data_flow(
input Clock, input Reset, input [31:0] inst, input [31:0] mem, output[31:0] pc, output wmem, output[31:0] Result, output[31:0] Data );
wire [31:0] p4 , adr , npc , res , ra , alu_mem , alua , alub; wire [4:0] reg_dest , wn; wire [3:0] aluc;
wire [1:0] pcsource;
计算机科学与工程学院
30
计算机组成原理实验单周期CPU的设计与实验
wire zero , wreg,regrt, m2reg,shift,aluimm,jal,sext;
wire [31:0] sa = {27'b0 , inst[10:6]};
wire [31:0] offset = {imm[13:0] , inst[15:0] , 2'b00};
dff32 ip (npc , Clock , Reset , pc); cla32 pcplus4 ( pc , 32'h4 , 1'b0 , p4); cla32 br_adr ( p4 , offset , 1'b0 ,adr);
wire [31:0] jpc = {p4[31:28] , inst[25:0],2'b00};
Control_Unit CU ( inst[31:26] , inst[5:0] , zero, wmem,wreg,regrt,m2reg,aluc, shift,aluimm,pcsource,jal,sext );
wire e =sext & inst[15]; wire [15:0] imm = {16{e}};
wire [31:0] immdiate = {imm , inst[15:0]}; //立即数
RegFile rf ( Clock, Reset, inst[25:21], inst[20:16], wn, res, wreg, ra, Data );
MUX32_2_1 alu_a ( ra , sa , shift , alua);
MUX32_2_1 alu_b ( Data , immdiate , aluimm , alub);
ALU alu( alua , alub , aluc , Result , zero);
MUX5_2_1 reg_wn ( inst[15:11] , inst[20:16] , regrt ,
reg_dest);
assign wn = reg_dest | {5{jal}};
MUX32_2_1 res_mem ( Result , mem , m2reg , alu_mem); MUX32_2_1 link ( alu_mem , p4 , jal , res);
MUX32_4_1 nextpc( p4 , adr , ra , jpc , pcsource , npc);
endmodule
计算机科学与工程学院 31
计算机组成原理实验单周期CPU的设计与实验
9. 测试
当CPU设计完成后,还需要对其进行测试,为此需要再设计一个指令存储器和一个数据存储器,同时再设计相应的测试程序。
9.1 指令存储器及测试程序
由于我们的主要目的是对所设计的CPU进行测试,故可以不使用IP核设计指令存储器,直接使用通用代码实现。
在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,选择Verilog Module输入,并输入Verilog文件名:Inst_mem,单击Next按钮进入端口定义对话框。其中Module Name栏输入模块名Inst_mem,单击Next进入下一步,点击Finish完成创建。实现Inst_mem的Verilog程序参考代码:
module Inst_mem(
input [31:0] address, output [31:0] inst
);
wire [31:0] ram [0:31];
assign ram[5'h00] = 32'h3c011234; //lui R1,0x1234 assign ram[5'h01] = 32'h34215678; //ori R1,R1,0x5678 assign ram[5'h02] = 32'h3C02AAAA; //lui R2 ,0xaaaa assign ram[5'h03] = 32'h3442BBBB; //ori R2,R2,0xbbbb assign ram[5'h04] = 32'h00221820; //add R3 , R1 , R2 assign ram[5'h05] = 32'h00221822; //sub R3 , R1 , R2 assign ram[5'h06] = 32'h00221824; //and R3 , R1 , R2 assign ram[5'h07] = 32'h00221825; //orR3 , R1 , R2 assign ram[5'h08] = 32'h00221826; //xor R3 , R1 , R2 assign ram[5'h09] = 32'h00021900; //sll R3 , R2 , 4 assign ram[5'h0a] = 32'h00021902; //srl R3 , R2 , 4 assign ram[5'h0b] = 32'h00021903; //srl R3 , R2 , 4
assign ram[5'h0c] = 32'h20231234; //addi R3 , R1,0x1234 assign ram[5'h0d]= 32'h302300EF; //andi R3 , R1,0xef assign ram[5'h0e] = 32'h342300EF; //ori R3 , R1,0xef assign ram[5'h0f] = 32'h382300EF; //xori R3 , R1,0xef assign ram[5'h10] = 32'h00631826; //xor R3 , R3 , R3 assign ram[5'h11] = 32'hAC610001; //sw R1 , 1(R3) assign ram[5'h12] = 32'h90650001; //lw R5 , 1(R3) assign inst = ram[address[6:2]];
endmodule
计算机科学与工程学院 32
计算机组成原理实验单周期CPU的设计与实验
9.2 数据存储器及测试数据
由于我们的主要目的是对所设计的CPU进行测试,故可以不使用IP …… 此处隐藏:3436字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [说明书]浅谈视觉传达设计中的色彩艺术
- [说明书]数据库原理-实验8-查询优化
- [说明书]临时用电施工组织设计
- [说明书]反假币考试试题第二套(人民币)
- [说明书]《建设工程监理规范》-2014.3.1实施
- [说明书]筋出槽,骨错缝病机诠释
- [说明书]百度预计来路对网站权重有多大影响
- [说明书]房屋面积测绘细则
- [说明书]计算机控制技术填空题汇总
- [说明书]乡镇卫生院(社区中心)死亡医学证明管
- [说明书]2013尾矿工实操试题
- [说明书]2015事业单位面试备考:贵州省事业单位
- [说明书](目录)2017-2022年半导体材料市场发
- [说明书]浙江省制造业发展“十三五”规划
- [说明书]干部选拔任用工作情况的自查报告
- [说明书]《发电厂电气部分》课后部分问答题整理
- [说明书]中国建立政府成本会计制度的思考
- [说明书]中国文化输出的现状及挑战-100分
- [说明书]通信原理实验指导(13-9)
- [说明书]HSF培训试卷(有害物质培训考试试题)
- 高中地理必修一:2.3《大气环境之六_气
- 新人教版八年级数学上期末总复习精品优
- WEB应用托管平台系统架构
- 《应用文写作》期末试卷
- 2017年秋九年级数学上册24.3正多边形和
- _空心村_形态特征与生成机理分析_以河
- 北师大版生物七年级下册12章2节感受器
- 社区卫生服务中心主任职责
- 广东省2014届广州二模材料作文“求道”
- 完整户口本英文翻译模板
- 2015年液化天然气LNG市场调研及发展趋
- 农村学校教育发展新
- 2014年注册税务师税法(Ⅱ)考试试题及答
- 东方大学俄语新版第5册第-7课课文翻译
- 路基路面工程课程设计1
- 219亩项目2011营销策略
- 第1篇 贸易术语-EXW、FCA、FAS
- 年会或大型活动防疫应急预案
- 改善提案(合理化建议)
- 初三英语第四单元ppt




