当前位置:无忧公文网 >范文大全 > 征文 > 基于Verilog,HDL的UART模块的设计与仿真

基于Verilog,HDL的UART模块的设计与仿真

时间:2022-03-16 08:30:39 浏览次数:

摘要:针对专用UART芯片兼容性和可移植性差的缺点,设计了一种用Verilog HDL语言描述,FPGA实现的UART模块,可有效实现微处理器和FPGA设备之间的串行数据通信,增强系统稳定性,节省开发成本。

关键词:UART FPGA 串行通信 Verilog HDL

中图分类号:TN919.7 文献标识码:A 文章编号:1007-9416(2013)10-0175-01

UART即通用异步收发器,是一种短距离串行传输接口,被广泛应用于微处理器和外设之间的串行通信。随着FPGA芯片的广泛应用,大量数字系统中需要处理微处理器和FPGA之间的数据通信。采用专用UART集成电路芯片,可移植性和兼容性不强,会降低系统稳定性和可靠性。如果把UART集成到FPGA器件内部,利用Verilog HDL语言描述其核心功能,制作成IP核,可增强系统稳定性。另外由于FPGA设计的灵活性和可移植性,能方便地对系统进行升级。

1 UART的工作原理

在发送端,将并行的数字信号转化成串行信号传输给另外一台设备;在接收端,将串行信号恢复成并行信号进行数据处理。UART只需两条信号线RXD接收数据、TXD发送数据和一条地线就可以完成全双工传输。由于UART是异步通讯,所以需要对数据进行同步,UART传输一帧数据时,首先发起始位低电平,接着发送D0~D78位数据和校验位,最后发送停止位的高电平。

串行数据发送时,由系统时钟分频得到波特率发生时钟,在其控制下将数据总线上的内容,加上起始位和停止位进行移位发送。接收时,需要一个远高于波特率的时钟信号对RXD不断取样,以保持接收器和发送器同步。在设计中,由系统时钟分频产生一个16倍于波特率的频率,即把一个位的数据分成16份。当检测到起始位的下降沿时,开始进行数据采样。采样的数据为一个位的第6,7,8三个状态,三个中取两个以上相同的值作为采样的结果,以避免干扰。当起始位的采样结果不是0时就判定为接收为错,把串行数据接收控制器的位计数器复位。当接收完数据后进行数据的输出,并把串行数据接收控制器的位计数器复位,等待下一数据的到来。

2 UART的实现

2.1 发送模块的实现

发送模块用于将并行数据转换成串行数据发送。用Verilog HDL语言编程时,分三个进程设计:波特率产生进程、读数据缓存进程和发送进程。波特率产生进程将系统时钟分频得到波特率时钟;读数据缓存进程读入并行数据,加上起始位和停止位组成一帧数据;发送进程将数据移位输出,并设定中断标志。本模块输入端口有:写使能信号WR,并行八位数据Datain,系统时钟clk。输出端口有:串行数据控制时钟clkout,串行数据输出TXD,中断标志位TI。

2.2 接收模块的实现

接收模块接收来自外部的串行数据,进行数据采集,根据配置去除数据的起始位、停止位和奇偶校验位,将其转换成并行的八位数据输出,并输出中断标志位。程序设计时,用两个进程实现。16倍波特率发生进程将系统时钟分频,产生一个16倍于波特率的时钟频率,用于数据采样;接收进程进行数据采集、数据接收和产生中断标志。本模块输入端口有:输入串行数据信号RXD,系统时钟clk。输出端口有:中断标志位RI,数据控制时钟输出clk_out,并行数据输出Dataout。

3 UART模块仿真

仿真采用Altera公司的Quartus II软件,设定波特率时钟为系统时钟5000次分频得到。发送模块仿真时,设置并行八位输入数据Datain为为:“01010101”。WR写使能信号高电平有效后,将数据加上起始位0和停止位1串行输出。数据传输完毕,TI中断标志置1。

接收模块仿真结果如图3.1所示。在输入一个低电平起始位后,串行输入八位数据“10100000”。输出clkout为系统时钟的312分频,即波特率时钟频率的16倍。RI为中断信号,在经过十个数据,即160个clkout之后,输出为1,表示1帧数据转换结束。Dataout为并行输出,输出结果从低位到高位为:“10100000”,与串行数据一致,转换结果正确。

4 结语

作为一种异步串行通信接口,UART因其传输线少,可靠性高,被广泛使用于系统设备之间的数据通信。本文采用Verilog HDL语言实现了UART的发送和接收功能,将此IP核集成到FPGA上,可解决传统UART芯片兼容性差的缺点,使系统更加紧凑可靠。

参考文献

[1]谭月杰.在CPLD中用UART逻辑实现高速异步串行通信[J].电气应用,2006(2):55~56.

[2]马游春,王文杰,李锦明.基于FPGA和UART接口的多路数据采集系统的实现[J].火力与指挥控制,2010(9):134~136.

[3]李海平,孔祥成.FPGA的UART设计和实现[J].中国科学院研究生院学报,2010(2):199~203.

推荐访问: 仿真 模块 设计 VERILOG HDL