ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互

AXI HP 总线是 ZYNQ 芯片非常重要的一个功能,它可以实现 Cortex A9 与 PL 之间大吞吐量的数据通信。可以说,ZYNQ 芯片最大的卖点恐怕就是这条总线。对不起,不是 1 条,是 4 条这样的 AXI HP 总线。PL 作为 AXI HP 主机,可以通过这 4 条总线实现对内存(DDR3)的读写访问,这 4 条总线加总的极限带宽,通常能够超过 DDR3 的最大有效带宽,因此,对于处理器与 PL 之间的数据交互,ZYNQ 芯片可以说做到了最优状态。因此,对于用 ZYNQ 做开发的工程师而言,如何玩转 AXI HP 总线就成为了必修课。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 1 ZYNQ 芯片结构

本实例通过一个简单的 AXI HP 总线主机的读时序和写时序逻辑,来带领读者掌握基于 ZYNQ 的 AXI HP 总线基本使用方法。在这个实例中,首先需要在 ZYNQ PS 端对 AXI HP 总线进行配置,在系统硬件框图中进行必要的接口引出,然后在顶层源码中例化接口,并进行 AXI HP 读写时序的逻辑设计。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 2 ZYNQ 搭建的硬件框图

在硬件框图中配置并分配 AXI HP 总线基地址的过程略。

一、AXI HP 主机读写逻辑设计

本实例工程源码与 AXI HP 相关的模块有:axi_hp0_source.v、axi_hp0_wr.v 和 axi_hp0_rd.v 模块。

axi_hp0_source.v 模块以 1s 为单位,计数定时,产生对 AXI HP0 总线固定地址 32’h0100_0000 写一组递增的 burst lenght = 16 的 64bit 位宽的数据。

o_data_*信号送到 axi_hp0_rd.v 模块发起一次读 DDR3 的操作,i_data_*信号送到 axi_hp0_wr.v 模块发起一次 DDR3 写的操作。在 ILA 在线逻辑分析仪中,由于每秒都有 AXI HP0 总线的读操作和写操作,因此我们可以很容易抓到它们的时序进行观察和分析。

axi_hp0_wr.v 模块对 AXI HP0 总线的写地址通道、写数据通道和写响应通道的信号接口产生必要的时序,完成一组数据的 DDR3 写入操作。该模块下例化了一个名为 fifo_generator_0 的 FIFO,外部需要写入的数据都统一送到该模块中,当状态机检测到该 FIFO 的数据个数满足一个 DDR3 写入的 burst length 时,就发起一次 DDR3 写地址和数据的时序,读出 FIFO 中国的数据,通过 AXI HP0 的写数据通道送给 DDR3。执行写操作的状态关系是先写地址(STATE_WADD),然后送数据(STATE_WDAT),最后等待写响应(STATE_DONE),完成一次操作(STATE_IDLE)。

axi_hp0_rd.v 模块对 AXI HP0 总线的读地址通道产生必要的时序,由于读数据通道是由从机输出的,因此对该模块而言是输入,该实例的目的只是希望通过 ILA 在线逻辑分析仪进行时序查看,所以我们没有对读数据通道的接口做任何额外的连接。该模块的设计比较简单,按照 axi_hp0_source.v 模块给出的每秒定时脉冲和地址,每秒产生一个读地址通道时序即可。

二、AXI HP 主机读写逻辑仿真

axi_hp0_wr.v 模块的仿真波形如图 3 所示。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 3 axi_hp0_wr.v 模块的仿真波形

其中一次 AXI HP0 总线写地址和数据的时序波形,如图 4 所示。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 4 AXI HP0 总线写地址和数据的时序波形

三、嵌入式软件工程创建

导出 PS 硬件工程,并打开 EDK 新建一个 HelloWorld 的模板工程。本实例并不需要在嵌入式软件中做任何其它的功能实现,只需要在.bit 文件烧录完成后,运行嵌入式软件即可(主要是 PL 端的时钟源是来自 Zynq PS,因此必须在嵌入式软件运行起来后,才能够产生时钟信号)。

四、板级调试

设置以 AXI_wvalid == R 作为触发条件,触发一次波形。

AXI_wvalid == R 触发后,出现了两组波形事件,前面一个是 AXI HP 总线写数据波形,后面一个是 AXI HP 总线读数据波形,如图 5 所示。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 5 AXI HP 总线读写数据波形

AXI HP 总线写数据波形:对 AXI 总线固定地址连续写入 16 个每 16bit 递增的 64bit 数据,如图 6 所示。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 6 对 AXI 总线固定地址连续写入 16 个每 16bit 递增的 64bit 数据

AXI HP 总线读数据波形:对相同地址的 AXI 总线读操作,读出的 16 个 64bit 数据和写入的数据一致,如图 7 所示。

ZYNQ数据交互:通过AXI_HP接口实现PS和PL数据交互
图 7 对相同地址的 AXI 总线读操作,读出的 16 个 64bit 数据和写入的数据一致

五、参考链接

玩转 Zynq 连载 37——[ex56] 基于 Zynq 的 AXI HP 总线读写实例

玩转 Zynq 连载 38——[ex57] Zynq AXI HP 总线带宽测试

扫码关注尚为网微信公众号

尚为网微信公众号
每天学习电路设计嵌入式系统的专业知识,关注一波,没准就用上了。

原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/embedded/1248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年6月30日
下一篇 2022年7月25日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注