news 2026/4/16 13:39:03

探索FPGA串口闭环收发小程序:9600与115200速率支持

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索FPGA串口闭环收发小程序:9600与115200速率支持

FPGA串口闭环收发小程序,支持9600和115200速率,

在FPGA开发的世界里,串口通信是一个非常基础且重要的功能。今天咱们就来聊聊一个支持9600和115200速率的FPGA串口闭环收发小程序。

串口通信基础

串口通信,简单来说就是数据一位一位按顺序传输的通信方式。它有一些关键参数,比如波特率,也就是数据传输的速率,咱们这个程序支持的9600和115200就是波特率的值。

FPGA实现思路

在FPGA中实现串口闭环收发,大致思路是这样的:我们需要有一个模块来产生对应波特率的时钟信号,然后分别有发送模块和接收模块。发送模块负责把要发送的数据按位输出,接收模块则把接收到的位数据拼成完整的数据。

代码实现

波特率时钟生成模块

module baud_rate_generator ( input wire clk, input wire rst, input wire [1:0] baud_rate_select, output reg baud_tick ); reg [15:0] counter; always @(posedge clk or posedge rst) begin if (rst) begin counter <= 16'd0; baud_tick <= 1'b0; end else begin if (counter == (baud_rate_select == 2'b00? 16'd10416 : 16'd867)) begin counter <= 16'd0; baud_tick <= 1'b1; end else begin counter <= counter + 16'd1; baud_tick <= 1'b0; end end end endmodule

这段代码实现了波特率时钟信号的生成。baudrateselect是用来选择9600还是115200波特率的信号。根据选择不同,计数器计数到不同的值就产生一个baud_tick信号,这个信号就代表一个波特率周期。

发送模块

module uart_tx ( input wire clk, input wire rst, input wire baud_tick, input wire [7:0] tx_data, input wire tx_start, output reg tx_busy, output reg tx_done_tick, output reg tx ); reg [3:0] bit_index; always @(posedge clk or posedge rst) begin if (rst) begin bit_index <= 4'd0; tx_busy <= 1'b0; tx_done_tick <= 1'b0; tx <= 1'b1; end else begin if (tx_start &&!tx_busy) begin tx_busy <= 1'b1; bit_index <= 4'd0; tx <= 1'b0; end else if (baud_tick) begin if (bit_index < 4'd8) begin tx <= tx_data[bit_index]; bit_index <= bit_index + 4'd1; end else if (bit_index == 4'd8) begin tx <= 1'b1; bit_index <= bit_index + 4'd1; end else begin tx_busy <= 1'b0; tx_done_tick <= 1'b1; end end else begin tx_done_tick <= 1'b0; end end end endmodule

发送模块这里,当txstart信号有效且当前不忙时,就开始发送数据。每来一个baudtick信号,就发送一位数据,先发数据位,最后发停止位。发送完成后txdonetick信号置1,同时tx_busy信号置0表示发送结束。

接收模块

module uart_rx ( input wire clk, input wire rst, input wire baud_tick, input wire rx, output reg [7:0] rx_data, output reg rx_done_tick ); reg [3:0] bit_index; reg rx_sample; always @(posedge clk or posedge rst) begin if (rst) begin bit_index <= 4'd0; rx_done_tick <= 1'b0; rx_sample <= 1'b1; end else begin if (!rx && rx_sample) begin rx_sample <= 1'b0; #(4) bit_index <= 4'd0; end else if (baud_tick) begin if (bit_index < 4'd8) begin rx_data[bit_index] <= rx; bit_index <= bit_index + 4'd1; end else begin rx_done_tick <= 1'b1; rx_sample <= 1'b1; end end else begin rx_done_tick <= 1'b0; end end end endmodule

接收模块这边,当检测到rx信号从高到低变化,并且rxsample为1时,就开始准备接收数据。每来一个baudtick信号,采集一位数据存到rxdata中。当8位数据都采集完,rxdone_tick信号置1表示接收完成。

闭环测试

将发送模块和接收模块连接起来,就可以进行闭环测试啦。在测试时,通过选择不同的波特率,发送一些数据,看看接收模块能否正确接收到数据。这样就完成了一个支持9600和115200速率的FPGA串口闭环收发小程序啦。希望这篇文章能给大家在FPGA串口开发上带来一些启发。

FPGA串口闭环收发小程序,支持9600和115200速率,

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 20:24:56

零代码运行高精度中文相似度分析|GTE模型WebUI+API镜像全解析

零代码运行高精度中文相似度分析&#xff5c;GTE模型WebUIAPI镜像全解析 1. 背景与核心价值 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;语义相似度计算是许多关键任务的基础能力&#xff0c;广泛应用于智能客服、推荐系统、信息检索、去重识别等场景。传统方…

作者头像 李华
网站建设 2026/4/16 12:32:47

一个完整的车型识别项目基于深度学习的车型识别方法与系统实现也有基于opencv的车型识别系统

一个完整的车型识别项目基于深度学习的车型识别方法与系统实现也有基于opencv的车型识别系统停车场入口的摄像头闪过车灯&#xff0c;识别系统瞬间弹出"特斯拉Model 3"的识别结果。这种场景背后藏着两种技术路线——有人用深度神经网络暴力破解&#xff0c;也有人执着…

作者头像 李华
网站建设 2026/4/16 4:22:25

万物识别模型与通义千问联动,多模态应用新玩法

万物识别模型与通义千问联动&#xff0c;多模态应用新玩法 近年来&#xff0c;随着多模态人工智能技术的不断演进&#xff0c;图像理解已从简单的“物体检测”迈向更深层次的“语义感知”。在这一趋势下&#xff0c;阿里开源的万物识别-中文-通用领域模型&#xff08;OmniReco…

作者头像 李华
网站建设 2026/4/16 12:36:14

AI智能证件照制作工坊安全机制:数据不上传,隐私有保障

AI智能证件照制作工坊安全机制&#xff1a;数据不上传&#xff0c;隐私有保障 1. 引言&#xff1a;本地化AI服务的隐私刚需 随着人工智能在图像处理领域的广泛应用&#xff0c;越来越多用户开始尝试使用AI工具快速生成符合规范的证件照。然而&#xff0c;传统在线证件照服务普…

作者头像 李华
网站建设 2026/4/16 12:46:50

DownGit完整教程:3步学会GitHub文件夹精准下载

DownGit完整教程&#xff1a;3步学会GitHub文件夹精准下载 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 还在为下载GitHub整个仓库而烦恼吗&#xff1f;&#x1f914; 每次只想获取某个特定文件夹&#xff…

作者头像 李华