目录
背景
正文
相关文献
背景
在很多情况下,我们会定义一个二维数组来作为RAM或者ROM来使用,例如我们在设计一个异步FIFO时,我们需要例化一个双端口RAM来作为FIFO的存储空间,当然我们可以通过例化一个IP核的方式去做(可以直接在IP核定制时候选择使用Block RAM或者Distributed RAM资源),但是如果我们不去设计这么一个IP核呢?
我们就可以直接定义一个二位数组来用做存储空间,同样可以实现同样的功能,但是我们是否想过这样一个问题,就是我们定义的这样一个二位数组,在Vivado综合工具进行综合时候,用什么来实现我们这样的一个RAM呢?稀里糊涂,把命运交给综合工具,随意(默认)推断?
正如标题所示,今天的这两个综合属性就可以帮你掌握自己的命令,明确地告诉综合工具,我要用什么资源去实现这样的一个二位数组。
注意:如果设计的是一个RAM,用ram_style;如果是ROM,则用rom_style。
正文
ram_style & rom_style这对综合属性旨在提示Vivado综合工具如何推断存储空间。
其值可以为:
block
提示综合工具使用Block RAM来实现;
distributed
提示综合工具使用LUT资源来实现;
用法,这里只给出Verilog中的用法:
在二维数组的定义前面加上如下声明即可,例如:
(*ram_style = "distributed"*) reg [data_size - 1 : 0] myram[2**addr_size - 1:0];
当然,例子中的data_size以及addr_size是parameter类型的常数。
**运算符表示指数运算;
相关文献
Vivado入门与提高
Verilog高级数字系统设计
【FPGA】ROM/EPROM的设计(使用case的方式初始化)
【FPGA】ROM/EPROM的设计(使用加载文件的方式初始化)
【FPGA】双端口RAM的设计(异步读写)
【FPGA】单端口RAM的设计(同步读、同步写)