基础知识
BRAM 和 DRAM
FPGA的芯片内部有两种方式来实现数据的缓存功能
- 基于硬件的 Blocked RAM(BRAM):理解为FPGA内部放了一个RAM芯片,相当于是物理存储模块
- 由 FPGA 的逻辑资源拼出来的 DRAM(Distributed)
BRAM 和 DRAM 的区别
- BRAM不占用FPGA逻辑资源,DRAM需要占用LUT及查找表
- BRAM 使用起来复杂(需要时钟同步并且给一些控制信号),DRAM 只需要简单调用查找表就好(可以不用时钟,异步存储和读取,相当于组合逻辑)
- BRAM 可以存储比较多的数据, 而DRAM受FPGA逻辑资源闲置较大(通常仅少量数据如几个字节的时候推荐用DRAM,),当数据较多如缓存一行图像数据或者存储卷积模板的时候会用BRAM(几K 到几百K), 当存储非常大的数据 如整张图像(几M 甚至几十M)时 ,这时候推荐使用外部存储芯片(SDRAM 或者 DDR)
- 可以利用BRAM 生成多种不同形式的RAM,比方说 ROM FIFO 等
实验
BRAM IP 核的使用
Xilinx 7系列FPGA 内部的BRAM 可以配置成 真双口RAM(True Dual-Port ram,能同时负责读写),简单双口RAM(Simple Dual-Port ram,一个只能负责读 一个只能负责写)单端口RAM(只有一个端口)以及ROM。
PS访问 PL端的BRAM资源实现PS与PL数据交互
7020有4.9Mbit 的BRAM。 PS本身并不能直接读写 BRAM 的数据。但是我们可以通过AXI BRAM Controller IP 核来控制BRAM资源。
AXI BRAM Controller(PS 端的 BRAM)
以下选项意味着这个只能访问一块存储。如果有两个,可以构成双通道数据流,一个 IP 负责读,一个 IP 负责写
Block Memory Generator(PL 端的 IP)
出现错误
ERROR [BD 41-1356] Slave segment <____HP0_DDR_LOWOCM> is not assigned into address space
打开 Address Editor, 地址未分配