0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在ASIC中采用VHDL语言实现异步FIFO的设计

电子设计 来源:郭婷 作者:电子设计 2019-06-11 08:00 次阅读

1 、引言

现代 IC(Integrated Circuit)设计的主导思想之一就是设计同步化,即对所有时钟控制器件(如触发器、RAM等)都采用同一个时钟来控制。但由于现代IC芯片的规模越来越大,包含极其丰富的触发器,不同电路的时钟驱动源存在频率和相位的差异,在实际的设计中实现完全同步化的设计非常困难,很多情况下不可避免地要完成数据在不同时钟域间的传递(如高速模块和低速模块之间的数据交换)。这时,亚稳态问题是异步数据传输过程面临的主要问题,如何避免亚稳态的产生,保持系统的稳定,顺利完成数据的传输就成为一个重要的问题,这也是异步电路设计中最为棘手的问题。异步FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。

2、 异步FIFO介绍

异步FIFO广泛应用于计算机网络工业中进行异步数据传送,这里的异步是指发送用一种速率而接收用另一速率,因此异步FIFO有两个不同的时钟,一个为读同步时钟,一个为写同步时钟。

当数据从一个时钟驱动的模块进入另一个时钟驱动的模块时,问题就有可能出现了。例如当写时钟比读时钟快时,未读走的数据有可能被新数据覆盖,因而导至数据丢失。为此,必须增加一些控制信号和状态信号,控制信号如push、pop,状态信号如empty,almost-empty,full,almost-full等。

典型的异步FIFO由异步双端口RAM和控制逻辑构成,后者包含读指针和写指针,如图1。当FIFO中有数据而非空时,POP信号用于控制数据的读出,所读数据来自读指针所指的dualportRAM中的存储单元,并且读指针加1。当读指针赶上写指针时,FIFO为空并且用empty信号来指示这种情况。当FIFO中有空间而非满时,PUSH信号用于控制数据的写入,所写数据写入写指针所指的双端口RAM中的存储单元,并且写指针加1。当写指针赶上读指针时,FIFO为满并且用full信号来指示这种情况。

在ASIC中采用VHDL语言实现异步FIFO的设计

3、 亚稳态问题

数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。

当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败。亚稳态是在两时钟敏感沿靠得很近、第二级时钟敏感沿到来时其输入数据不稳时发生,可将其视为仅仅是第二级触发器输入信号不稳定所导致的结果。只要使输入信号稳定,就能解决亚稳态问题。不同时钟域间数据传递的最重要问题就是亚稳态问题。下面从触发器的物理特性方面对亚稳态进行描述。

触发器进入亚稳态的时间可以用参数MTBF(mean time between failures)来描述,MTBF即触发器采样失败的时间间隔,其计算公式为:

在ASIC中采用VHDL语言实现异步FIFO的设计

由上面的推导可知,一个信号(a_clk)在过渡到另一个时钟域(b_clk)时,如果仅仅用一个触发器将其锁存,那么用b_clk进行采样的结果将可能是亚稳态。这也是信号在跨时钟域时应该注意的问题。

4 、亚稳态问题的解决

虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。

a、对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码如表一,其中4位格雷码的最高位可以用来标示对那个ram进行操作,而实际的操作地址由4位格雷码的最高两位异或再加上后两位得到。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。

在ASIC中采用VHDL语言实现异步FIFO的设计

b、采用触发器来同步异步输入信号,如图2中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图2所示,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。另外,虽然采用两级时钟同步可以在一定程度消除亚问题,但如果在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对信号进行采样。所以,在使用两级时钟同步的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确的对其进行采样。

在ASIC中采用VHDL语言实现异步FIFO的设计

5 、异步FIFO的VHDL实现

VHDL是硬件描述语言的一种,用于数字电子系统设计。设计者可用它进行各种级别的逻辑设计,可用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言。目前VHDL语言已经得到多种EDA工具的支持,并且已经成为IEEE标准,因此利用VHDL语言进行电路设计可以节约开发成本和周期。下面以视频转换系统中的异步FIFO为例,用VHDL实现如下(假设存储器的深度为128个像素,即256个字节):

读地址产生模块:

在ASIC中采用VHDL语言实现异步FIFO的设计

在ASIC中采用VHDL语言实现异步FIFO的设计

