当 MicroBlaze 位于可重配置模块内部时,如何使用 ELF 文件更新 BRAM 以进行动态功能交换

本文介绍了当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 .elf

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 .bit # write_device_image for Versal devices
write_mem_info .mmi
...
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

最新文章

最新文章