UART FIFO 周期发送 FPGA 设计 Verilog Quartus

📅 2026/6/30 17:36:14
UART FIFO 周期发送 FPGA 设计 Verilog Quartus
名称UART FIFO 周期发送 FPGA 设计 Verilog Quartus软件Quartus语言Verilog开发板/平台Cyclone IV FPGA开发板功能介绍本设计实现了一个基于 FPGA 的 UART FIFO 周期发送系统使用 Verilog 编写在 Quartus 环境下完成工程设计与编译。系统作为下位机运行时可以按照固定 40ms 周期向上位机串口调试助手发送数据包适合用于串口通信、定时数据上传、FPGA 与 PC 联调等应用场景。 发送数据包长度为 16 字节帧格式包含双字节帧头 AA、55帧计数字节、自定义数据区以及校验和字节。帧计数在每发送一帧后自动递增便于接收端判断是否丢帧校验和用于对指定数据区进行和校验提高串口数据接收解析的可靠性。 UART 通信参数为 115200bps包含 1bit 起始位、8bit 数据位、1bit 停止位以及 1bit 偶校验位。工程将定时控制、数据组帧、FIFO 缓冲和 UART 发送功能拆分为多个模块结构清晰便于学习 UART 发送时序、FIFO 数据缓存以及固定帧协议设计。运行环境开发语言Verilog 开发软件Quartus 目标工程uart_fifo_tx_top 适用方向FPGA UART 串口发送、FIFO 缓冲、固定帧协议、周期性数据上传 板级验证Cyclone IV FPGA 开发板设计思路系统采用定时触发、数据组帧、FIFO 缓冲和 UART 发送的结构。顶层模块以 50MHz 时钟为基础先通过 timer_40ms 产生固定周期脉冲每 40ms 触发一次发送流程使 FPGA 能够按照下位机周期上报数据的需求稳定输出数据包。 数据控制部分由 tx_data_ctrl 负责根据 40ms 脉冲组织 16 字节数据帧。帧格式包含 AA、55 两个帧头字节随后放入帧计数字节帧计数在每发送完一帧后递增可用于上位机判断数据连续性。中间多个字节作为自定义数据区域最后一个字节为校验和校验范围为第 4 到第 15 个字节便于上位机对一帧数据进行完整性判断。 UART 发送链路通过发送 FIFO 与串口发送模块衔接。数据控制模块将待发送字节写入发送 FIFOUART 顶层模块从 FIFO 取数并按照串口协议发送降低了组帧逻辑和串口位时序逻辑之间的耦合。串口协议设置为 115200bps、8 位数据位、1 位起始位、1 位停止位和偶校验位适合与常用串口调试助手进行通信验证。 顶层 uart_fifo_tx_top 对复位极性进行转换外部输入为高电平复位内部模块使用低电平复位 rst_n。接收通道在本设计中不参与功能实现接收端被固定拉高发送通道作为核心功能输出 UART_TX。模块结构顶层模块为 uart_fifo_tx_top主要连接 40ms 定时器、发送数据控制模块和 UART 顶层模块。 主要模块包括 1. timer_40ms基于系统时钟产生 40ms 周期脉冲作为数据帧发送触发信号。 2. tx_data_ctrl负责组织 16 字节发送帧生成 FIFO 写使能和写入数据。 3. my_uart_topUART 通信顶层连接发送 FIFO 和串口发送逻辑本设计中主要使用发送通道。 4. FIFO_8_2568 位宽、256 深度 FIFO用于缓存待发送字节。 5. speed_select波特率相关选择/控制模块用于配合 UART 时序生成。 6. my_uart_txUART 发送模块完成串口位级发送。 7. my_uart_rxUART 接收模块工程中保留接收能力但顶层发送设计未使用接收 FIFO 读出功能。 8. tb_uart_fifo_tx_top、tb_tx_data_ctrl、tb_timer_40ms对应测试平台文件用于功能仿真参考。开发板验证工程提供了 Cyclone IV FPGA 开发板验证相关内容包含管脚约束分配文件以及开发板实物图片可用于对照工程引脚、时钟、复位和 UART_TX 输出信号进行硬件连接检查。设计面向 50MHz 时钟输入复位信号为高电平有效UART 发送端口输出到外部串口转换模块或板载串口接口。 上板运行时FPGA 按 40ms 周期组织发送数据帧上位机可通过串口调试助手接收数据。串口参数为 115200bps8 位数据位1 位起始位1 位停止位并带偶校验位。接收端重点观察帧头 AA 55、帧计数字节递增以及 16 字节帧长度是否稳定。演示视频配套演示视频展示了工程运行效果可用于查看 FPGA 周期性发送 UART 数据帧以及上位机串口接收显示的实际表现。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片设计文档内容包含工程文件、程序文件、程序编译、RTL 图、仿真图以及 40ms 产生模块、数据控制模块、UART 发送模块和三路数据仲裁等说明。文档图中包含 RTL 结构和仿真相关截图可用于理解各模块连接关系、定时触发过程和串口发送流程。部分代码以下展示顶层模块uart_fifo_tx_top的部分代码完整代码可关注下方公众号卡片获取。module uart_fifo_tx_top( input wire clk, // 50MHz时钟 input wire reset, // 高电平复位信号 output wire uart_tx // UART发送信号 ); // 内部信号定义 wire rst_n; // 低电平复位信号 wire pulse_40ms; // 40ms脉冲信号 wire tx_fifo_wr_en; // FIFO写使能 wire [7:0] tx_fifo_wr_data; // FIFO写数据 // 复位信号转换 (输入为高电平复位内部使用低电平复位) assign rst_n ~reset; // // 模块例化 // // 40ms定时器模块 timer_40ms u_timer_40ms( .clk (clk), .rst_n (rst_n), .pulse_40ms (pulse_40ms) ); // 发送数据控制模块 tx_data_ctrl u_tx_data_ctrl( .clk (clk), .rst_n (rst_n), .pulse_40ms (pulse_40ms), .tx_fifo_wr_en (tx_fifo_wr_en), .tx_fifo_wr_data (tx_fifo_wr_data) ); // UART顶层模块 my_uart_top u_my_uart_top( .clk (clk), .rst_n (rst_n), .rs232_rx (1b1), // 接收端悬空(拉高) .rs232_tx (uart_tx), // UART发送输出 .rx_fifo_rd_en (1b0), // 不使用接收FIFO .rx_fifo_rd_data (), // 接收数据未使用 .tx_fifo_wr_en (tx_fifo_wr_en), // 发送FIFO写使能 .tx_fifo_wr_data (tx_fifo_wr_data) // 发送FIFO写数据 ); endmodule代码获取下方公众号FPGA代码设计学习资料