[Craftor原创]EZ-USB与FPGA的通信接口设计
?
聲明:Craftor原創,轉載請注明出處。
?
使用芯片:CY7C68013A(Cypress)與XC3S50AN(Xilinx)
?
一、原理圖
FPGA與EZ-USB通過異步FIFO方式連接,以下截圖來自于Cypress的手冊EZ-USB_TRM.pdf。
將圖9-19和9-22兩圖中的信號合并在一起,與FPGA連接即可。
本例子中使用了以下信號: FIFOADR[7:0](只用了8位總線)、SLRD、SLOE、SLWR、FLAGA(配置成EP6 FULL)、FLAGB(配置成EP2 EMPTY)、PKTEND(常1)、SLCS#(常0)
?
二、FPGA讀寫SlaveFIFO時序
異步寫,在FULL不為0的時候,SLWR下降沿的時候將寫的數據放到總線上,保持一個周期即可將數據寫入。
異步讀,在EMPTY不為0的時候,將SLOE和SLRD拉低,過半個周期讀總線上的數即可。
?
-->附件中有原理圖可以參考
?
三、FPGA代碼
工程結構如下圖,在Xilinx ISE中。
1)usb_bmd.v為頂層測試文件,測試上行和下行的數據。
2)RX_FIFO為下行數據緩存FIFO,TX_FIFO為上行數據緩存FIFO。
本工程中直接例化了FPGA內部的FIFO,可根據實際情況適當加大或減小FIFO,最小深度不得低于512。
3)usb_trx為FPGA與CY7C68013A通信的核心模塊,包括:rx_engine.v下行接口,tx_engine上行接口,clk_div.v分頻模塊(控制FPGA讀寫SlaveFIFO的頻率,不高于48M)。
可以根據實際電路情況調高或降低分頻系數,但不建議修改,源代碼中的分頻系數已經為實測最佳情況,雙面板沒有做任何阻抗匹配的情況下,可以穩定傳輸數據。如果PCB阻抗做的比較好,可又適當調高試試。
4)S3an.ucf為管腳約束文件,可又根據自己的FPGA管腳進行修改。
?
-->附件中有Verilog源代碼
?
二、固件程序,見附件CFR-FIFO-1.1.iic
通過CyConsole下載到外部的EEPROM中即可(在學習筆記[1]中有說明如何下載)。
該固件中使用了異步SlaveFIFO模式,使用端點EP2和EP6,512B 大小,4倍緩沖。
-->該固件僅供學習使用,源代碼不公開,也不需要公開。
?
三、測試
1)使用EZ-USB CyConsole,選擇Endpoint 6 IN,接收到的數為00~FF。
因為在usb_bmd.v代碼中,不斷向TX_FIFO中寫入8位的cnt,從0開始。如下圖
2)使用CyBulkLoop程序,進行閉環測試。數據包長度為512,從0開始累加,測試結果如下圖。
細心的讀者可以發現,實際在usb_bmd代碼中做了手腳,上傳的數據并不是真正下發的數據,而是自己上傳的00~FF。
因為如果將代碼中的RX和TX進行閉環,是下行一個數據(8b)立即上傳一個數據的。而USB的SlaveFIFO是512B的,每次上行數據最小是512B,而且必須是512B的整數倍。在實際應用中需要注意。
附件:
http://dl.dbank.com/c04h9fkkbu
轉載于:https://www.cnblogs.com/craftor/archive/2011/11/05/2236870.html
總結
以上是生活随笔為你收集整理的[Craftor原创]EZ-USB与FPGA的通信接口设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查看ORACLE 下所有信息
- 下一篇: 博客园第一天