天天看點

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

Xilinx FIFO Generator 需注意非對稱位寬

系列文章推薦

  1. Xilinx FIFO Generator 需要注意RST複位
  2. Xilinx FIFO Generator 需要注意Actual Depth
  3. Xilinx FIFO Generator 需注意非對稱位寬
  4. Xilinx FIFO Generator 需要注意BRAMs的資源消耗

在FIFO的使用中,經常會涉及到非對稱位寬的情況,比如輸入位寬為

32 bit

,輸出位寬為

64 bit

Xilinx 的FIFO IP支援類似的操作(Altera的也支援)。

但是有些條件受限制,在沒有仔細檢視手冊之前,不能想當然的認為什麼樣的比率都支援。

pg057-fifo-generator.pdf,Page114

中,能擷取到以下資訊。

是否支援

非對稱的比率是否支援受不同的RAM類型影響,如下表:

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

由表中可以看出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

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

下圖展示了

1:4

比率FIFO的

din,dou

t和一些握手信号的波形。在4個字被寫入FIFO之後,

EMPTY

信号取消斷言。而後一個讀操作,

EMPTY

信号恢複斷言。

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

4:1比率資料順序

下圖用例為

4:1

比率的FIFO(寫入width為8,讀出width為2)。

圖例中,依次寫操作執行後,有

4

次讀操作執行。

寫操作的資料為

11_00_01_11

。當讀操作執行後,從左至右(MSB到LSB)的資料将被讀資料接收。如下圖展示,第一個讀出的記過為

11

,接着是

00,01

,最後為

11

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

下圖展示了

4:1

比率FIFO的

din,dout

和一些握手信号的波形。一個時鐘的寫操作之後,FIFO取消斷言

EMPTY

信号。因為沒有其他的寫操作執行,FIFO在4次讀操作之後恢複斷言。

Xilinx FIFO Generator 需注意非對稱位寬Xilinx FIFO Generator 需注意非對稱位寬

總結

在使用非對稱位寬比率FIFO的時候,需要注意以下兩點:

  1. 比率是否支援,僅支援1,2,4,8這幾種倍率關系;
  2. 資料讀寫的順序,需要判斷資料的MSB和LSB是否與預期一緻;

推薦例化IP之後,先做推薦的modelsim仿真,熟悉FIFO IP的資料傳輸方式,握手信号,再進行設計;