您的位置 首页 培训

根据XC3S400PQ208 FPGA芯片完成异步FIFO模块的规划

基于XC3S400PQ208 FPGA芯片实现异步FIFO模块的设计-随着数字电子系统设计规模的扩大,一些实际应用系统中往往含有多个时钟,数据不可避免地要在不同的时钟域之间传递。如何在异步时钟之间传输数据,是数据传输中一个至关重要的问题,而采用FIFO正是解决这一问题的有效方法。异步FIFO是一种在电子系统中得到广泛应用的器件,多数情况下它都是以一个独立芯片的方式在系统中应用。本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。这种异步FIFO比外部 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所示。

依据XC3S400PQ208 FPGA芯片完结异步FIFO模块的规划

双端口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和空/满标志位的判别源程序如下:

4 体系仿真

假如体系的读时钟频率大于写时钟频率,就有或许呈现读空的状况;假如体系的写时钟频率大于读时钟频率,就或许呈现写满的状况。在实践体系中,一般都设置写时钟频率大于读时钟频率,故本文只考虑后一种状况。

本体系选用QuartusIl8.1对体系进行仿真,因为体系深度较大,所以设定仿真时刻为100 μs。体系刚上电时,双端口RAM中暂时没有数据,此刻体系处于读空状况,empty变为高电平,full坚持低电平,如图3所示。跟着RAM中数据的不断写入,体系进入写满状况,此刻full变为高电平,而empty变为低电平,如图4所示。

结 语

本文依据异步FIFO规划的难点和关键,提出了详细的处理方案。在空/满标志位发生条件的判别上提出了“检测+计数器”的新思路,使体系规划便利有用,并选用格雷码办法下降了亚稳态呈现的概率。经过验证,这种办法在有用判别空/满标志位方面有很大的优势。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/96268.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部