教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 说明书 >

《单周期CPU的设计与实现》-实验指导书(7)

来源:网络收集 时间:2026-04-12
导读: 计算机组成原理实验单周期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_j

计算机组成原理实验单周期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字,全部文档内容请下载后查看。喜欢就下载吧 ……

《单周期CPU的设计与实现》-实验指导书(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/449330.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)