Xilinx FIFO Generator 需注意非對稱位寬
系列文章推薦
- Xilinx FIFO Generator 需要注意RST複位
- Xilinx FIFO Generator 需要注意Actual Depth
- Xilinx FIFO Generator 需注意非對稱位寬
- Xilinx FIFO Generator 需要注意BRAMs的資源消耗
在FIFO的使用中,經常會涉及到非對稱位寬的情況,比如輸入位寬為
32 bit
,輸出位寬為
64 bit
;
Xilinx 的FIFO IP支援類似的操作(Altera的也支援)。
但是有些條件受限制,在沒有仔細檢視手冊之前,不能想當然的認為什麼樣的比率都支援。
從
pg057-fifo-generator.pdf,Page114
中,能擷取到以下資訊。
是否支援
非對稱的比率是否支援受不同的RAM類型影響,如下表:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIXZ05WZj91YpB3IwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxieJRlTyEkaNhXT6hFMG1mYw50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2ITMwEjMyIjMxETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
由表中可以看出Block RAM和Built-in類型的RAM在獨立時鐘和共同時鐘的條件下都是支援非對稱位寬的, 其他的則不行;
比率可選
非對稱比率值得是允許輸入和輸出
FIFO
的深度不同,支援的寫入和讀出比率為:
1:8,1:4,1:2,1:1,2:1,4:1,8:1;
比率可以在生成FIFO的
Vivado IP Catalog
的GUI界面,通過特殊選項進行選擇(預設狀态下是1:1);
從
1:8
到
8:1
的比率都是可以選擇的,而且輸出的深度是根據輸入的深度,位寬以及讀出的位寬自動計算的。
讀寫操作
對于非對稱比率的FIFO來說,
FULL
信号和
EMPTY
信号僅當一個完整的字(了解為較長的位寬)可以被寫入或讀取的時候才有效。
FIFO不允許部分字進行存取。
比如,假設一個
FULL
狀态下的FIFO,如果寫入的
width
為
8 bits
,讀出的
width
為
2 bits
,應該完成4次有效的讀操作,
FULL
信号才能解除斷言,進而寫操作才能夠繼續進行。
寫操作計數根據寫端口的比率來顯示FIFO中的字數(以寫入位寬為一個字的個數),讀操作計數根據讀端口的比率來顯示FIFO中的字數(以讀出位寬為一個字的個數);
1:4比率資料順序
下圖用例為
1:4
比率的FIFO(寫入width為2,讀出width為8)。
圖例中,在讀操作之前有
4
次連續的寫操作被執行。第一個寫操作為
01
,接着為
00,11
,最後一個為
10
。
記憶體填充為從左至右(MSB到LSB)。當一個讀操作執行過後,接收資料為
01_00_11_10
;
下圖展示了
1:4
比率FIFO的
din,dou
t和一些握手信号的波形。在4個字被寫入FIFO之後,
EMPTY
信号取消斷言。而後一個讀操作,
EMPTY
信号恢複斷言。
4:1比率資料順序
下圖用例為
4:1
比率的FIFO(寫入width為8,讀出width為2)。
圖例中,依次寫操作執行後,有
4
次讀操作執行。
寫操作的資料為
11_00_01_11
。當讀操作執行後,從左至右(MSB到LSB)的資料将被讀資料接收。如下圖展示,第一個讀出的記過為
11
,接着是
00,01
,最後為
11
。
下圖展示了
4:1
比率FIFO的
din,dout
和一些握手信号的波形。一個時鐘的寫操作之後,FIFO取消斷言
EMPTY
信号。因為沒有其他的寫操作執行,FIFO在4次讀操作之後恢複斷言。
總結
在使用非對稱位寬比率FIFO的時候,需要注意以下兩點:
- 比率是否支援,僅支援1,2,4,8這幾種倍率關系;
- 資料讀寫的順序,需要判斷資料的MSB和LSB是否與預期一緻;
推薦例化IP之後,先做推薦的modelsim仿真,熟悉FIFO IP的資料傳輸方式,握手信号,再進行設計;