在fpga中基于信元的fifo设计方法实战方法

上传人:子 文档编号:42486443 上传时间:2018-06-02 格式:DOC 页数:2 大小:37KB
返回 下载 相关 举报
在fpga中基于信元的fifo设计方法实战方法_第1页
第1页 / 共2页
在fpga中基于信元的fifo设计方法实战方法_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《在fpga中基于信元的fifo设计方法实战方法》由会员分享,可在线阅读,更多相关《在fpga中基于信元的fifo设计方法实战方法(2页珍藏版)》请在金锄头文库上搜索。

1、1在在 FPGA 中基于信元的中基于信元的 FIFO 设计方法设计方法设计工程师通常在设计工程师通常在 FPGAFPGA 上实现上实现 FIFO(FIFO(先进先出寄存器先进先出寄存器) )的时候,都会使用由芯片提供的时候,都会使用由芯片提供 商所提供的商所提供的 FIFOFIFO。但是,由于其通用性使得其针对性变差,某些情况下会变得不方便或者。但是,由于其通用性使得其针对性变差,某些情况下会变得不方便或者 将增加硬件成本。此时,需要进行自行将增加硬件成本。此时,需要进行自行 FIFOFIFO 设计。本文提供了一种基于信元的设计。本文提供了一种基于信元的 FIFOFIFO 设计设计 方法以供设

2、计者在适当的时候选用。这种方法也适合于不定长包的处理。方法以供设计者在适当的时候选用。这种方法也适合于不定长包的处理。 FIFOFIFO 在数字通讯芯片领域中有两个主要的作用,缓冲数据和隔离时钟。对于在数字通讯芯片领域中有两个主要的作用,缓冲数据和隔离时钟。对于 FIFOFIFO 的的 设计,最关键的问题是如何实现设计,最关键的问题是如何实现 RAMRAM 的读写双方的信息交换。一般情况下,设计者都直接的读写双方的信息交换。一般情况下,设计者都直接 调用厂商为自己的调用厂商为自己的 FPGAFPGA 专门打造的专门打造的 FIFOFIFO 核。基本单元是核。基本单元是 FIFOFIFO 所使用

3、的所使用的 RAMRAM 的一次读写操的一次读写操 作的最小单元,如一个字节,一个字或者是一个双字。所谓操作粒度,即作的最小单元,如一个字节,一个字或者是一个双字。所谓操作粒度,即 FIFOFIFO 的读写双方的读写双方 的信息交换是基于这些基本单元。的信息交换是基于这些基本单元。 ATMATM 应用中的应用中的 FIFOFIFO 设计设计 以以 ATMATM 的设计为例,在的设计为例,在 ATMATM 的相关设计中,设计者则更多希望一个的相关设计中,设计者则更多希望一个 FIFOFIFO 对外给出的信对外给出的信 息是息是“现在现在 FIFOFIFO 中还剩下几个信元中还剩下几个信元” 。要

4、实现这一功能通常有两种方法:。要实现这一功能通常有两种方法: 1.1. 调用厂商提供的以操作粒度为基本单元的通用调用厂商提供的以操作粒度为基本单元的通用 FIFOFIFO,然后在这个,然后在这个 FIFOFIFO 的外面再加的外面再加 上一个上一个“套子套子” 。这个套子里面设计一些计数器,根据计数内容对外提供相应的信息。这个套子里面设计一些计数器,根据计数内容对外提供相应的信息。 2.2. 设计操作粒度为信元的定制设计操作粒度为信元的定制 FIFOFIFO。这样对外直接提供设计者最希望得到的信息,。这样对外直接提供设计者最希望得到的信息, 即即 FIFOFIFO 中还有多少个信元。中还有多少

5、个信元。 设定设定 FIFOFIFO 最多可以存放最多可以存放 4 4 个信元。基本单元为字节,因此个信元。基本单元为字节,因此 RAMRAM 的数据宽度为的数据宽度为 8 8 位,一位,一 个信元的长度为个信元的长度为 5353 字节。字节。 把把 RAMRAM 分成分成 4 4 个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内 的字节地址,这样组合成的字节地址,这样组合成 8 8 位读写地址。读写双方的信息交换是互相通知对方还有多少个位读写地址。读写双方的信息交换是互相通知对方还有多少个 信元在信元在 FIFOFI

