基于乒乓操作的异步FIFO设计及VHDL实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文设计采用了两块DPRAM,对其读写指针,我 们采用统一的编址方式。如果每块DPRAM的深度为 8,那么两块DPRAM的深度为16,用4 bit的地址进行 表示,如图3所示。
地址生成器生成4 bit格雷码指针in—ptr,最高位 msb用来标识现在正在对哪个DPRAM进行操作,而 实际的操作地址ptr是由in—ptr的最高两位异或再加 上in—prt的后两位得到的,如图3所示。这里加入一 个msb用来标识所操作的DPRAM,是为了在判断空满 时的方便,在后面将详细讲述。 2.2空、满信号的判断
空、满信号的产生是设计任何类型FIFO的关键
F二二匝乎—]
OO 0 0 O001 OOl 1 O010
,O O 0 O01 Ol 1 O10
地址生成器产 生的格雷码指
针in』t‘
01 1O 01 1 1 Ol 0l 010 o
11 o o 1l Ol l1 1 l 11 1O lOl0 10l 1 lOOl l OOO
保守的空满判断能够满足FIFO的设计要求。 2.5 F豫。设计的总体模块
何选择DPRAM进行读写操作的问题。我们声明一个 sel信号解决这个问题。sel信号作为读操作选中的
根据上述一些乒乓FIFO关键模块的设计方法, 图7给出了用乒乓DPRAM实现异步FIFO的总体设
DPRAM,而写操作的DPRAM用sel取反得到,这样就 避免了读写同时对同一块DPRAM操作的可能。复位
2异步nFo的设计问题及解决方案
本文所述的异步FIFO是指读写时钟不同步,数 据由某一个时钟域的控制信号写入,而由另一个时钟 域的控制信号将数据读出。也就是说,读写指针的变 化动作由不同的时钟产生,而空满标志的产生要通过 比较读写指针得到。因此,对FIF0空或满的判断是 跨时钟域的。当一个信号从一个时钟域传递到另外一 个时钟域时,经常会出现亚稳态问题L1 J,解决这一问 题的最简单方法是使用同步器,使得在另外一个时钟 域的采样信号足够稳定。但是,要把一个n位的数据 同步到另外一个时钟域,由于同一时刻可能有不止1
c)写控制模块。写时钟wclk控制下的同步写时 钟域,包括写指针和满逻辑的产生。由于afull—n信号 的声明是因为写指针的增加,而其失效是因为读指针 (读时钟域产生,异步于写时钟域)的增加,所以要把 异步信号afuu—n同步到读时钟域产生full信号。
d)异步比较模块。这是一个异步的指针比较模 块,通过对读写指针以及最高有效位msb的比较,产 生异步空满标志信号和DPRAM的选择信号sel。这
为了更简单有效地防止FIFO出现上溢出(写指 针超过读指针覆盖有效数据)或者下溢出(读指针超 过写指针读到无效数据),对本文设计中的乒乓操作 做如下限制:同一时刻,数据从一块DPRAM写入,从 另外一块读出,读写不能同时操作同一块DPRAM。也 就是说,只有当一块DPRAM写满时,才可以去读;只 有当一块DPRAM读空时,才可以去写。
·15·
·微电子与基础产品·
电子工程师
2005年6月
部分仅包括异步比较组合逻辑,不包含时序逻辑。 e)双路选择模块。由于采用乒乓操作,使能信号
以及输出数据都需要通过sel信号进行选择,以决定 选择哪块DPRAM。由于QuarhlsⅡ中的兆函数DPRAM的 数据输出有2个时钟周期的延迟L4 J,因此rData的双 路选择模块的sel信号需要延迟2个周期,以保证把整 个DPRAM中的数据读完。
第31卷第6期 2005年6月
电子工鹾师
ELECTRONIC ENGINEER
V01.3l No.6 Jun.2005
基于乒乓操作的异步FIFo设计及VHDL实现
王 智,罗新民 (西安交通大学信息与通信工程学科系,陕西省西安市710049)
【摘要】 目前的PLD(可编程逻辑器件)例如FPGA(现场可编程门阵列)凭借其灵活、方便、资 源丰富的优势在很多领域得到了广泛应用。随着其片内存储资源的增加,把FIFO(先进先出)器件集 成到PLD中是一种方便地代替专用FIFO芯片的实现方法。根据异步FIFO的设计方法,引入乒乓操 作的设计技巧,给出了一种用FPGA实现异步FIFO的设计方案。
100
100
·14·
万方数据
图4异步空满信号产生逻辑框图
8}年势1 第3l卷第6期
王智,等:基于乒乓操作的异步FIFO设计及VHDL实现
·微电子与基础产品·
。。1k厂—也到厂1鼍刘
功能的正确性,唯一影响的也就是FIFO效率有所降 低。对于写FIFO时,可能在一块DPRAM已经被读空
互互二二二二二土二
是如果这时写操作已开始对D腿AM2的操作,即msb
和wmsb不相同,读写在操作不同的存储单元,不会造 成任何的读写错误,因此不声明任何空满信息。类似 地,满信号也有同样的过程。其逻辑框图见图4。
异步的空满信号产生后,异步满信号要同步到写 时钟域,异步空信号要同步到读时钟域,以消除亚稳态 的影响,并向外部输出同步空满信号。同步器一般采 用两个触发器级联而成,本文采用图5逻辑结构。
l l0 1 11 10 l
给DPRAM的/㈨o
格雷指针p竹\o o o
OO l 0 ll O10 l l0 I 1l l01 \l OO
图3 DPRAM的地址指针的分配
之一。在这里通过异步的比较读写指针ptr以及读写 指针的MSB进行判断,然后产生两个异步的空满标志 信号送入读写模块进行同步,最后向外界输出两个同 步的空满信号。下面举例说明空、满信号的产生过程。
虽然空、满标志是保守的,但是这并不影响FIFO
万方数据
图7 用DPRAM实现的异步FⅡO框图
a)DPRAM模块。是整个FIFO的存储单元,用 Altera公司的开发工具QuartusⅡ中的2端口RAM兆 函数实现。
b)读控制模块。读时钟rclk控制下的同步读时 钟域,包括读指针和空逻辑的产生。由于aempty—n信 号的声明是因为读指针的增加,而其失效是因为写指 针(写时钟域产生,异步于读时钟域)的增加,所以要 把异步信号aempty-n同步到读时钟域产生empty信 号。
收稿日期:2005旬3-14;修回日期:2005-05一13。
万方数据
出缓冲模块。如此循环,周而复始。 乒乓操作的最大特点是,通过输入数据选择单元
和输出数据选择单元按节拍相互配合切换,将经过缓 冲的数据流没有时间停顿地送到运算处理单元,进行 运算和处理。把乒乓操作模块当做一个整体,站在这 个模块的两端看数据,输人数据流和输出数据流都是 连续不断的,没有任何停顿,因此非常适合对数据流进 行流水线式处理。所以乒乓操作常常被应用于流水线 式算法,完成数据的无缝缓冲和处理。
位发生变化(比如3叫,二进制为011斗100,数据的3
位比特全部发生了变化),用同步器进行同步,得到的 采样信号可能是不同于数据变化前后数值的其他值, 以至于产生错误的FIFO标志。解决这一问题的办法
·13·
·微电子与基础产品·
电子工套师
2005年6月
是地址指针使用格雷码,由于其数值变化前后只有l 位变化,因此被采样的值或者是改变之前的值,或者是 改变之后的值,不会出现其他情况。 2.1读写指针的产生
当印tr到达DPRAM2的最底端,也就是in一叩tr= 1000,rptr=100时,说明在这个读时钟周期过去之后, 下一个时钟周期到来时,DPRAM2就要被读空了,这时 我们声明一个信号direction=0,意味着DPRAM2将要
为空。在下面的时钟周期内,如果in一印tr继续累加就 变为0000,最高有效位珊sb就会变化。也就是说,在 direction声明以后,我们需要监视的是msb信号,如果 珊sb进行了翻转,但是这时写操作仍在对DPRAMl进 行操作,即这时的珊sb与wmsb将相同,那么这时就应 该立即声明一个空信号,因为读操作赶上了写操作,读 与写将要操作同一块DPRAM了,这是不允许的。但
计框图。 :一一一一一一一一一一一一…一二二一一一一一一一一一?一…一一一一一一一一一:
时,sel选中DPRAMl,sel信号之后的变化条件为:读
操作和写操作全部完成一次,就进行一次翻转,即sel
信号变化一次,使读DPRAM变为写DPRAM,写
DPRAБайду номын сангаас变为读DPRAM。当读写指针ptr都指向000
关键词:乒乓操作,异步FIFO,VHDL,FPGA 中图分类号:TP492
0引言
FIFO(协rst—in 6rst-out,先进先出)是一种常用电 路器件,通常用于数据的缓存和容纳异步信号的频率 或相位差异。用PLC(可编程逻辑器件)进行项目开 发时,可将FIFO器件集成进去,从而避免专用FIFO 芯片带来的诸多不便。但在一般的PLD例如Altera 公司的产品中,其开发工具QuartusⅡ提供的FIFO模 块效率比较低,其读写操作不能同时进行:写FIFO时 读等待,直到FIFO写满才能开始读;读FIF0时写等 待,直到FIFO读空才能开始写。本文利用乒乓操作 的优势,设计了一种更高效率的异步FIF0实现方式。
1乒乓操作
乒乓操作是一种用于数据流控制的处理技巧。典 型的乒乓操作方法如图l所示。数据缓模块可以为任
臀劂羹雾旧 何存储模块,在本文中使用的是双口RAM(DPRAM)。 .I选择单元r1 (DPRAM)rVI选择单元1.恳五再忑司 f2选1 H数豁蕊挚2H u到 2选1
乒乓操作的处理流程描述如下:输人数据流通过 输入数据选择单元等时地将数据流分配到两个数据缓 冲区。在第1个缓冲周期,将输入的数据流缓存到数 据缓冲模块1,在第2个缓冲周期,通过输入数据选择 单元的切换,将输入的数据流缓存到数据缓冲模块2, 同时,将数据缓冲模块l缓存的第1个周期的数据通 过输出数据选择单元的选择,送到运算处理单元进行 处理。在第3个缓冲周期,再次切换数据的进入与输
3 V加DL实现及仿真
根据上述设计思路,设计了深度为16、数据宽度 为8 bit的异步FIFO,用VHDL"1语言编写各个模块, 并在Altem公司的开发环境QuanusⅡ2.2中针对Cy— clone系列FPGA(现场可编程门阵列)进行了综合和 仿真,其写、读FIFO时序仿真结果分别如图8、图9所 示。观察空信号empty,满信号full以及选择信号sel 的变化情况,完全满足设计要求。并且可以发现,读写 FIFO是可以同时进行的,这是因为在FIFO中引入乒 乓操作,提高了数据的传输效率。
并且最高有效位msb不相同时,说明上一次的读写操
作全部完成并等待下一次的读写操作,这时就需要切
换sel信号了。其逻辑框图如图6所示。
图6 sd信号的逻辑框图
2.4保守的空满标志 本文设计中FIFO的空满标志是保守的,也就是
说,FIFo的空满标志是立即有效的,而其失效是在一 段时间之后。
当读指针读完某块DPRAM而写操作还没有完成 另外一块时,就会声明异步空aempty—n信号,此信号 会立即set同步触发器,使触发器输出为“1”,即向外 部声明empty信号,如图5所示。当写完另外一块 DPRAM之后,也就是说,在写指针累加到另外一块 DPRAM的深度时,需要异步空aempty—n无效,显然此 信号的无效是受到写时钟控制的。而empty信号是在 读时钟域同步aemtpy—n信号得到,由于同步器使用了 2个触发器,因此empty信号的无效要经过至少2个周 期的延迟。总之,空信号的声明是及时的,而空信号的 失效是保守的,即实际FIFO已经非空了,但是empty 信号还没有变为无效,要经过几个读时钟周期的延迟。 对于满信号也是类似的情况。
图2所示是一种格雷码指针的生成逻辑框图‘引。
图2格雪码生成逻辑框图
读写指针进行累加的前提条件有两个,一个是读 或写使能有效,二是空或满标志无效。必须保证这两 个条件都为真时,地址指针才开始累加,进行FIFO的 读或者写。
图2所示的格雷码产生逻辑框图与文献[2]中的 相比,多了一个触发器单元但减少了组合逻辑。组合 逻辑的减少,有助于提高器件的运行速度。虽然触发 器的增多会使用更多的片上资源,但是现在的PLD片 上资源非常丰富,不会造成片上资源紧张,这已经不是 设计所需要考虑的主要因素了。
时写操作并不能马上开始,而是延迟了几个周期,但是
不会出现FIFO已经满了还继续写的错误情况;对于
读FIFO时,可能在一块DPRAM已经写满时读操作并
图5异步空满信号被同步
不能马上开始,而是延迟了几个周期,但是不会出现 FIFO已经空了还继续读的错误情况。
2.3切换信号的产生 由于本文设计中采用了乒乓操作,必然涉及到如
地址生成器生成4 bit格雷码指针in—ptr,最高位 msb用来标识现在正在对哪个DPRAM进行操作,而 实际的操作地址ptr是由in—ptr的最高两位异或再加 上in—prt的后两位得到的,如图3所示。这里加入一 个msb用来标识所操作的DPRAM,是为了在判断空满 时的方便,在后面将详细讲述。 2.2空、满信号的判断
空、满信号的产生是设计任何类型FIFO的关键
F二二匝乎—]
OO 0 0 O001 OOl 1 O010
,O O 0 O01 Ol 1 O10
地址生成器产 生的格雷码指
针in』t‘
01 1O 01 1 1 Ol 0l 010 o
11 o o 1l Ol l1 1 l 11 1O lOl0 10l 1 lOOl l OOO
保守的空满判断能够满足FIFO的设计要求。 2.5 F豫。设计的总体模块
何选择DPRAM进行读写操作的问题。我们声明一个 sel信号解决这个问题。sel信号作为读操作选中的
根据上述一些乒乓FIFO关键模块的设计方法, 图7给出了用乒乓DPRAM实现异步FIFO的总体设
DPRAM,而写操作的DPRAM用sel取反得到,这样就 避免了读写同时对同一块DPRAM操作的可能。复位
2异步nFo的设计问题及解决方案
本文所述的异步FIFO是指读写时钟不同步,数 据由某一个时钟域的控制信号写入,而由另一个时钟 域的控制信号将数据读出。也就是说,读写指针的变 化动作由不同的时钟产生,而空满标志的产生要通过 比较读写指针得到。因此,对FIF0空或满的判断是 跨时钟域的。当一个信号从一个时钟域传递到另外一 个时钟域时,经常会出现亚稳态问题L1 J,解决这一问 题的最简单方法是使用同步器,使得在另外一个时钟 域的采样信号足够稳定。但是,要把一个n位的数据 同步到另外一个时钟域,由于同一时刻可能有不止1
c)写控制模块。写时钟wclk控制下的同步写时 钟域,包括写指针和满逻辑的产生。由于afull—n信号 的声明是因为写指针的增加,而其失效是因为读指针 (读时钟域产生,异步于写时钟域)的增加,所以要把 异步信号afuu—n同步到读时钟域产生full信号。
d)异步比较模块。这是一个异步的指针比较模 块,通过对读写指针以及最高有效位msb的比较,产 生异步空满标志信号和DPRAM的选择信号sel。这
为了更简单有效地防止FIFO出现上溢出(写指 针超过读指针覆盖有效数据)或者下溢出(读指针超 过写指针读到无效数据),对本文设计中的乒乓操作 做如下限制:同一时刻,数据从一块DPRAM写入,从 另外一块读出,读写不能同时操作同一块DPRAM。也 就是说,只有当一块DPRAM写满时,才可以去读;只 有当一块DPRAM读空时,才可以去写。
·15·
·微电子与基础产品·
电子工程师
2005年6月
部分仅包括异步比较组合逻辑,不包含时序逻辑。 e)双路选择模块。由于采用乒乓操作,使能信号
以及输出数据都需要通过sel信号进行选择,以决定 选择哪块DPRAM。由于QuarhlsⅡ中的兆函数DPRAM的 数据输出有2个时钟周期的延迟L4 J,因此rData的双 路选择模块的sel信号需要延迟2个周期,以保证把整 个DPRAM中的数据读完。
第31卷第6期 2005年6月
电子工鹾师
ELECTRONIC ENGINEER
V01.3l No.6 Jun.2005
基于乒乓操作的异步FIFo设计及VHDL实现
王 智,罗新民 (西安交通大学信息与通信工程学科系,陕西省西安市710049)
【摘要】 目前的PLD(可编程逻辑器件)例如FPGA(现场可编程门阵列)凭借其灵活、方便、资 源丰富的优势在很多领域得到了广泛应用。随着其片内存储资源的增加,把FIFO(先进先出)器件集 成到PLD中是一种方便地代替专用FIFO芯片的实现方法。根据异步FIFO的设计方法,引入乒乓操 作的设计技巧,给出了一种用FPGA实现异步FIFO的设计方案。
100
100
·14·
万方数据
图4异步空满信号产生逻辑框图
8}年势1 第3l卷第6期
王智,等:基于乒乓操作的异步FIFO设计及VHDL实现
·微电子与基础产品·
。。1k厂—也到厂1鼍刘
功能的正确性,唯一影响的也就是FIFO效率有所降 低。对于写FIFO时,可能在一块DPRAM已经被读空
互互二二二二二土二
是如果这时写操作已开始对D腿AM2的操作,即msb
和wmsb不相同,读写在操作不同的存储单元,不会造 成任何的读写错误,因此不声明任何空满信息。类似 地,满信号也有同样的过程。其逻辑框图见图4。
异步的空满信号产生后,异步满信号要同步到写 时钟域,异步空信号要同步到读时钟域,以消除亚稳态 的影响,并向外部输出同步空满信号。同步器一般采 用两个触发器级联而成,本文采用图5逻辑结构。
l l0 1 11 10 l
给DPRAM的/㈨o
格雷指针p竹\o o o
OO l 0 ll O10 l l0 I 1l l01 \l OO
图3 DPRAM的地址指针的分配
之一。在这里通过异步的比较读写指针ptr以及读写 指针的MSB进行判断,然后产生两个异步的空满标志 信号送入读写模块进行同步,最后向外界输出两个同 步的空满信号。下面举例说明空、满信号的产生过程。
虽然空、满标志是保守的,但是这并不影响FIFO
万方数据
图7 用DPRAM实现的异步FⅡO框图
a)DPRAM模块。是整个FIFO的存储单元,用 Altera公司的开发工具QuartusⅡ中的2端口RAM兆 函数实现。
b)读控制模块。读时钟rclk控制下的同步读时 钟域,包括读指针和空逻辑的产生。由于aempty—n信 号的声明是因为读指针的增加,而其失效是因为写指 针(写时钟域产生,异步于读时钟域)的增加,所以要 把异步信号aempty-n同步到读时钟域产生empty信 号。
收稿日期:2005旬3-14;修回日期:2005-05一13。
万方数据
出缓冲模块。如此循环,周而复始。 乒乓操作的最大特点是,通过输入数据选择单元
和输出数据选择单元按节拍相互配合切换,将经过缓 冲的数据流没有时间停顿地送到运算处理单元,进行 运算和处理。把乒乓操作模块当做一个整体,站在这 个模块的两端看数据,输人数据流和输出数据流都是 连续不断的,没有任何停顿,因此非常适合对数据流进 行流水线式处理。所以乒乓操作常常被应用于流水线 式算法,完成数据的无缝缓冲和处理。
位发生变化(比如3叫,二进制为011斗100,数据的3
位比特全部发生了变化),用同步器进行同步,得到的 采样信号可能是不同于数据变化前后数值的其他值, 以至于产生错误的FIFO标志。解决这一问题的办法
·13·
·微电子与基础产品·
电子工套师
2005年6月
是地址指针使用格雷码,由于其数值变化前后只有l 位变化,因此被采样的值或者是改变之前的值,或者是 改变之后的值,不会出现其他情况。 2.1读写指针的产生
当印tr到达DPRAM2的最底端,也就是in一叩tr= 1000,rptr=100时,说明在这个读时钟周期过去之后, 下一个时钟周期到来时,DPRAM2就要被读空了,这时 我们声明一个信号direction=0,意味着DPRAM2将要
为空。在下面的时钟周期内,如果in一印tr继续累加就 变为0000,最高有效位珊sb就会变化。也就是说,在 direction声明以后,我们需要监视的是msb信号,如果 珊sb进行了翻转,但是这时写操作仍在对DPRAMl进 行操作,即这时的珊sb与wmsb将相同,那么这时就应 该立即声明一个空信号,因为读操作赶上了写操作,读 与写将要操作同一块DPRAM了,这是不允许的。但
计框图。 :一一一一一一一一一一一一…一二二一一一一一一一一一?一…一一一一一一一一一:
时,sel选中DPRAMl,sel信号之后的变化条件为:读
操作和写操作全部完成一次,就进行一次翻转,即sel
信号变化一次,使读DPRAM变为写DPRAM,写
DPRAБайду номын сангаас变为读DPRAM。当读写指针ptr都指向000
关键词:乒乓操作,异步FIFO,VHDL,FPGA 中图分类号:TP492
0引言
FIFO(协rst—in 6rst-out,先进先出)是一种常用电 路器件,通常用于数据的缓存和容纳异步信号的频率 或相位差异。用PLC(可编程逻辑器件)进行项目开 发时,可将FIFO器件集成进去,从而避免专用FIFO 芯片带来的诸多不便。但在一般的PLD例如Altera 公司的产品中,其开发工具QuartusⅡ提供的FIFO模 块效率比较低,其读写操作不能同时进行:写FIFO时 读等待,直到FIFO写满才能开始读;读FIF0时写等 待,直到FIFO读空才能开始写。本文利用乒乓操作 的优势,设计了一种更高效率的异步FIF0实现方式。
1乒乓操作
乒乓操作是一种用于数据流控制的处理技巧。典 型的乒乓操作方法如图l所示。数据缓模块可以为任
臀劂羹雾旧 何存储模块,在本文中使用的是双口RAM(DPRAM)。 .I选择单元r1 (DPRAM)rVI选择单元1.恳五再忑司 f2选1 H数豁蕊挚2H u到 2选1
乒乓操作的处理流程描述如下:输人数据流通过 输入数据选择单元等时地将数据流分配到两个数据缓 冲区。在第1个缓冲周期,将输入的数据流缓存到数 据缓冲模块1,在第2个缓冲周期,通过输入数据选择 单元的切换,将输入的数据流缓存到数据缓冲模块2, 同时,将数据缓冲模块l缓存的第1个周期的数据通 过输出数据选择单元的选择,送到运算处理单元进行 处理。在第3个缓冲周期,再次切换数据的进入与输
3 V加DL实现及仿真
根据上述设计思路,设计了深度为16、数据宽度 为8 bit的异步FIFO,用VHDL"1语言编写各个模块, 并在Altem公司的开发环境QuanusⅡ2.2中针对Cy— clone系列FPGA(现场可编程门阵列)进行了综合和 仿真,其写、读FIFO时序仿真结果分别如图8、图9所 示。观察空信号empty,满信号full以及选择信号sel 的变化情况,完全满足设计要求。并且可以发现,读写 FIFO是可以同时进行的,这是因为在FIFO中引入乒 乓操作,提高了数据的传输效率。
并且最高有效位msb不相同时,说明上一次的读写操
作全部完成并等待下一次的读写操作,这时就需要切
换sel信号了。其逻辑框图如图6所示。
图6 sd信号的逻辑框图
2.4保守的空满标志 本文设计中FIFO的空满标志是保守的,也就是
说,FIFo的空满标志是立即有效的,而其失效是在一 段时间之后。
当读指针读完某块DPRAM而写操作还没有完成 另外一块时,就会声明异步空aempty—n信号,此信号 会立即set同步触发器,使触发器输出为“1”,即向外 部声明empty信号,如图5所示。当写完另外一块 DPRAM之后,也就是说,在写指针累加到另外一块 DPRAM的深度时,需要异步空aempty—n无效,显然此 信号的无效是受到写时钟控制的。而empty信号是在 读时钟域同步aemtpy—n信号得到,由于同步器使用了 2个触发器,因此empty信号的无效要经过至少2个周 期的延迟。总之,空信号的声明是及时的,而空信号的 失效是保守的,即实际FIFO已经非空了,但是empty 信号还没有变为无效,要经过几个读时钟周期的延迟。 对于满信号也是类似的情况。
图2所示是一种格雷码指针的生成逻辑框图‘引。
图2格雪码生成逻辑框图
读写指针进行累加的前提条件有两个,一个是读 或写使能有效,二是空或满标志无效。必须保证这两 个条件都为真时,地址指针才开始累加,进行FIFO的 读或者写。
图2所示的格雷码产生逻辑框图与文献[2]中的 相比,多了一个触发器单元但减少了组合逻辑。组合 逻辑的减少,有助于提高器件的运行速度。虽然触发 器的增多会使用更多的片上资源,但是现在的PLD片 上资源非常丰富,不会造成片上资源紧张,这已经不是 设计所需要考虑的主要因素了。
时写操作并不能马上开始,而是延迟了几个周期,但是
不会出现FIFO已经满了还继续写的错误情况;对于
读FIFO时,可能在一块DPRAM已经写满时读操作并
图5异步空满信号被同步
不能马上开始,而是延迟了几个周期,但是不会出现 FIFO已经空了还继续读的错误情况。
2.3切换信号的产生 由于本文设计中采用了乒乓操作,必然涉及到如