当前位置:无忧公文网 >范文大全 > 征文 > 基于VERILOG-HDL的简化异步收发器的设计与仿真

基于VERILOG-HDL的简化异步收发器的设计与仿真

时间:2022-03-15 08:29:56 浏览次数:

摘要:该文阐述了通用异步收发器(UART)异步串行通信原理,介绍了实现UART异步串行通信的硬件接口电路及各部分硬件模块。该文基于Verilog语言实现了接收器和发送器这两个UART的内部核心功能模块,通过Modelsim对相应Verilog-HDL程序的仿真,验证了其异步串行数字接收和发送的功能。

关键词:Modelsim仿真;硬件描述语言;Verilog;UART

中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)34-1752-03

Design and Simulation of Universal Asynchronous Receiver/transmitter Based on Verilog-HDL

LIU Li-jia

(Liaoning University Of Technology,The School of Electronics and Information Engineering, Jinzhou 121001, China)

Abstract: The paper expatiate the asynchronous serial communication theory of the UART, introduce the hardware interface circuit of asynchronous serial communication and the hardware module of each part. By using the Verilog-HDL ,the article realize the transmitter and receiver,which are kernel functional modules of the UART. Through the Modelism simulation,we validate the function of asynchronous serial receiver and transmitter.

Key words: Modelism simulation; hardware description language; Verilog; UART

1 引言

UART(Universal Asynchronous Receiver Transmitter)协议是一种串行数据传输协议。UART允许在串行链路上进行全双工通信,在军事、工业、通信、自动控制、话音图像处理等众多领域得到了广泛运用。8250、NS16450等芯片都是常见的UART器件,这类芯片具有多种功能,但在实际应用中有时只需要使用UART的部分功能,因而会造成一定的资源浪费。本文使用Verilog HDL语言编写出简化型的异步串行数字接收、发送接口(UART)内部核心模块的硬件描述程序及其相应的测试程序,然后应用Modelsim对所编的程序进行仿真,验证其UART功能。

2 UART的结构

异步串行数据帧格式如图1所示。在异步通信中,一个字符在传输时,除传输实际编码信息外,还要传输几个外加位,即传输开始时首先输出起始位“0”。起始位后面为5~8个数据位,在同一个传输系统中,数据位的数目是固定的。数据位后面是奇偶校验位。最后的数位为停止位“1”。

在本方案中,异步串行通信传送一个字符,包括10位,其中有1个起始位,7个数据位,1个奇偶校验位和1个停止位。奇偶校验位采用的是奇校验,即7个数据位中“1”的个数为奇数个校验位输出为“1”,个数为偶数个时校验位输出为“0”。

3 UART的Verilog HDL实现

UART主要由波特率发生模块、发送模块、接收模块这三个部分组成。

波特率发生器用于产生一个本地时钟信号来控制UART的接收与发送;UART接收模块的用途是接收rxd端的串行信号,并将其转化为并行数据;UART发送模块的用途是将准备输出的并行数据按照基本UART帧格式转为串行数据从txd端串行输出。图2为UART的三个子模块。

3.1 波特率发生模块

设计的UART的接收和发送按照相同的波特率进行,波特率可以通过接口模块的总线接口进行设置。UART收发的每一个数据宽度都是波特率发生器输出的时钟周期的16倍,假如按照9600b/s进行收发,那么波特率发生器的输出时钟频率应该为9600×16Hz。假定提供的外部时钟为1.6MHz,可以通过总线写入不同的数值到波特率发生器保持寄存器,然后用计数器的方式生成所需要的各种波特率,即分频器。计算公式为:1600000÷(16×RS)-1,其中RS为所期望的波特率。

如果要输出10000Hz的波特率,可以得到从总线写入的数值为1600000÷(16×10000)-1=9(即09H)。

3.2 接收模块

1) 接收模块原理

接收模块的结构如图3所示。接收模块的作用是把收到的

