close

嗨嗨~大家好,這裡是九椅特報!

今天來分享一下在數位IC工程師面試中最常出現的考題: FIFO

 

FIFO主要有分"同步"及"非同步"

而非同步FIFO(AFIFO)其實需要了解的東西很多,幾乎涵蓋了CDC中所有相關的知識點,面試官可以就AFIFO裡面很多點進行提問

所以說深刻了解AFIFO是IC designer必須掌握的基本技能

 


 

在開始介紹AFIFO前,先帶大家看一下同步FIFO

FIFO就是一個給資料流動的水管,有入口及出口,先進的資料會先出(First In First Out);而入口(寫入端)和出口(讀出端)是同一個時域,因此稱為同步

FIFO一般深度(depth) > 1,會需要兩個指標: write pointer(wptr)和read pointer(rptr)來進行判斷

wptr 和 rptr 一般用二進制,資料寫入(Push)時wptr + 1,資料讀出(Pop)時rptr + 1

這就像是wptr和rptr在操場賽跑一樣,當wptr領先了rptr一圈後,也就是FIFO內部存滿了資料,這時候我們稱FIFO滿了(Full)

反之,當rptr追上了wptr,也就是FIFO內部沒有資料了,這時候我們稱FIFO空了(empty)

數位IC面試必備知識: FIFO

 


 

再來進入AFIFO的介紹~

簡單來說就是read和write分別在不同的時域那麼最核心的問題就是full、empty的判斷

在read端,FIFO empty是關鍵,因為empty時不能從FIFO讀取資料;反之,在write端,FIFO full是關鍵,因為full時不能讓資料寫入FIFO

因此,我們需要將wptr 傳到read端給read control判斷FIFO empty與否,同時我們也需要將rptr傳到write端給write control判斷FIFO full與否

 

數位IC面試必備知識: FIFO

Note: 可以自己練習畫出AFIFO的架構

 

一般我們在傳遞pointer到對面時會使用到格雷碼(Gray code),使用Gray code的關鍵就在於:相鄰兩組數字之間編碼後只有1 bit不同

每當clock toggle時只會有1 bit發生變化,其餘bit都是不動的

這樣即使這一組bit在用2 FF synchronizer送到另一個時域時需要1個~2個週期做變化,在發生變化前,另一個時域的值就是之前的穩定值,變化後就是新的值,不會出現其他不該出現的值

數位IC面試必備知識: FIFO

 


 

再來我們來探討怎麼計算FIFO depth:

深度計算有很多前提需要先思考, 像資料傳輸不是每一T都有資料在傳等等的前提假設

但以下的算法我們就用最簡單的每T的有資料在傳來思考就好~

主要的想法: pointer從write端傳到read端再傳回write端需要多少時間,這個時間差就可以當作FIFO depth至少需要這樣的深度

數位IC面試必備知識: FIFO

假設TX_clk period = 2.5ns, RX_clk period = 2.0ns
Tpath_dly可抓到1T(2.5ns及2.0ns)
sync通常都是用2 sync stage
因此深度至少需要12

那我們想想有沒有什麼機會可以減少深度,
假設一個狀況是我們保證TX_clk一定大於RX_clk且TX和RX每一T都會讀寫資料
因此深度公式可以縮減為僅看pointer從write端傳到read端就好

數位IC面試必備知識: FIFO

 


 

以上是我對FIFO的小小見解,內容若有錯或有想討論的都歡迎留言唷!

如果在面試過程中有被問FIFO相關問題(高機率是會被問到的),希望這篇文章內容可以幫助到大家啦~

arrow
arrow
    創作者介紹
    創作者 九椅 的頭像
    九椅

    九椅的部落格

    九椅 發表在 痞客邦 留言(3) 人氣()