FIFO(2):FIFO作品

 

                                            FIFO作品

     作業は、クロックドメインFIFOに分割して、同期/ 非同期 FIFO。同期FIFOは読み出しクロックを意味し、クロックエッジでクロックのクロックを書き込み、同時読み取りおよび書き込みをしています。一貫性のない非同期FIFOを読み、時計、独立した読み出しおよび書き込みを書きます。

1.読み取りおよび書き込みポインタ作品

ポインタを読む常に最初の要素(番号0)にリセットするには、読み出されるべき次のセルを指します。

ポインタを書き込む。常に最初の要素(番号0)に、リセット、読み出すべき現在のデータを指します。

2. FIFO「空/フル」検出

  FIFO キーデザイン:FIFOが読んで信頼性の高い生産と識別FIFO「空/フル」ステータスを生成するためのポインタを記述します。

      FIFOが一杯になると明らかに、あなたは新しいデータを書き込むことはできませんし、そうでない場合はデータのオーバーフローを引き起こし、そして空の状態で書き込まれたデータが読み込まbefore've、あなたが読んで、またはデータを読み取ることができませんこれは、無効なデータです。

2.1ヌル信号(rd_empty)を読みます。

      書き込みポインタが等しいFIFOが空であることを示す一般場合、これが発生したときにリセット動作、またはリードポインタが読み出されたときにFIFOに最後のワード、キャッチの書き込みポインタ、読み取り有効ヌル信号を出力します。

以下に示すようにこれが発生します。

2.2充填信号(wr_full)

     読み出しポインタがある場合に再び等しく、FIFOが満杯であることを示している円形のライトポインタ(ラップアラウンド)折り返したとき、この状況は、発生すると以下に示すように、リードポインタに追いつきます。

 

以上FIFO的读写状态是基于读写指针的比较,而问题是两者的判断条件都是读写指针相等,区别在于写满状态是在写指针写满一圈后重新追上读指针,这该如何取表示呢???

如何区分到底是满状态还是空状态呢??

2.3 FIFO读写状态的判断方法

可以采用以下两种方法:

1extra bit

一般情况下深度为N=2^n的FIFO其地址的位宽为n,其读写地址的位宽也为n。共有N个存储单元,若数据位宽为W则该FIFO的容量即为N*W bit。

现在在指针中添加额外的位(extra bit,即地址的MSB)变为n+1bit,该extra bit用于指示写指针是否递增并越过最后一个FIFO地址,若越过则将该MSB加1,其它位清零。对读指针也进行同样的操作。如对于深度为8的FIFO,需要采用3+1bit是计数器:0000-1000、1001-1111,MSB作为折回标志,而低3位作为地址指针。

那么判断机制为:

   *如果两个指针的MSB不同,就说明写指针比读指针多折回一次:如r_addr=0000,且w_addr=1000,为满;

   *如果两个指针的MSB相同,就说明两个指针折回次数相等。再者其余位相等(则说明FIFO为空。

2)设置数据计数器

设置一个data_counter, 当写使能有效时每写入一个data计数器同时加1;读操作时,每读出一个data时该计数器减1。如此,当data_counter为0时FIFO空,当data_counter计数至FIFO深度deep时,表示FIFO写满。

由于计数器会占用额外的资源,当FIFO较大时,可能会降低FIFO的读写速度。

3 读写指针的表示

读写指针的编码有多种,上述提到的指针采用二进制码形式表示。

3.1二进制FIFO指针

将一个二进制的计数值从一个时钟域同步到另一个时钟域的时候很容易出现问题,因为采用二进制计数器时所有位都可能同时变化,在同一个时钟沿同步多个信号的变化会产生亚稳态问题。而使用格雷码只有一位变化,因此在两个时钟域间同步多个位不会产生问题。所以需要一个 二进制到gray码的转换电路  ,将地址值转换为相应的gray码,然后将该gray码同步到另一个时钟域进行对比,作为空满状态的检测。

3.2 gray码表示指针

使用gray码解决了一个问题,同时也带来另一个问题,即格雷码如何判断空与满?

空的判断

依然依据二者完全相等(包括MSB);

满的判断

如下图,由于gray码除了MSB外具有镜像对称的特点,当读指针指向7,写指针指向8时,除了MSB其余位都相同,不能说它为满。因此不能单纯地检测最高位了,在gray码上判断为满必须同时满足以下3条:

wptr 和同步过来的rptr的MSB不相等,因为wptr必须比rptr多折回一次;

wptr与rptr的次高位不相等;如上图位置7和和位置15,转化为2进制:0111和1111. 。MSB不同说明多折回一次,111相同代表同一个位置。 

 

おすすめ

転載: blog.csdn.net/qq_26652069/article/details/90765269