前言
emm最近开始学习ZYNQ PS部分开发,主要是想通过PS-PL BRAM通信接口学习一下在SDK上对PS内存的操作,实际上PL-PS之间通信即通过操作同一片地址空间实现数据通信哈,大数据量的通信通常用DMA实现,少量配置数据传输的话可以用block ram实现。
1、VAVIDO搭建block design
搭建BD主要是配置PS外围部分连接,包括PS和外设之间,PS和PL之间的连接,如图所示搭建BRAM所需最小外围连接,包括PS部分,复位模块,双口BRAM等模块。
1️⃣zynq ps:配置PS端外围连接,包括时钟、复位、MIO、DDR以及PS-PL之间的连接。
2️⃣AXI smartconnect:用于AXI内存映射设备主从端的连接,相比较具有相同功能的AXI interconnector,以最小的用户干预自动配置和适应连接的AXI主从IP。
3️⃣:BRAM CONTROLLER:用于通过AXI总线实现对本地BRAM的控制,相当于接口协议转换。
4️⃣:BRAM:BLOCK RAM,可配置为双口BRAM,分别通过PS和PL控制两个端口读写数据,从而实现数据交互通信。
连线完成之后分配地址,通常使用自动分配的地址即可,如图分配的地址为0x80000000-0x80000FFF;
右键creat HDL wrapper,将PL控制的端口BRAM_PORT_B连接到VIO debug core实现在线读写BRAM数据,然后综合、实现、生bit。
2、SDK创建工程
生成bit之后,点击文件导出硬件平台(包含bit),然后launch SDK。。
或者从外部打开SDK后添加工作路径:
打开SDK后工作空间中会出现一个在vavido中导出的硬件平台platfom,在硬件平台基础上需要创建一个新的应用程序file->new->application project设置工程名,操作系统平台,芯片支持linux 、freertos、standlone(这里我们先用裸机测试选择standalone),选择处理器核(本芯片R5两核,A5四核),选择创建板级支持包bsp(cpu包含相对于硬件平台的驱动包),然后finish即可。
最后创建的裸机工程环境一般包含application project、bsp、hardware platform。
然后是完成代码部分:
1️⃣PS写数据:首先实现在PS写内存,因为内存以字节为单位存储,因为每32位数据占据4个地址,每写32位地址加4。
代码编译无误之后,点击应用工程然后右键debug as->debug configuration,双击system debugger出现.elf文件,然后点击debug复位整个系统下载程序。
然后单步执行程序,可以看到程序中变量的变化,以及内存中数据的变化。
2️⃣PS读数据:在SDK中写入数据再读出结果。
3️⃣PL写数据:从PL HW MANGER下载bit文件通过VIO向内存0x8000000C写入0x99999999;
然后在SDK中查看内存数据写入正确。
4️⃣PL读数据:
读出数据正确