您好,登錄后才能下訂單哦!
FIFO
FIFO:
中文意思:先進先出【類似于堆棧】
作用:
在FPGA中,一般用于不同時域之間的數據傳遞,比如FIFO的一端是AD采集,另一端是計算機PCI總線,假設AD的采集速度一般都是幾百Kb/s,PCI總線的速度為200Mb/s,在這倆個的時域中傳遞數據時就可以采用FIFO來作為數據緩沖。同時FIFO還可以作為不同數據寬度之間的傳遞FIFO也是可以勝任的,比如UART收到的數據傳遞給USB。UART收到的數據是8位的數據,USB傳遞的16數據,如果之間傳遞,他們是不同的時域,傳輸的速度也是不一樣的,為了解決這個我們可以使用FIFO,
將讀寫時鐘配置為rd_clk、wr_clk;
讀寫數據寬度 配置寫8位數據,讀16位數據;
同時我們根據需求還可以選擇對應標志位,使能位有效時間等。
分類:
FIFO的類型及FIFO說明:
根據數據出現在輸出總線上的時間不同分為不同的種類。
普通FIFO:每次在使能位有效的情況下,讀時鐘和寫時鐘的上升沿來時,將數據讀出 來,一個時鐘一個數據。
預取FIFO:寫時同普通FIFO一樣,讀時數據提前輸出到總線上,比普通FIFO早一個時鐘。
FIFO的生成:
同其他的IP生成是一樣的,我們選擇對應的IP核后,會有對應的配置向導,根據向導選擇對應的參數。
簡單的步驟就省略掉了。
我們命名好了FIFO的名字后,就來到以下的界面,接下來我們要進行一些相應的配置。
1關于interface的選擇,【百度的,】native是做soc工程
Next后,需選擇時鐘和存儲類型。
1,時鐘:一般根據FIFO的作用,讀寫時鐘是不同步。
2,存儲類型:有block RAM 和 distibute RAM兩種。
【百度】由此區別表明,當FIFO較大時應選擇block RAM,當FIFO較小時,選擇distribute RAM.另外一個很重要的就是block RAM支持讀寫不同寬度,而distribute不支持。在這里為了更全面的了解FIFO,選擇block RAM以擁有非對稱方向速率的特性。
FIFO讀寫模式:
標準模式和預取模式。通常我們選擇標準模式,至于預取FIFO的作用目前還沒有遇到。
我們選擇位寬和深度后,地址自動就生成了。
data port parameters 中的actual write depth和actual read depth
我們設置完時鐘和數據后,就該添加控制信號了
控制信號越多操作越復雜,同時對FIFO的控制更加精準了
1、標志位,半空和半滿
2、……
復位信號和可編程信號的配置。雖然在block RAM和distribute RAM中,啟用rst端口,且配置成同步復位,即整個FIFO共用一個復位信號,而不是讀寫不同的復位。至于編程信號,看選項就很容易理解了。配置如圖,FIFO中數據達到200時,programmable full有效,數據為10時,programmable empty有效。
之后是寫計數和讀計數,都使之有效,由于寫深度是256,讀深度是512.因此寫計數器的寬度定義為8,讀計數器的狂度定義為9.其實不一定計數器一定要比深度大,當計數器計數最大值小于數據深度時,例如數據深度為512,而計數器大小為256,則每兩個數據計數器計數一次。
最后可以看到我們配置的FIFO信息如下(注意幾個關鍵信息),最后生成IP就好了。
【有效電平】
Rst 高電平有效
復位后(2,3)個周期內是無法進行寫操作的;
Wr_en 在拉高的上升沿時,數據立即生效
Rd_en 在讀上升沿并沒有進行讀數據,而是在下一個上升沿時進行讀操作
關于計數,如果計數值設置的不夠大時一開始就會失效,成為高阻狀態。
讀寫計數是大概不準.
上升沿是時鐘上升沿 不是wr_en 和rd_en的上升沿, 【信號觸發后clk的上升沿生效】
空滿標志有效電平是?高有效
仿真結果圖
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。