6、FO 中。读写双方都拥有自己的记分牌中。读写双方都拥有自己的记分牌(Scoreboard)(Scoreboard),这个记分牌可以由一个四位,这个记分牌可以由一个四位 的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候,的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候, 记分牌的相应的寄存器被设置为记分牌的相应的寄存器被设置为11 ,否则为,否则为00 。读出方读出一个信元,修改自己记分。读出方读出一个信元,修改自己记分 牌的动作叫做清位。写入方写入一个完整信元,修改自己记分牌的动作叫置位。牌的动作叫做清位。写入方写入一个完整信元,修改

7、自己记分牌的动作叫置位。 从逻辑上说,只需要读出方把自己的记分牌的信息从逻辑上说,只需要读出方把自己的记分牌的信息( (清位信息清位信息) )传送给写入方,同时写传送给写入方,同时写 入方把自己的记分牌的信息入方把自己的记分牌的信息( (置位信息置位信息) )传送给读出方就可以了,即只要构成两条逻辑通道传送给读出方就可以了,即只要构成两条逻辑通道 就可以满足需求。但是,在硬件上的实现却要比这种只从逻辑上的思考要复杂。由于读写就可以满足需求。但是,在硬件上的实现却要比这种只从逻辑上的思考要复杂。由于读写 双方有可能处在不同的时钟域,所以当读写双方交换信息的时候就需要处理信号采样的亚双方有可能处在

8、不同的时钟域,所以当读写双方交换信息的时候就需要处理信号采样的亚 稳态情况。我们使用下面的方法来处理信号亚稳态。稳态情况。我们使用下面的方法来处理信号亚稳态。 消除信号亚稳态消除信号亚稳态 在读、写入方之间建立下面的四条单向数据通道:传送写入方到读出方的置位信息在读、写入方之间建立下面的四条单向数据通道:传送写入方到读出方的置位信息 (Wr2RdSet)(Wr2RdSet);写入方到读出方的清位信息;写入方到读出方的清位信息(Wr2RdRst)(Wr2RdRst);读出方到写入方的清位信息;读出方到写入方的清位信息 (Rd2WrRst)(Rd2WrRst);读出方到写入方的置位信息;读出方到写

9、入方的置位信息(Rd2WrSet)(Rd2WrSet)。由于读出方只发生清位信息,而写。由于读出方只发生清位信息,而写 入方只发生置位信息,所以信息本身只有两个。四条通道可以被划分为两个信息组:一个入方只发生置位信息,所以信息本身只有两个。四条通道可以被划分为两个信息组:一个 组组(Rd2WrRst(Rd2WrRst 和和 Wr2RdRst)Wr2RdRst)传递清位信息,叫清位信息组;一个组传递清位信息,叫清位信息组;一个组(Wr2RdSet(Wr2RdSet 和和 Rd2WrSet)Rd2WrSet) 传递置位信息,叫置位信息组。读出方使用清位信息组,写入方使用置位信息组。这样做传递置位信

10、息,叫置位信息组。读出方使用清位信息组,写入方使用置位信息组。这样做 的目的是为了建立起一个稳定的握手机制。在读出方设置一个专门的发送电路,当此发送的目的是为了建立起一个稳定的握手机制。在读出方设置一个专门的发送电路,当此发送 电路通过电路通过 Rd2WrRstRd2WrRst 发出了清位信息后,等待写入方通过发出了清位信息后,等待写入方通过 Wr2RdRstWr2RdRst 通道送回关于这个信息通道送回关于这个信息 被接收的确认。当收到这个信息的确认后,读出方发送电路复位。同样的,写入方也有一被接收的确认。当收到这个信息的确认后,读出方发送电路复位。同样的,写入方也有一 个发送电路,操作过程

11、同读出方一致,无非是使用置位信息组。这两个发送电路都各由四个发送电路,操作过程同读出方一致,无非是使用置位信息组。这两个发送电路都各由四 个寄存器组成,一位对应一个信元区域。个寄存器组成,一位对应一个信元区域。 为了解决为了解决 Rd2WrRstRd2WrRst 进入写入方时引起的信号亚稳态,需要在写入方设置一个专门消除进入写入方时引起的信号亚稳态,需要在写入方设置一个专门消除2亚稳态的电路模块。根据亚稳态的电路模块。根据 Rd2WrRstRd2WrRst 和和 Rd2WrSetRd2WrSet 特点不一样,这个模块有多种设计方法,特点不一样,这个模块有多种设计方法, 但是其宗旨都是使用连续两

