主设备与从设备通过总线来进行数据通信,是一个数字系统不可或缺的一部分,本篇讲述一种常见的总线控制器UART串行数据接口,也称为串口。
串口的标准一般有,RS-232、RS-422与RS-485标准,我们讲述的是RS-232接口信号。
1、接口信号定义
RS-232最常见的是9脚接口
表1-1:RS-232接口定义
在实际的应用中,我们只需要关注两个接口,数据接收(RXD)和数据发送(TXD),而其他的接口不需要理会。
串口的时序如图1-1所示:
结合时序图我们说明以下,串口收发数据的过程。在没有需要发送的数据时,接口的电平为高。在需发送的数据到达之前,先会有一个低电平的起始位。而后开始发送数据,而后会发送校验位,最后是停止位。结束后恢复高电平,等待下一个传送周期的起始位出现。
所以我们可以画出一个简单的收发结构图,如图1-2所示:
2、发送模块的设计
当数据准备好时,start信号为高电平,数据并行输入内部寄存器中,等时钟周期来了之后由低位到高位串行发送,代码如下:
module UART (clk,rst,start,data_in,TXD);
parameter fst_bit=1'b0; //开始位为低电平
parameter last_bit=1'b0; //传输结束信号
input clk,rst;
input start; //数据传输高电平有效
input [7:0]data_in;
output TXD;
reg [9:0]shift; //内部寄存器
always@(posedge clk or negedge rst)
begin
if (!rst) shift