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 与串口发送模块衔接。数据控制模块将待发送字节写入发送 FIFO,UART 顶层模块从 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_top:UART 通信顶层,连接发送 FIFO 和串口发送逻辑,本设计中主要使用发送通道。 4. FIFO_8_256:8 位宽、256 深度 FIFO,用于缓存待发送字节。 5. speed_select:波特率相关选择/控制模块,用于配合 UART 时序生成。 6. my_uart_tx:UART 发送模块,完成串口位级发送。 7. my_uart_rx:UART 接收模块,工程中保留接收能力,但顶层发送设计未使用接收 FIFO 读出功能。 8. tb_uart_fifo_tx_top、tb_tx_data_ctrl、tb_timer_40ms:对应测试平台文件,用于功能仿真参考。

开发板验证

工程提供了 Cyclone IV FPGA 开发板验证相关内容,包含管脚约束分配文件以及开发板实物图片,可用于对照工程引脚、时钟、复位和 UART_TX 输出信号进行硬件连接检查。设计面向 50MHz 时钟输入,复位信号为高电平有效,UART 发送端口输出到外部串口转换模块或板载串口接口。 上板运行时,FPGA 按 40ms 周期组织发送数据帧,上位机可通过串口调试助手接收数据。串口参数为 115200bps,8 位数据位,1 位起始位,1 位停止位,并带偶校验位。接收端重点观察帧头 AA 55、帧计数字节递增以及 16 字节帧长度是否稳定。

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 开发板验证图片 开发板.jpg

演示视频

配套演示视频展示了工程运行效果,可用于查看 FPGA 周期性发送 UART 数据帧以及上位机串口接收显示的实际表现。

仿真图/仿真说明/设计文档图片

设计文档内容包含工程文件、程序文件、程序编译、RTL 图、仿真图以及 40ms 产生模块、数据控制模块、UART 发送模块和三路数据仲裁等说明。文档图中包含 RTL 结构和仿真相关截图,可用于理解各模块连接关系、定时触发过程和串口发送流程。

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image10.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image11.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image12.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image7.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image8.png

UART FIFO 周期发送 FPGA 设计 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 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         (1'b1),              // 接收端悬空(拉高)
    .rs232_tx         (uart_tx),           // UART发送输出
    .rx_fifo_rd_en    (1'b0),              // 不使用接收FIFO
    .rx_fifo_rd_data  (),                  // 接收数据未使用
    .tx_fifo_wr_en    (tx_fifo_wr_en),     // 发送FIFO写使能
    .tx_fifo_wr_data  (tx_fifo_wr_data)    // 发送FIFO写数据
);

endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » UART FIFO 周期发送 FPGA 设计 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员