首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» UART在FPGA上的设计与实现
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
UART在FPGA上的设计与实现
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-7-25 23:00
|
只看该作者
UART在FPGA上的设计与实现
处理器
,
波特率
,
在线
,
程序
,
工程
摘 要:在基于FPGA芯片的工程实践中,经常需要FPGA与上位机或其他处理器进行通信,为此设计了用于短距离通信的UART接口模块。该模块的程序采用VHDL语言编写,模块的核心发送和接收子模块均采用有限状态机设计,详述了各子模块的设计思路和方法,给出了它们的仿真时序图。综合实现后,将程序下载到FPGA芯片中,运行正确无误。又经长时间发送和接收测试,运行稳定可靠。相对参数固定的设计,该UART的波特率、数据位宽、停止位宽、校验位使能及校验模式选择均可以在线设置,为FPGA与其他设备的通信提供了一种可靠途径,具备较强的实用价值。
0 引 言
通用异步收发器(universal asynchronous receivertransmitter,UART)尽管自20世纪70年代就已出现,但因其简单可靠,目前仍是一种使用广泛的串行通信接口。各种微处理器,不论是单片机,还是DSP、ARM,UART都是基本外围模块。许多场合如系统监控、数据采集都要用到串口通信[1-3],甚至要用多个串口,如开发串口服务器[4-6]。此时通常采用专用芯片,如16C554、VK3224等扩展串口。专用芯片使用简单,然而缺乏灵活性,同时专用芯片集成的串口数量也有限,有时需使用多个芯片才能满足要求[5],增加了系统的复杂度,降低了可靠性。
FPGA(field programmable gate array)作为一种可编程芯片,其资源丰富、工作效率高,常用于高速数据采集、算法的高速并行执行[7-8]。用户可通过硬件描述语言或电路原理图,设计出个性化的高性能电路模块,具有设计灵活,升级方便的优点。
在基于FPGA的工程实践中,常需要其与串口设备通信,但在Xilinx现有的开发环境ISE中没有相关的IP核。目前也有使用FPGA设计UART的例子[9-13]后,但有的参数固定,缺乏通用性。本文设计和实现了参数可在线配置的UART接口模块,为FPGA与其他设备通信提供了一种可靠途径。
1 UART串行通信简介
标准的RS232接口常采用DB-9连接器,其有2根数据线,6根控制线,1根信号地线。本文设计的UART符合RS232串行通信标准,但在实际中,RS232标准中诸多控制信号使用较少,故文中的UART只使用其中的3根信号线,即TXD、RXD和信号地,这也是很多微处理器UART模块所采用的信号线。
UART属于异步通信接口,通信双方需约定好波特率。国际上规定了一系列标准的波特率,如9 600b/s、19 200b/s、115 200b/s等。UART每一数据帧,依次由起始位(1位)、数据位(5~8位),奇偶校验位(可选的1位)以及停止位(1~2位)组成。其中数据位部分是从最低位先开始传送的;奇偶校验位是对1帧数据中的数据部分和校验位计算,使‘1’的个数满足奇数个或偶数个。当UART空闲时,收发引脚RXD与TXD均是高电平。一旦需要发送数据,则首先向TXD引脚输出低电平作为起始位,表示1帧数据的开始。而在接收数据时,检测到起始位将启动一次数据接收流程。
2 系统设计
本文设计的UART通信接口主要由波特率产生模块、发送模块、接收模块以及微处理器接口模块组成。各模块使用VHDL语言来表述,模块之间的信号连接是通过顶层文件中的元件例化语句实现。
整个设计的结构框图如图1所示。设计和实现的UART通信模块主要功能如下:
1)实现了串行数据的发送和接收。
2)停止位可设置(1位或2位)。
3)可设置是否启用奇偶校验功能,以及校验模式设置即选择奇校验还是偶校验。
4)波特率可配置。标准的波特率系列中从9 600~115 200b/s均可设置,同时还支持自定义的波特率。
5)设计了微处理器接口,通过接口可访问UART内部寄存器,配置UART参数,读写收发数据。
该UART 通信接口包含2 个数据缓冲寄存器(TxHolder和RxHolder)、3 个控制寄存器(UartCon、UartBaud及UartIntEn)、3 个状态寄存器(UartState、UartError、UartIntPend)。考虑到需要在线更新UART参数,设计UartCon与UartBaud为双缓冲寄存器。第一级缓冲用于存储外部处理器写入的配置数据,第二级缓冲即用于设置UART内核。当UART内核空闲时,才将第二级缓冲内容更新为第一级缓冲内容,防止破坏收发中的数据。
3 UART各模块的设计
下面详细介绍UART各模块的设计思路和方法,同时给出了主要模块的行为仿真时序图。
3.1 波特率发生模块
波特率发生模块的作用是产生UART工作所需的时钟信号,其频率定为实际波特率的16倍。波特率发生模块本质是1个可预置初值的计数器,每当计数达到预置值时输出高电平,其余值输出低电平。
3.2 发送模块
发送模块按照用户设置,将TxHolder中的并行数据串行发送出去,其核心为1个有限状态机,其状态转换如图2所示。
1)Idle状态
当系统上电复位之后,发送状态机即进入此状态。若不向发送缓冲器写入数据,那么TxDataValid为低电平,表示发送缓冲器空,状态机始终在此状态循环等待,TXD引脚输出高电平。
2)Start状态
一旦向发送缓冲器TxHolder 中写入数据,TxDataValid即变为高电平。状态机由Idle状态切换到Start状态,TXD输出低电平,输出起始位。
3)Shift状态
1位波特时间过后,状态机无条件的转换到Shift状态,即使能发送移位寄存器,开始将并行数据逐位右移,实现并串转换并输出到TXD。当输出的数据个数达到Databit设定的数据位宽时,便转换到Parity或者Stop_1bt状态,否则仍转换到该状态。
4)Parity状态
若数据位部分发送完毕,且奇偶校验使能位ParityEn=‘1’时,则转换到该状态。该状态下,根据已发送的数据和选择的校验模式,发送校验位。
5)Stop_1bit状态
无论停止位为1位还是2位,都先转换到Stop_1bit状态,先输出1位停止位。由该状态转换下一状态时,次态会有多种情况。若设置了stopbit为‘1’即选择2位停止位时,次态为stop_2bit;若stopbit为‘0’且发送缓冲器为空时,次态即转换到idle状态,否则转换到start状态开始新一轮的数据发送。
6)Stop_2bit状态
若选择2位停止位时,才会进入此状态。持续1个波特时间后,根据TxDataValid状态,进入Idle状态待命,或进入Start状态开始新1轮的数据发送。
发送模块的行为仿真时序图如图3所示。其UART参数设置为偶校验、8位数据位和1位停止位。txclk为发送采样时钟信号,在该信号的上升沿,发送状态机状态翻转,同时数据被送到TxOut(TXD)引脚。图中TxOut输出的数据为“00100110011”,去掉起始位、校验位和停止位后即为待发送的数据0x32。由仿真所得发送模块的时序图可知,该模块各信号仿真结果正确无误。
3.3 接收模块
接收模块主要功能是将RXD引脚接收到的串行数据按照配置的通信参数,提取出数据部分,存入接受缓冲器,并设置相关状态寄存器。其核心是1个接收状态机,状态转换如图4所示。
1)Idle状态
复位之后,接收状态机便进入此状态等待。一旦检测到RXD为低电平,即一帧数据的起始位,状态机立即转换到Start状态,否则开始数据接收标志StartBitFlag为‘0’,状态机始终停留在该状态。正确捕获到1帧数据的起始位非常重要,它起到同步接收采样时钟的作用,是正确接收1帧数据的关键。
2)Start状态
一旦捕获到起始位,便立即转入该状态,启动一帧数据的接收流程。
3)Shift状态
起始位之后,状态机无条件的转换到Shift状态,即开始接收数据部分。接收到的每1位数据将逐位左移,实现串并转换。当接收到的数据个数达到Databit设定的数据位宽时,即转换到Parity或者Stop_1bt状态。
4)Parity状态
当完成数据位部分的接收且奇偶校验使能位ParityEn=‘1’时,则转入该状态。根据已接收的数据和选择的校验模式,UART接收模块将检查校验结果,设置相关寄存器。
5)Stop_1bit状态
在该状态下,检查RXD信号是否为高电平,否则设置错误寄存器,以表示发生了帧错误。
6)Stop_2bit状态
只有选择了2位停止位时,才会进入此状态。该状态下,需要更新各状态寄存器。持续1个波特的时间后,转换到Idle状态待命,等待捕捉新的1帧数据的起始位。
接收模块的行为仿真时序图如图5 所示。仍将UART设置为偶校验、8位数据位,1位停止位。图中rxclk为接收采样时钟信号,该时钟同步于每1帧数据的起始位。rxclkd8为rxclk延迟了半个周期的信号,以便在RXD引脚每1位的中间位置采样到稳定的电平。RxIn(RXD)引脚的信号在rxclkd8上升沿被采样。图中RxIn串行输入的数据为“00101101001”,与接收到的数据0x5A 一致,且没有校验错误,接收模块各信号仿真正确无误。
3.4 微处理器接口模块
为方便外部处理器操作,UART模块提供了专门的微处理器接口信号,包括CS、WR、CLK、ADDR 和DATA。CS为UART模块的片选信号,所有操作只有在CS为低电平才能有效,否则被忽略。WR为读写控制信号,当WR为高电平时,从UART内部寄存器读取数据,否则写数据到其寄存器。WR同时还控制双向接口DATA 的方向。当WR为高时,DATA 被设置为输出,UART内部数据被输出到DATA 接口;而WR为低时,DATA 被设置为输入,外部处理器可把数据输出到DATA接口。ADDR为地址线,用来寻址UART内部寄存器。CLK为读写时钟信号,所有的读写的操作均是在CLK的上升沿完成,该模块的仿真波形如图6所示。
4 验证测试
在Xilinx公司的FPGA XC3S500E上综合、实现后,所设计的Uart通信接口模块实际只耗用了128个寄存器和134个4输入查找表,占其可用资源比例均不到1%。将程序下载到芯片中经实际运行,数据收发正确无误,实际运行结果如图7所示。
为进一步测试串口模块长期运行的稳定性与可靠性,进行了如下实验:使用串口调试软件,定时将测试数据发送给UART,再用单片机通过UART的微处理器接口读收到的数据,然后再写回UART的发送缓冲器,如此可自动完成所设计UART模块收发功能的测试。测试结果如表1所示。可以看出,无论波特率低至9 600bps还是高达115 200bps,经大量数据收发测试,均无出现发送、接收错误,也未出现帧错误以及奇偶校验错误,表明所设计的串口通信模块长时间运行时稳定可靠。
5 结 论
本文基于FPGA 设计和实现了通信参数可在线配置的异步串行通信接口模块,将程序下载到芯片实际运行,结果表明该接口模块设计正确,运行稳定可靠,为FPGA 与其他设备的通信提供了一种可靠途径,具有较强的实用价值。同时本设计可作为FPGA 开发多串口设备的1个基本模块,通过复制基本模块,可在1片FPGA 芯片上扩展出多个串口,而数量仅与FPGA 可用资源有关,满足多串口场合的需要,开发出基于FPGA 的多串口设备,替代采用专用串口芯片的传统设计方案,降低多串口系统的复杂度,提高可靠性。
作者:俞 庆 姜文刚 来源:电子测量技术第35卷第11期
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
嵌入式技术
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议