在Xilinx FPGA中既可以采用分布式资源(查找表)也可以采用BRAM实现存储单元。对于手工编写的HDL代码所描述的RAM,在默认情况下,Vivado会通过内部算法给出最优结果。此外,也可以通过ram_style指导工具推断RAM的实现方式。该属性有4个值:block(将RAM映射为Block RAM)、distributed(将RAM映射为分布式资源)、registers(指导工具推断为寄存器而非RAM)和ultra(将RAM映射为UltraRAM,针对UltraScale Plus芯片)。
对于如下图所示的RAM,如果ram_style为distributed,则消耗267个LUT和16个FF;如果ram_style为Block,则消耗1个18Kb的Block RAM。
相对于使用IP,手工编写HDL代码的好处在于便于移植,同时,由于可以使用ram_style,可以灵活地根据设计需求将RAM采用不同的资源实现。例如,当RAM小于10K bit时,分布式RAM在功耗和速度上更有优势;当设计中LUT利用率很高时,如果Block RAM资源利用率不高,可以把分布式RAM转换为Block RAM,从而释放出一部分LUT资源。
类似地,rom_style则是引导综合工具将ROM采用不同的资源实现。其可选值有两个:block和distributed。这是因为UltraRAM不能用做ROM。
结论
-ram_style和rom_style都可将存储单元映射为BlockRAM或分布式RAM
-手工编写HDL代码的优势在于结合ram_style/rom_style可灵活地将RAM或ROM根据设计需求映射为不同的资源
-对于UltraRAM,不建议采用手工编写HDL代码的方式,最好使用XPM_MEMORY
上期内容:
下期内容:
本周回顾 -- 2018/03/16