《毕业设计论文基于FPGA串口通信系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于FPGA串口通信系统设计.doc(42页珍藏版)》请在三一办公上搜索。
1、 西南科技大学城市学院本科生毕业论文 基于FPGA串口通信系统设计摘要:UART(即Universal Asynchronous Receiver Transmitter)是数据通信及控制中广泛使用的一种全双工串行数据传输协议。本设计基于 FPGA器件实现对UART的波特率产生器、UART发送器和接收器及其整合电路的模块化设计,采用Verilog HDL语言对三个功能模块进行硬件描述。通过串口调试助手进行验证,其结果完全符合UART协议的要求和预期的结果。关键词:UART ; FPGA ; Verilog HDL ; 验证 西南科技大学城市学院本科生毕业论文 Based on FPGA ser
2、ial port communications system designAbstract:UART (i.e. Universal Asynchronous Receiver Transmitter) is in the data communication and the control the widespread use one kind of full-duplex serial data transmission agreement. This design realizes based on the FPGA component to the UART baudrate prod
3、ucer, the UART transmitter and the receiver and the conformity electric circuits modular design, uses Verilog the HDL language to carry on the hardware description to three functional modules. Debugs the assistant through the serial port to carry on the confirmation, its result meets.Key words:UART,
4、 FPGA , Verilog HDL , Validate 西南科技大学城市学院本科生毕业论文 目 录第一章 绪 论11.1 课题背景11.2 现场可编程门阵列FPGA11.2 Verilog HDL简介3第二章 串行通信系统52.1 概述52.2 通信简述52.2.1串行通信概念62.3 RS-232C总线72.3.1 RS-232C接口特性82.4 串行通信接口组成92.5 UART通信协议102.6 系统整体结构12第三章 UART系统设计143.1UART简介143.2 接收模块功能设计描述173.3 发送模块功能设计描述233.4 波特率模块303.5验证31结 论33致 谢34参
5、考文献35附录一37附录二38 西南科技大学城市学院本科生毕业论文第一章 绪 论1.1 课题背景随着微电子技术的发展,数字电路系统正朝着速度快、容量大、体积小、重量轻的方向发展。推动该潮流迅猛发展的引擎就是日趋完善的专用集成电路ASIC(Application Specific Integrated Circuit)设计技术。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模集成电路,以及许多具有特定功能的专用集成电路ASIC。ASIC通常包括全制定、半制定及可编程逻辑器件(包括简单的SPLD 复杂的CPLD和FPGA)。对于前两种,由于生产中需要支付一次性工程费用所以小批量生产、试验
6、项目等不可能采用前两种方法。因此可编程逻辑器件已成为实现ASIC的主要手段。可编程器件具有保密性强、体积小、重量轻、可靠性高等ASIC的共同优点,同时它还具有现场可编程的特性。与普通电路的集成电路相比,它具有设计开发周期短、设计制造成本低、开发工具优先等特点,因而现在被广泛地应用在数字通信、图形图像、仪表、兵器等系统中。 由于集成电路的广泛应用,设计与制造集成电路的任务已不完全由半导体厂商类独立承担。系统设计师们更愿意自己设计专用集成电路芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而可编程逻辑器件正处于高速发展的阶段。新型
7、的FPGA/CPLD规模越来越大,成本越来越低,。高性价比使可编程器件在硬件设计领域扮演着日益重要的角色。低端CPLD已逐步取代了74系列等传统的数字元件,高端的FPGA也在不断地夺取ASIC的市场份额,特别是目前大规模FPGA多数支持可编程片上系统,与CPU的有机结合使FPGA已经不仅仅是传统的硬件电路设计手段,而逐步升华为系统实现工具。1.2 现场可编程门阵列FPGA20世纪80年代中期,FPGA刚出现时,大部分用来实现粘合逻辑、中等复杂度的状态机和相对有限的数据处理任务。在20世纪90年代早期,FPGA的规模和复杂度开始增加,那时它们的主要场所在通信和网络领域。到了20世纪90年代末,F
8、PGA在消费、汽车和工业领域的应用经历了爆炸式增长。21世纪早期,已经可以买到数百万容量的高性能FPGA。今天FPGA几乎可以用来实现任何东西,包括通信设备和软件定义无线电,雷达、影像和其它数字信号处理的应用,直至包含硬件和软件的片上系统。FPGA(field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路出现的,既解决了制定电路的不足,又克服了原有可编程器件门电路数有限的缺点。目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以
9、经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。 系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 FPGA一般来说比ASIC(专用集成芯片)的速度要慢
10、,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: 1、
11、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2、FPGA可做其它全定制或半定制ASIC电路的中试样片。 3、FPGA内部有丰富的触发器和IO引脚。 4、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。当加电时,FPGA芯片将EPROM中数据读入片内编程
12、RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。当然FPGA存在于在某些场合选它而不是单片机的优势:、FPGA运行速度快:FPGA内部集成锁项环,可以把外部时钟倍频,核心频率可以到几百M,而单片机运行速度低的多。在高速场合,单片机无法代替FPGA。、FPGA管脚多,容易实现大规模系统:单片机IO口有限
13、,而FPGA动辄有数百个IO口,可以方便连接外设。比如一个系统有多路AD、DA,单片机要进行仔细的资源分配,总线隔离,而FPGA由于丰富的IO资源,可以很容易用不同IO连接各外设。、FPGA内部程序并行运行,有处理更复杂功能的能力:单片机程序是串行执行的,执行完一条才能执行下一条,在处理突发事件时只能调用有限的中断资源;而FPGA不同,逻辑可以并行执行,可以同时处理不同任务,这就导致了FPGA工作更有效率。、FPGA有大量软核,可以方便进行二次开发:FPGA甚至包含单片机和DSP软核,并且IO数仅受FPGA自身IO限制,所以FPGA又是单片机和DSP的超集,也就是说,单片机和DSP能实现的功能
14、,FPGA一般都能实现。1.3Verilog HDL简介Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL是目前世界上最流行的两种硬件描述语言之一,是在20世纪80年代中期开发出来的。Verilog HDL这种硬件描述语言被用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在
15、相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。
16、但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。38第二章 串行通信系统2.1 概述在计算机系统和微机网络的快速发展领域里,串行通信在数据通信及控制系统中得到广泛的应用。UART(即Universal AsynchronousReceiver Transmitter 通用异步收发器)协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用UART的全部功能。只需将其核心功能集成即可。波特率发生器、接收器和发送器是UART的三个核心功能模块,利用
17、Verilog-HDL语言对这三个功能模块进行描述并加以整合UART是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL或Veriolog -HDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文
18、应用EDA技术,基于FPGA/CPLD器件设计与实现UART。2.2 通信简述通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下无论采用何种方法,使用何种媒质,将信息从某方准确安全传送到另方。通信在不同的环境下有不同的解释,在出现电波传递通信后通信(Communication)被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。然而,通信是在人类实践过程中随着社会生产力的发展对传递消息的要求不断提升使得人类文明不断进步。在各种各样的通信方式中,利用“电”来传递消息的通信方法称为电信(Telec
19、ommunication),这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。1. 按传输媒质分类:有线通信:是指传输媒质为导线、电缆、光缆、波导、纳米材料等形式的通信,其特点是媒质能看得见,摸得着的(明线通信、电缆通信、光缆通信、光纤光缆通信)。无线通信:是指传输媒质看不见、摸不着(如电磁波)的一种通信形式(例:微波通信、 短波通信、 移动通信、 卫星通信、 散射通信)。2. 按信道中传输的信号分类: 模拟信号:凡信号的某一参量(如连续波的振幅、频率、 相位, 脉冲波的振幅、宽度、位置等)可以取无限多个数值, 且直接与消息相对应的,模拟
20、信号有时也称连续信号, 这个连续是指信号的某一参量可以连续变化数字信号:凡信号的某一参量只能取有限个数值,并且常常不直接与消息相对应的,也称离散信号。3. 按工作频段分类:长波通信 中波通信 短波通信 微波通信 4. 按调制方式分类:基带传输:是指信号没有经过调制而直接送到信道中去传输的通信方式。频带传输:是指信号经过调制后再送到信道中传输,接收端有相应解调措施的通信方式。5.按按通信双方的分工及数据传输方向分类: 对于点对点之间的通信,按消息传送的方向,通信方式可分为单工通信、半双工通信及全双工通信三种。 所谓单工通信,是指消息只能单方向进行传输的一种通信工作方式。单工通信的例子很多,如广播
21、、遥控、无线寻呼等。这里,信号(消息)只从广播发射台、遥控器和无线寻呼中心分别传到收音机、遥控对象和 BP 机上。 所谓半双工通信方式,是指通信双方都能收发消息,但不能同时进行收和发的工作方式。对讲机、收发报机等都是这种通信方式。所谓全双工通信,是指通信双方可同时进行双向传输消息的工作方式。在这种方式下,双方都可同时进行收发消息。很明显,全双工通信的信道必须是双向信道。生活中全双工通信的例子非常多,如普通电话、手机。2.2.1串行通信概念计算机与计算机,计算机与外部设备进行数据交换也称为通信,一般有两种方式:并行通信和串行通信。信息的各位数据被同时传送的通信方法是并行通信,并行通信依靠I/O接
22、口来实现。并行通信中,数据有多少位就需要多少条信号传输线,这种通信方式快,但由于传输线较多,所以成本较高,仅适合近距离通信,通常传送距离小于30米,常用的并行通信协议有、ECP等。当距离大于30米时则多采用串行通信方式,串行通信是指外部设备和计算机间使用一根数据线(另外需要地线,可能还需要控制线)进行数据传输的方式。数据在一根数据线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。与并行通信方式相比,有以下优点:(1)传输距离长,可达数千公里。(2)长距离内串行数据传送速率会比并行数据传送速率快,串行通信的通信时钟频率比并行通信更容易提高。(3)抗干扰力强,串行通信信号间的相互干扰完全
23、可以忽略。(4)通信成本低。(5)传输线既传输数据,又传输联络信息。因此串行通信得到广泛的应用。在串行通信中,数据通常在发送器和接收器间进行双向传送,而这种传送又根据需要可分为单工通信、半双工通信和全双工通信。通常情况下,根据信息传送格式,串行通信又分为两类:异步串行通信和同步串行通信。同步串行通信是按软件识别同步字符来实现数据传送的;异步串行通信是一种利用字符再同步技术通信方式。同步通信是以数据块的方式传送的,数据传输率高,适合高速率、大容量的数据通信。同步通信在数据开始处用一个同步字符来指示。同步通信是指在约定的通信速率下,发送端和接收端的时钟信号频率和相信始终保持一致(同步),这就保证了
24、通信双方在发送和接收数据时具有完全一致的定时关系。在发送时要插入同步字符,接收端在检测到同步字符后,就开始接收任意位的串行数据,同步通信具有较高的传输率,但对硬件要求较高。异步通信是以字符为单位传送数据的,数据传送可靠性高,适合低速通信的场合。异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。然而本设计目的是在FPGA的基础上设计串口通信系统,而且本文采用的是RS-232C总线接口标准作为串行通信的交通工具,所以是采用按位传送的异步串行通信协议。2.3 RS-232C总线通信,当然就是接收信息/发送信息,在现实生活中人与人对话是通信,而传送他们信息的是空
25、气这个媒介。写信,电话,QQ都是通信工具,然而互相通信之间一定会有一个媒介,只是不同的通信方式,媒介不同而已。计算机与计算机,计算机与外部设备之间的通信,一般有两种方式:并行通信和串行通信。并行通信依靠I/O接口来实现,而串行通信就需要串行通信接口标准:RS-232C、RS-499、RS-422、RS-423、RS-485等总线来实现。当然本设计采用一般的微型计算机、计算机终端和一些外部设备都配有RS-232C串行接口作为本通信接口的标准。RS232接口,就是普通电脑后面那个串口.一般为9针的,也有25针的.是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂
26、家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”(RS-232C,其中C表示此标准修改了三次)。标准中包括了电气和机械方面的规定.该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来随着设备的不断改进,成了目前大家普遍见到的9脚。在不使用传输控制信号的情况下,用3根线就可以传输了, 9芯的是2收3发5地,25芯的是2发3收7地。两设备用RS232相连的时候为收发,发收,地地。2.3.1 RS-232C接口特性(1)接口的电气特性:在RS-232C中任何一
27、条信号线的电压均为负逻辑关系。即:逻辑“1”,-5 -15V;逻辑“0” +5 +15V 。噪声容限为2V。即要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”(2) 接口的物理结构: RS-232-C接口连接器一般使用型号为DB25的25芯插头座,通常插头在DCE端,插座在DTE端. 一些设备与PC机连接的RS-232C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。(3) 传输电缆长度由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺.其实
28、在一般应用中,传输距离小于50m,最大传输速率为20kbps.由于RS-232-C接口标准出现较早,难免有不足之处,主要有以下四点:(1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。(2)传输速率较低,在异步传输时,波特率为20Kbps。(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。由于RS-232C是用负电压来表示逻辑状态,与TTL以高低电平表示的逻辑状态的规定不同,所以在实际应用时
29、,需要将TTL电平转换成RS232电平,如图2.1所示。RS232的接口芯片很多,因此使用时须加上适当的电平转换电路,最著名的当然是max公司的芯片max232。图2-1 MAX232实现TTL电平与RS-232电平转换2.4 串行通信接口组成由于CPU与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此串行通信接口的基本功能是:在发送时,把CPU送来的并行数据转换成串行数据,逐位地依次发送出去。在接收时,把外部设备发送过来的串行数据逐位地接收,组装成并行数据,并行地送给CPU去处理。实现这一功能的硬件电路叫做串行通信接口。串行接口的组成图如图2.2所示。图2-2 UART接口的组成框
30、图在数据输入过程中,数据一位一位地从外部设备进入UART接口的“接收移位寄存器”,当“接受移位寄存器”中已接收完一个UART包的各位后,数据就从“接收移位寄存器”进入“数据输入寄存器”。CPU从“数据输入寄存器”中读取接收到的数据(并行读取,即同时被读至累加器中)。“接收移位寄存器”的移位速度由“接收时钟”确定。在数据输出过程中,CPU把要输出的数据(并行地)送入“数据输出寄存器”,“数据输出寄存器”的内容被传输到“发送移位寄存器”,然后由“发送移位寄存器”通过移位操作,把数据一位一位地送到外设。“发送移位寄存器”的移位速度有“发送时钟”确定。“控制寄存器”用来保存与此接口有关的控制信息,这些
31、控制信息决定接口的工作方式。CPU可以通过修改“控制寄存器”的内容来控制串行通信接口的工作方式。“状态寄存器”的各位称为“状态位”,每一个状态位都可以用来指示数据传输过程中的状态或某种错误。例如,用状态寄存器D5位为“1”表示“数据输出寄存器空”,用D0位表示“数据输入寄存器满”,用D2位表示“奇偶检验错”等2.5 UART通信协议在异步通信中,是以字符为单位传送数据,是从低位到高位逐位传送,一个字符表示一帧信息。串行异步通信协议中字符代码传输格式如图2.3所示,通常UART的一帧数据由四部分组成:一个起始位S(一般逻辑为“0”),后面是数据长度可变的数据位D0D7(一般为6位到8位之间可变,
32、数据的低位在前),一个可选的校验位PB(可选奇校验、偶检验或不需要检验),随后是一定长度的停止位P(可选1位、1.5位、或2位),停止位必须为逻辑“1”。在没有数据被传输时,数据线会一直处于逻辑“1”状态。SD0+0D1D2D3D4D5D6D7PBP图2-3 UART的字符帧格式a,起始位:它是数据采样的第一个点,当接收模块检测串行输入数据管脚上的电平从“1”到“0”的跳变来确定一个UART包的起始位。起始位检测8个连续脉冲的另一个更重要的原因是,采用16倍频采样的时钟,第8个采样脉冲所对应的数据波形正好是该位数据位波形的正中点(以时钟上升沿采样),在该处读写数据应该是最安全点。b,数据位:这
33、是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0127(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。c,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有
34、偶数个或者奇数个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不为真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。d,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大
35、,但是数据传输率同时也越慢。在UART协议中,数据的发送者与接收者不共享时钟信号,也就是说,在一次UART通信过程中,并没有一个时钟信号从发送端传输到接收端,因此,这个协议被称为异步方式。由于没有共享时钟信号,因此在进行数据传输之前,收发双方必须协商好一个数据 传输的波特率,也就是说,UART接收端应该知道发送端发送数据的波特率(相应的发送端也需要知道接收端的波特率)。在大多数情况下,发送数据和接受数据的波特率是相同的。UART发送端按照低位在前,高位在后的顺序移位输出数据。一旦在初始化过程中,双方协商好了通信的波特率,收发双方的内部时钟都设定在同一波特率(但时钟的相位不同)。在一个UART包
36、传输开始,接收端将它的内部时钟调整到与发送端同步。这样接收端就可以在每一位的中心位置对数据位进行采样,保证数据传输的正确性。2.6 系统整体结构本设计以FPGA为基础来实现异步通信,而UART模块就为本设计关键所在,如图2.4所示,该模块主要有串行发送器、接收器以及波特率发生器三个模块组成。波特率发生器模块:在异步通信中,发送方和接受方必须保持相同的波特率才能实现正确的数据传送。在本设计中,由于RS-232C传输必定是工作在某种波特率下,为了便于和RS-232C总线进行同步,需要产生符合RS-232C传输波特率的时钟。图2-4 UART系统框图本设计完整的工作流程可以间单的分为数据接收过程和发
37、送过程两部分。接收过程:当UART模块检测到有新数据(RS-232C总线传输线的起始位)就会触发接收流程。首先UART模块内部会重置波特率发生器和移位寄存器,控制逻辑使移位寄存器的工作模式为波特率模式,以准备数据接收,其次移位寄存器在波特率时钟的驱动下工作,不断的读取RS-232C串行总线上的输入数据,一位一位的接收,并且将数据保存到内部的数据寄存器内。然后在进行串并转换,在通过CPU内部数据总线传送到数据I/O缓存器,最后被CPU内部采用。发送过程:当要发送数据出去时,先把要发送的CPU内部数据存储到数据I/O缓存器,传送到数据寄存器,然后进行串并转换。UART模块内部会重置波特率发生器控制
38、逻辑控制移位寄存器进入RS-232C串行发送的协议模式,并且使移位寄存器工作在波特率模式下,于是移位寄存器便在波特率时钟的驱动下依次将数据寄存器的数据一位一位发送到RS-232C的发送端TXD,这样就产生了RS-232C的数据发送时序。第三章 UART系统设计3.1 UART简介UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件因为计算机内部采用并行数据,不能直接直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备点的数据放到UART寄存器
39、(临时内存块)中,再通过FIFO(First Input First Output,先入先出列队)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中
40、加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。一般而言UART和外界通信只需要两条信号线RXD和TXD,其中RXD是UART的接收端,TXD是UART的发送端,接收与发送是全双工形式。由于可编程逻辑器件技术的快速发展,FPGA的功能日益强大,其开发周期短、可重复编程的优点也越来越明显,本设计就是在FPGA芯片上集成UART功能模块并和其他模块组合来实现一个能与其他设备进行串行通信的片上系统。本系统设计硬件电路图如图3.1所示。图3-1 系统硬件电路图模块名称:uart_test功能描述:uart
41、的测试顶层模块module uart_test(sys_clk,/系统时钟uart_dataH,uart_xmitH/uart接收与发送引脚);input sys_clk; /系统时钟(48MHz)input uart_dataH;/uart接收引脚RXDoutput uart_xmitH;/uart发送引脚 TXDreg7:0 senddata;/发送一个字节的数据缓存区reg WR_R1,WR_R2,WR_R3;/控制产生一个发送的写信号wire 7:0recdata;/接收缓存区wire RI,TI,WR;/接收、发送中断以及写控制信号wire clksend,clkrec;/发送和接收
42、的时钟频率always(posedge clksend)/通过RI接收中断产生一个写信号,维持时间为1个ClkbeginWR_R1 = RI;WR_R2 = WR_R1;WR_R3 = WR_R2;endassign WR = (WR_R3)&(WR_R2)&(WR_R1);/控制写信号always(posedge RI)/当接收了一个数据后,把数据加1后发回PC机,注意串口一个一个数据发begin senddata = recdata+8d1;endrec uart_rec(/调用一个uart接收模块 sys_rst_1(sys_rst_1),sys_clk(uart_clk),uart_d
43、ataH(uart_REC_dataH),rec_dataH(rec_dataH),rec_readyH(rec_readyH), );send uart_xmit(/调用一个uart的发送模块 sys_rst_1(sys_rst_1),sys_clk(uart_clk),uart_xmitH(uart_XMIT_dataH),ximtH(xmit_start_pulseH),xmit_dataH(reg_xmit_data),xmit_doneH(xmit_doneH) );Baud ( /调用波特率变换器sys_clk(uart_clk),sys_rst_1(sys_rst_1),baud
44、_clk(uart_clk),baud_rate_div(baud_rate_div);endmodule3.2 接收模块功能设计描述接受模块的主要功能是检测起始位S,对随后的位流解串行化,检测停止位PB,并将数据准备好CPU读取。图3.2显示了接受模块的功能框图,包括控制状态机、解串行化器和相关逻辑。本设计仅包括最基本的功能,没有错误检测逻辑。图3-2 接收模块功能图 Uart_clk的频率为波特率的16倍,它是由波特率变换模块产生的。这个时钟信号用来驱动接收模块中的所有时钟。Uart_dataH是一个输入信号(就是RXD),它在送入解串行化器之前要经过两级同步器。注意:由于Uart_dat
45、aH上传输的数据是与发送端的时钟信号是同步的,而不是与接收端的时钟信号同步的,因此这个两级同步器是必不可少的。解串行化器是一个简单的串并转换移位寄存器。它有一个来自状态机的输入shiftH。当这个信号为有效(高电平)时解串行化器进行一次移位。移位寄存器的默认宽度为8位,需要主要的数据的低位先被移入。已接收位计数器用来跟踪记录累计接收到的数据位的数目。当计数器计数到预先设定的值(word_len)时,状态机停止接收数据。计数器有两个控制输入端:countH和rstcountH。当countH有效(高电平)时,计数器加1;当rstcountH有效(高电平)时,计数器清零。它是一个同步计数器,计数器
46、的默认宽度为4位。位元计数器的作用是在uart_clk中产生一个延时(波特率周期/16),这是一个由cntr_resetH信号控制的加计数器。当该信号有效(高电平)时,计数器处于复位状态;当该信号为低电平时,计数器进行加1计数。图3.3显示了状态机的状态跳转流程,他是一个有5个状态的mealy型状态机。图3-3 UART接收模块状态图状态机把前面描述的解串行化器、两级同步器、已接收位计数器和位元计数器联系在一起。当系统复位时,状态机的默认状态为r_START。在这个状态,状态机等待起始位S。输入数据在空闲状态时为“1”,当输入数据从“1”跳变到“0”,即检测到起始位S时,状态机跳转到r_CENTER状态。在r_CENTER状态,状态机等待1/2个位元长度,以找到位元的中间位置。一个位元就是一个波特,包括16个uart_clk脉冲。因此1/2个位元就是8个uart_clk脉冲。这个延时由位元计数器产生。等待4个uart_clk脉冲而不是8个的原因是同步器有时会增加两个uart