異步 FIFO 控制器 (Asynchronous FIFO Controller)
FIFO 是設(shè)計(jì)中常用的器件,用于跨時(shí)鐘域的數(shù)據(jù)傳送。一般從廠家?guī)熘兄苯诱{(diào)用即可,是不需要自己設(shè)計(jì)的。 但學(xué)習(xí)和理解 FIFO 設(shè)計(jì)方法,對于理解跨時(shí)鐘域異步信號的處理方法很有幫助。
項(xiàng)目地址:Laotzu
經(jīng)典 FIFO 設(shè)計(jì)方法(見參考文檔) 參數(shù)化數(shù)據(jù)寬度和 FIFO 深度 增強(qiáng)的同步數(shù)據(jù)有效指示 增強(qiáng)的首數(shù)據(jù)預(yù)讀加速功能(可關(guān)閉)

| Name | I/O | Description |
|---|---|---|
| w_rst_n | I | Reset in write-side1 is normal0 is reset |
| w_clk | I | Clock in write-side |
| w_en | I | Write enable1 is write0 is NOP |
| w_full | O | 1 is FIFO full |
| w_error | O | Error in write-side1 is error0 is normal |
| w_counter [] | O | FIFO counter in write-side |
| r_rst_n | I | Reset in read-side1 is normal0 is reset |
| r_clk | I | Clock in read-side |
| r_en | I | Read enable1 is read0 is NOP |
| r_valid | O | 1 is data valid in read-side |
| r_error | O | Error in read-side1 is error0 is normal |
| r_counter [] | O | FIFO counter in read-side |
| w_ram_addr [] | O | Write address for dual-port RAM |
| w_ram_en | O | Write enable for dual-port RAM1 is enable0 is disable |
| r_ram_addr [] | O | Read address for dual-port RAM |
| r_ram_en | O | Read enable for dual-port RAM1 is enable0 is disable |
| Name | Description |
|---|---|
| FWFTEN | First Word PRe-read enable1 is enable0 is disable |
| ADDRWIDTH | Address bus width |
| FIFODEPTH | FIFO depth |
比較下面兩種情況下的時(shí)序,在 FWFTEN = 1 的情況,F(xiàn)IFO 從空到有數(shù)據(jù)的時(shí)候不用等到 r_en 有效,其第一個數(shù)據(jù) (D0) 就被自動讀出。相對于 FWFTEN = 0 的情況,r_valid 指示信號提前了,這樣可以加快 FIFO 的吞吐率。
FWFT = 0 的情況 
FWFT = 1 的情況 
注: 在某些設(shè)計(jì)中,“首數(shù)據(jù)自動預(yù)讀”的功能可能引起錯誤,可以使 FWFTEN = 0 關(guān)掉這個功能。
和傳統(tǒng) FIFO 控制器使用空信號 (EMPTY) 指示讀數(shù)據(jù)有效不同,此控制器采用 r_valid 信號同步指示 FIFO 讀數(shù)據(jù)有效,這樣可以給 FIFO 應(yīng)用帶來一點(diǎn)方便。 如果 FIFO 讀側(cè)確實(shí)需要空信號或者需要進(jìn)行門限控制設(shè)計(jì),請使用 r_counter[] 替代。
注: 一般 Dual-port RAM 的時(shí)序是在 r_ram_en 和 r_ram_addr[] 有效的下一個時(shí)鐘周期輸出讀數(shù)據(jù)。
[1] Clifford E. Cummings, “Simulation and Synthesis Techniques for Asynchronous FIFO Design”, SNUG 2002 (Synopsys Users Group Conference, San Jose, CA, 2002). Also available at www.sunburst-design.com/papers [2] Clifford E. Cummings and Peter Alfke, “Simulation and Synthesis Techniques for Asynchronous FIFO Design with Asynchronous Pointer Comparisons,” SNUG 2002 (Synopsys Users Group Conference, San Jose, CA, 2002) User Papers, March 2002, Section TB2, 3rd paper. Also available at www.sunburst-design.com/papers
新聞熱點(diǎn)
疑難解答
圖片精選