FPGA-zynq PS与PL的交互(一)
1五种交互方式
1.1第一种交互
就是在PS 端口开一个GP接口,去控制Bram,然后PL 读Bram中的数据。

- PS端控制PL端方式:PS端作为主机通过写寄存器控制PL端
- 适用场景:少量数据传输(如ADC采样速率、以太网速率等寄存器配置)
- GP接口特性:低性能AXI Light协议接口,适合单次数据传输
- BRAM交互方案:PS通过GP接口写入BRAM,PL端读取BRAM获取数据
- AXI Interconnect特性:内置FIFO但深度较小,适合实时数据传输
- 方案对比:BRAM方案数据存储更稳定,AXI直连方案资源占用更少
- 推荐方案:PL端能实时接收时优先选用AXI Interconnect直连方案
1.2第二种:在PS端口进行链接互联模块AXI Interconnect,然后直接跟PL进行交互(轻量级)

1.3第三种:

- PL端主机配置:PL端作为主机,PS端作为从机
- 接口设置:主机端开启AXI从机接口,从机端开启GP接口
- SL主机实现:在PL端实现SL主机用于写入PS端GP接口
- 适用场景:适合大数据量突发传输的应用场景
- 交互方式特点:第三种交互方式在实际应用中非常常用
1.4第四种:
大数据量的传输,使用HP 接口以及ACP接口 HP接口的目的端是DDR存储器,ACP是给cache,如果PS 端口的想从HP接口读出数据,需要吧DDR的数据读出,送给CACHE,然后再给ps处理。

1.5第五种】
- HP接口应用:使用现成HP接口进行数据交互
- 官方DMA选择:可选用赛林斯提供的AXI DMA等官方IP核
- IP核优缺点:无需编写代码但需学习使用方式
- 自定义优势:自主编写HP接口交互更直接可控
- IP核潜在问题:官方IP核存在使用"坑"需注意

2配置第一种
2.1勾选GPMASTER是PS的主机接口 去控制pL


2.2配置时钟以及复位

2.3添加互联模块
因为PS的总线直接控制PL无法完成,必须要互联模块

配置从机接口的1个口,以及主机接口两个口

可以把ACK当做从机接口的时钟 下面俩可以当主机接口的时钟

2.4采用两种交互 第一种采用通过互联模块第一个口控制bram与PL交互 第二种是直接与PL交互
实现功能
在PL写bram中的数据0-39 ps读出来看看读的对不对
然后PS写入40-79写数据 PL读出来看看对不对

两种方式

2.4.1BRAM设置
如果要控制BRAM需要有BRAM的控制模块
如果设置是两个bram端口 一个是写另一个是读 ,设置一个是可读可写

添加BRAM的时候发现地址大小无法设置,这个需要再AXI分配地址中进行设置,分配互联模块的m00_AXI的寻址范围



根据PS控制bram以及pl交互

2.4.2 编写PL侧代码
新建源文件

将编写完的代码添加进工程,然后送进BLOCK_dESIGN


2.4.3,为了完善另一个AXI互联模块的接口,添加一个AXI从机模块






将代码添加到工程中



完成链接

分配地址

根据地址进行路由



这样有问题会一直卡
改一下把编写模块放在外面 输出到顶层,然后在顶层进行连线,但是不用通过FPGA输出出去,在内部进行链接


导出硬件描述信息
2.5启动SDK建立bsp文件
在bsp中的标准库文件中找到系统级基础函数

延迟文件 usleep微秒级的延迟函数

在读GP接口的数据,数据会到DDR中,Ps处理需要刷新cache,把数据放到Cache中,在做处理,该项目禁止掉它

最常用的是IO 这个库文件,输入的话是对于PS来说输入的数据 u8是一个字节 16是两个字节32是4个字节
2.6编写main.c文件
PL先给PS进行写数据,,ps需要读出来,在AXI里面是一个字节一个字节一个地址操作的,PS读入需要把基址给它,+4*i表示下一次是第4个地址。这一次就把这32位取出来。 经过5000us的延迟。ps往里面写数据,基址是从第40个地址进行操作。写入的数据就是i 。
编译

debug一下


上述说明PL写入 PS读出数据成功
2.7 PS写入 PL读出数据查看 使用ILA进行查看
在PS中可以添加DEBUG查看 PS的GP接口的写入



添加完后重新输出以及到顶层
PL查看可以使用 MARK——debug进行查看 还可以使用ILA查看
第一种

第二种添加ILA IP


设置位宽
】
把PL侧需要抓的信号进行抓取

同时需要定义一下
创建一个头问价 xxx.vh,同时设置为全局变量

在文件中写`ifdef 定义的变量名 如果定义了就执行这里的
·endif

直接生成BIT流就行
打开SDK ,编译工程后 进行DEBUG下载
在下载的时候需要注意把FPGA的程序也下进去 ,如果没有下载需要手动把程序下载到板卡中
打开VIVADO就可以看到抓的PS的信号以及PL侧的信号了进行查看,给一个地址 写入32位数据,同时地址加4 因为一次增加一个字节地址 送的4个字节给了0地址 就得把0123 地址写进去 下一次32位的地址就是4567

PL 侧需要让PS运行成功在进行打开


