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