1、讀寫沒有空閑周期。(fA>fB)
fA = 80MHz
fB = 50MHz
Burst Length = 120
讀寫之間沒有空閑周期,是連續讀寫一個突發長度。
解法:
寫一個數據需要的時間 = 1 / 80MHz = 12.5ns
寫一個突發需要的時間 = 120 * 12.5ns = 1500ns
讀一個數據需要的時間 = 1 / 50MHz = 20ns
每1500ns,120個數據被寫入FIFO,但讀一個數據需要20ns的時間
則1500ns內讀出多少個數據,1500 / 20 = 75
剩下的沒有讀出,就存在FIFO中,則需要120 - 75 = 45
快捷方法:FIFO深度 =120 - 120*50/80 = 45
補充:
讀寫沒有空閑,若fA<=fB,則FIFO不會寫滿,深度為1即可。
2、讀寫都有空閑周期。(讀寫速率大小隨意,可以相等)
fA = 80MHz
fB = 50MHz
Burst Length = 120
兩個連續寫入之間的空閑周期為 = 1(寫使能占得百分比為50%)
兩個連續讀取之間的空閑周期為 = 3(讀使能占得百分比為25%)
解法:
每寫入一個數據等待1個周期再寫入下個數據,即2周期寫入1個數據。
每讀出一個數據等待3個周期再讀出下個數據,即4周期讀出1個數據。
寫一個數據需要的時間 = 2 * (1 / 80MHz) = 25ns
寫一個突發需要的時間 = 120 * 25ns = 3000ns
讀一個數據需要的時間 = 4 * (1 / 50MHz) = 80ns
每3000ns,120個數據被寫入FIFO,但讀一個數據需要80ns的時間
則3000ns內讀出多少個數據,3000 / 80 = 37.5,FIFO深度=120-37.5=83。
快捷方法:FIFO深度 = 120 - 120*(50/4)/(80/2)=82.5=83。
3、考慮背靠背,讀寫速率相等。
讀寫速率相等
每100個時鍾寫入80個數據
每10個時鍾讀取8個數據
突發長度為160 (這個條件其實多余)
解法:
每100個時鍾寫入80個數據,那剩下20個時鍾周期去哪了?
每10個時鍾讀取8個數據,那剩下2個時鍾周期去哪了?
剩下的周期在哪我們不管,只考慮最差的情況,即前20個時鍾周期空閑,后80個周期寫完80個數據,立馬又是寫請求,這次是前80個時鍾周期寫完80個數據,后20個時鍾周期空閑。即連續的寫入,又稱為背靠背。也就可以看成一個突發寫入是80+80=160。
寫一個突發需要的時間:160時鍾周期
則160個時鍾周期內讀出多少個數據,160*8/10=128。
FIFO深度 = 160 - 128 = 32。
4、考慮背靠背,讀寫速率不等。
fA = 20MHz
fB = 40MHz
每1000個時鍾周期寫入500個數據
每4個時鍾周期讀出1個數據
解法:
考慮到“背靠背”的情況突發長度則為500 * 2 = 1000
則為每1000個時鍾周期寫入1000個數據
每4個周期,讀取一個數據。
寫一個數據需要的時間 = 1 / 20MHz = 50ns
寫一個突發需要的時間 = 1000 * 50ns = 50000ns
讀一個數據需要的時間 = 4 * (1 / 40MHz) = 100ns
每50000ns,120個數據被寫入FIFO,但讀一個數據需要100ns的時間
可以計算出,50000ns內讀出多少個數據,50000 /100 = 500
剩下的沒有讀出,就存在FIFO中,則需要1000- 500 = 500
5、以下關於FIFO描述正確的是(CD)
A.空信號是在寫時鍾域產生的,滿信號是在讀時鍾域產生的
B.外部可以直接操作FIFO的讀寫地址
C.FIFO可以分為同步FIFO和異步FIFO
D.FIFO是先進先出的存儲器
解答:A、“寫滿讀空”。空信號是在讀時鍾域產生的,滿信號是在寫時鍾域產生的;B、FIFO(First Input First Output,先入先出隊列),外部不可以直接操作FIFO的讀寫地址。
6、單口RAM、雙口RAM、FIFO三者之間的關系
單口只有一組數據線與地址線,因此讀寫不能同時進行,而雙口有兩組數據線與地址線,讀寫可以同時進行。RAM有地址線,可以對存儲單元尋址,FIFO沒有地址線,不能對存儲單元尋址,此外RAM數據讀完還有,FIFO數據讀完就沒有了。
7、偽雙口RAM和真雙口RAM的區別?
偽雙口RAM,一個端口只讀,另一個端口只寫,且寫入和讀取的時鍾可以不同,位寬比可以不是1:1,而真雙口RAM兩個端口都分別帶有讀寫端口,可以在沒有干擾的情況下進行讀寫,彼此互不干擾。