UART 发送模块VHDL实现

(已通过板级验证)

Uart: 异步串口通信

Uart: Universal Asynchronous Transmitter/Receiver 是异步串口通信的总称。 在其数据发送时将并行输入的数据转换成串行输出,在接受数据时将串行数据转换为并行数据输出。

通信协议: UART, IIC, SPI, USE, Ethernet

RS232,RS449,RS423,RS485是接口标准规范和总线标准规范,规定了通信口的电器特性,传输速率,连接特性和接口的机械特性等。

Uart 管脚

uart pins description
我们现在只用到pin2和pin3,也就是tx发送数据和rx接受数据。

Uart 关键参数以及时序图

  1. 数据位(Data bits): 该参数定义单个UART数据传输从开始到停止期间发送的数据位数。可选择: 5,6,7,8(默认)。
  2. 波特率(Buad):从一设备发送到另一设备的波特率,即每秒钟可以通信的数据比特个数。典型的波特率:300,1200,2400,9600,19200,115200。例:当波特率为2400时, 也就是1秒传输2400比特的数据,所以1比特需要416666 ns。
  3. 开始位(Start bit): 在数据发送之前,发送开始位,来标志着传输开始。从高电平‘1’变为低电平‘0’;
  4. 停止位(Stop bit): 在每个字节的数据为发送完成之后,发送停止位,来标志着一次数据传输完成。可选择为:1 (默认),1.5 或 2 位。

RS-232 标准中,常用的配置时8N1(8个数据位,无奇偶校验,一个停止位)

UART 时序图
1: 1位起始位 :0
2: 8位数据位: 低位先输出
3: 1位停止位:0

实现的逻辑功能:

uart_tx_schematic

start: 脉冲信号,出现一次传输一次数据;(连接到按键)
data_byte: 八位输入数据;
baud_set: 波特率设置;
rs232_tx: 串行输出数据;
tx_done: 完成信号,当传输完成为1,传输信号为0;
uart_state: 空闲置0,工作置1;

VHDL 代码实现

diagram

Baud LUT

由Baud LUT实现通过baud_set[2:0]来选择相应的波特率,产生bps_clk.
本实验中硬件开发板的系统时钟为50MHZ,也就是时钟周期为20ns,所以 当波特率为9600, 传输一个数据需要(1*10^9 ns/9600) / 20 ns -1 = 5208-1 次 时钟周期

		case( baud_set ) is
			when	"000"		=>		baud_bps<= 166666;		-- 300
			when 	"001"		=>		baud_bps<= 41666;			--	1200
			when	"010"		=>		baud_bps<= 20832;			-- 2400
			when	"011"		=>		baud_bps<= 5207;			-- 9600
			when	"100"		=>		baud_bps<= 2603;			-- 19200
			when	"101"		=>		baud_bps<= 1301;			-- 38400
			when	"110"		
  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值