通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)可以和各种标准串行接口,如RS 232和RS 485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250,16450来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。 UART只需要两条信号线:RXD和TXD,其中RXD是UART的接收端,TXD是UART的发送端,接收与发送是全双工形式。下图为UART的工作原理如下 如上图所示,uart是将传输数据的每个字符一位接一位地传输。 其中每一位(Bit)的意义如下: 空闲位:高电平,表明当前无传输事务。 起始位:一位低电平信号,标志着数据传输的开始。 数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。 停止位:一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 uart数据传输的速率用波特率表示,其含义为从一设备发到另一设备,每秒钟可以通信的数据比特个数。典型的波特率有300, 1200, 2400, 9600, 19200, 115200等。一般通信两端设备都要设为相同的波特率,但有些设备也可设置为自动检测波特率。
uart的设计分为两个部分,一部分为发送模块,另一部分为接收模块。程序设计主要通过状态机实现,在本设计中,我们略去了奇偶校验位,每次传输8bit数据,且停止位为1位。 我们共设置了如下几个状态: IDLE:空闲状态,电平恒为1; START:起始位,电平为0,1位; DATA:数据位,共8位,先发送低比特; STOP:停止位,高电平,共1位。 其中,发送模块在上一状态向下一状态切换时,改变电平,而接收模块,则在状态的中间位置进行采样,如下图所示:
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2022/02/26 15:27:26
// Design Name:
// Module Name: uart_tx_sim
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module uart_tx_sim
#(parameter BPS=5208)
(
input clk,
input rst_n,
input start,
input [7:0] send_data,
output reg rs232_tx
);
//
// parameter BPS=5208; //计算传输一次的计数时间:
// //计数时间 = 1000000000ns/9600 = 104166.7ns
// //50MHz的时钟周期为20ns,所以计数传输一个比特的次数为104166.7 / 20 = 5208
parameter IDLE = 0;
parameter START = 1; //起始位
parameter SEND = 2; //8bit数据发送,最低位开始传送,靠时钟定位。
parameter STOP =3; //停止位
reg [2:0] cur_state;
reg [2:0] next_state;
reg [31:0] count; //计数器
reg [31:0] send_cnt; //发送bit计数器
//三段式状态机
always@(posedge clk,negedge rst_n)
if(~rst_n)
cur_state
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?