当前位置: 代码迷 >> 综合 >> Vivado 随笔(1) 综合属性之 ram_style rom_style?
  详细解决方案

Vivado 随笔(1) 综合属性之 ram_style rom_style?

热度:48   发布时间:2023-12-12 20:29:14.0

目录

背景

正文

相关文献


背景

在很多情况下,我们会定义一个二维数组来作为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的设计(同步读、同步写)