FIFO
外汇网2021-06-20 19:15:05
54
报告结构:FIFOFIFO:
一、先入先出队列(First Input First Output,FIFO)这是一种传统的按序实施方法,先进入的指令先完成并引退,跟着才实施第二条指令。
1.什么是FIFO?
FIFO是英文First In First Out 的缩写,是一种先进先出的报告缓存器,他与普通存储器的区别是没有外部读写地址线,如此运用起来非常简单,但缺点就是只能顺序写入报告,顺序的读出报告,其报告地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
2.什么情形下用FIFO?
FIFO一般用于不同期钟域之间的报告传输,比如FIFO的一端时AD报告采集,另一端时计算机的PCI总线,如果其AD采集的速率为16名 100K SPS,那么每秒的报告量为100K×16bit=1.6Mbps,而PCI总线的进展为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采取FIFO来作为报告缓冲。此外对于不同宽度的报告接口也可以用FIFO,比如单片机位8名报告输出,而DSP或许是16名报告输入,在单片机与DSP连接时就可以运用FIFO来高达报告匹配的目的。
3.FIFO的一部分重要参数
FIFO的宽度:也就是英文资料里常目睹的THE WIDTH,它指的是FIFO一次读写操作的报告位,就像MCU有8名和16名,ARM 32名等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,假使用FPGA自己达到一个FIFO,其报告位,也就是宽度是值得自己定义的。
FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的报告(假使宽度为N)。如一个8名的FIFO,若深度为8,它可以存储8个8名的报告,深度为12 ,就可以存储12个8名的报告,FIFO的深度可大可小,个人觉得FIFO深度的计算并无一个固定的公式。在FIFO事实工作中,其报告的满/空标志可以控制报告的继续写入或读出。在一个具体的应用中也不或许由一部分参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在事实中用到的FIFO深度往往要大于计算值。一般来看依据电路的具体情形,在兼顾系统性能和FIFO成本的情形下估算一个大约的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要依据读出的报告结构和读出报告的由那些具体的要求来确定。
满标志:FIFO已满恐会要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写报告而产生溢出(overflow)。
空标志:FIFO已空恐会要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出报告而产生无效报告的读出(underflow)。
读时钟:读操作所遵循的时钟,在每个时钟沿到来时报数据。
写时钟:写操作所遵循的时钟,在每个时钟沿到来时写报告。
读指针:指朝下一个读出地址。读完后自动加1。
写指针:指朝下一个要写入的地址的,写完自动加1。
读写指针其实就是读写的地址,只然而这个地址不能任意选择,而是接连的。
4.FIFO的分类
根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿到来时同期发生读写操作。异步FIFO是指读写时钟不统一,读写时钟是互相独立的。
5.FIFO设计的难点
FIFO设计的难点在于怎样分析FIFO的空/满状态。为了保证报告正确的写入或读出,而不发生溢出或读空的状态显现,务必保证FIFO在满的情形下,不能执行写操作。在空的状态下不能执行读操作。怎样分析FIFO的满/空就成了FIFO设计的核心困难。受于同步FIFO差不多很少用到,这里只描述异步FIFO的空/满标志造成困难。
在用到触发器的设计中,不可避免的会遇到亚稳态的困难(有关亚稳态这里不作介绍,可查看有关资料)。在涉及到触发器的电路中,亚稳态无法彻底清除,只能想办法将其发生的几率将到最低。其中的一个方法就是运用格雷码。格雷码在相邻的两个码元之间只有一名变换(二进制码在很多情形下是很多码元在与时改变)。这就会避免计数器与时钟同步的时机发生亚稳态现象。但是格雷码有个缺点就是只能定义2^n的深度,而不能像二进制码那样随意的定义FIFO的深度,由于格雷码务必循环一个2^n,否则就不能保证两个相邻码元之间相差一名的条件,所以也就不是真正的各雷码了。第二就是运用冗余的触发器,如果一个触发器发生亚稳态的几率为P,那么两个及联的触发器发生亚稳态的几率就为P的平方。但这次致使延时的增长。亚稳态的发生会让得FIFO显现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就致使写入或读出的地址错误。受于考虑延时的作用,空/满标志的造成并没有一定显现在FIFO真的空/满时才显现。或许FIFO仍未空/满时就显现了空/满标志。这并没有什么不好,只要保证FIFO不显现overflow or underflow 就OK了。
很多有关FIFO的文章其实讨论的均为空/满标志的不同算法困难。
在Vijay A. Nebhrajani的《异步FIFO结构》一文中,作者提出了两个有关FIFO空/满标志的算法。
第一个算法:构造一个指针宽度为N+1,深度为2^N字节的FIFO(为便方比较将格雷码指针转换为二进制指针)。当指针的二进制码中最高点不统一而其它N位都相等时,FIFO为满(在Clifford E. Cummings的文章中以格雷码表明是前两名均不相同,而后两名LSB相同为满,这与换成二进制表明的MSB不同其余相同为满是一样的)。当指针完全相等时,FIFO为空。这也许难以易看出,举个例子表明一下:一个深度为8字节的FIFO怎样工作(运用已转换为二进制的指针)。FIFO_WIDTH=8,FIFO_DEPTH= 2^N = 8,N = 3,指针宽度为N+1=4。起初rd_ptr_bin和wr_ptr_bin都是“0000”。此时FIFO中写入8个字节的报告。wr_ptr_bin =“1000”,rd_ptr_bin=“0000”。诚然,这就是满条件。当下,如果实施了8次的读操作,致使rd_ptr_bin =“1000”,这就是空条件。此外的8次写操作将使wr_ptr_bin 等于“0000”,但rd_ptr_bin 依然等于“1000”,所以FIFO为满条件。
显然起始指针无需为“0000”。如果它为“0100”,而且FIFO为空,那么8个字节会让wr_ptr_bin =“1100”,, rd_ptr_bin 依然为“0100”。这又表明FIFO为满。
在Vijay A. Nebhrajani的这篇《异步FIFO结构》文章中称明了怎样运用格雷码来设置空满的条件,但没有说清为何深度为8的FIFO其读写指针要用3+1名的格雷码来达到,而3+1名的格雷码可以表明16名的深度,而真实的FIFO只有8名,这是怎么回事?而这个困难在Clifford E. Cummings的文章中得以解释。三名格雷码可表明8名的深度,若在加一名最为MSB,则这一名加其余三名构成的格雷码并没有代表新的地址,也就是说格雷码的0100表明表明7,而1100依然表明7,只然而格雷码在经历一个以0名MSB的循环后进入一个以1为MSB的循环,然后又进入一个以0名MSB的循环,其余的三名码依然是格雷码,但这就导致一个困难,在0100的循环完成后,进入1000,他们之间有两名发生了变换,并非是1名,所以增长一名MSB的做法致使该码在两处:0100~1000,1100~0000有两名码元发生改变,故该码以不是真正的格雷码。增长的MSB是为了达到空满标志的计算。Vijay A. Nebhrajani的文章用格雷码转二进制,再转格雷码的情形下提出空满条件,仅过两次转换,而Clifford E. Cummings的文章中直接在格雷码条件下得出空满条件。其实二者是一样的,导致达到方式不同罢了。
第二种算法:Clifford E. Cummings的文章中提及的STYLE #2。它将FIFO地址分成了4部分,每部分分别用高两名的MSB 00 、01、 11、 10决定FIFO能否为going full 或going empty (马上满或空)。假使写指针的高两名MSB差于读指针的高两名MSB则FIFO为“差不多满”,
若写指针的高两名MSB大于读指针的高两名MSB则FIFO为“差不多空”。
在Vijay A. Nebhrajani的《异步FIFO结构》第三部分的文章中也提及了一种方法,那就是方向标志与门限。设定了FIFO容量的75%作为上限,设定FIFO容量的25%为下限。当方向标志胜过门限便输出满/空标志,这与Clifford E. Cummings的文章中提及的STYLE #2可谓是异曲同工。他们都属于保守的空满分析。其实这时输出空满标志FIFO并没有一定真的空/满。
说到此,我们已经清楚地目睹,FIFO设计最核心的就是造成空/满标志的算法的不同造成了不同的FIFO。但无论是精确的空满依旧保守的空满均为为了保证FIFO工作的牢靠。
====================================================================================================================会计学:FIFO二、先进先出法 (first in,first out ,FIFO)
先进先出法是指依据先入库先发出的原则,对于发出的存货以先入库存货的单价计算发出存货成本的方法.采取该种方法的具体做法是:先按存货的期初余额的单价计算发出的存货的成本,领发完毕后,再按第一批入库的存货的单价计算,依此从前向后类推,计算发出存货和结存货的成本.
先进先出法是存货的计算方法之一。它是依据先买入的商品先领用或发出的假定计算的。用先进先出法计算的期末存货额,比较靠近市价。
先进先出法是以先买入的存货先发出如此一种存货实物流转如果为前提,对发出存货执行计算的一种方法。采取该种方法,先买入的存货成本在后买入的存货成本以前转出,据此确定发出存货和期末存货的成本。
标签:
随机快审展示
加入快审,优先展示
推荐文章
- 黑马在线:均线实战利器 7857 阅读
- 短线交易技术:外汇短线博弈精讲 3323 阅读
- MACD震荡指标入门与技巧 3456 阅读
- 黄金操盘高手实战交易技巧 3671 阅读
- 做精一张图 2614 阅读
热门文章
- 港币符号与美元符号的区别是什么啊? 21335 阅读
- 我国各大银行汇率为什么不一样啊? 9210 阅读
- 越南盾对人民币怎么算的?越南盾对人民币汇率换算方法是什么 8750 阅读
- 黑马在线:均线实战利器 7857 阅读
- 小白经济学 7437 阅读