串行数据转换成并行数据进行输出,并判断收到数据是否有错。

① rxd 接收串行数据输入

② Ri 串行接收标志c)CLK 时钟信号

③ LOAD 发送控制信号

④ rxdin[7:0] 并行数据输出端

接收模块是从rxd端接收数据,rxd端由逻辑1跳变为逻辑0,此时视为一个数据帧的开始。接收模块从捕捉到数据帧的第一个“0”开始工作,每经过一个clk,计数器point2计数一次,同时将起始位之后的7个数据位依次送入移位寄存器中,当计数为7时,完成一个字符的接收,此时这7位数据完成串并转换并将并行数据输出至端口rxdin的第0~6位,并行输出口的第7位是奇偶校验位,由寄存器sdi加载。之后,UART接收模块继续检测下一个数据帧起始位的到来。

2) 接收模块实现的流程

接收模块实现的流程如图4所示。

3) 接收模块仿真分析

由图5仿真结果我们可以看到:串行接收标志为0时,接收模块从rxd处接收串行数据,舍弃起始位0,取其后的7位数据位1000101送入寄存器,完成串并转化由低到高输出至端口rxdin,与此同时寄存器sdi把运算得到的校验位1输出至最高位,8位数据位以并行的形式输出,完成了由串行到并行的转换。

图5 接收模块仿真波形

3.3 发送模块

1) 发送模块原理

接收模块主要实现对并行数据的缓存,并串转换,然后把串行数据按照既定数据帧格式进行输出,其结构如图6所示:

图6UART发送模块

① txdin [6:0] 7位并行数据的输入端

② Ti 串行发送标志Ti=0串行输出,Ti为上升沿时停止输出

③ Load 为系统复位输入端,低电平有效d)txd 串行输出端

发送模块实现的功能是将要发送的7位并行数据变为串行数据,同时在数据头部加起始位,在数据位尾部加奇偶校验位和停止位。即,当UART发送模块被复位信号LOAD复位以后,发送模块读取7位并行数据到寄存器txdbuff中,之后输出逻辑0作为起始位,从起始位的下一位开始对时钟CLK的上升沿计数,每计一次数从寄存器中按照由低位到高位的顺序取出一位数据送到txd端,当计数为7时,数据位发送完毕。之后,根据7位数据位中逻辑1的个数确定校验位,然后输出校验位,最后输出逻辑1作为停止位。

2) 发送模块实现的流程

发送模块实现的流程如图7所示。

3) 仿真结果分析

由图8仿真结果可以看到:发送模块读入并行数据0101101, 存入寄存器txdbuff中,串行输出端txd首先送出起始位0,之后将txdbuff中的数据由低到高进行并串转化从txd端顺序送出,即1011010,然后发送校验位0,最后送出终止位1,这一过程,实现了UART发送模块并行数据转化为串行数据的功能。当串行发送标志为0时,发送模块再次读入并行数据并经过并串转化由txd端输出。

图8发送模块仿真波形

4 结束语

Verilog-HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模,该语言最大的特点是简洁、灵活、高效,其风格类似C语言,容易学习和掌握,本文利用Verilog设计的灵活性实现了UART接收和发送模块,并可以在接收数据时对其校验位进行判断,在发送数据时形成完整的一帧数据格式,实验证明该简化UART模块设计占用资源少,工作稳定可靠,可运用在中低端的异步通信系统中。

参考文献:

[1] 季雄,段吉海,胡媛媛,等.基于VerilogHDL的UART设计[J].微计算机信息,2006,22(17):230-232.

[2] 李少东.基于FPGA的异步收发器模块设计[J].电子质量,2008(1):14-16.

[3] 扈华,白凤娥.基于Verilog-HDL的UART串行通讯模块设计及仿真[J].计算机与现代化,2008(8):15-19.

推荐访问: 简化 仿真 收发器 设计 VERILOG