FPGA基础之UART通信

本文详细介绍了UART串口通信的工作原理,包括起始位、数据位和停止位的传输时序。通过FPGA实现串口发送和接收,涉及到波特率计算、分频计数、数据采样及错误检测。在发送部分,展示了如何根据系统时钟生成波特率时钟和发送数据;在接收部分,使用多次采样判断数据位,确保数据准确性。此外,还提供了仿真测试结果以验证设计的正确性。

串口协议简介
串口通讯(Universal Asynchronous Receiver/Transmitter,UART)是一种异步传输的通用数据总线,包括了RS232、RS485等接口标准和总线标准,传输简单,将数据在串行通信与并行通信之间转换,可以实现全双工发送和接收。 UART的工作原理是将数据的每一个bit从低到高,依次输出到总线上,其通信协议时序如下:
在这里插入图片描述

图1 串口时序

如上图所示,为串口协议进行数据传输的时序状态。一个完整的字节传输包括了1个起始位,8个数据位和1个停止位,总共10位数据来计算。其中,数据位可设置为5、6、7或者8(默认)。波特率(Baud)表示串口设备数据传输的速率,在图中,垂直虚线表示进行数据的切换,中间的黑点表示数据采样点。典型的波特率设置一般为9600、19200、38400、57600和115200,波特率越高,数据的传输越快。

串口发送

根据串口通信的时序,在FPGA上实现串口的发送设计。
波特率时钟计算
在进行串口发送时,需要进行波特率的时钟计算,来确定当前发送的数据时钟。首先计算出对应波特率的时钟周期,假设波特率为115200,其时钟周期为1000000000/115200=8680.6ns,根据当前的系统时钟(sys_clk)频率,算出时钟计数值。波特率时钟计数值的代码如下:

	localparam  BUAT_RATE9600 = 3'd0,
				BUAT_RATE19200 = 3'd1,
				BUAT_RATE38400 = 3'd2,
				BUAT_RATE57600 = 3'd3,
				BUAT_RATE115200 = 3'd4;

	localparam  BUAT_SENDRATE9600 = 17'd104167/SYS_CLOCK_PERIOD - 1,
				BUAT_SENDRATE19200 = 16'd52083/SYS_CLOCK_PERIOD - 1,
				BUAT_SENDRATE38400 = 15'd26041/SYS_CLOCK_PERIOD - 1,
				BUAT_SENDRATE57600 = 15'd17361/SYS_CLOCK_PERIOD - 1,
				BUAT_SENDRATE115200 = 14'd8680/SYS_CLOCK_PERIOD - 1;

	always@(posedge sys_clk_i or negedge rst_n)begin
		if(!rst_n)
			bsp_DR <= BUAT_SENDRATE9600;
		else begin
			case(buad_set_i)
			BUAT_RATE9600: bsp_DR <= BUAT_SENDRATE9600;
			BUAT_RATE19200: bsp_DR <= BUAT_SENDRATE19200;
			BUAT_RATE38400: bsp_DR <= BUAT_SENDRATE38400;
			BUAT_RATE57600: bsp_DR <= BUAT_SENDRATE57600;
			BUAT_RATE115200: bsp_DR <= BUAT_SENDRATE115200;
			default:bsp_DR <= BUAT_SENDRATE9600;
			endcase
		end
	end

分频计数
在计算出波特率的计数值后,利用计数器来生成波特率的时钟,实现代码如下:

	always@(posedge sys_clk_i or negedge rst_n)begin
		if(!rst_n)
			bsp_div_cnt <= 13'd0;
		else if(ua
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值