金君瀟,王亞軍,趙琳娜,虞致國,魏敬和,顧曉峰
(1. 江南大學電子工程系輕工過程先進控制教育部重點實驗室,江蘇 無錫 214122;2. 中國電子科技集團公司第58研究所,江蘇 無錫 214035)
通用串行接口(USB)技術(shù)在計算機外圍設(shè)備接口領(lǐng)域占據(jù)統(tǒng)治地位,在各種片上系統(tǒng)(SoC)中集成USB接口已成為趨勢[1~3]。一套完善的USB設(shè)備接口芯片可為SoC提供性能優(yōu)良、連接簡便的接口,成為多數(shù)主流SoC平臺的必備。目前USB接口的主流版本是USB2.0。USB2.0設(shè)備接口芯片負責實現(xiàn)外設(shè)和USB主機的通信,內(nèi)置通用可編程接口和8位/16位數(shù)據(jù)總線,為外部邏輯提供簡易的無膠合接口[4~5]。傳統(tǒng)的基于USB設(shè)備芯片的數(shù)據(jù)傳輸由微控制器控制,而微控制器運行速度不快,限制了數(shù)據(jù)的傳輸速率。本文以USB2.0高速設(shè)備接口芯片8位/16位外部數(shù)據(jù)總線為基礎(chǔ),提出一種能夠使USB設(shè)備接口芯片成為從屬模式的工作機制。采用Verilog硬件描述語言設(shè)計了包括外部控制器、外部數(shù)據(jù)存儲器的仿真平臺,加以驗證模型技術(shù)(Verification Modeling Technology,VMT)[6~8]例化主機模型作為數(shù)據(jù)發(fā)送、回讀端,通過仿真驗證設(shè)計的正確性。
一般USB設(shè)備接口芯片內(nèi)置微控制器和特殊結(jié)構(gòu)的緩存機構(gòu)FIFO(First In First Out)參與數(shù)據(jù)的傳輸,外設(shè)和芯片內(nèi)部總線共享FIFO緩存。若以微控制器控制FIFO的數(shù)據(jù)交互,則傳輸速率必然受控于微控制器的工作頻率,從而限制主機與設(shè)備之間的數(shù)據(jù)傳輸速率。而在從模式下工作的USB設(shè)備芯片,微控制器CPU不參與數(shù)據(jù)交互,只是配置相關(guān)的寄存器。一旦寄存器配置完成,設(shè)備芯片工作在從模式下之后,外部控制器即可按照從模式的傳輸時序與主機進行高速通信;此時,F(xiàn)IFO作為數(shù)據(jù)端點緩存(EndPoint,EP)。為兼容USB2.0協(xié)議[9],設(shè)置4個EP分別為EP2、EP4、EP6、EP8,可根據(jù)需要設(shè)置其大小和緩沖空間倍數(shù),這種配置方式為滿足大容量數(shù)據(jù)傳輸所需的帶寬提供了保證。外部控制器能對EP進行同步寫、同步讀、異步寫、異步讀4種工作模式,其中寫過程是向方向設(shè)置為IN的端點寫入數(shù)據(jù),讀過程是從方向設(shè)置為OUT的端點讀出數(shù)據(jù)。
從模式模塊主要分為端點緩存、微控制器8051及端點緩存的外部接口[10]。圖1給出了從模式下的數(shù)據(jù)傳輸結(jié)構(gòu)圖。
圖1 從模式數(shù)據(jù)傳輸結(jié)構(gòu)圖
從模塊接口用于連接端點緩存EP與外部控制器Master,接收Master發(fā)送過來的讀寫信號SLRD、SLWR和短包寫信號PKTEND;發(fā)送端點狀態(tài)信息FULL、EMPTY;接收或發(fā)送IFCLK時鐘,時鐘信號可選擇是外部輸入或內(nèi)部輸出;接收端點地址FIFOADDR。圖1中和外部接口相關(guān)的引腳含義如下。
(1)IFCLK:作為通信的同步時鐘,采樣數(shù)據(jù);(2)FD[7:0]:雙向數(shù)據(jù)總線;(3)SLOE:從模塊的輸出使能,由Master控制,當SLOE無效時,數(shù)據(jù)線不輸出有效數(shù)據(jù);(4)SLWR:從模塊寫信號,由Master控制,在SLWR有效時,每個IFCLK的有效沿時數(shù)據(jù)被寫入,F(xiàn)IFO指針遞增;(5)SLRD:從模塊讀信號,由Master控制,在SLRD有效時,每個IFCLK的有效沿數(shù)據(jù)被讀出,F(xiàn)IFO指針遞增;(6)SLCS:FIFO的片選信號,由Master控制,當SLCS輸出高時,不可進行數(shù)據(jù)傳輸;(7)PKTEND:包結(jié)束信號,由Master控制,在正常情況下,外部邏輯向端點緩存中寫數(shù)據(jù),當寫入端點的字節(jié)數(shù)等于設(shè)定的包大小時,數(shù)據(jù)將自動被打成一包進行傳輸;但有時外部邏輯需要傳輸一個字節(jié)數(shù)小于設(shè)定包大小的包,此時它只需在寫入一定數(shù)目的字節(jié)后,聲明此信號,則設(shè)備芯片不管外部邏輯寫入了多少字節(jié),都自動將之打成一包進行傳輸;(8)EMPTY、FULL:當前EP的空、滿狀態(tài);(9)FIFOADDR:選擇4個端點的地址線,由Master控制。
USB協(xié)議定義了用于發(fā)送和接收數(shù)據(jù)的設(shè)備端點EP,端點是一個用USB數(shù)據(jù)字節(jié)不斷取空和填滿的FIFO。根據(jù)數(shù)據(jù)的傳輸方向,端點可以分為OUT和IN端點,端點緩存只能單方向傳輸,緩存空間一共為4 K。
端點緩存與USB之間以數(shù)據(jù)包的形式進行數(shù)據(jù)交互,外部控制器可以像控制普通FIFO一樣對其進行讀寫。端點的配置十分靈活,根據(jù)不同的帶寬要求,端點可以配置成雙重、三重、四重的緩存。雙重緩存的含義是,USB在讀取一個數(shù)據(jù)包的時候,另一個數(shù)據(jù)包可同時提供外部接口操作;三重緩存提供了另一個數(shù)據(jù)包,機動地為USB或外部接口讀取;四重緩存則提供了第四個數(shù)據(jù)包存儲器。
從模式讀操作中只要有一個FIFO為“半滿”,外部接口就可繼續(xù)讀取數(shù)據(jù)。當前操作的FIFO讀“空”時就自動轉(zhuǎn)換到USB設(shè)備芯片內(nèi)部總線接口,排隊等候USB接口寫入數(shù)據(jù),并將外部接口隊列中為“滿”的FIFO轉(zhuǎn)接到外部接口上,供其繼續(xù)讀取。類似地,對于從模式寫操作,只要有一個FIFO為“半滿”,外部接口就可繼續(xù)發(fā)送數(shù)據(jù)。當前操作的FIFO寫“滿”時就自動轉(zhuǎn)換到USB設(shè)備芯片內(nèi)部總線接口,排隊等候USB接口讀取數(shù)據(jù),并將外部接口隊列中為“空”的FIFO轉(zhuǎn)接到外部接口,供其繼續(xù)寫入。圖2以從模式寫操作為例,給出了對應(yīng)的雙重緩存FIFO的工作機制。
圖2 從模式寫操作雙重緩存FIFO工作機制
將I/O口設(shè)為從模式接口、外部邏輯經(jīng)數(shù)據(jù)總線FD連接端點緩存,F(xiàn)D為雙向接口,由SLOE引腳控制輸出,設(shè)置端點大小和緩存倍數(shù)并復(fù)位端點,并且設(shè)置數(shù)據(jù)傳輸長度大小。從模式8位數(shù)據(jù)同步讀寫配置如下。
(1)IFCLK:配置接口為同步從模式接口,時鐘IFCLK為輸入;(2)EPxCFG:配置EP2、EP4為雙緩沖的512 B的OUT端點,配置EP6、EP8為雙緩沖的512 B的IN端點;(3)FIFORESET:將EP復(fù)位到初始狀態(tài);(4)EPxFIFOCFG:配置EP2、EP4為8 bit傳輸自動讀出的FIFO;配置EP6、EP8為8 bit傳輸自動寫入的FIFO;(5)FIFOPINPOLAR:配置使能信號SLOE、SLWR、SLRD、PKTEND、SLCS和狀態(tài)標志EMPTY、FULL為低有效。(6)EPxAUTOINLENH:L:設(shè)置IN端點的傳輸長度為512 B。
以8051作為微控制器參與寄存器的配置。配置文件Hex文件,經(jīng)過External ROM讀入8051微控制器,為端點傳輸相關(guān)的一些寄存器賦值。
為了驗證設(shè)計的外部控制器對USB數(shù)據(jù)讀寫的功能,在LINUX系統(tǒng)上,以Verilog硬件描述語言為開發(fā)語言,以Synopsys的VCS軟件為仿真工具,搭建了如圖3所示的仿真環(huán)境。仿真環(huán)境包括外部控制器Master、外部數(shù)據(jù)存儲器SRAM、端點緩存EPx、8051微控制器、外部程序存儲器External ROM、串行接口引擎(Serial Interface Engine,SIE)、USB物理層(Physical Layer,PHY)、USB主機Host。
圖3 外部控制器的仿真環(huán)境
(1)Host利用DesignWare庫中的usb_host_vmt[6]模型例化而來,該模型能以USB傳輸包的形式傳輸數(shù)據(jù),并能打印回讀數(shù)據(jù),方便數(shù)據(jù)的一致性檢測;Host作為數(shù)據(jù)發(fā)送端和接收端。(2)USB接口作為EPx和Host之間的數(shù)據(jù)接口,能夠?qū)χ鳈C發(fā)送的數(shù)據(jù)進行解碼、位剔除、串并轉(zhuǎn)換等操作,將數(shù)據(jù)輸入OUT端點中;或者對IN端點中的數(shù)據(jù)進行并串轉(zhuǎn)換、位填充、編碼等操作,將數(shù)據(jù)發(fā)送到Host端。(3)外部讀寫控制器Master產(chǎn)生讀寫狀態(tài)機,用于將數(shù)據(jù)從OUT端點中讀出并寫入到SRAM中,再從SRAM中將數(shù)據(jù)讀回寫入IN端點中。(4)SRAM只作為數(shù)據(jù)的中轉(zhuǎn)站用于存儲數(shù)據(jù),與外部讀寫控制器相連。SRAM接口有地址線A8~A0、數(shù)據(jù)線D15~D0、控制線包括芯片使能、輸出使能、寫使能,高字節(jié)使能信號UB、低字節(jié)使能信號LB。
外部控制器Master的核心是一個狀態(tài)機,完成對EPx空滿的判斷、讀寫使能、EPx地址選擇、數(shù)據(jù)傳輸方向設(shè)置等功能。圖4所示為數(shù)據(jù)總線寬度為8 bit的同步讀寫狀態(tài)機,共11種狀態(tài),描述如下。
I D L E:當有讀事件發(fā)生時,轉(zhuǎn)到狀態(tài)READ_EVENT;READ_EVENT:設(shè)置OUT端點地址,初始化SRAM地址,轉(zhuǎn)到狀態(tài)POINT_TO_OUT_FIFO;POINT_TO_OUT_FIFO:使能SLOE(低電平有效),如果EMPTY(低電平有效)信號為高,則轉(zhuǎn)到狀態(tài)D A T A_R E A D Y,否則停在狀態(tài)使能SLRD,使能,SRAM地址加1,并將數(shù)據(jù)讀入SRAM,轉(zhuǎn)到狀態(tài)READ;READ:不使能SLRD,不使能信號,判斷EMPTY信號,若還有數(shù)據(jù)要讀,則返回狀態(tài)POINT_TO_OUT_FIFO,若沒有則轉(zhuǎn)到狀態(tài)READ_END;READ_END:初始化端點地址,初始化SRAM地址,不使能信號SLWR(低電平有效)、SLRD、SLOE,轉(zhuǎn)到狀態(tài)WRITE_EVENT;WRITE_EVENT:寫事件發(fā)生,設(shè)置IN端點,轉(zhuǎn)到狀態(tài)POINT_TO_IN_FIFO;POINT_TO_IN_FIFO:判斷FULL信號(低電平有效),如果為高,轉(zhuǎn)到狀態(tài)W R I T E_R E A D Y,否則停留在狀態(tài)POINT_TO_IN_FIFO;WRITE_READY:使能SLWR,不使能信號,SRAM地址加1,轉(zhuǎn)到狀態(tài)WRITE;WRITE:不使能SLWR,判斷EMPTY信號,若還有數(shù)據(jù)要讀,則返回狀態(tài)POINT_TO_IN_FIFO,若沒有則轉(zhuǎn)到狀態(tài)WRITE_END;WRITE_END:初始化SRAM地址,轉(zhuǎn)到狀態(tài)IDLE;DEFAULT:默認狀態(tài)為IDLE。
圖4 外部控制器工作狀態(tài)機
整個狀態(tài)機能夠?qū)崿F(xiàn)將主機發(fā)送到OUT端點的數(shù)據(jù)讀出到外部數(shù)據(jù)存儲器,再從外部數(shù)據(jù)存儲器寫入到IN端點,供主機回讀數(shù)據(jù)。主機可根據(jù)回讀數(shù)據(jù)和原始發(fā)送數(shù)據(jù)的對比,驗證狀態(tài)機是否正常工作。
從模式同步讀的仿真結(jié)果如圖5所示。FIFOADDR[1:0]為01,表示參與傳輸?shù)腇IFO為EP4,IFCLK為48 MHz的外部時鐘輸入,下降沿有效,SLOE置低,表示FD[7:0]數(shù)據(jù)輸出到外部控制器中。SLRD置低時讀一個字節(jié)數(shù)據(jù),讀完一個字節(jié)則SLRD置高,以此類推讀完512 byte數(shù)據(jù)。在讀完所有數(shù)據(jù)之后,EMPTY置低,表示EP2內(nèi)已無數(shù)據(jù)可讀。
從模式同步寫的仿真結(jié)果如圖6所示。FIFOADDR[1:0]為10,表示參與傳輸?shù)腇IFO為EP6,IFCLK為48 MHz的外部時鐘輸入,下降沿有效,SLOE置高,表示FD[7:0]數(shù)據(jù)從外部控制器輸出。SLWR置低時讀一個字節(jié)數(shù)據(jù),寫完一個字節(jié)則SLWR置高,以此類推寫完512 bytes數(shù)據(jù),并在寫入最后一個數(shù)據(jù)后,F(xiàn)ULL置低。
圖5 從模式同步讀仿真波形
圖6 從模式同步寫仿真波形
由仿真波形可算出,IFCLK的頻率為48 MHz,每兩個IFCLK時鐘周期寫1 byte(即8 bit)數(shù)據(jù),因此可得出數(shù)據(jù)傳輸速率為96 Mb/s,和其他總線如400 kb/s~3.4 Mb/s的IIC、1.5 Mb/s的UART等相比,傳輸速率有顯著的提高。
設(shè)計實現(xiàn)了基于USB2.0設(shè)備芯片的從模式數(shù)據(jù)傳輸方式,并以Host為主機模型、外部SRAM為設(shè)備模型仿真驗證了該模式的可行性。在從模式下,USB設(shè)備芯片能為ATA、UTOPIA、EPP等主流接口和大多數(shù)DSP提供簡易的無膠合接口,并且數(shù)據(jù)傳輸過程不經(jīng)過微控制器控制,顯著提高了數(shù)據(jù)傳輸速率。
[1] 楊曉光. 基于通用串行總線和有限狀態(tài)機的數(shù)據(jù)發(fā)送系統(tǒng)設(shè)計[J]. 微電子學與計算機,2010,27(4): 162-164.
[2] 胡錦,胡立琴,陳訓亮. 一種嵌入式USB2.0主機控制器IP核的研究與設(shè)計[J]. 微電子學與計算機,2009,26,(1): 133-136.
[3] 馮祎,吳超,王景中. 基于Slave FIFO 模式的CMOS攝像頭接口設(shè)計[J]. 電子測試,2013,(6): 8-9,14.
[4] 王榮博,侯朝煥,陳棟,等. 基于EZ-USB FX2LP的高速數(shù)據(jù)傳輸接口設(shè)計[J]. 電子測量技術(shù),2009,32(4):167-170.
[5] 劉春雅,程旭,趙輝昌. 基于FPGA的數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)[J]. 電子設(shè)計工程,2011,19(1): 50-54,61.
[6] Synopsys. USB on-the-go verification IP VMT user manual[EB/OL]. [2013-07-10]. http://solvnet.synopsys.com/portal/dt.
[7] 劉蕊. 基于VMM驗證方法學的USB控制器IP驗證方案[J].信息通信,2012,3: 286-288.
[8] 高夫,杜學亮,金西. 基于VMT的DDR-SDRAM控制器功能驗證[J]. 計算機工程,2008,34(4): 263-265,274.
[9] Compaq. Universal serial bus specification revision 2.0[S].USA: Compaq Computer Corp : 2000.
[10] Cypress. EZ-USB technical reference manual[EB/OL].[2013-06-07]. http://www.cypress.com/?docID=48811.