本文介绍了当MicroBlaze包含在DFX可重构模块(RM)内时,更新MicroBlaze Block RAM的内容。
解决方案
Vivado有两种机制可以将ELF文件与MicroBlaze Block RAM实例联系起来。
Memdata - 一个Vivado工具,当使用SCOPED_TO_CELLS或SCOPED_TO_REF属性时,在实现过程中启用。
updatemem - 一个Vivado外部的工具,使用现有的比特文件或PDI更新Block RAM。
Memdata
将MicroBlaze包含在可重构模块(RM)中,限制了将ELF文件与Block RAM关联的选项。
一个MicroBlaze块设计将包含元数据,其中包含将MicroBlaze实例与BRAM控制器和BRAM实例相联系的信息。
这个元数据是Memdata工具所需要的。
一旦RM网表被添加到一个更大的设计中,MicroBlaze的层次结构将不再匹配。
当试图使用SCOPED_TO_CELLS或SCOPED_TO_REF约束条件时,可以看到以下错误,该约束条件包括一个完整的设计,其中包括一个子级MicroBlaze网表设计。
严重警告:[Memdata 28-229] BRAM实例design_1_i/microblaze_0_local_memory/lmb_bram/U0/inst_blk_mem_gen/gnbram.gnative_mem_map_bmg.native_mem_map_blk_mem_gen/valid. cstr/ramloop[0].ram.r/prim_noinit.ram/DEVICE_8SERIES.WITH_BMM_INFO.TRUE_DP.SIMPLE_PRIM36.SERIES8_TDP_SP36_NO_ECC_ATTR.ram无法在网表中找到。一个常见的原因是,逻辑优化已经删除了BRAM实例。请验证.bmm文件和网表中的实例名称。BRAM的初始化字符串将不会被填充数据。
为了避免这种情况,可以在上下文合成结束时进行关联,此时层次结构仍然与元数据相匹配。
# OOC综合后的关联
synth_design -top $top -part $part -mode out_of_context
add_files
set_property SCOPED_TO_REF {base_microblaze_design}. [get_files
set_property SCOPED_TO_CELLS {microblaze_0}. [get_files
refresh_meminit
updatemem (Vivado 2020.2和更新版本)
另一种方法是使用updatemem工具。
注意:在2020.2之前的Vivado版本中,updatemem不支持部分位文件。
updatemem接受输入文件.bit .elf/.mem和.mmi。欲了解更多信息,请参见(UG898)。可以用下面的脚本片段来生成所需的输入文件,然后使用 updatemem。
# 使用updatemem来更新比特流块RAM
route_design
...
write_bitstream
write_mem_info
...
close_project
exec updatemem \
-meminfo ${static}_${rm}_routed.mmi /> -data hello_test.mmi
-data hello_test.elf ````。
-bit ${static}_${rm}_routed.bit \\
-proc design_1_wrapper_i/design_1_i/microblaze_0
-out top_out.bit
-debug