简化UART功能的FPGA实现
上一篇 /
下一篇 2006-08-20 01:10:58 / 天气: 晴朗
/ 心情: 高兴
/ 个人分类:Backup
摘 要:提出了一种ARM+FPGA结构系统中简化UART功能的FPGA实现方法,使用了状态机来描述接收器和发送器的基本功能,最后分别给出了一个串行数据帧长度的接收和发送的仿真结果。EDA中国门户网站3m6q$sSp+fv|/Q
关键词:FPGA;UART;状态机;ARM
1 引 言EDA中国门户网站
X#Km6c1B7T1l
在ARM+FPGA系统结构中,实现基于ARM的嵌入式处理器和FPGA之间通信最简单的方法就是通过异步串行接口EIARS232C。考虑选用集成有UART(Universal Asynchronous Receiver / Transmitter )控制器的嵌入式处理器(例如,EP7312),那么嵌入式处理器一侧就具有了利用异步串行接口收、发通信的能力。然而,FPGA内部并不拥有CPU控制单元,无法处理由UART控制器产生的中断,所以FPGA一侧不能利用现成的UART控制器构成异步串行接口,必须将UART控制器的功能集成到FPGA内部。
5poj3j6Zu{9e41397 同一个系统中的ARM与FPGA之间属于短距离通信连接,他们之间的异步串行通信并不需要完整的UART功能,那些RS232标准中的联络控制信号线可以省略,仅仅保留收、发数据线和地线,这样给UART功能的FPGA编程实现带来了极大的省略。嵌入式处理器EP7312带有2个支持异步串行通信RS232的16550类型的UART,UART1不仅有TX,RX,而且支持Modem控制信号,UART2只有标准的TX,RX以及地信号,刚好能够利用UART2与FPGA实现通 信。图1是简化的异步串行通信连接示意图。

2 简化UART功能的FPGA实现
wc#n:^*x
比较而言,UART发送器部分发送串行数据过程的实现相对容易,只要对发送出去的数据电平做持续时间的定时即可。下面先对UART接收器部分的FPGA实现方法做详细的描述。
f?;wH.dF"@
P41397 2.1 UART接收器的FPGA实现EDA中国门户网站M n*z7y9}7a;Fv
根据以上的叙述,由于串行数据帧与接收时钟是异步的,所以接收器功能实现中的关键是接收器时钟与每个接收字符的同步。一个有效的方法是接收器采用高速率时钟对串行数据进行采样,通常采样频率是位时钟频率的整数倍。理论上倍数越高接收数据各位的分辨率越高,实际中,一般最大选择16倍。EDA中国门户网站j'~ I2l$l3vG*^9|
接收器应该尽可能地在靠近位周期的中心处对每位采样。如果接收器能很好地预测起始位的开始,那么他可在起始位的下降沿到来之后,等待半个位周期再采样数据位。此后,接收器每等待一个位周期采样一个数据位,直至收到最后一位为止。倘若接收时钟的频率足够接近发送时钟,使得最后位能在离该位的精确中心位置半个周期内对他采样,以上方案就能正确地工作。这意味着接收时钟相对于发送时钟在10~11个时钟周期内,其增加和减少应小于半个位的时间间隔。因此,要求收发双方2个时钟的误差容限在5%以内。EDA中国门户网站G#{ f.z1PW+{P
本文中接收器的实现采取5倍速采样法,也就是接收采样频率是串行数据位频率的5倍。图3是将图2中的起始位和部分数据位放大,又把每个信息位分成5等份,每等份的时间宽度设为Ts。以5倍频对信息位进行采样时,每个信息位都将可能被采样到5次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,每次具体的采样点会在S0阴影区随机变化。检测到起始位低电平后,间隔7×Ts时间,正好是第1位数据位的中间1/5处(图3中D2阴影区)。此后的数据位和停止位的采样间隔都是5×Ts,所有采样点均落在码元的中间1/5处,采样数据最可靠。采样时钟的产生由计数器控制,计数器时钟为位时钟5倍频。

为了避免噪声引起的起始位检测错误,要对起始位采样两次。从空闲状态,第1次采样为低电平后,间隔2个Ts再采样一次,如果仍为低电平,才认定为有效的起始位;如果为高电平,再回到空闲状态等待重新同步。EDA中国门户网站%_:u]1qIno
另外,在采样停止位的时候也可以加入保护机制: 当停止位采样值为高电平时,认为同步和数据正确,装人数据寄存器,否则认为同步或传输错误,此次采样的字符作废,将其舍弃。简化的UART功能框图如图4所示。EP7312所带的UART控制器16550中,FIFO的深度为16 B。实际FPGA实现时根据具体应用的不同,可以用RAM取代FIFO,本文只叙述图4中接收器和发送器的实现方法。

在具体使用硬件描述语言VHDL编程实现时,接收器5倍速采样法的关键部分使用了一个状态机,状态转换图如图5所示。

%u6oi8rH#y41397 2.2 UART发送器的FPGA实现
*S7S/y#o:tX){'}41397 UART发送器的FPGA实现相对于接收器来说简单了很多。没有数据要发送时,发送数据寄存器为空,发送器处于空闲状态;当检测到发送数据寄存器满信号后,发送器即发送起始位,同时8个数据位被并行装入发送移位寄存器,停止位紧接着数据位指示数据帧结束。只有发送数据寄存器为空时,RAM或FIFO中的待发送数据才能被装入。程序中使用计数器保证各位周期定时正确,仍使用一个状态机描述发送过程,图6是发送器状态机状态转换示意图。

3 仿真与结论EDA中国门户网站E5Qp0Oz5T
这里选用ACTEL公司的APA600系列的FPGA芯片,仿真工具使用MENTOR公司的ModelSim。图7是接收器模块的功能仿真时序图,其中只截取了一个接收数据帧的时间长度。从图7中可以看出一个假起始位被正确判断,接收器与接收数据实现同步,串行数据被准确接收。状态机状态:i代表空闲;rx代表起始位确认;s代表数据采样和停止状态确认;g代表数据正确接收。

图8是发送器模块功能仿真时序图,也是只截取了一个发送数据帧长。图8中状态机状态:first代表空闲;second(时间太短,图中未显示相应文字)和third代表发送数据和停止位。

我们已经将上述实现简化UART功能的编程方法应用到了ARM+FPGA结构系统的编/拆和发送/接收串行信息帧模块中,工作稳定,有较高实用价值。
S
w[K0H3R~41397
[1]张明峰.PIC单片机软件异步串行口实现技巧[J].单片机与嵌入式系统应用,2003,(4).
sBf_@{41397[2]Lattice Reference Designs .Universal asy - nchron - ous receiver/ tuansmitter . http://www.latticesemi.com/support/refdesigns/pcitarget.cfm.
)g5L gPr]!Y-A41397[3]邬宽明.单片机外围器件实用手册数据传输接口器件分册[M].北京:北京航空航天大学出版社,1998.
导入论坛
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
BUS