基于简单的FIFO提供数据宽度转换
摘要: 本设计方案描述了为不同宽度读写数据端口的数据宽度转换,怎样基于FPGA的FIFO实现共有时钟(同步)。可以使用Xilinx的Spartan II系列FPGA实现这种FIFO。这个方法使用了片上DLL(延迟锁相环)宏、分布式存储器和简单的计数器逻辑。
Abstract:
Key words :
許多設計需要FIFO彈性緩沖器,在不同時鐘速率的次系統和通道的需求中形成橋梁。然而,在某些應用中,需要FIFO緩沖器實現數據轉換。一個例子是,通過FIFO緩沖器,將8位ADC連接到16位數據總線的微處理器(圖1)。不幸地,大部分普遍使用的FIFO緩沖器不適于這個應用。本設計方案描述了為不同寬度讀寫數據端口的數據寬度轉換,怎樣基于FPGA的FIFO實現共有時鐘(同步)??梢允褂肵ilinx的Spartan II系列FPGA實現這種FIFO。這個方法使用了片上DLL(延遲鎖相環)宏、分布式存儲器和簡單的計數器邏輯(圖2)。


FIFO輸入數據的寬度為8位;然而,輸出數據的寬度為16位。在讀寫動作中只使用一個共有時鐘。關鍵是為了使用時鐘DLL,它不只是最小化時鐘脈沖相位差,還提供雙倍輸出的時鐘頻率。所以,可以實現輸入數據的雙重數據率,write_data_in。通過監測DLL輸出時鐘的樣本,DLL可以補償走線網絡的延遲,有效地消除外部輸入端口到設備中單獨時鐘負載的延遲。替代使用的阻塞存儲器,本設計在FIFO中使用分布式存儲器保存數據。實際上,選擇阻塞存儲器還是分布式存儲器,依靠系統中FIFO的重要性。如果不是很關鍵,可以考慮使用分布式存儲器。
存儲器可以放在FPGA的任何位置。如果堅持使用阻塞存儲器,可以簡單的改變VHDL代碼。可只使用一些RAM宏來替代分布式存儲器。點擊下載FIFO 的VHDL代碼。FIFO一般使用Gray代碼計數器或線性反饋移位寄存器作為讀或寫計數器。為實現邏輯大小的最小化,本設計只使用兩個從0到7的整數和帶進位的計數器。當讀和寫計數器相等,且進位為0時,FIFO為空。當寫計數器加1等于讀計數器,且進位為1時,FIFO為滿。
此內容為AET網站原創,未經授權禁止轉載。
