FPGA 入门 —— RAM(ip 核与原语的使用)
BRAM 简介
XILINX 系列的 FPGA ,如果想要做一个 RAM,有两种方式:
1、使用逻辑资源组成分布式 RAM,即 Distributed RAM
2、使用 XILINX 专用的 Block RAM,即 BRAM
前者是由 CLB 的 SLICEM 的 LUT 组合而成,构成 RAM 后,可能分布在不同的地方,具有一定的延迟;
后者是 Block RAM 是内嵌专用的 RAM,是 XILINX 做进 FPGA 内的专用资源,具有更好的时序性能;
这里我们以 ZYNQ-7000 为例:
可以看到红色方框中,标识出了此款 FPGA 的 BRAM 资源,我们也可以了解到,一个 BRAM 资源大小为 36Kbits(注意,这里是 bits),红色方框的这款含有 140 个这样的 BRAM,也就是一共含有 36Kbits * 140 = 4.9Mbits 大小的 BRAM 资源;
在 XILINX 的官方文档上,介绍这部分的文档是:
pg058-blk-mem-gen.pdf
有兴趣的可以下载来看下;
针对 BRAM 资源的接口形式,主要分为两种:
Native:本地 BRAM
AXI4:与 AXI4 总线互联的 BRAM
这里更多的来了解一下 Native 类型的 BRAM,等到要用到 BRAM 挂到 AXI 上的时候,再来仔细分析 AXI Interface 的 BRAM;
较为新的 XILINX 介绍这部分的内容叫 BMG(Block Memory Generator)
Block Memory Generator IP 核
分类
按照 BRAM 可以构成的器件类型来分,主要可以分为如下几种:
• Single-port RAM : 单口 RAM
• Simple Dual-port RAM:伪双口 RAM
• True Dual-port RAM:真双口 RAM
• Single-port ROM :单口 ROM
• Dual-port ROM:双口 ROM
信号描述
首先进行信号的描述,常用到信号含义如下表所示:
Signal Name | Direction | Description |
---|---|---|
clka | Input | Port A 的同步时钟信号 |
addra | Input | Port A 的地址信号 |
dina | Input | Port A 写操作时候的输入数据信号 |
douta | Output | Port A 读操作时候的输出数据信号 |
ena | Input | Port A 的使能信号,在读,写,Rst 的时候需要此信号 |
wea | Input | Port A 的写使能信号 |
rsta | Input | Port A 的复位信号 |
regcea | Input | Port A 的可选后级输出寄存器信号 |
clkb | Input | Port B 的同步时钟信号 |
addrb | Input | Port B 的地址信号 |
dinb | Input | Port B 写操作时候的输入数据信号 |
doutb | Output | Port B 读操作时候的输出数据信号 |
enb | Input | Port B 的使能信号,在读,写,Rst 的时候需要此信号 |
web | Input | Port B 的写使能信号 |
rstb | Input | Port B 的复位信号 |
regceb | Input | Port B 的可选后级输出寄存器信号 |
sbiterr | Output | Single-Bit Error 信号 |
dbiterr | Output | Double-Bit Error 信号 |
injectsbiterr | Input | Inject Single-Bit Error: Available only for Zynq-7000 and 7 series ECC configurations. |
rdaddrecc | Output | Read Address for ECC Error output: Available only for Zynq-7000 and 7 series ECC configurations |
eccpipece | Input | ECC Pipe Line Register Clock Enable: Available only for UltraScale architecture-based devices. |
sleep | Input | 动态功耗调整: If sleep pin is High , the Block Memory Generator core is in power saving mode. Available only for UltraScale architecture-based devices |
Single-port RAM
XILINX 官方的 pg058 部分描述了 Single-port RAM 的典型应用,可用于处理器暂存数据的 RAM,或者作为查找表等;它的图解如下所示,斜杠的信号为可选信号,其余的是必选信号;
CLKA 为输入的时钟信号,时钟上升沿对数据进行写入/读出
DINA 为写入的数据总线
DOUTA 为读出的数据总线
ADDRA 为地址总线
ENA 为使能端,当 ENA 为 1 的时候,可进行读写操作,ENA 为 0 的时候,无法进行读写
WEA 为写使能,当 ENA 为 1 同时 WEA 为 0 的时候,为读操作;当 ENA 和 WEA 同时为 1 的时候,为写操作;
由于只有一组地址总线,故,单口的 RAM 是无法同时进行读写操作的,只能读、写分开进行;