基于FPGA的UART控制器的实现_图文_第1页
基于FPGA的UART控制器的实现_图文_第2页
基于FPGA的UART控制器的实现_图文_第3页
基于FPGA的UART控制器的实现_图文_第4页
基于FPGA的UART控制器的实现_图文_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、第31卷第7期 2011年3月绍 兴 文 理 学 院 学 报 J OURNAL OF S HAOX I NG UN I VER SI TY V o. l 31N o . 7M ar . 2011基于FP GA 的UART 控制器的实现魏亚昉 李振华 卢雪萍(浙江邮电职业技术学院, 浙江 绍兴312016摘 要:文章阐述了UART 的基本原理, 提出一种采用可编程器EP2C5T 144实现UART 收发器的方法, 设计的各模块均采用VHDL 语言, 并用M ode l s i m 对各个模块进行了仿真, 下载到FPGA 上, 实现与计算机进行通信, 测试运行稳定、可靠. 关键词:UART; FP

2、GA; VHDL; 有限状态机 1中图分类号:TP334; TN 911 文献标识码:A 文章编号:1008-293X (2011 07-0066-050 前言通用异步收发器(UART, Universa lA synchr onousRece i v er Trans m itter 是一种应用广泛的短距离串行传输接口, 具有传输线少、成本低、可靠性高等优点. 8250、8251等都是常见的UART 接口芯片, 但专用芯片一般引脚较多, 内含许多辅助模块和一些辅助功能, 在实际使用时往往用不到这些功能, 基本的UART 通信只需要接收和发送两条信号线, 接收与发送是全双工形式, 因此若采用U

3、ART 专用芯片, 将会使电路变得复杂, PCB 面积增大, 从而导致成本增加, 系统的稳定性和可靠性降低. 由于FPGA 的功能日益强大, 开发周期短、可重复编程等优点也越来越明显, 可以在FPGA 芯片上集成UART 功能模块, 从而简化电路, 缩小PCB 面积, 提高系统可靠性. 此外, 基于FPGA 的设计具有很高的灵活性, 可以方便地进行升级和移植.1 UART 控制器的FPGA 实现异步收发器的顶层模块由波特率发生器、UART 接收器和UART 发送器构成. UART 发送器的用途是将准备输出的并行数据按照基本UART 帧格式转为TXD 信号串行输出; UART 接收器接收RXD

4、串行信号, 并将其转化为并行数据, 但串并转换的时钟同发送器一样处理, 收发设备间的时钟是会累计的, 会导致接收数据不正确, 波特率发生器就是专门产生一个远远高于波特率的本地时钟信号对输入RXD 不断采样, 以不断地让接收器与发送器保持同步. 2本设计主要分为波特率发生器模块、发送模块和接收模块, 采用的芯片为康欣公司的KX _7C5系列芯片, 其具体型号为EP2C5T144, 具备4608个逻辑宏单元、两个锁相环, 约20万门、约12万RAM bi. t 具体实现方法如下:1. 1 波特率控制器波特率控制可有多种方法实现, 常用计数器分频, 或利用片内锁相环控制, 分频较为简单, 但对输入频

5、率有要求, 分频后的频率必须在该波特率下频率偏差允许范围内, 设定较好的输入频率值, 可解决此问题, 这样可较少消耗片内资源, 锁相环技术虽然对输入频率没有过高要求, 但定制内部锁相环, 必然耗费较多的片内资源, 本设计出于对片内资源的考虑, 采用了分频方法实现波特率控制器. 波特率发生器实际是一个频率变换器. 可以根据给定的系统时钟和要求的波特率, 通过内部的分频或倍频, 最终得到适宜双方通信的一个时钟频率. 发送器和接收器以该频率为基准, 进行发送和采样接收.1. 2 接收器由于串行数据帧和接收时钟是异步的, 由逻辑1转为逻辑0可以被视为一个数据帧的起始位. 然而为*收稿日期:2010-1

6、1-26, 女, , , .第7期 魏亚昉 李振华 卢雪萍:基于FPGA 的UART 控制器的实现 67 了避免毛刺影响, 能够得到正确的起始为信号, 必须要求接收到的起始位在波特率采样过程中至少有一半是属于逻辑0才可以认定接收到的是起始位. 由于内部采样时钟是发送和接收时钟频率的16倍, 所以起始位至少有8个连续采样时钟周期的逻辑0被收到, 才认为起始位接收到, 接着数据位和奇偶校验位将每隔16个采样时钟周期被采样一次(即每一个波特率时钟采样一次. 如果起始位的确是16个采样时钟周期, 那么接下来数据在每位中点处被采样, 采得的数据进行移位寄存, 当一帧接收完, 把移位接收寄存器中的内容放入

7、接收缓冲寄存器, 同时产生接收完一帧的标志信号.基于UART 的实现原理和通信协议, 本设计采用图1的状态机完成此模块 .接收器共设有5个工作状态:R START (等待起始位 、R CENTER (求中点 、R WA I T (等待采样 、R SAMPLE (采样 、R STOP(停止位接收.(1 R START 状态:当UART 接收器复位后, 接收状态机将处于这一个状态. 在此状态, 状态机一直在等待RXD 的电平跳转, 从逻辑1变为逻辑0, 即起始位, 这意味着新的一帧UART 数据帧的开始, 一旦起始位被确定, 状态机将被转入R CENTER 状态.(2 R CE NTER 状态:在

8、本状态, 判定起始位是否真实, 通过对采样时钟的个数进行计数(RCNT16为采样时钟个数计数器, 可以认为保持逻辑0超过1/2个位时间的信号一定是起始位.(3 R WA I T 状态:当状态机处于这一状态, 等待计满15个采样时钟周期, 在第16个采样时钟周期是进入R SAM PLE 状态进行数据位的采样检测, 同时也判断是否采集的数据位长度已达到数据帧的长度(FRAM ELE N , 如果到来, 就说明停止位来临了.(4 R位的到来.(5 R STOP 状态:无论停止位是1还是1. 5位, 或是2位, 状态机在R STOP 不具体检测RXD, 只是输出帧接收完毕信号(RECDONE<=

9、 1 , 停止位后状态机转回到R START 状态, 等待下一个帧的起始位.1. 3 发送器发送器在收到发送命令后, 先发送一个宽度为16个采样周期的起始位, 并且将发送缓冲区数据放入发送移位寄存器, 然后每隔16个采样周期移位寄存器移位输出1个数据, 当数据发送完, 根据需要选择发送停止位的长度(常用长度有0、1、2, 停止位的宽度同样是16个采样. 发送器只要每隔16个波特率周期输出1个数据即可, 次序遵循1位起始位, 8位数据位和1位停止位. 在本设计中没有校验位. 该模块也用状态机实现, 状态图如图2 :SAM PLE 状态:即数据位采样检测, 完成后无条件状态机转入R WA I T

10、状态, 等待下次数据绍兴文理学院学报(自然科学 第31卷68发送器也设以下5个工作状态:XSH I FT(移位 、X STOP(停止.(1 X I DLE (空闲 、X START (起始位 、X WA I T (移位等待 、X I DLE 状态:当UART 被复位信号RESETL 复位后, 状态机将立刻进入这一状态. 在这个状态START, 准备下, UART 的发送器一直在等待一个数据帧发送命令, 当数据帧发送命令到来, 状态转入X 发送起始位.(2 X 位. 紧接着状态机转入X WA I T 状态. START 状态:在这个状态下, UART 的发送器一个位时间宽度的逻辑0信号至TXD,

11、 即起始(3 X WA I T 状态:同UART 接收状态机中的R WA I T 状态类似.(4 X SH I FT 状态:当状态机处于这一状态时, 实现待发数据的并串转换. 转换完成立即回到X WA I T 状态.(5 X STOP :停止位发送状态, 当数据帧发送完毕, 状态机转入该状态, 并发送16个采样时钟周期的I DLE 状态, 并等待另一个数据帧的发送命令. 逻辑1信号, 即1位停止位. 状态机送完停止位后回到X2 仿真测试2. 1 Test b ench通常是这样的代码:它对输入产生预定的激励, 然后有选择地观察响应, 并检查该响应是否为我们所期望. 功能验证的核心不仅是这个平台

12、, 更在于对被测对象施加了什么样的激励以及在此激励下被测对象的输出是什么. Testbench 与被测对象的关系如图3 :2. 1. 1 为何要写T est b ench(1 画波形图只能提供极低的功能覆盖率.(2 画波形图无法实现验证自动化.(3 画波形图难以定位错误.(4 画波形图的可重用性和平台移植性极差.(5 通过画波形图的验证速度极慢(特别是基于数据帧长度大的通信类设计, 画波形几乎是不可能的.2. 1. 2 Testbench 的结构一个好的Testbench 结构应该包含两点要求:层次清晰和具备较好的重用性. 这两点要求之间也有很重要联系:只有层次清晰的Testbench 才是可

13、重用的, 重用性也将使Testbench 层次更加清晰 .第7期 魏亚昉 李振华 卢雪萍:基于FPGA 的UART 控制器的实现 69图4是一个不可重用的Testbench 结构, 它将所有的处理放在一个模块中, 当进行新的设计时必然不可重用.图5是一个可重用的Testbench 结构, 它将不同处理放在不同的模块, 然后再层次化封装, 当下一次进行类似的设计时, 必然有一部分模块是可以直接调用, 或者只需修改相应参数.2. 1. 3 本设计的T est b ench 结构本设计采用上述可重用的T estbench 结构进行了Test b ench 的设计, 其中Testcase 中主要进行了

14、自发自收的测试, 定义了如下的测试序列, 发送数据FF-00-A5.2. 2 模块仿真测试2. 2. 1 波特率控制模块波特率模块主要是一个计数分频器, 输入为高速时钟和波特率因子(即分频系数, 即可实现任意整数分频, 图6是分频系数为3时的波形仿真图 .2. 2. 2 发送器模块和接收模块由于可使用自发自收进行测试, 所以发送和接收模块的测试可以同时进行, 设计中的测试数据为A5循环发送. 图7是测试数据的仿真波形图 .分析上图得出结论:标尺黄线开始, RXD 开始重新接收一帧数据, 同时通过TXD 把tbuf 中的数据由低位到高位移位发送. state 为各过程的状态标志, 发送接收状态显

15、示都为011. t b itcnt 和r b itcnt 分别是发送数据和接收数据计数位, 且发送跟接收数据都准确无误.2. 3 和PC 机通讯的测试仿真验证功能之后, 将综合后的电路写入FPGA 芯片中, 通过一片RS232转接与PC 机进行串行通信, 上位机使用的是串口调试助手软件, 下位机的结果采用LED 显示. 设置好波特率9600后, PC 机发送的数据可下位机接收, 并由LED 显示(字符串除外, 并可以通过转发回PC 机在串口小助手上显示, 所测数据正确无误.绍兴文理学院学报(自然科学 第31卷703 结束语本文完成了UART 控制器的设计, 实现了异步串行通讯的基本功能, 并通

16、过简单的串口通讯进行了功能调试. 实际运用中可根据外设和处理器的不同需求, 在其基本功能基础上进行波特率调整、不同帧格式的设置等升级改进, 运用于不同的数字系统.参考文献:1 潘松, 黄继业. EDA 技术与VHDL M . 北京:清华大学出版社, 2005:201-225.2 刘乐善. 微型计算机接口技术及应用 M . 武汉:华中科技大学出版社, 2008:207-215.Desi gn and Realization of the UART Based on FPGAW e iY afang L i Zhenhua Lu X uepi ng(Zhejiang V ocational&

17、;Technical College o f Post and Teleco mm un icati o ns , Shaox i n g , Zhe ji a ng , 312016 Abst ract :This paper presents the basic theory o fUART, and puts for w ar d a UART transceiver i m ple m entati o n m ethod based on progra mm able logic dev ices EP2C5T114. E ach m odu l e is desi g ned by VH DL , si m ulated t h rough M ode lsi

温馨提示

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

评论

0/150

提交评论