本篇博文旨在演示如何使用 .mem 文件来初始化 ROM 并从 PS-APU 读取内容。
AMD 参数化宏存储器:
AMD 参数化宏 (XPM) 是一种根据用户指定的要求创建 RAM 和 ROM 结构的工具。在 XPM 代码中,您可以指定多个泛型参数,包括存储器大小、时钟模式、存储器初始化文件、存储器原语等。
然后,AMD Vivado 综合工具会将这些要求转换为适当大小和样式的存储器阵列。
存储器初始化文件:
MEM 文件可以定义每个独立存储器位置的初始内容。文件格式必须为 ASCII,并且仅包含十六进制值,这些值按存储器最窄数据宽度泛型值指定的深度来进行组织。
仅当参数 MEMORY_INIT_PARAM 值等于 "" 时,才通过指定的文件名进行存储器初始化。在工程中使用 XPM_MEMORY 时,将指定文件作为设计源文件添加到 Vivado 工程中。
示例设计是使用 Vivado 2023.1 版本创建的,设计目标是 VCK190 评估板。在本篇博文中以附件形式提供了适用于此块设计的 Tcl 脚本和应用代码。
模块框图:

注释:此 Tcl 脚本 (design_1.tcl) 所创建的设计会包含以下模块引用:
xpm_sprom
rom_initialization_file
请在使用 source 命令运行此 Tcl 脚本之前,添加这些模块的源文件(xpm_sprom.v 和 rom_initialization_file.mem)。
AMD Vivado 步骤:
步骤 1:创建工程,目标为 VCK190 评估板。
步骤 2:在 IP integrator 中创建块设计。
步骤 3:将 versal_cips_0 IP 添加到块设计中。
步骤 4:运行块自动化设置,将 PL 时钟设置为 1,PL 复位设置为 1,并将存储器控制器类型设置为 DDR4。


步骤 5:打开 NoC Re-customize IP,在“Board”(开发板)选项卡中输入以下设置:
CH0_DDR4_0 = ddr4 dimm1
Sys_clk0 = ddr4 dimm1 sma clk

步骤 6:在“General”(常规)选项卡中输入以下设置:
Number of AXI Master Interfaces(AXI 主接口数)= 1
Number of AXI Clocks(AXI 时钟数)= 7
Number of Memory controller Ports(存储器控制器端口数)= 1

步骤 7:转至“Connectivity”(连接)选项卡,检查 S0xAXI 与 M00_AXI 之间的连接,然后单击“OK”(确定)。

步骤 8:将 AXI BRAM 添加到块设计中,然后单击“Run Connection Automation”(运行自动连接)。

步骤 9:再次单击“Run Connection Automation”,以连接到 ext_reset_in。

步骤 10:打开 AXI BRAM Controller Re-customize IP 块,输入以下设置:
Data width(数据宽度)=32
Read latency(读取时延)=1
启用“Read command Optimization”(读取命令优化)选项。

步骤 11:在 Flow Navigator 中的“Project Manager”(工程管理器)下,单击“Language Templates”(语言模板)。这样会打开“Language Template”对话框。在“Search”(搜索)字段中输入 xpm,然后选择相应的 HDL 代码 (VHDL/Verilog) 模板,如下图所示。复制并粘贴单端口 ROM 存储器的模板,然后将例化模板添加到 HDL 文件中。按照随附的 xpm_sprom.v 文件执行配置。

步骤 12:将 XPM 存储器块与设计的其余部分集成。您可以使用 IP integrator 工具将 XPM 存储器作为 RTL 模块进行集成。

步骤 13:生成要放入 ROM 中的 MEM 文件:

步骤 14:完成模块框图:

步骤 15:在“Address Editor”(地址编辑器)中为例化的存储器设置适当的深度。运行确认步骤,确认成功后,检查“Address Editor”(地址编辑器)选项卡。

步骤 16:为 BD 创建 HDL 封装文件,运行综合与实现,然后生成器件镜像。
步骤 17:导出硬件设计以获取 XSA 文件。

步骤 18:在 AMD Vitis 中创建新的应用工程,然后切换至“Create a new platform from hardware”(基于硬件创建新平台)选项卡。单击“+”,浏览找到从 Vivado 导出的 XSA 文件。


步骤 19:提供应用工程名称,输入 versal_cips_0_pspmc_0_psv_cortexa72_0,然后单击“Next”(下一步)。

步骤 20:选择“Hello World”,然后单击“Finish”(完成)。

代码快照:
创建完应用工程后,转至 main.c 并更新代码以读取 ROM 中的数据。

运行设计:
连接到 VCK190 评估板,并设置启动模式为 JTAG 启动模式,然后运行应用。
控制台输出示例:

全部0条评论
快来发表一下你的评论吧 !