FPGA之UART传输

UART:universal asynchronous  receiver-transmitter通用异步收发,控制器与外部设备进行数据通信无非两种,一种是串行通信另一种是并行通信。并行通信在早期的计算机系统中很常见,它相比串行通信在相同时钟下有着更高的速度。可以简单的理解成并行通信传输的数据线不止一根,而是由多根组成。但是随着CPU的频率越来越高,和外部器件的工作频率的提升,并行通信的弊端也随之而来:由于外界环境干扰并行通信的数据线上的信号并不是同一时刻到达,这就导致在实际信号传送和接收在时钟采样下建立时间和保持时间不满足,产生亚稳态,数据传输有差错。还有就是一根线的数据出错这一次的传输的所有数据都需要重新传输。对比并行通信串行通信的优势就体现出来了。串行通信能比并行通信跑的时钟频率要高。

       串行通信我们常听到的有SPI,IIC,UART,其中异步的UART,和同步传输的SPI,IIC,最大不同是UART发送端不需要给接收端时钟,但要保证双方的波特率一致。而spi和IIC是要给从设备时钟,一般spi和IIC常用于一些传感器(AD/DA),FLASH等设备

       UART是双工通信方式,其中常用的是全双工,与外设相连只需三根线,TXD:发送端,RXD:接收端,GND:地。发送时需要将数据由并行转换为串行传输,在接收端将数据由串行转换为并行。

       以下为RS232,UART传输时序如下:

发送端:为了便于仿真观察将波特率设置很高,如有需求可以自己更改

module	uart_send(
		input				sclk,			
		input				rst_n,
		input		[7:0]	urat_din,
		input				urat_en,
		
		output				urat_txd		
);
	
	parameter  CLK_FREQ = 50000000;             //系统时钟频率
	parameter  UART_BPS = 9600;                 //串口波特率
	localparam DIV_CNT  = 8;					// CLK_FREQ/UART_BPS,分频计数5208(1 0100 0101 1000)个系统时钟周期为一个数据的发送周期

	reg		[12:0]	cnt;//计数器
	reg		[2:0]	urat_en_r;//用于检测urat_en下降沿
	reg				send_flag;//发送阶段标志
	wire			tx_flag;//给发送标志上标志的标志
	reg		[7:0]	tx_data;
	reg		[3:0]	tx_cnt;
	reg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值