- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
同步FIFO课件
同步 FIFO 什么叫FIFO? 1.什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 FIFO 存储器主要分为基于移位寄存器型和基于 RAM 型。而 RAM 型的又有单口 RAM 和双口 RAM 之分,目前来说用的较为广泛的是基于双端口 RAM 的 FIFO。下面给大家介绍的就是基于双端口 RAM 的 FIFO。 FIFO的模块端口 双口 RAM 在介绍FIFO原理之前先给大家说说双口RAM,因为FIFO的主要功能就是对RAM的控制,产生空满信号。 双口RAM指的就是带读和写地址、使能端的存储器。 FIFO有什么作用? FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作 它主要有几方面的功能: 1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据; 2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担; 3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。 比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K BPS,那么每秒的数据量为100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。 对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 什么叫synchronous FIFO Synchronous FIFO 同步FIFO 前面介绍的功能主要讲的是异步的FIFO。 同步指的是读和写都在一个clock下工作。 显然异步FIFO就是指不在同一个clock下工作的。这里不作描述。 ?读写在同一时钟下叫同步,不同时钟叫异步。 FIFO的原理 FIFO就是对这个双口RAM进行操作。FIFO产生empty和full信号。告诉外面,满和空的状态。满的话就不能在写数据进去了。空的话就不能将数据读出来。 FIFO 内部结构图 FIFO CONTROL FIFO CONTROL 的作用是产生读写指针和full empty信号。 CONTROL的结构 空满标志的意义 满信号有效表示FIFO 已经处于满状态,不能再执行写入动作;满信号复位表示FIFO 非满,还可以执行写入动作; 空信号有效表示FIFO 处于空状态,这时没有有效数据可以读出;对空信号复位说明FIFO 非空,这时可以进行读操作。 正确产生空/满标志是整个FIFO设计的最关键部分,这部分的好坏直接影响着整个FIFO的性能,空/满标志产生的原则是:当整个FIFO被写满时而不会溢出,当整个FIFO被读空时而不会多读。 每进行一次读写操作,相应的指针就增加一次,指向下一个位置。当指针移动到最后的位置时,它又重新回到初始位置。在FIFO 非空或非满的状态下,这个过程将随着读写控制信号的变化一直变化下去。如果FIFO 处于空状态,再进行一个读出动作会产生向下溢出(underflow) ,一个无效的数据被读出;同样地,对于一个写满的FIFO 如果进行一个写入动作, 会产生向上溢出(overflow) ,一个有用的数据会被新写入。这会导致先前的数据被覆盖。为了避免这种错误的产生,应该对FIFO 设置满和空两个信号。 空满信号的判断 通过比较读写指针信号可以判断FIFO的空满状态。 当读指针和写指针相等时,FIFO 可能处于满状态或空状态。 空满信号的简单示意图 如何判断是空是满呢? 可以用不同的方法判断是写指针从后面追上了读指针还是读指针从后面追上了写指针。本文所应用的方法是分别将读/写地址寄存器扩展一位,将最高位设置为状态位,其余低位作为地址位,指针由地址位以及状态位组成。首先把读、写状态位全部复位,如果地址循环了奇数次,则状态位置1,偶数次则又重新复位,应用地址位和状态位的结合实现对空、满标志位的控制。当读写指针的地址位和状态位全部吻合的时候,读写指针经历了相同次数的循环移动,也就是说,FIFO 处于空状态;如果读写指针的地址位相同而状态位相反,写指针比读指针多循环一次,标志FIFO处于满状态。 多用一位判断空满状态 可以使
文档评论(0)