Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件_第1页
Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件_第2页
Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件_第3页
Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件_第4页
Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件_第5页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Vivado中用HDL定义BRAM存储器并用updatemem合成bit文件最近被这么一个工作折腾了好几天:一个非IPI的Vivado工程(需要全部Verilog手写),在Artix-7FPGA中实现了一个ARMCortex-M0DesignStart软核(老版,没有debug模块),存放ARM程序的存储器是实现在FPGA片上RAM上的;ARM程序用KeilMDK编写,我希望在测试这个程序时,不用每次都重新综合一遍FPGA。总体来说这个需求是:Vivado;全部HDL,非IPI;无处理器(在Vivado看来M0DesignStart不是处理器);存储器放在BRAM上;替换Bitstream中的BRAM初始化,而不用重新综合整个逻辑。这件事看上去肯定是能做到的嘛。然而Vivado要用新的updatemem命令来替换以前ISE中的data2mem,我发现在无处理器的工程上,相关资料比较少……这里总结一下整个实现过程。使用环境是Vivado2015.2。先把Vivado多线程开了……

参考资料:

[XilinxAR#53090]Vivado-IsitpossibletorunTclcommandsduringinitializationoftheVivadoorPlanAheadtools?在Vivado安装文件夹Vivadoversionscripts中新建一个init.tcl,里面写

set_paramgeneral.maxThreads8这样下次运行Vivado是自动开启8线程,综合实现比较快……将寄存器定义在BRAM上

参考资料:?

[XilinxAR#54778]DesignAssistantforVivadoSynthesis-HelpwithSynthesisHDLAttributeSupport-keep,keep_hierarchy,ram_style,rom_style这个页面的附件中给出了ram_style属性的例子,以verilog为例:

moduleram_inf_64x1d_2(a,dpra,clk,din,we,spo,dpo);parameterADDRESSWIDTH=6;

parameterBITWIDTH=1;

parameterDEPTH=34;inputclk,din,we;

input[ADDRESSWIDTH-1:0]a,dpra;outputspo,dpo;(*ram_style="block"*)

reg[BITWIDTH-1:0]ram[DEPTH-1:0];

reg[ADDRESSWIDTH-1:0]read_dpra;

reg[ADDRESSWIDTH-1:0]read_a;always@(posedgeclk)begin

if(we)begin

ram[a]<=din;

end

read_a<=a;

read_dpra<=dpra;

endassignspo=ram[read_a];

assigndpo=ram[read_dpra];endmodule上面代码展示了如何将寄存器数组regram强制定义在BlockRAM上,并展示了两种访问方式:单口访问:地址a、输入数据din、输出数据spo;输入、输出分别访问:输入地址a、输入数据din、输出地址dpra、输出数据dpo。实际使用中可根据需要选择保留其中一组引脚。综合后可检查ProjectSummary和warning看是否成功综合成BRAM。建议这段module直接使用,不做逻辑上的修改。查看BRAM模块的实现情况

参考资料:?

[XilinxAR#59259]2013.4-VivadoIPI-write_bmmSupportwithnon-processorBasedDesigns?这个帖子是针对bmm的,但其中提到了如何查看实现出的BRAM模块的位置,以及怎样知道每个模块分配的行、列地址范围。把工程Implement一下,然后打开ImplementedDesign。

在打开的ImplementedDesign里面Ctrl+F搜索所有的BMEM:搜索结果长这样:每一行就是综合出的一个BRAM模块。选中其中一行,在它的属性里可以看到:其中比较重要的是模块的名字(比如xxxxx/ram_reg_0)、位置(比如X1Y7)、行和列的地址范围([0:16383]和[0:1])。为BRAMcell添加bmm属性

参考资料:?

[Xilinx论坛]AmethodtofixpoorcombinationLBMofIPIMicroblazedesign?我们需要做的是在Vivado工程里添加一个xdc约束文件,包含类似下面的内容:

create_propertybmm_info_memory_devicecell-typestringset_propertybmm_info_memory_device{[0:1][0:16383]}[get_cellsu_block_ram/ram_reg_0]

set_propertybmm_info_memory_device{[2:3][0:16383]}[get_cellsu_block_ram/ram_reg_1]

set_propertybmm_info_memory_device{[4:5][0:16383]}[get_cellsu_block_ram/ram_reg_2]

set_propertybmm_info_memory_device{[6:7][0:16383]}[get_cellsu_block_ram/ram_reg_3]#后面还有好几个,最后是ram_reg_15除了第一行定义属性之外,后面每一行都对应上面搜索到的一个BRAM模块(当然不需要初始化的BRAM就不用写了)。

这里有两个字段需要根据实际工程来改写:一个是类似[0:1][0:16383]这样的地址范围,另一个是u_block_ram/ram_reg_0这样的cell名字。其他都是不用动的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论