目录
一、前言
二、RAM_STYLE
2.1 工程代码
2.2 参考资料
一、前言
RAM英文全称为Random Access Memory,随机存取存储器,可以实现数据的快速随机读写,RAM可直接verilog代码编写,也可调用IP核。
二、RAM_STYLE
RAM_STYLE属性使用格式:(* ram_style=value *) reg [len-1:0] reg_name [num-1:0];
len为存储器的宽度,num为深度,value为生成方式。
XDC使用格式:set_property RAM_STYLE value [get_cells reg_name]
Vivado可以通过属性RAM_STYLE指定RAM的生成方式,也即指定value的值,value可为block,distributed,registers,ultra,mixed,auto
block:使用块状RAM来实现
distributed:使用LUT来实现
registers:使用寄存器来是实现
ultra:只针对ultrascale系列的器件才有效,即使用ultrascale器件中的URAM实现
mixed:根据使用最小的面积原则灵活确定RAM的实现方式
auto:综合工具来决定实现方式
属性如果设置在一个信号上,属性的作用范围限定为设置的信号上,如果是设置到一个模块层级上,该模块的RAM都按设置方式实现,但该属性对于模块中的子模块不生效。
2.1 工程代码
module RAM_STYLE( d,address,ce,we,clk,out );
parameter len=12,depth=64;
input [len-1:0] d;
input [5:0] address;
input ce,we,clk; //we为写入的使能信号,为1时对RAM进行写入
output reg [len-1:0] out;
(* RAM_STYLE="block"*) reg [len-1:0] ram [depth-1:0];
always@(posedge clk)
if(ce==1'b1)
begin
if(we==1'b1)
ram[address]<=d;
else
out<=ram[address];
end
endmodule
结果如下图,RAM使用RAM18E1来实现
RAM_STYLE的属性值修改为distributed,由网表可知有RAM64x1S生成RAM,即由LUT生成
2.2 参考资料
书籍《Vivado从此开始-进阶篇》
用户手册《ug901-vivado-synthesis.pdf》