Vivado綜合屬性系列之三 RAM_STYLE
一、前言
????????RAM英文全稱為Random Access Memory,隨機存取存儲器,可以實現(xiàn)數(shù)據(jù)的快速隨機讀寫,RAM可直接verilog代碼編寫,也可調(diào)用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來實現(xiàn)
distributed:使用LUT來實現(xiàn)
registers:使用寄存器來是實現(xiàn)
ultra:只針對ultrascale系列的器件才有效,即使用ultrascale器件中的URAM實現(xiàn)
mixed:根據(jù)使用最小的面積原則靈活確定RAM的實現(xiàn)方式
auto:綜合工具來決定實現(xiàn)方式
????????屬性如果設置在一個信號上,屬性的作用范圍限定為設置的信號上,如果是設置到一個模塊層級上,該模塊的RAM都按設置方式實現(xiàn),但該屬性對于模塊中的子模塊不生效。
????????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來實現(xiàn)

????????RAM_STYLE的屬性值修改為distributed,由網(wǎng)表可知有RAM64x1S生成RAM,即由LUT生成

????????????2.2 參考資料
書籍《Vivado從此開始-進階篇》
用戶手冊《ug901-vivado-synthesis.pdf》