低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
本节目录
一、设计思路
二、loop环回模块
三、仿真模块
四、仿真验证
五、上板验证
六、往期文章链接
本节内容
一、设计思路
串口数据的收发回环测试,最简单的硬件测试是把Tx和Rx连接在一起,然后上位机进行发送和接收测试,但是需要考虑到串口数据的缓存,通常软件驱动侧也会实现串口接收数据的缓存,或者通过一个环形buffer进行串口接收数据的处理。
当然,若PC端串口只发送一个字节,FPGA内部可以直接将数据回环发送至PC。显然应用时候不可能如此,因此在FPGA内部需要预留一定的缓存,常用的设计思路通过FIFO将接收的数据缓存处理。在FPGA发送串口数据的时候,也需要给PC端串口留一定的处理时间,否则可能会发送因发送过快,导致上位机串口无法响应。
串口接收模块,用来接收上位机发送的数据;串口发送模块,用于将数据发回上位机;数据环回,负责把从串口接收模块接收到的数据送给串口发送模块,以实现串口数据的环回。
仿真模块,用于模拟上位机实现PC串口数据发送和PC串口接收FPGA的回环数据。通过仿真比对,PC发送的数据和接收的数据是否一致,从而判断数据的正确性。
二、loop环回模块
串口loop环回模块,主要是通过一个FIFO缓存串口接收的数据,在将FIFO中的数据一个一个字节发送。
采用uart_rx模块的数据有效作为FIFO的写入控制,每个字节有效时候,写入FIFO。串口数据的发送,则以FIFO的非空标志作为启动,读取FIFO内的数据并通过uart_tx将数据发送出去。通过发送接收uart_tx_stop,控制tx_start,每发送一个字节后停止发送,检查FIFO的状态,从而实现FIFO的非空启动。
三、仿真模块
宏定义`define SIM的方式,将工程中的uart的时钟与复位信号,引入至仿真模块,此处设计的好处,保证仿真uart和工程模块中的uart所使用的逻辑功能在一个时钟域下。
需要注意的是:编译的时候需要把仿真宏定义注释掉。
采样task任务封装实现串口数据帧的发送,当然开发者也可以自定义业务的帧头帧尾以及帧内容。
四、仿真验证
仿真中sim_uart_tx模拟上位机的发送数据,sim_uart_rx模拟上位机的接收数据,在仿真模块中frame task产生固定的串口帧格式发送数据:
帧头为a1b2c3d4
中间数据32’h80002000,32’h000000001,32’h000000001
帧尾为a6b7c8d9
从仿真中可以看出来,第一帧的数据与输入的测试激励一致。
仿真中sim_uart_tx模拟上位机的发送数据,图中可以sim_uart_tx的字节a1比uart_rx的字节a1更早,并且两种的数值一致。
仿真中sim_uart_rx模拟上位机的接收数据,图中可以uart_tx的字节a1比sim_uart_rx的字节a1更早,并且两种的数值一致。
五、上板验证
上板验证,采用的是正点原子的7020开发板,自定义GPIO作为串口的收发pin,通过CH340的模块与PC的usb端口相连,上位机软件进行串口数据的发送与接收。
六、往期文章链接
UltraScale+FPGA中Serdes的多lane对齐异常解决方案
vivado时序报告中slack是如何计算的?如何优化时序?
UltraScale+FPGA中GTY的TX路径时钟详解——以40G的ETH MAC IP为例
vivado时序优化——约束异步时钟组set_clock_groups
基于FDMA和AXI4接口的DDR4遍历读写测试
基于fpga的图像处理之3x3_5x5算子模板设计
基于fpga的图像处理之3x3_5x5算子模板中值排序
基于fpga的图像处理之图像灰度化处理(Vivado+Modelsim+Matlab联合仿真验证)
AXI协议之AXILite开发设计(一)
AXI协议之AXILite开发设计(二)
AXI协议之AXILite开发设计(三)
AXI协议之AXILite开发设计(四)
AXI协议之AXILite开发设计(五)
FPGA和Matlab的FFT功能验证(一)
FPGA和Matlab的FFT功能验证(二)
FPGA和Matlab的FFT功能验证(三)
跟小灰灰一起学vivado:7系列FPGA的MultiBoot和Fallback功能更新固件
跟小灰灰一起学vivado:7系列FPGA配置模式之配置数据文件格式和配置时序步骤
跟小灰灰一起学vivado:7系列FPGA配置模式之主SPI四路(x4)
跟小灰灰一起学vivado:PCIe XDMA实现远程更新FPGA固件
Xilinx UltraScale+DDR4项目开发(一)——DDR4 MIG的ip接口信号
Xilinx UltraScale+DDR4项目开发(二)——DDR4 MIG的时钟网络
Xilinx UltraScale+DDR4项目开发(三)——DDR4器件选型与MIG IP的配置
低速接口项目之串口Uart开发(一)——串口UART
低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试
低速接口项目之串口Uart开发(三)——串口发送模块和接收模块
低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制
低速接口项目之串口Uart开发(五)——QT实现Uart串口寄存器读写工具
低速接口项目之串口Uart开发(六)——zynq系列ps-pl端uart实现共享Axilite内部寄存器的读写
低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
低速接口项目之串口Uart开发(八)——如何通过ps侧的串口实现zynq的在线升级(一)
低速接口项目之串口Uart开发(九)——如何通过ps侧的串口实现zynq的在线升级(二)
低速接口项目之串口Uart开发(十)——基于EMIO的自定义PL串口实现zynq的在线升级