6 、结论

本文讨论了在ASIC设计中数据在不同时钟之间传递数据所产生的亚稳态问题,并提出了一种新的异步FIFO的设计方法,并用VHDL语言进行描述,利用Altera公司的Cyclone系列的EP1C6进行硬件实现,该电路软件仿真和硬件实现已经通过验证,并应用到各种电路中。实践证明它可以解决由于异步产生的错误,同时增加了应用的灵活性。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15020

    浏览量

    170336
  • asic
    +关注

    关注

    34

    文章

    1125

    浏览量

    119168
  • 触发器
    +关注

    关注

    14

    文章

    1668

    浏览量

    60305
收藏 人收藏

    评论

    相关推荐

    用FPGA芯片实现高速异步FIFO的一种方法

    现代集成电路芯片中,随着设计规模的不断扩大。一个系统中往往含有数个时钟。多时钟带来的一个问题就是,如何设计异步时钟之间的接口电路。异步 FIFO(First In First Out)是解决这个问题的一种简便、快捷的解决方案。#
    发表于 05-28 10:56 3408次阅读

    vhdl语言实例大全下载

    vhdl语言实例大全下载 
    发表于 05-20 09:36

    基于FPGA的图像边缘检测系统设计,用VHDL语言实现该怎么做?

    不知道有没有大神做过:基于FPGA的图像边缘检测系统设计,用VHDL语言实现
    发表于 05-10 00:22

    如何用VHDL语言实现帧同步的设计?

    帧同步是什么工作原理?如何用VHDL语言实现帧同步的设计?
    发表于 04-08 06:33

    FPGA技术如何用VHDL语言实现8位RISC微处理器?

    设计RISC微处理器需要遵循哪些原则?基于FPGA技术用VHDL语言实现的8位RISC微处理器
    发表于 04-13 06:11

    请问一下异步FIFOVHDL实现方法

    本文讨论了ASIC设计数据不同时钟之间传递数据所产生的亚稳态问题,并提出了一种新的异步FIFO
    发表于 04-29 06:54

    如何利用VHDL语言实现FPGA与单片机的串口异步通信电路?

    本文介绍利用VHDL语言实现 FPGA与单片机的串口异步通信电路。
    发表于 04-29 06:34

    如何利用FPGA和VHDL语言实现PCM码的解调?

    利用现场可编程门阵列(FPGA)和VHDL 语言实现了PCM码的解调,这样不改变硬件电路的情况下,能够适应PCM码传输速率和帧结构变化,从而正确解调数据。
    发表于 05-07 06:58

    高速异步FIFO的设计与实现

    本文主要研究了用FPGA 芯片内部的EBRSRAM 来实现异步FIFO 设计方案,重点阐述了异步FIFO 的标志信号——空/满状态的设计思路
    发表于 01-13 17:11 40次下载

    异步FIFOVHDL设计

    给出了一个利用格雷码对地址编码的羿步FIFO实现方法,并给出了VHDL 程序,以解决异步读写时钟引起的问题。
    发表于 07-16 15:15 26次下载

    VHDL语言实现3分频电路

    VHDL语言实现3分频电路 标签/分类: 众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相
    发表于 08-21 15:28 5532次阅读

    VHDL语言实现3分频电路(占空比为2比1)

    VHDL语言实现3分频电路(占空比为2比1) 分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁
    发表于 06-22 07:46 7842次阅读

    FM收音机的解码及控制器VHDL语言实现

    Xilinx FPGA工程例子源码:FM收音机的解码及控制器VHDL语言实现
    发表于 06-07 14:13 11次下载

    使用Quartus和VHDL语言实现的LPC时序的工程文件

    本文档的主要内容详细介绍的是使用Quartus和VHDL语言实现的LPC时序的工程文件免费下载。
    发表于 09-18 16:49 20次下载
    使用Quartus和<b class='flag-5'>VHDL</b><b class='flag-5'>语言实现</b>的LPC时序的工程文件

    基于VHDL语言实现远程防盗报警设计

    电子发烧友网站提供《基于VHDL语言实现远程防盗报警设计.pdf》资料免费下载
    发表于 11-08 14:33 0次下载
    基于<b class='flag-5'>VHDL</b><b class='flag-5'>语言实现</b>远程防盗报警设计