通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。
异步串行、接口原理分析
串行通信电气特性
通常,UART串行接口采用RS-232-C电气标准进行通信。RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。对于一般的通信,不需要掌握RS-232-C的所有信号的定义,只需要使用其中的2个信号TXD(数据发送)和RXD(数据接收),另外,参加通信的设备要将GND(地)要连到一起(共地)。
数据线TxD和RxD的电平标准为: 逻辑1=-3V~-15V;逻辑0=+3~+15V
RS-232-C标准规定的数据传输速率为9600、19200、115200等波特率。波特率是衡量资料传送速率的指标,表示每秒钟传送的符号数。如果波特率为9600,那么发送和接收数据都应该为9600bits/s。本节采用9600bit/s进行通信。
UART串行数据格式
起始位(逻辑0 )+数据位(本节为8位数据位)+奇偶校验位(本节为偶校验)+停止位(本节使用1位停止位)+空闲位(逻辑1)
通信的安全性问题
串行异步通信,发送方和接收方使用各自的时钟。例如从FPGA电路板和计算机之间的通信,因此,不能保证两者的时钟完全相同。
为保证接收数据的准确性,因此需要用较高的采样率进行采样,本节采用16倍的采样率进行采样,简单的选取中间采样点的值作为接收的数据。如图采用16倍波特率的采样率执行采样,一个比特可采集16个点,选取中间点即从第一个采样点开始的第8或第9个采样点(笑脸附近上升沿)采集该位数据,在接收双方始终频率相差不大的情况下,能够正确的完成通信。
功能设计和演示
预计实现的功能(演示):
将拨码开关代表的数据发送到串口(8位);
从串口接收电脑发来的数据,以数码管显示(8位)。
主模块设计
⚫ 调用分频模块
⚫ 调用数码管显示IP
⚫ 调用按键消抖动IP
⚫ 调用串口发送模块
⚫ 调用串口接收模块
module v1(
input clk,
input [11:0] sw,
input [3:0] btn,//行列键盘的输入
output [3:0] row,//行列键盘的行输出
output [7:0] seg,
output [5:0] an,
output [11:0] led,
output txd,
input rxd
);
wire clk_ms,clk_20ms,clk_16x,clk_x;
wire [3:0] btnout;
wire [23:0] data_disp;
wire data_ready;
wire data_error;
assign row[3:0]=1;//输出全部为高电平,
本例程只用4个
divclk my_divclk(.clk(clk),.clk_ms(clk_ms),.btnclk(clk_20ms),.clk_16x(clk_16x),.clk_x(clk_x));
//调用分频模块
ip_disp_0 uut_disp(//调用显示IP
.clk(clk),
.rst(0),
.dispdata({data_disp[11:0],sw[11:0]}),
.seg(seg),
.an(an)
);
ip_ajxd_0 uut_ajxd(//调用按键消抖动IP
.btn_clk(clk_20ms),
.btn_in(btn),
.btn_out(btnout)
);
uart_tx (.clk_x(clk_x),.data_in(sw[7:0]),.btn(btnout),.txd(txd),.led(led)); //调用串口发送模
块
uart_rx(.clk_16x(clk_16x),.rst(btnout[0]),.rxd(rxd),.data_disp(data_disp),.data_ready(data_rea
dy),.data_error(data_error));//调用串口发送模块
endmodule
评论 (0)