RAM 的英文全称是
Random Access Memory,即随机存取存储器,它可以随时把数据写入任一指定地址 的存储单元,也可以随时从任一指定地址中读出数据,其读写速度是由时钟频率决定的。RAM 主要用来存 放程序及程序执行过程中产生的中间数据、运算结果等。本章我们将对 Vivado 软件生成的 RAM IP 核进行读写测试,并向大家介绍 Xilinx RAM IP 核的使用方法。
1.RAM IP 核简介
Xilinx 7 系列器件具有嵌入式存储器结构,满足了设计对片上存储器的需求。嵌入式存储器结构由一列列 BRAM
(块
RAM
)存储器模块组成,通过对这些
BRAM
存储器模块进行配置,可以实现各种存储器的功能,例如:RAM
、移位寄存器、
ROM
以及
FIFO
缓冲器。
Vivado 软件自带了
BMG IP
核(
Block Memory Generator
,块
RAM
生成器),可以配置成
RAM
或者ROM。这两者的区别是
RAM
是一种随机存取存储器,不仅仅可以存储数据,同时支持对存储的数据进行修改;而 ROM
是一种只读存储器,也就是说,在正常工作时只能读出数据,而不能写入数据。需要注意的是,配置成 RAM
或者
ROM
使用的资源都是
FPGA
内部的
BRAM
,只不过配置成
ROM
时只用到了嵌入式BRAM 的读数据端口。本章我们主要介绍通过
BRAM IP
核配置成
RAM
的使用方法。
Xilinx 7 系列器件内部的
BRAM
全部是真双端口
RAM
(
True Dual-Port ram
,
TDP
),这两个端口都可以独立地对 BRAM
进行读
/
写。但也可以被配置成伪双端口
RAM
(
Simple Dual-Port ram
,
SDP
)(有两个端口,但是其中一个只能读,另一个只能写)或单端口 RAM
(只有一个端口,读
/
写只能通过这一个端口来进行)。单端口 RAM
只有一组数据总线、地址总线、时钟信号以及其他控制信号,而双端口
RAM
具有两组数据总线、地址总线、时钟信号以及其他控制信号。有关 BRAM
的更详细的介绍,请读者参阅
Xilinx
官方的手册文档“UG473
,
7 Series FPGAs Memory Resources User Guide”
。
单端口 RAM
类型和双端口
RAM
类型在操作上都是一样的,我们只要学会了单端口
RAM
的使用,那么学习双端口 RAM
的读写操作也是非常容易的。本章我们以配置成单端口
RAM
为例进行讲解。
BMG IP 核配置成单端口
RAM
的框图如下图所示。

各个端口的功能描述如下:
DINA:
RAM
端口
A
写数据信号。
ADDRA:
RAM
端口
A
读写地址信号,对于单端口
RAM
来说,读地址和写地址共用同该地址线。
WEA:
RAM
端口
A
写使能信号,高电平表示向
RAM
中写入数据,低电平表示从
RAM
中读出数据。
ENA:端口
A
的使能信号,高电平表示使能端口
A
,低电平表示端口
A
被禁止,禁止后端口
A
上的读
写操作都会变成无效。另外
ENA
信号是可选的,当取消该使能信号后,
RAM
会一直处于有效状态。
RSTA:
RAM
端口
A
复位信号,可配置成高电平或者低电平复位,该复位信号是一个可选信号。
REGCEA:
RAM
端口
A
输出寄存器使能信号,当
REGCEA
为高电平时,
DOUTA
保持最后一次输出的数据,REGCEA
同样是一个可选信号。
CLKA:
RAM
端口
A