基于FPGA的串口通信电路设计_第1页
基于FPGA的串口通信电路设计_第2页
基于FPGA的串口通信电路设计_第3页
基于FPGA的串口通信电路设计_第4页
基于FPGA的串口通信电路设计_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业论文论文题目:基于FPGA的串口通信电路设计专 业:集成电路设计与集成系统摘要串行通信接口是一种应用广泛的通信接口。目前,大部分处理器都集成了支持RS-232接口(又称EIA RS-232-C)的通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART),本文设计了一个串口数据采集和处理程序,详细介绍了用Verilog HDL硬件描述语言来开发波特率发生器、接收模块和发送模块这三个模块,以及系统各个模块的具体设计方法和原理,用Quartus II软件进行仿真并给出结果,分别验证各个模块的正确性。本设计还使用基于ALTERA公司的Cyclone II EP2C5T144芯片的FPGA开发板,在FPGA开发板上实现和PC通过串口调试软件完成双向通信,不仅要求将开发板的数据显示在PC的串口调试助手软件上,还要求用PC发送数据的ASCII码来驱动电路的8个LED灯,验证用FPGA实现串行通信的可行性。关键词串行通信;RS-232;UART;Verilog HDL;FPGAAbstractSerial communication interface is a widely used communication interface. At present, most of processor integrated RS-232(EIA RS-232-C) interface to support UART (Universal Asynchronous Receiver/Transmitter) communication, This thesis design a data acquisition and treatment program. Besides that, the thesis introduced Baud Rate Generator module、Receiver module、Send module based on language Verilog HDL and give the results by simulate in Quartus II software. This design also uses EP2C5T144 FPGA chip to achieve the two-way communication by simulate with Quartus II and PC through the serial port debugging software. Not only requires the development boards data displayed in the PCs serial port debugging software, also ask ASCII data sent by PC Code to drive eight LED lights, meanwhile verified the serial communication with FPGA.Key wordsSerial communication; RS-232; UART; Verilog HDL; FPGA目录摘要IAbstractII第1章 语言和工具11.1 Verilog HDL语言概述11.2 FPGA概述31.3 Quartus II软件介绍71.4 FPGA开发板介绍81.5 本章小结11第2章 串口通信协议简介122.1 串口通信接口122.2 RS232通信协议122.3 串口通信时序分析142.4 本章小结15第3章 串口通信的Verilog HDL实现163.1 设计功能说明163.2 波特率发生器模块的Verilog HDL实现163.3 发送模块的Verilog HDL实现183.4 接收模块的Verilog HDL实现243.5 本章小结30第4章 串口通信的硬件调试314.1 板级调试说明314.2 下载配置FPGA324.3 配置串口调试软件344.4 调试结果344.5 本章小结37结论38参考文献39附录1 波特率发生器Verilog HDL实现40附录2 发送模块Verilog HDL实现41附录3 接收模块Verilog HDL实现46致谢51基于FPGA的串口通讯电路设计第1章 语言和工具1.1 Verilog HDL语言概述Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。Verilog HDL语言最初是于1983年由Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用,Verilog HDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。在一次努力增加语言普及性的活动中,Verilog HDL语言于1990年被推向公众领域。Open Verilog International(OVI)是促进Verilog发展的国际性组织。1992年,OVI决定致力于推广Verilog OVI标准成为IEEE标准。这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准,称为IEEE Std 13641995。完整的标准在Verilog硬件描述语言参考手册中有详细描述 夏宇闻.Verilog数字系统设计教程M.北京:北京航空航天大学出版,2008:37-164。下面列出的是Verilog HDL硬件描述语言的主要能力: 基本逻辑门,例如and、or和nand等都内置在语言中。 用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。 开关级基本结构模型,例如pmos和nmos等也被内置在语言中 云创工作室.Verilog HDL程序设计与实践M.北京:人民邮电出版社,2009:1-10。 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。 Verilog HDL中有两类数据类型:线网数据类型wire和寄存器数据类型reg。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 能够描述层次设计,可使用模块实例结构描述任何层次。 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 Verilog HDL不再是某些公司的专有语言而是IEEE标准。 人和机器都可阅读Verilog HDL语言,因此它可作为EDA的工具和设计者之间的交互语言。 Verilog HDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。PLI是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。 能够使用内置开关级原语在开关级对设计完整建模。 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 Verilog HDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 在行为级描述中,Verilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。 能够使用门和模块实例化语句在结构级进行结构描述。 Verilog HDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。 Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。 可以显式地对并发和定时进行建模。 提供强有力的文件读写能力。 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义 刘福奇,刘波.Verilog HDL应用程序设计M.北京:电子工业出版社,2009:322-324。1.2 FPGA概述FPGA(Field Programmable Gate Array)现场可编程逻辑门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。它是当今数字系统设计的主要硬件平台,其主要特点就是完全由用户通过软件进行配置和编程,从而完成某种特定的功能,且可以反复擦写。在修改和升级时,不需额外地改变PCB电路板,只是在计算机上修改和更新程序,使硬件设计工作成为软件开发工作,缩短了系统设计的周期,提高了实现的灵活性并降低了成本 刘韬,楼兴华.FPGA数字电子系统设计M.北京:人民邮电出版社,2005:1-11。一、什么是可编程逻辑器件:在数字电子系统领域,存在三种基本的器件类型:存储器、微处理器和逻辑器件。存储器用来存储随机信息,如数据表或数据库的内容。微处理器执行软件指令来完成范围广泛的任务,如运行字处理程序或视频游戏。逻辑器件提供特定的功能,包括器件与器件间的接口、数据通信、信号处理、数据显示、定时和控制操作、以及系统运行所需要的所有其它功能。逻辑器件又分为固定逻辑和可编程逻辑,固定逻辑是器件复杂性不同,从设计、原型到最终生产,当应用发生变化时就要从头设计,可编程逻辑器件较固定的优点就在于当应用发生变化和器件工作不合适时不用从头设计,直接从新编写逻辑器件后就可以了,这样就节省了前期的开发费用和周期。二、可编程逻辑器件CPLD/FPGA的比较:可编程逻辑包括PAL、GAL、PLD等,经过不断的发展,演变成现在的CPLD/FPGA。CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件和FPGA(Field Programmable Gate Array)两者的功能基本相同,只是实现的原理有些不同,忽略两者的区别时统称为可编程逻辑器件或者是CPLD/FPGA。两者的区别一般有如下特点 Bob Zeidman. Designing with FPGAs & CPLDsM.CMP Books,2002:1-113:(1)CPLD的逻辑单元比较大,容量较小,时序确定,延时可预测,FPGA基于查找表(LUT)所以时间上取决于查找表的路由。(2)CPLD的容量一般比较小,寄存器少,适合做一些容量不大,组合逻辑比较复杂的设计,如地址译码器,总线接口和上电复位逻辑等,相反FPGA则可以做一些容量大,内嵌存储器等高级设计,如嵌入式CPU,数据处理等。(3)CPLD内部连线采用连续性内部连线,这样的链接延时比较固定,但受连接路径的影响,FPGA则采用片段链接,可以充分利用连线资源。(4)FPGA可以提供比CPLD器件足够大的逻辑容量密度,大大减少PCB的空间,降低系统的功耗。上述了CPLD和FPGA的区别,但是作为可编程逻辑器件,他们也有其共同的特点,概括起来他们基本组成分三大部分:(1)二维的逻辑阵列(逻辑单元),构成器件的德逻辑组成核心。(2)输入和输出块(I/O),负责芯片与外界电路的借口连接。(3)链接逻辑块的互联资源,用于逻辑块之间,逻辑块与输入/输出之间的连接。三、FPGA的特点:(1)高性能是实时性,由于FPGA芯片内部是通过上百万个逻辑单元完成硬件实现,具有并行处理的能力,运算速度比平常的单片机和DSP快很多。(2)高集成性FPGA可根据用户的需求在内部嵌入硬/软IP核,以实现不同的而要求而且采用SOPC技术也可节省目标硬件的面积。(3)高可靠性和地成本目前的FPGA芯片在出厂之前都做过100%的检测,不需要设计人员承担投片生产的费用。(4)高灵活性和低功耗FPGA是现场可编程,用户可以反复的编程,擦写,使用,或者在外围电路保持不变的情况下,采用不同的设计而实现不同的功能,这样给产品的升级和维护带来极大的方便。四、FPGA的体系结构:FPGA采用逻辑单元阵列LCA(Logic Cell Array)的概念,内部包括可配置逻辑模块CLB(Configurable Logic Block),输入/输出模块IOB(Input/Output Block),内部连线(Interconnect)和用于存放编程数据的静态存储器SRAM组成。五、FPGA的设计流程:FPGA是可编程芯片,因此FPGA的设计方法包括硬件设计和软件设计两部分。硬件包括FPGA芯片电路、存储器、输入输出接口电路以及其他设备,软件即是相应的VHDL程序和Verilog HDL程序。FPGA采用自顶而下的设计方法,开始从系统级设计,然后逐步分化到二级单元,三级单元知道可以直接操作基本逻辑单元或IP核为止,一般情况下设计流程 Arifur Rahman. FPGA Based Design and Applications M.Springer Publishing Company,2008:5-10如图1-1所示,步骤如下:反注解电路功能设计设计输入综合设计实现与布局布线综合后仿真静态时序分析时序仿真板级仿真与验证功能(行为)仿真器件编程电路验证设计验证图1-1 FPGA开发的一般流程(1) 功能定义/器件选型在FPGA设计项目开始之前,必须有系统功能的定义和模块的划分,另外就是要根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本、以及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。(2) 设计输入设计输入有原理图输入和硬件描述语言输入,原理图输入比较直观但不易仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。硬件语言包括VHDL和Verilog HDL以及System C等,硬件描述语言输入其共同的突出特点:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。(3) 功能仿真功能仿真也称为前仿真是在编译之前对用户所设计的电路进行逻辑功能验证,此时没有延迟信息,仅是对功能的初步检测。(4) 综合优化所谓综合就是将较高级抽象层次的描述转化成较低层次的描述。综合优化根据目标与要求优化所生成的逻辑连接,使层次设计平面化,供FPGA布局布线软件进行实现。就目前的层次来看,综合优化(Synthesis)是指将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表,而并非真实的门级电路。(5) 综合后仿真综合后仿真检查综合结果是否和原设计一致。在仿真时,把综合生成的标准延时文件反标注到综合仿真模型中去,可估计门延时带来的影响。但这一步骤不能估计线延时,因此和布线后的实际情况还有一定的差距,并不十分准确。(6) 实现与布局布线布局布线可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能链接的布线通道进行连线,并产生相应文件(如配置文件与相关报告),实现是将综合生成的逻辑网表配置到具体的FPGA芯片上。(7) 时序仿真时序仿真,也称为后仿真,是指将布局布线的延时信息反标注到设计网表中来检测有无时序违规(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)现象。时序仿真包含的延迟信息最全,也最精确,能较好地反映芯片的实际工作情况。(8) 板级仿真与验证板级仿真主要应用于高速电路设计中,对高速系统的信号完整性、电磁干扰等特征进行分析,一般都以第三方工具仿真和验证。(9) 芯片编程与调试设计的最后一步就是芯片编程与调试。芯片编程是指产生使用的数据文件(位数据流文件,Bitstream Generation),然后将编程数据下载到FPGA芯片中。逻辑分析仪(Logic Analyzer,LA)是FPGA设计的主要调试工具,但需要引出大量的测试管脚,且LA价格昂贵。目前,主流的FPGA芯片生产商都提供了内嵌的在线逻辑分析仪。六、FPGA的应用领域:随着FPGA厂商降低芯片的成本,FPGA被广泛应用于,通信,数字信号处理,工业控制,航空航天等领域,并取得非常高的可靠性。1.3 Quartus II软件介绍Quartus II软件是Altera公司的EDA开发软件,支持原理图、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 周润景,苏良碧.基于Quartus II的数字系统Verilog HDL设计M.北京:电子工业出版社,2010:1-143Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Altera Quartus II作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。Quartus II软件支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的开发。含有工作组计算、集成逻辑分析仪、EDA工具集成、多过程支持、增强重编译和IP集成等特性。支持百万门级的设计,支持高速I/O设计,具有更强的设计能力和更快的编译速度。Quartus II开发软件为可编程片上系统(SOPC)设计提供了一个完整的设计环境。无论是使用个人电脑、NUIX或Linux工作站,Quartus II都提供了方便设计、快速编译处理以及编程功能。Quartus II输入的设计过程可分为创建工程、输入文件、项目编译、项目校验和编程下载等几个步骤。1.4 FPGA开发板介绍本设计中开发板采用Altera公司Cyclone II系列EP2C5T144C8或者EP2C8T144C8芯片而设计的。帮助用户降低学习成本和加快用户快速进入可编程逻辑器件的设计开发领域。提供一个帮助用户快速学习可编程逻辑器件的硬件平台。开发板上使用JTAG接口对芯片进行编程,也可以使用AS接口下载。配送的ByteBlaster II下载线可以下载Altera公司的所有FPGA/CPLD芯片。开发板上所有的I/O口都通过排针引了出来,板上都有标示。引出来的I/O用户可以任意配置分配管脚,方便用户开发自己的产品,最大限度为用户节约学习成本。开发板硬件配置介绍:(1) CycloneII U1 EP2C5T144C8或者EP2C8T144C8(2) IIC U5 AT24C04或者AT24C02或者AT24C01(3) AS U6 EPCS1或者EPCS4(4) UART 通用的MAX232转换或者 USB串口小板(5) PS/2 A;PS/2 B(6) 8个动态数码管(7) 8个LED灯(8) BELL(9) LCD12864/LCD1602接口(10) 4个独立按键(11) 一个FPGA重配置按键(12) JTAG AS下载模式(13) 上电模式:外接5V DC电源(14) 50M有源晶体(15) 8路数据输入,可以固定的输入1(高电平)或者0(低电平)本程序用到的LED灯管脚分配原理图如1-2所示,I/O口分配如下:D30 : PIN65、D31 : PIN69、D32 : PIN70、D33 : PIN71、D34 : PIN72、D35 : PIN73、D36 : PIN74、D37 : PIN60,当I/O口为低电平时LED点亮。图1-2 8个发光二极管I/O口分配本程序用到的串口通信,串口管脚分配原理图如1-3所示,I/O口分配如下:TX : PIN 9、RX : PIN8。图1-3 串口接口的I/O口分配开发板上没有用的I/O都接了出来,具体请看学习板上的标示,板上更清楚。没有用的I/O口如图1-3所示。本设计中输出的节后也用到了其中几个I/O接口,后面分配的时候可以看到本设计具体分配的管脚。图1-4 没有用的I/O口分配1.5 本章小结首先本章主要对Verilog HDL语言进行简要概述,介绍了Verilog HDL语言的发展历史和Verilog HDL硬件描述语言具备的能力。其次还对Quartus II软件进行了简要概述,Quartus II作为一种可编程逻辑的设计环境,由于其强大的设计能力支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的开发。含有工作组计算、集成逻辑分析仪、EDA工具集成、多过程支持、增强重编译和IP集成等特性。支持百万门级的设计,支持高速I/O设计,具有更强的设计能力和更快的编译速度。Quartus II输入的设计过程可分为创建工程、输入文件、项目编译、项目校验和编程下载等几个步骤。最后本章还对FPGA进行了简要概述,并且对本设计将用到的FPGA开发板进行了介绍,以及本设计中将要用到的I/O口都给出了图示。后面的章节将用到本章介绍的Verilog HDL语言和Quartus II软件以及FPGA开发板,还将对软件的使用和开发过程进行详细介绍。第2章 串口通信协议简介RS-232 周灿荣.UART通信的FPGA实现J.山西电子技术.2006,21(4):45-47接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。本章主要介绍RS232接口的原理介绍。2.1 串口通信接口串口即串行数据接口,是一种常用的数据接口。在PC一般都有两个串行口(COM1和COM2),其形状如图1-1所示,是典型的9针D形接口,也称为DB9。由于串口多采用RS-232-C传输协议并长达数十年,因此也常被称为RS-232接口。 图2-1 串口的物理形状示意图串口主要用于网管控制或主业务数据的传输,支持数据的双向传输,速率9600-115200bps,即可以完成和PC的通信,也可以完成与带有标准串口的外设相连,其典型的连接方式如图1-2所示。其中串口接口分为带插孔和带插针的两种,其中插针端称为DCE,插孔端称为DTE。图2-2 串口连接的示意图2.2 RS232通信协议RS-232全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用25个脚的串口连接器(DB25),不仅对连接器的每个引脚的信号内容加以规定,还规定了各种信号的电平。标准的RS-232-C协议具有25根信号线,其中有4根为数据线、11根控制线、3根定时线和7根备用线。通常情况下,使用其中的9根线就可以实现RS-232串口通信。通常DB-25也可以像DB-9那样使用,但是它们的针号和针孔之间的连接关系是不一样的,下面给出常用的25针DB-25和DB-9的对照表以及管脚说明 方喜波.基于FPGA串口通讯的开发J.计算机与信息技术.2009,11(2):11-13,如表1-1所示。表2-1 RS-232-C接口引脚定义DB25DB9信号源信号名信号功能描述23DCETXD发送数据,终端通过此将信号发给调制器32DTERXD接收数据,终端通过此从调制器接收数据47DCERTS请求发送,当终端需要发送数据时,使能该信号,控制调制器进入发送状态58DTECTS允许发送,当调制器准备好接收数据时,使能该信号,通知终端开始发送数据66DTEDSR数据就绪状态,当其状态有效时,表明调制器处于可用状态75GNDGND信号地,信号地是所有信号的参考电平81DTEDCD载波检测,当信号有效时,表明调制器已经接通了通信链路,终端可以准备接收数据204DCEDTR数据终端准备,当其信号有效时表明数据终端可以使用229DTERI响铃指示,当本地调制器收到交换台发送的振铃呼叫信号时,使能该信号,通知终端最为简单且常用的RS-232-C连接方法就是三线连接法,即地、接收数据和发送数据三脚相连。这是因为收、发数据是时分的,二者不会同时传输 M. S. Harvey.Generic UART ManualJ.SiliconValley.1999,21(7)112-130。对于DB-9和DB-25,常用的3线连接法的原则如表1-2所示。表2-2 DB-9、DB-25 常用的3线连接法DB9DB9DB25DB25DB9DB252332223223335577572.3 串口通信时序分析字符间隔RS-232-C的串行总线在空闲的时候保持为逻辑“1”状态,即串行连接线上的电平为-315V。当需要传送一个字符时,首先会发送一个逻辑为“0”的起始位,表示开始发送数据;之后就逐个发送数据位、奇偶校验位和停止位(逻辑“1”),每一次传输1个字符(8个比特)。由于任意两个字符对应瞬间的时间间隔是可变的,因此也被称为异步格式 赵海登等.基于FPGA的UART IP核的设计实现J.通信技术.2009,10(5):177-179。典型的传输时序如图1-3所示。MSBLSBstst字符2SPP奇偶位(parity)停止位(stop)起始位(start)图2-3 RS232 协议的传输时序在RS-232-C协议中,可以设置数据的传输速率。除此之外,字符的位宽、奇偶校验位、停止位都可以被设置。字符可以被设置成58比特,奇偶校验位可以被去除;停止位可以设置成1位、2位甚至1.5位。每秒传输的比特数也被称为二进制波特率,即位周期的倒数,简称为比特率,用于衡量RS-232的传输速率。RS-232-C有一系列波特率标准:110bps、300bps、600bps、1200bps、1800bps、2400 bps、4800bps、9600bps、14.4kbps、19.2kbps、28.8kbps、33.6kbps 和56kbps 等。有两点注意的是:首先,在设置波特率时,必须同时通知通信双方;其次,波特率的计算包括了起始位、字符、校验位、停止位在内所有的比特,而不是仅针对字符 L. K. Hu and Q.CH. Wang.UART-based Reliable Communication and performance AnalysisJ.Computer Engineering.2006,32(2):15-21。发送数据过程:空闲状态,线路处于高电位;拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧资料发送结束。接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低电位到高电位接收数据,数据发送完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存 F.S. Pan,F. ZHAO,J. Xi and Y. Luo.Implement of Parallel Signal Processing Syttem Based on FPGA and Multi-DSPJ.Computer Engineering.2006,32(23):247-249。由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。UART的接收数据时序为 X. D. Wu and B. Dai,Design of Interface Between High Speed A/D and DSP Based on FIFOJ.Journal of Beijing Institute of Petrochemical Technology.2006,14(12) 26-29:当检测到数据的下降沿是,表明线路上有数据进行传输,这时计数器CNT开始计数当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第1位数据,依此类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值168时,采样的值为“1”表示停止位,一帧数据接收完成。本设计将按上面的算法进行Verilog HDL语言编程与仿真。2.4 本章小结本章主要介绍了RS-232通信协议的基础知识,明确实现串口通信需要的端口和功能,为以下章节通过Verilog HDL硬件描述语言实现串口的通信。目前,大部分处理器都集成了支持RS-232-C的通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART。本设计在后面提到的UART即串口通信控制器),辅助处理器和串行设备之间通信,设计人员只需要对其进行配置即可完成下列工作:(1) 完成处理器内部的并行数据到串行数据的转化以及外部串行数据到并行数据的转化。(2) 完成输入数据的奇偶校验,以及在输出数据中插入奇偶校验比特。(3) 完成数据传输和停止位的检测,并从中提取符号数据。(4) 完成外部设备串口设备的管理和响应。第3章 串口通信的Verilog HDL实现本设计通过前面两张介绍的串口通信基本知识和Verilog HDL语言进行串口通信的实现,本设计实现的串口通信电路主要由波特率发生器、数据接收模块和数据发送模块这3个模块组成,强调功能划分明确,便于系统设计和调试。3.1 设计功能说明本实设计要求在FPGA开发板上实现波特率为115200bps,停止位为1比特、1比特校验位的串口通信,并要求和PC机通过串口调试助手完成双向通信。不仅要求将PC通过键盘输入的数据显示在PC机的串口调试助手的数据发送框中,还要求用PC发送数据的ASCII码来驱动FPGA开发板的8个LED灯。开发板上接收到数据后将数据通过串口数据线发送回PC的串口调试助手上并显示在数据接收框中。通过检测LED灯的亮灭来判断发送数据的ASCII码是否正确,并观察串口调试助手上接收到的数据与发送的数据是否一致。3.2 波特率发生器模块的Verilog HDL实现波特率发生器实际上是一个分频器,从给定的系统时钟频率得到要求的波特率。一般来讲,为了提高系统的容错性处理,要求波特率发生器的输出时钟为实际串口数据波特率的N倍,N可以取值为8、16、32、64等 刘岸杰.基于FPGA的串口通讯与VGA显示J.工业控制计算机.2006,19(2):132-151。在本设计中,系统的时钟为50MHz,取N为16,则分频系数为50000000/(16*115200)=27.127,取整为27。本设计中的波特率发生器的代码如下所列,即附录1中clkdiv.v。module clkdiv(clk, clkout);/ 系统时钟input clk;/ 采样时钟输出output clkout;reg clkout;reg 15:0 cnt;/ 分频进程always (posedge clk)beginif(cnt = 16d12)beginclkout = 1b1;cnt = cnt + 16d1;endelse if(cnt = 16d26)beginclkout = 1b0;cnt = 16d0;endelsebegincnt = cnt + 16d1;endendendmodule在Quartus II软件当前工程窗口打开clkdiv.v文件,单击File Create/Update Create Symbol Files for Current File命令,为clkdiv.v文件生成原理图模块。新建一个原理图文件,在原理图空白处双节,在弹出的Symbol对画框中选择Project clkdiv模块,单击OK按钮退出Symbol对话框。在原理图的适当位置放置clkdiv模块,并添加输入输出模块,如图3-1所示,保存原理图为uartrxtx.bdf。图3-1 波特率发生器的原理图编译工程文件,编译无误后单击Processing Generate Functional Simulation Netlist,产生功能仿真网表。新建波形仿真文件,加入输入输出信号,设置系统时钟信号clk的周期为20ns,保存波形文件为uartrxtx.vwf,单击按钮进行分频器的波形仿真,波形仿真图形如图3-2所示。图3-2 波特率发生器的仿真图形由波形仿真图形可以看出,输入的时钟周期为20ns,即50MHz。分频时钟输出实现了所需的27分频,波特率发生模块得到正确验证。3.3 发送模块的Verilog HDL实现UART发送模块的功能:接收到发送指令后,把数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位 SU Hang and ZHANG Ning.Integrated Design of UART and MCU Based on FPGA J.Modern Electronics Technique.2011,34(02)22-28。由于波特率发生器产生的时钟信号clkout的频率为115200Hz的16倍,因此在发送器中,每16个clkout周期发送一个有效比特,发送数据格式严格按照图2-3所示的串口数据帧来完成:首先是起始位(发送端口从逻辑1转化为逻辑0,并持续1/115200s),其次是8个有效数据比特(低位在前,高位在后),一位奇偶校验位,最后是一位停止位。本设计中的发送模块的代码如下所列,代码即附录2中uarttx.v文件。module uarttx(clk, datain, wrsig, idle, tx);/ UART时钟input clk;/ 需要发送的数据input 7:0 datain;/ 发送命令,上升沿有效input wrsig;/ 线路状态指示,高为线路忙,低为线路空闲output idle;/ 发送数据信号output tx;reg idle, tx;reg send;reg wrsigbuf, wrsigrise;reg presult;/ 计数器reg7:0 cnt;parameter paritymode = 1b0;/ 检测发送命令是否有效always (posedge clk)beginwrsigbuf = wrsig;wrsigrise = (wrsigbuf) & wrsig;endalways (posedge clk)begin/ 当发送命令有效且线路为空闲时,启动新的数据发送进程if (wrsigrise & (idle)beginsend = 1b1;end/ 一帧资料发送结束else if(cnt = 8d175)beginsend = 1b0;endendalways (posedge clk)beginif(send = 1b1)begincase(cnt)/ 产生起始位8d0:begintx = 1b0;idle = 1b1;cnt = cnt + 8d1;end/ 发送第0位数据8d16:begintx = datain0;presult = datain0paritymode;idle = 1b1;cnt = cnt + 8d1;end/ 发送第1位数据8d32:begintx = datain1;presult = datain1presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第2位数据8d48:begintx = datain2;presult = datain2presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第3位数据8d64:begintx = datain3;presult = datain3presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第4位数据8d80:begintx = datain4;presult = datain4presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第5位数据8d96:begintx = datain5;presult = datain5presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第6位数据8d112:begintx = datain6;presult = datain6presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送第7位数据8d128:begintx = datain7;presult = datain7presult;idle = 1b1;cnt = cnt + 8d1;end/ 发送奇偶校验位8d144:begintx = p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论