异步串行通信要求的传输线少,可靠性高,传输距离远,被广泛应用于微机和外设的数据交换。实现串口通信主要需要完成两部分工作:
将串口电平转换为设备电路板的工作电平,即实现RS-232电平和TTL/CMOS电平的转换;
接收并且检验串行的数据,将数据变成并行的并提供给处理器处理。
实现RS-232电平和TTL/CMOS电平转换可以用接口芯片来实现,实现数据的串行到并行转换用的是UART,它们是实现串行通信必不可少的两个部分。虽然目前大部分处理器芯片中都集成了UART,但是一般FPGA芯片却没有这个特点,所以使用FPGA作为处理器可以有两个选择,第一个选择是使用UART芯片进行串并转换,第二个选择是在FPGA内部实现UART功能。但所有的UART芯片都存在引脚较多、体积较大、与其他器件的接口较为复杂等缺点,从而会使设计的成本和难度增加。因此可以将需要的UART功能集成到FPGA内部,而利用VHDL语言将UART的核心功能集成,不仅解决传统芯片的缺点,也使整个设计更加紧凑、稳定且可靠。
1、UART实现原理
UART主要有UART内核、信号监测器、移位寄存 器、波特率发生器、计数器、总线选择器和奇偶校验器总共7个模块组成,如图一所示。
UART各个模块的功能如下:
(1)UART内核模块
UART内核模块是整个设计的核心。在数据接收时,UART内核模块负责控制波特率发生器和移位寄存器,使得移位寄存器在波特率始终的驱动下同步的接收并且保存RS-232接收端口上的串行数据。在数据发送时,UART内核模块首先根据待发送的数据和奇偶校验位的设置产生完整的发送序列(包括起始位、数据位、奇偶校验位和停止位),之后控制移位寄存器将序列加在到移位寄存器的内部寄存器里,最后再控制波特率发生器驱动移位寄存器将数据串行输出。
(2)信号监督器模块
信号检测器用于对RS-232的输入信号进行实时检测,一旦发现新的数据则立即通知UART内核。
(3)移位寄存器模块
移位寄存器的作用是存储输入或者输出的数据。当UART接受RS-232输入时,移位寄存器在波特率模式下采集RS-232输入信号,并且保存结果;当UART进行RS-232输出时,UART内核首先将数据加载到移位寄存器内,再使移位寄存器在波特率模式下将数据输出到RS-232输出端口上。
(4)波特率发生器模块
由于RS-232传输必定是工作在某种波特率下,比如9600,为了便于和RS-232总线进行同步,需要产生符合RS-232传输波特率的时钟,这就是波特率发生器的功能。
(5)奇偶检验器模块
奇偶校验器模块是根据奇偶校验的设置和输入数据计算出相应的奇偶校验位,它是通过纯组合逻辑实现的。
(6)总线选择模块
总线选择模块用于选择奇偶校验器的输入是数据发送总线还是数据接收总线。在接收数据时,总线选择模块将数据接收总线连接到奇偶校验器的输入端,来检查已接收数据的奇偶校验位是否正确;而在发送数据时,总线选择模块将数据发送总线连接到奇偶检验器的输入端,UART内核模块就能够获取并且保存待发送序列所需的奇偶校验位了。
(7)计数器模块
计数器模块的功能是记录串行数据发送或者接收的数目,在计数到某数值时通知UART内核模块。
作者:张明 来源:中国科技信息