一、zynq PL侧串口在线升级的设计思路
二、zynq PL侧串口在线升级的设计技巧
三、往期文章链接
一、zynq PL侧串口在线升级的设计思路
前面系列文章都是基于PS侧的串口驱动实现BIN文件的接收和缓存。那么如果是纯PL侧代码实现BIN文件的接收、缓存以及log输出,该如何实现?
其实底层原理都差不多,都是要将BIN文件烧录至QSPI flash中,只是接收存储的方式不一样。这个过程中需要用于存储BIN二进制文件,离不开DDR3。对于zynq来说,很多只有PS侧提供了内存DDR3,因此这部分工作就涉及到PL侧调用PS侧的DDR3。
PC电脑端的上位机QT,通过串口发送BIN文件至FPGA的PL端,PL端通过乒乓操作将BIN二进制文件写入PS侧DDR3,待接收完成后,PL侧启动PS侧的QSPI实现flash的更新。
整个操作流程中,需要的设计技巧不少,包括:基本功能串口接收和发送、接收端的乒乓操作缓存、DDR3的AXI接口写入操作以及发送端的ascii log输出功能。至于嵌入式ps,实现DDR3内存数据的DMA读取以及qspi的更新。这些设计技巧,都需要进行开发,后期会逐步实现并更新。
二、zynq PL侧串口在线升级的设计技巧
上述提到了各种设计技巧,其中乒乓操作、PS侧DDR3的AXI接口写入、发送端的ascii log输出以及软件ps侧的DMA读取。至于其他的在前面系列文章已经描述过了。
乒乓操作接收BIN二进制文件,基于双RAM的乒乓操作,大致思路如下:rx接收字节,先写入RAM1固定长度字节,再写入RAM2固定长度字节,两个RAM交叉写入。技巧在当写入一个RAM时,另一个RAM的数据需要搬移到DDR3中,必须在一轮字节接收之内完成,否则就会造成接收字节的丢失。这个工程需要采用状态机来实现RAM的读写切换。
搬移过程中需要调用PS侧的DDR3,采用AXI的接口读写PS侧的DDR3,方式有多种:
第一种:米联客的FDMA对PS侧的DDR3进行写入,详情可以参考文章(基于FDMA和AXI4接口的DDR4遍历读写测试);
第二种:通过xilinx的dma实现ddr3的写入;
第三种:通过Alex的开源dma实现对PS侧的DDR3写入。
很多FPGA也会自己手撕dma,其实开源IP和各个EDA官方的没啥区别,只要自己能掌控了开源的使用技巧,本质上也就是IP,而且还很容易定位bug。
三、往期文章链接
低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
低速接口项目之串口Uart开发(三)——串口发送模块和接收模块
低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制
低速接口项目之串口Uart开发(五)——QT实现Uart串口寄存器读写工具
低速接口项目之串口Uart开发(六)——zynq系列ps-pl端uart实现共享Axilite内部寄存器的读写
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
低速接口项目之串口Uart开发(八)——如何通过ps侧的串口实现zynq的在线升级(一)