12、次采样的方式。但是其宗旨都是使用连续两次采样的方式。 这里介绍一种比较简单的方法。在设计的时候,把这里介绍一种比较简单的方法。在设计的时候,把 Rd2WrRstRd2WrRst 和和 Rd2WrSetRd2WrSet 的信号都设的信号都设 计为电平方式,即当读出方要发送一个信元区域的清位信息的时候,就把计为电平方式,即当读出方要发送一个信元区域的清位信息的时候,就把 Rd2WrRstRd2WrRst 信号通信号通 道里对应的信元区域位设置为道里对应的信元区域位设置为11 。这个。这个11电平一直保持到写入方的确认到达。当这个电平一直保持到写入方的确认到达。当这个 11电平被写入方采样的时候,由

13、于电平被写入方采样的时候,由于11同步于读出方的时钟,所以很有可能会产生写同步于读出方的时钟,所以很有可能会产生写 入方第一次采样为一个不确切值,即通常意义上的亚稳态状态。但是,由于读出方一直保入方第一次采样为一个不确切值,即通常意义上的亚稳态状态。但是,由于读出方一直保 持持11电平,所以写时钟在第二次采样的时候就会得到一个稳定的采样样本,从而消除了电平,所以写时钟在第二次采样的时候就会得到一个稳定的采样样本,从而消除了 Rd2WrRstRd2WrRst 的亚稳态。对于解决的亚稳态。对于解决 Wr2RdSetWr2RdSet 进入读出方的时候引起的信号亚稳态的方法和读进入读出方的时候引起的信

14、号亚稳态的方法和读 出方一样。出方一样。 对于对于 Rd2WrSetRd2WrSet 通道里面的信息,其实是读出方给写入方的置位确认。这个信号的源头通道里面的信息,其实是读出方给写入方的置位确认。这个信号的源头 是写入方发出的是写入方发出的 Wr2RdSetWr2RdSet,读出方对,读出方对 Wr2RdSetWr2RdSet 不做任何处理,只是单纯地把它里面的信不做任何处理,只是单纯地把它里面的信 息拷贝到息拷贝到 Rd2WrSetRd2WrSet 通道并回送写入方,当通道并回送写入方,当 Rd2WrSetRd2WrSet 进入写入方的时候,进入消除亚稳态进入写入方的时候,进入消除亚稳态 电

15、路,最后复位写入方的发送电路。对于电路,最后复位写入方的发送电路。对于 Wr2RdRstWr2RdRst 通道里面的信息操作也和通道里面的信息操作也和 Rd2WrSetRd2WrSet 的的 信息一样。整个电路的结构如图所示。信息一样。整个电路的结构如图所示。对于信元字节的计数,和通常的方式一样,发生在对于信元字节的计数,和通常的方式一样,发生在 FIFOFIFO 的外部,外部的电路需要为的外部,外部的电路需要为 FIFOFIFO 提供基于信元字节计数到信元尾的信息。这个信息用来使得提供基于信元字节计数到信元尾的信息。这个信息用来使得 FIFOFIFO 的读写地址指针从的读写地址指针从 一个信

16、元区域跳到下一个信元区域。一个信元区域跳到下一个信元区域。FIFOFIFO 向外部电路提供向外部电路提供 FIFOFIFO 有多少个信元的信息。这有多少个信元的信息。这 个信息加上外部电路自己产生的计数信息,可以知道个信息加上外部电路自己产生的计数信息,可以知道 FIFOFIFO 是否将满,是否将满,FIFOFIFO 是否将空等一是否将空等一 系列信息。系列信息。 通过上面的描述,可以看到外部电路能够非常自由地控制通过上面的描述,可以看到外部电路能够非常自由地控制 FIFOFIFO 的读写地址的变化,这的读写地址的变化,这 是通用是通用 FIFOFIFO 所不具备的功能。由于所不具备的功能。由于 FIFOFIFO 给出的是信元的信息,设计者在做有关给出的是信元的信息,设计者在做有关 UTOPIAUTOPIA 协协 议的电路的时候,可以很方便地使用这个信息。同时,如果设计需要议的电路的时候,可以很方便地使用这个信息。同时,如果设计需要 UTOPIAUTOPIA 的查错功能,的查错

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号