首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» FPGA异步FIFO设计中的问题与解决办法
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
FPGA异步FIFO设计中的问题与解决办法
发短消息
加为好友
yuchengze
当前离线
UID
1062083
帖子
5837
精华
0
积分
2921
阅读权限
70
在线时间
222 小时
注册时间
2016-6-30
最后登录
2018-9-9
金牌会员
UID
1062083
性别
男
1
#
打印
字体大小:
t
T
yuchengze
发表于 2016-8-21 17:20
|
只看该作者
FPGA异步FIFO设计中的问题与解决办法
工作原理
,
实际应用
,
稳定性
,
电子
,
规模
随着数字电子系统设计规模的扩大,一些实际应用系统中往往含有多个时钟,数据不可避免地要在不同的时钟域之间传递。如何在异步时钟之间传输数据,是数据传输中一个至关重要的问题,而采用FIFO正是解决这一问题的有效方法。异步FIFO是一种在电子系统中得到广泛应用的器件,多数情况下它都是以一个独立芯片的方式在系统中应用。本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性。 1 FIFO的基本结构和工作原理
FIFO(First In First Out)是一种采用环形存储结构的先进先出存储器。其使用一个双端口存储器存放数据,数据发送方在一端写入数据,接收方在另一端读出数据,能够协调好两个时钟域的工作,满足高时钟频率的要求。FIFO在FPGA设计中主要用来缓冲数据和隔离时钟或相位差异。访问FIFO时不需要地址线,只需要数据线和读写控制信号线,且数据地址由内部读写指针自动加1完成,因此利用FIFO实现数据的缓存具有接口简单、读写方便的优点。
根据FIFO的工作时钟,可将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟,在时钟沿来临时同时进行读写操作;异步FIFO是指读写时钟不是同一个时钟,而是相互独立的。实际上,工作在同一时钟的FIFO很少用到,多数都是读写时钟独立的异步FIFO。本文设计的异步FIFO位宽为8,深度(即FIFO可以存储8位数据的个数)为1 024。异步FIFO的结构如图1所示。
双端口RAM存储器具有独立的读写端口。如果用一个单端口RAM存储器实现异步FIFO,还应该包含一个仲裁器来保证同一时刻只能有一种操作(读或写操作)。本文选择的双端口RAM并不一定是真正的双端口,只要有独立的读写端口即可。读写控制逻辑由加法计数器构成,实现读写地址的自动加1功能。空/满标志位的产生逻辑给系统提供空(empty)和满(full)信号。
2 异步FIFO设计中的问题与解决办法
2.1 亚稳态问题
在含有触发器的电路中往往会出现亚稳态问题。亚稳态会使异步FIFO的读写地址发生错误,产生误读或者误写。为此异步FIFO设计中亚稳态问题也是一个比较重要的问题。亚稳态不可能完全消除,只能使其出现的概率降到最低。主要有2种方法来降低亚稳态出现的概率:
①采用触发器冗余方式。即采用多个触发器级联的方式,使本来出现概率为P的亚稳态,其出现概率降低到P2,但这种方式会导致延时增加。
②使用格雷码。格雷码的相临码元之间只有一位发生变化,这就大大地降低了亚稳态出现的概率。本文采用格雷码方式。
2.2 空/满标志位的判断
为保证数据的正确写入和读出,不发生写满和读空操作,怎样判断空/满标志位的产生就成为异步FIFO设计的核心问题。异步FIFO是环形存储的,当读写地址指针相等时,意味着空标志位或者满标志位的产生。但是却不能确定是写满还是读空状态。为解决这一问题,本文将转换为格雷码后的读写地址指针分别经过检测和计数器。每当读写指针遍历一圈(当读写地址指针指向双端口RAM的最后一个地址)时,写计数i加1,读计数j加1。这样写满状态和读空状态的判断就需要同时满足两个条件。下面分别给出写满和读空状态的判断。
①写满状态的判别:当读地址指针等于写地址指针,并且i>j时,产生满标志。
②读空状态的判别:当写地址指针等于读地址指针,并且i=j时,产生空标志。
由于空/满标志位产生的结构图对称,故本文只给出满标志位产生的结构图,如图2所示。其中,主数i为写地址指针遍历的圈数,计数j为读地址指针遍历的圈数。
从图2中可看出,地址指针转换为格雷码后,经过检测和计数环节,将读写地址和读写指针遍历的圈数分别送入比较器进行比较,从而准确地产生满标志位。
3 FPGA内部软异步FIFO设计
本设计中FPGA采用的是Xilinx Spartan3系列中的XC3S400PQ208。内部有56 Kb的分布式RAM和288 Kb的RAM,以及4个DCM(数字时钟管理器)单元,为系统提供独立的读写时钟频率。可以利用这些资源在FPGA内部实现异步FIFO模块。本文采用 VHDL语言对双端口RAM的读写操作进行编程,实现FPGA内部软FIFO的设计。部分读写双端口RAM和空/满标志位的判断源程序如下:
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
嵌入式技术
MCU 单片机技术
数字电路
测试测量
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议