概述
试验三 寄存器组设计实验
1实验目的
1 熟悉并掌握基本MIPS计算机组成的工作原理与设计方法。
2 掌握用Verilog语言设计一个由32个寄存器组成的字长为32位的寄存器组。
3 完成一个由16个寄存器组成的字长为4位的寄存器组设计,并在Altera DE2-70开发板上实现。
2 实验设备
(1)装有Quartus II的计算机一台。
(2)Altere DE2-70开发板一台。
3 实验预备知识
3.1寄存器组
寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。
寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。
3.2 Quartus II 编程平台
Quartus II是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
3.3 Altera DE2-70开发板
Altera DE2-70 最新多媒体开发平台配备了数量高达70,000个逻辑单元的Altera Cyclone® II 2C70和更大容量的内存组件,并完全承袭了Altera DE2 多媒体平台丰富的多媒体、储存及网络等应用接口的优点。此开发平台提供多样的产品功能,不仅适用于大专院校实验室的教学研究与专题制作,也适合工业界做为开发复杂数字系统的工具。Altera DE2-70 最新多媒体开发平台提供使用者丰富的产品功能,在广泛的电路设计运用上,从简易的电路设计,到多样化的多媒体项目,使用者都能轻易完成。
4 实验任务
1.根据实验原理框图完成一个32位字长的32个寄存器组成的寄存器组设计,并在Quartus II上模拟实现。
2.根据下面的实验原理框图完成一个4位字长的16个寄存器组成的寄存器组设计,并在Altera DE2-70开发板实现。
首先进入 project 目录,在该目录下运行一系列命令,创建和修改几个文件,就可以生成符合该平台的Makefile文件,操作过程如下:
5 实验步骤
5.1创建新工程
A、Quartus II 工作环境;
B、新建一个Quartus 工程,工程名与顶层实体名设为 reg071221054。
5.2用Verilog HDL语言编写一个32位字长的32个寄存器组的程序
// Quartus II Verilog Template
//32 register group
//DATA_WIDTH=32
module registers071221049
(
input [4:0]s1,s2,
input [4:0] wd,
input [31:0] data,
input wre, clk,
input he,hc,le,lc,
output [31:0] out1,
output [31:0] out2
);
reg [31:0] mem [31:0];
//write
always @ (posedge clk)
begin
if(wre == 0 )
begin
if(he == 0) mem [wd] [31:24] <= data[31:24];
if(hc == 0) mem [wd] [23:16] <= data[23:16];
if(le == 0) mem [wd] [15:8] <= data[15:8];
if(lc == 0) mem [wd] [7:0] <= data[7:0];
end
end
//read
assign out1 [31:0] = mem [s1] [31:0];
assign out2 [31:0] = mem [s2] [31:0];
endmodule
5.3 编译调试仿真
如图:
5.4完成16字长为4位寄存器组设计,并在Altera DE2-70开发板上实现
5.4.1 Verilog HDL语言设计部分
代码如下:
//*********rege.v***********
module rege
(
input [3:0]s1,s2,
input [3:0] wd,
input [3:0] data,
input wre, clk,
input he,hc,le,lc,
output reg [3:0] out1,
output reg [3:0] out2
);
reg [3:0] mem [15:0];
//write
always @ (posedge clk)
begin
if(wre == 0 )
begin
if(he == 0) mem [wd] [3] <= data[3];
if(hc == 0) mem [wd] [2] <= data[2];
if(le == 0) mem [wd] [1] <= data[1];
if(lc == 0) mem [wd] [0] <= data[0];
end
end
//read
always @ (s1 [3:0] or s2 [3:0])
begin
out1 <= mem [s1] ;
out2 <= mem [s2] ;
end
endmodule
//***********Top-level entity reg071221054************
module reg071221054
(
input [3:0] iKEY,
input [17:0] iSW,
output [7:0] oLEDG
);
rege re(iSW[5:2],iSW[9:6],iSW[17:14],iSW[0],iKEY[0],iSW[1],iKEY[3],iKEY[2],iKEY[1],oLEDG[3:0],oLEDG[7:4]);
endmodule
5.4.2编译前的准备工作
配置引脚,选择引脚文件配置引脚:Assignments-> Import Assignments…。并同时在:Assignments->device..选择Device and Pin Options,选择Dual-Purpose Pins标签,然后在Use as programming pin处双击,在出现的下拉栏中把nCEO那一项改为Used as regular I/O。
生成图:
具体导出电路图见rege_re.jpg
6 实验思考题
6.1 MIPS机器的运算器与普通运算器有哪些不同?
答:1.指令集
采用MIPS指令集,有60余条常用指令,体现R类型、I类型、J类型三种基本的指令格式;有五种寻址方式:寄存器寻址、立即数寻址、基址偏移量寻址、PC相对寻址和伪直接寻址;提供了乘法指令的硬件处理机制。
2.流水线:
具有完整的五级流水线架构,采用独立的32位的数据总线和地址总线;采用旁路、数据前推技术解决数据相关问题;提供了分支延迟槽机制和无延迟跳转网络。jal指令的返回地址跟随其后的第二条指令;具有指令CACHE和数据CACHE。
6.2不带使能端的8个D触发器构成的一个8位的时钟上升沿有效并带使能端(低电平有效)的寄存器设计。
答:见rege_8.vsd
最后
以上就是唠叨煎饼为你收集整理的寄存器组设计实验的全部内容,希望文章能够帮你解决寄存器组设计实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复