基于FPGA的USB接口IP核設計
USB總線上的數據首先通過UTM,進行NRZI解碼和位剝離后,串并轉換為8位并行數據,傳送給SIE中的UTMI或從UTMI接收8位并行數據,經過NRZI編碼和位填充后,發送到USB總線。由于USB系統采用NRZI編碼,對于一串0來說,它的數據線的電平狀態會按位跳變,對以一串l則不然,電平會長時間不變,可能導致數據接受方的時間同步漂移,為了避免漂移,每遇到6個1就在NRZI編碼之前加0,即位填充。
NRZI的vefilog實現代碼為: 本文引用地址:http://www.104case.com/article/202558.htm
2.2 串行接口引擎
串行接口引擎(Serial Interface Engine,SIE)主要由PL(Protocol Layer),MA(memory buffer arbiter),UTMI(UTM Interface)等組成。PD,PA,PE3個模塊組成了USB SIE的協議層(PL)。
UTMI(UTM Interface)是UTM和SIE的接口主要功能是檢測總線狀態以及識別總線速度。負責PL與UTM的數據交換。
PD將UTMI接收到的信息數據包進行解析,解析出包標識(PID)、端點地址和設備地址以及包含在包中的有效數據命令。在解碼時,對PID進行校驗,即PID[7:4]~PID[3:0],還要對必要的令牌包進行CRC5校驗,對數據包進行CRCl6校驗。CRCl6,CRC5多項式為:x16+x15+x2+1和x5+x2+1。
設計中把命令解碼電路也設計在PD上,解碼電路的設計思路是:通過一個計數器將8 bit的命令數據分別存放在8個:Register中,然后對Register進行解碼,來判斷該條命令帶表的含義和執行的操作。例如:Get Descriptor命令,主機發送的命令數據為8’ha0,8’h06,8’h00,8’h01,8’h00,8’h00,8’h4O,8’h00,然后解碼電路根據這8 bit來判斷命令的含義。如果主機發送命令有誤,或該設備不支持命令,則這條命令被忽略或返回NAK握手包。
PA根據PE(Protocol Engine)送來的PID組織相應的信息包,把要發送的數據安排在相應的數據包,或者令牌包。發送令牌包時,不必產生CRC5校驗位。在發送數據包寸,需要把有效數據的CRCl6校驗位放在包末尾一起發送。
PE可以對IN,OUT以及Setup事務進行單線程處理,且確定當前傳輸事務要操作的端點地址,所有對MA和RF的當前操作都基于這個端點地址。PE要根據當前端點的配置或當前狀態處理傳輸事務,并在傳輸事務中實時更新控制/狀態寄存器CSR。SIE還能通過CSR中的中斷向量請求設備總線的控制支持。
3 系統仿真與實現
設計中包含了UTM,SIE,并根據協議寫出了含有設備描述符的ROM。這樣IP具有USB接口的功能,可以作為一個USB設備與主機進行通信。根據USB協議,模擬主機動作編寫Testbench,它主要由模擬主機數據包(Send Data),Stuffing檢測,CRC校驗檢錯等來仿真。仿真波形,如圖5所示。
最后將電路用ASIC實現。采用0.35μm CMOS工藝實現后端設計,數字電路采用單元庫自動布線,模擬電路手工繪制版圖,并進行DRC和LVS檢查,最終版圖預覽圖,如圖8所示,芯片面積為1.2 ms2;經過后仿真得出:工作頻率為120 MHz,工作電流9 mA,靜態電流40μA。工作頻率可以實現高速USB協議的要求,功耗、電流等參數也符合設計要求。
本設計與國內其他的研究結果進行比餃,如表1所示。
從表1中對表可以看出,本設計在滿足頻率(FX8>480 MHz)的條件下,精簡了多個單元,節省了資源,完全符合USB協議的要求。將IP下載到FPGA中與主機通信,主機能正確讀出設備描述符和正確完成其他操作,并在主機端顯示USB2.0 Device。進一步證明了設計的正確性和實用性。
4 結束語
文中介紹了基于USB協議層模塊的設計,最后在Modelsim6.0下仿真和ISE9.1進行了綜合,采用Xilinx Spartan3E的XC3S1OOE進行FPGA驗證,并利用0.35μm CMOS工藝進行系統的后端設計。實現了工作頻率120 MHz,功耗30 mW。
結果表明,設計的USB協議層模塊各功能達到了預期目標、整體性能良好。此IP core可以廣泛應用于各種USB設備接口、通信轉接器件,也可以集成在SOC中,作為系統芯片總線接口。文中設計的USB IP已成功地應用于兩款USB設備端的接口控制芯片(USB轉PS/2接口IC和USB集線器IC),在實際應用中性能可靠、速度穩定,而且價格低廉。
評論