BRAM
在对BRAM进行介绍之前,先对RAM和FIFO做个比较,RAM全称是Random Access Memory,什么叫Random呢?含义是读写地址是随机的,用户可以随时对RAM中任意的地址进行读写操作,从而实现整个存储器的乱序(随机)读写访问,而对FIFO而言,First In First Out,先进先出,含义是只能顺序写入顺序读出,而FIFO内部的实现本质上也是利用的RAM,比如异步FIFO就利用了双端口RAM(Double Port RAM)来实现跨时钟域的数据读写操作。
BRAM:Block RAM
FPGA中有两种RAM资源,一种是BRAM,另外一种是Distributed RAM,Distributed RAM经过综合工具综合,通过多级LUT查找表资源级联实现(命名由来是它是由相隔很远的LUT级联实现的,故名分布式)
分布式RAM可以利用灵活的LUT资源,可以根据使用情况灵活配置,适合对RAM延迟不高的场合,毕竟不是真正的RAM(其实物理上也是真正的RAM,但不是专用)
而Block RAM相比于分布式RAM,就是一位专业选手了,BRAM是FPGA厂商在逻辑资源之外,给FPGA加入的专用块RAM资源,相比分布式RAM,RAM块内部以及和逻辑资源之间经过特殊的布局布线,使得BRAM具有很高的运行速度,确定的延迟周期,但每块FPGA上的BRAM数量均有限,占用了就没有了。
在网络通信,数字信号处理中应用中,BRAM 都是最重要的资源之一,实现高速数据的缓存,当前最高端的型号拥有近 200MB 的 BRAM 资源。
Block Memory Generator
在 Vivado 中,使用 BRAM Memory Generator 可视化工具生成 BRAM ip 核。通过在 Ip catlog 中搜索 BRAM,就可以打开 Generator
块/分布式 RAM 有独立的生成工具。可以从 AXI4 一栏了解到该 IP 对 AXI4 协议的支持情况。支持 AXI4,AXI4-Lite,AXI-Stream 或者不支持。(但在 Vivado 中似乎已经没有不支持 AXI4 的 IP 核)
Memory类型
Memory按照类型可以分为RAM、ROM,ROM中是事先预置好了数据,只能读不能写,ROM实现的物理结构与RAM类似,相当于一个只读的RAM,一般存放一些固定的参数,比如FIR滤波器的参数等等。
按照端口的数量有单端口以及双端口之分,双端口来自于同时对 RAM 进行读写的需求。一边将等待处理的数据从端口 A 输入 RAM,另一端口 B 读取数据进行处理,可以实现高效的数据流式处理,尤其适用于图像的行缓存处理。双端口 RAM 相较于 FIFO ,有可以映射地址以及多次重复利用数据的优势。在新的数据写入之前,可以多次从一指定位置读取旧数据。
具体IP核如何使用,可以参考以下链接:https://zhuanlan.zhihu.com/p/51600261,此处不详细赘述
全部评论
(0) 回帖