存储器实验

实验目的

1.理解存储器的特性;

2.掌握存储器的HDL描述方法;

3.了解FPGA的存储资源及使用方法。

实验概述

存储器是计算机中一个必不可少的部件,用来存储程序和数据。实际应用中对存储容量的要求一般比较大,通常会采用若干存储芯片组成所需要的存储器;在本课程中后面CPU设计实验中,只需要小容量的指令存储器和数据存储器配合验证CPU的设计,所以本实验学习使用FPGA内部资源来构成小容量的存储器。

参考设计

FPGA内部资源可以分为逻辑资源和专用存储资源两类,都可以用来构成小容量存储器,但特性有所不同。专用存储资源只能生成同步存储器,逻辑资源可以生成同步写、异步读的存储器,也可以生成读写均异步的存储器。详细内容请看辅导视频。

FPGA设计工具如Quartus和Vivado都提供了交互式工具生成片内存储器IP核,但是可移植性不好;本实验采用HDL描述产生不同特性的片内存储器。实验材料中给出了ROM和两种RAM的参考设计代码,可结合辅导视频学习。更多有关Intel FPGA中存储器的描述方法,请参考《Intel® Quartus® Prime用户指南》中的设计建议:从HDL代码推断存储器功能

实验任务

用ROM实现七段译码器

设计一个16×8的只读存储器,用存储器的4位地址作为七段译码器的数据输入,相应存储单元的8位数据作为译码器的输出。存储单元中固化十六个字符的数码管段码,要求用赋值语句进行初始化。

用前面七段译码器实验的虚拟面板验证。

用RAM实现寄存器堆

在前面的寄存器堆实验中,只包含4个寄存器,用多路器选择其中一个输出;若寄存器的数量比较多,不仅描述冗长,硬件资源消耗也较多。本实验用存储器的方法(不带读时钟的)设计一组32×32的三端口寄存器堆,并且R0寄存器的读出值始终为零;要求写成单独的模块,并且采用参数化的设计方法,模块端口如下。

module RegisterFile
#( parameter DATAWIDTH = 32,
parameter ADDRWIDTH = 5)
(
input wire iClk,
input wire iWE,
input wire [ADDRWIDTH-1:0] iWA, iRA1, iRA2,
input wire [DATAWIDTH-1:0] iWD,
output logic [DATAWIDTH-1:0] oRD1, oRD2
);

实例化时通过传递参数实例化为4×4的三端口寄存器堆,这样就可以用较少的开关进行验证。