我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 776|回复: 0

FPGA在多串口读数系统中的应用 - 通信/网络 - 电子工程师俱

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:31:29 | 显示全部楼层 |阅读模式
<strong>0 引言</strong>

本文所设计的读数系统主要为解决上传数据慢的问题,具体的背景如下:目前已设计一小型弹载记录器,采用单片机+FLASH的结构,FLASH容量为lGB,为了最大限度地减少记录器的外部接口数据线的数量,采用异步串行通信方式上报数据。单片机选用了Silabs公司混成集成芯片C8051F060,该单片机UARTl最高波特率可以达到系统时钟的一半,也即如果晶体振荡器采用 14MHz,那么波特率理论值可以达到7Mbps,有效数据传输速率可达700kbps,但由于记录器需要从FLASH读取数据,而每读出一页的数据需要等待约20us的时间,所以上传数据为非连续性的传输,经实际测试发现,波特率为7Mbps时实际的数据上传速率仅为300kbps左右,如果上传1GB 的数据就需要至少56分钟的时间,如果需要上传数套记录器数据的时候,就显得尤为浪费时间。为了解决这个问题,本文设计了一个读数系统,该系统通过增加每次上传的记录器的数量来提高读数系统的资源利用率,以5套记录器同时上传来计算,56分钟内可以上传5GB的数据,平均每套的上传时问仅为12分钟,提高了数据上传效率。系统框图见图1.


<ignore_js_op>





2010-3-23 14:59:10 上传
<strong>下载附件</strong> (25.54 KB)




</ignore_js_op>


其中USB接口控制器选用CYPRESS公司的CY7C68013A,该芯片是Cypress公司推出的新一代高速EZ—USB FX2系列芯片;单片机部分选用C8051F060芯片;主控FPGA选用XILINX公司SPARTAN—IIE系列芯片XC2S100E一 PQ208.

FPGA作为主控制中心,主要负责接收68013发送的状态指令,并将状态下发到各单片机及相应的外部设备,五个单片机分别负责通过串口接收外部设备的串行数据,并将其并行写入FPGA,68013除了从FPGA中读取数据外,还需要将计算机下发的控制命令发送到FPGA.

<strong>1 FPGA内部FIFO设计</strong>

由于本项目所用FPGA芯片内部RAM共有40Kbit,所以可构成1KB×5的 FIF0结构,即可构成5个深度分别为1KB的FIFO,分别作为5个单片机上传时的数据缓冲,具体逻辑框图见图2.CPU模块主要负责五个FIF0之间的切换,5个FIFO采用相同的结构,限于篇幅,本文不详细介绍FIF0的具体设计,只给出5个FIF0与CPU模块之间的逻辑关系。5个FIFO分别给出两个状态信号,一个是OK,该信号表示FIFO已经准备好数据,可以进行读取操作,另一个信号为Req,该信号通知单片机该FIFO已经几乎空,可以向该FIF0写入数据,其中几个关键信号的具体用途如下表l所示:

<strong>2 FIFO切换</strong>

GPIF接口是EZ—USB FX2系列单片机提供的一个可由用户编程的接口,具有高速、灵活等特点,可方便地实现与各种外设之间的无缝连接。GPIF的核心是一个可编程的状态机,通过对其进行编程可以实现多种协议,功能非常强大。

本设计中68013与FPGA之间的接口即采用GPIF模式,基本的运行模式为:68013每启动一次GPIF读波形,便从FPGA中读取512个字节的数据,然后FPGA自动切换FIFO号。在程序设计时可以在GPIF中断函数中设置一个标志,这样CPU模块在检测到这个标志后表明对该FIF0的操作已完成,应该切换FIF0了,该标志信号使用PA4引脚来发出,具体说明见见表 1.


<ignore_js_op>





2010-3-23 14:59:11 上传
<strong>下载附件</strong> (34.25 KB)




</ignore_js_op>



<ignore_js_op>





2010-3-23 14:59:11 上传
<strong>下载附件</strong> (28.95 KB)




</ignore_js_op>


5个FIFO的具体操作如下:系统上电后先复位各FIFO,并使各FIFO处于关闭状态,然后判断是否为读状态,如果不是则循环判断,如果为读状态,则使能各FIFO;由于默认操作在FIF0l,所以判断FIF01的0K信号是有效,如果有效,则判断PA4引脚是否为‘0’,如果为 ‘0’则置RDYO为1,68013判断到此信号后启动一次GPIF波形读取512字节的数据,并在读完后将PA4置1,表示数据已经读取完毕,CPU模块在判断到PA4为1后将RDYO置O,然后将操作对象切换至FIF02,接着判断FIF02的OK信号是否有效,具体操作同FIF01,具体流程见图 3.


<ignore_js_op>





2010-3-23 14:59:10 上传
<strong>下载附件</strong> (60.17 KB)




</ignore_js_op>


注意:为了保证数据读取时的畅通无阻,在判断四个FIF0的OK信号时,应该采取轮循的判断方式,即当FIF01 的OK信号无效时应该转去判断FIF02的0K信号,而不能死等FIF01的0K信号有效,这样可以有效防止因某个单片机或某个外部设备的故障而出现的读数停滞现象。

<strong>3 结束语</strong>

经过长时间的工作表明,该读数系统能稳定地进行数据的上传,满足实际需要。

<strong>参考文献</strong>

1. 潘琢金 C8051F060/1 /2/3/4/5/6/7混合信号ISP FLASH 微控制器数据手册 2004
2. 孙航 Xilinx 可编程逻辑器件的高级应用与设计技巧 2004
3. 李亭.李华 GPIF与 FIFO接口设计 [期刊论文] -电测与仪表2006(6)
4. 张维旭.贺占庄 基于FPGA的异步FIFO设计 [期刊论文] -计算机技术与发展2006(7)
5. 钱峰 EZ-USB FX2单片机原理、编程、及应用 2006

作者:张永乐任勇峰李圣昆 中北大学,电子测试技术国家重点实验室
来源:电子技术2009 (2)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表