全文
4 接收模块
根据UART 的协议描述,可以画出如图3 所示的接收逻辑流程图。接收逻辑首先通过检测输入数据的下降沿来检查起始位,然后产生接收时钟,利用接收时钟来采样串行输入数据,在缓冲器中作移位操作,同时产生校验位,在第9 位处比较校验位是否正确,在第10 位处比较停止位是否为高,在校验位错误或停止位错误的情况下产生错误指示信号。接收时钟是根据数据传输的波特率产生的,16 倍于波特率发生器产生的时钟。
接收模块信号:
rst (输入) : 复位信号;
clk16x (输入) : 输入时钟;
rdn (输入) : 读锁存信号;
rxd (输入) : 串行数据输入信号;
dout [ 0: 7 ] (输出) : 并行数据输出总线;
fram ing_ erro r (输出) : 帧错误信号;
parity_ erro r (输出) : 校验错误信号;
data_ ready (输出) : 数据接收完毕信号。
图3 接收逻辑的流程
运用Modelsim 712 对接收模块做了时序仿真,其结果如图4 所示。接收时钟与发送时钟相同,接收到一帧串行数据,由接收模块转换为并行输出,并且检验校验位和停止位,产生fram ing_ erro r 和parity_ erro r 信号输出。
图4 接收模块时序仿真波形图
5 接口控制模块
接口控制模块连接控制发送、接收、波特率发生模块,并与外部并行总线相连接,从外部(CPU 或单片机) 接收控制信号(nrst, nw rn, nbdn, nrdn) , 来控制UART 的发送、接收以及内部时钟的生成。在nw rn 有效并且内部信号tbre= ′0′(发送缓冲寄存器空) 时,将数据总线输入的并行数据发送给发送模块数据线din (7: 0) , 执行发送数据功能。在nrdn 有效并且内部信号data_ ready, parity_erro r, fram ing_ erro r 有效时,允许从接收模块读入接收到的数据。波特率发生器和发送模块的并行数据输入端口共用一个数据总线。
6 总体电路综合及仿真
UART 总体电路如图5 所示,分别由上述4 个模块组成。其时序仿真如图6 所示。
图5 UART 总体电路图
图6 UART 总体时序仿真波形图
观察图6, 可以看到串行输出端口sdo 发送一帧数据为“00101011001”, 第一位为起始位,8 位数据位,校验位为“0”(偶校验) , 1 位停止位,空闲状态位为高电平。并行输出端口ndout 输出为“00101010”, 输入数据帧格式正确,校验位正确。
7 结 语
用FPGA 器件实现了UART 异步收发器的核心功能,可以实现对数据的接收和发送,并可以在接收数据时对其校验位、停止位进行判断,在发送数据时可以形成完整的一帧数据格式。其接收和发送数据的时钟有内部波特率发生器产生,根据预置的分频系数,对外部时钟进行分频,产生需要的接收或发送时钟。将该UART 电路作为一功能块嵌入到一个FPGA 实现的数据采集与处理系统中,成功地实现了和远端的PC 机进行异步串行通信。实验证明该UART 电路简单,工作稳定、可靠,可运用于低端的异步通信。