- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
异 步 FIFO 结 构
(第一部分)
作者: Vijay A.Nebhrajani
翻译: Adam Luo
2006 年 7 月
设计一个FIFO 是ASIC 设计者遇到的最普遍的问题之一。本文着重介绍怎
样设计FIFO——这是一个看似简单却很复杂的任务。
一开始,要注意,FIFO 通常用于时钟域的过渡,是双时钟设计。换句话说,
设计工程要处理(work off )两个时钟,因此在大多数情况下,FIFO 工作于独立
的两个时钟之间。然而,我们不从这样的结构开始介绍—我们将从工作在单时钟
的一个FIFO 特例开始。虽然工作在同一时钟的FIFO 在实际应用中很少用到,
但它为更多的复杂设计搭建一个平台,这是非常有用的。然后再从特例推广到更
为普通的FIFO ,该系列文章包括以下内容:
1.单时钟结构
2 .双时钟结构——双钟结构1
3 .双时钟结构——双钟结构2
4 .双时钟结构——双钟结构3
5 .脉冲模式FIFO
单时钟FIFO 特例
FIFO 有很多种结构,包括波浪型(ripple )FIFO ,移位寄存器型以及其他一
些我们并不关心的结构类型。我们将集中讨论包含RAM 存储器的结构类型。其
结构如图1 所示。
通过分析,我们看到图中有一个具有独立的读端口和独立的写端口的RAM
存储器。这样选择是为了分析方便。如果是一个单端口的存储器,还应包含一个
仲裁器保证同一时刻只能进行一项操作(读或写 ),我们选择双口RAM (无需
真正的双口RAM ,因为我们只是希望有一个简单的相互独立的读写端口)是因
为这些实例非常接近实际情况。
读、写端口拥有又两个计数器产生的宽度为log (array_size)的互相独立的读、
2
写地址。数据宽度是一个非常重要的参数将在在稍后的结构选择时予以介绍,而
现在我们不必过分的关心它。为了一致,我们称这些计数器为“读指针”(read
pointer )和“写指针”(write pointer )。写指针指向下一个将要写入的位置,读指
针指向下一个将要读取的位置。每次写操作使写指针加1,读操作使读指针加1。
我们看到最下面的模块为“状态”(stauts) 模块。这个模块的任务实给FIFO
提供“空”(empty )和“满”(full )信号。这些信号告诉外部电路FIFO 已经达
到了临界条件:如果出现“满”信号,那么FIFO 为写操作的临界状态,如果出
现“空”信号,则FIFO 为读操作的临界状态。写操作的临界状态(“full is active ”)
表示FIFO 已经没有空间来存储更多的数据,读操作的临界表示FIFO 没有更多
的数据可以读出。status 模块还可告诉 FIFO 中“满”或“空”位置的数值。这
是由指针的算术运算来完成了。
实际的“满”或“空”位置计算并不是为FIFO 自身提供的。它是作为一个
报告机构给外部电路用的。但是,“满”和“空”信号在 FIFO 中却扮演着非常
重要的角色,它为了能实现读与写操作各自的独立运行而阻塞性的管理数据的存
取。这种阻塞性管理的重要性不是将数据复写(或重读),而是指针位置可以控
制整个 FIFO ,并且使读、写操作改变着指针数值。如果我们不阻止指针在临界
状态下改变状态,FIFO 还能都一边“吃”着数据一边“产生”数据,这简直是
不可能的。
进一步分析:DPRAM 若能够寄存读出的信号,这意味着存储器的输出数据
已被寄存。如果这样的话
文档评论(0)