摘 要: 在USB收發(fā)器基礎(chǔ)上設(shè)計UTMI時應(yīng)注意的細節(jié)問題,并給出了最后的仿真波形。
關(guān)鍵詞: UTMI USB1.1 CPLD
研制和開發(fā)使USB的數(shù)據(jù)能夠在普通網(wǎng)線上傳播,以延長USB設(shè)備和主機之間距離的裝置具有廣泛的應(yīng)用價值[1]。為此需要一個能夠透明地轉(zhuǎn)換USB數(shù)據(jù)的設(shè)備。該設(shè)備在功能上與集線器有些相似,但現(xiàn)有的集線器芯片不能滿足這一要求。因此有必要自行設(shè)計一種UTMI(USB Transceiver Macrocell Interface)。利用這種UTMI還可以更方便地設(shè)計相應(yīng)的串行接口引擎(SIE)及更進一步設(shè)計應(yīng)用的外部設(shè)備。本文以Philip公司的ISP1105為例,詳細介紹在USB transceiver的基礎(chǔ)上設(shè)計UTMI的細節(jié)問題,并給出了最后的仿真波形。
1USB收發(fā)器
UTMI是在USB收發(fā)器的基礎(chǔ)上工作的。ISP1105完全兼容USB1.1協(xié)議[2],支持12Mbps全速傳輸和1.5Mbps低速傳輸。既可以用作設(shè)備收發(fā)器,也可以用作主機收發(fā)器,同時支持單邊和差分2種檢測方式,其功能框圖如圖1所示。圖中:為低電平時驅(qū)動器處于發(fā)送狀態(tài),高電平時為接收狀態(tài)。當MODE為高電平時,ISP1105驅(qū)動器處于差分驅(qū)動模式(模式1),其對應(yīng)的引腳功能(輸出功能)如表1所示,接收引腳的功能(輸入功能)如表2所示。詳細資料請參考Philip公司網(wǎng)站[3]。
2UTMI設(shè)計
UTMI位于USB收發(fā)器和SIE之間,負責USB收發(fā)器的串行差模數(shù)據(jù)和SIE的并行數(shù)據(jù)之間的相互轉(zhuǎn)換。圖2描述了UTMI在USB應(yīng)用中的位置。
2.1 UTMI結(jié)構(gòu)框圖
UTMI結(jié)構(gòu)框圖如圖3所示。UTMI主要由接收部分、發(fā)送部分和時鐘邏輯模塊組成。時鐘邏輯模塊根據(jù)USB總線上的數(shù)據(jù)產(chǎn)生同步時鐘,并利用這個基本的時鐘來接收和發(fā)送數(shù)據(jù)。接收數(shù)據(jù)時,依次進行NRZI解碼、剔除填充位、串并轉(zhuǎn)換,然后輸出到SIE;發(fā)送數(shù)據(jù)時,依次進行并串轉(zhuǎn)換、位填充、NRZI編碼,然后由發(fā)送模塊輸出到USB收發(fā)器。
2.2 DPLL
USB是一種異步傳輸模式,發(fā)送端和接收端的時鐘來自不同的晶振,雖然額定速率都是12Mbps或1.5Mbps,但仍然可能造成0.25%的偏差。因此,為了保證時鐘和數(shù)據(jù)相互鎖定,需要產(chǎn)生一個可以調(diào)節(jié)的時鐘源,該時鐘源即由DPLL(Data Phase Lock Logic)來實現(xiàn)。以全速傳輸為例,USB主機或集線器以12Mbps的速率發(fā)送數(shù)據(jù),而在接收端則采用48MHz的時鐘對數(shù)據(jù)進行過抽樣(over sample)。正常情況下,4個48MHz的時鐘寬度正好等于1個接收位的寬度。當主機的速率大于或小于12Mbps時,DPLL就減少或者增加1個時鐘的高低電平來進行調(diào)節(jié)。這一功能由圖4所示的DPLL狀態(tài)機來實現(xiàn)。
在圖4中,A是在48MHz時鐘的上升沿對RCV采樣的數(shù)據(jù),B是在48MHz時鐘的下降沿對RCV采樣的數(shù)據(jù)。由圖4可以看出,DPLL狀態(tài)機有0~7和B~F共13個狀態(tài)。系統(tǒng)復(fù)位以后進入狀態(tài)C,狀態(tài)C和D可以鎖定接收到的差模數(shù)據(jù)流,因為系統(tǒng)在經(jīng)過D進入狀態(tài)5之前數(shù)據(jù)流至少存在2個邊沿的跳變(一般是在SYNC的前2個位)。對應(yīng)于接收到的差模數(shù)據(jù)“1”和“0”,狀態(tài)機會在5-7-6-4和1-3-2-0之間循環(huán)。DPLL處于5、4、1、0以及C、D時輸出低電平,處于7、6、3、2和B、F時輸出高電平。當接收到的位寬度沒有變化時,系統(tǒng)就在5-7-6-4和1-3-2-0處循環(huán);當位寬度變窄時,系統(tǒng)就繞過4和0,轉(zhuǎn)而在6和2處開始循環(huán),以減少1個48MHz的低電平;當位寬度變寬時,系統(tǒng)就繞過B和F再分別轉(zhuǎn)到2和6,從而增加1個48MHz的高電平,這樣就保證了時鐘和數(shù)據(jù)的相互鎖定。用Verilog語言實現(xiàn)的DPLL狀態(tài)機的仿真波形如圖5所示。
圖5中:CLK為原始時鐘,USB_IN為輸入的差模數(shù)據(jù),CLK_OUT為輸出時鐘,STATE為DPLL所處的狀態(tài),SD_OUT為USB_IN的采樣輸出數(shù)據(jù)。由圖5可以看出,當接收位較寬時,狀態(tài)機額外增加了1個狀態(tài)B的高電平;當接收位較窄時則越過狀態(tài)4,由狀態(tài)6直接轉(zhuǎn)到狀態(tài)1,狀態(tài)機減少了1個低電平,從而達到了數(shù)據(jù)同步的目的。
2.3 SYNC及EOP的檢測
完整的SYNC是0x80,由KJKJKJKK 8個位組成。第1位由于集線器重放等原因可能產(chǎn)生畸變,因此檢測SYNC時可以只檢測最后幾位。第1個SYNC時DPLL從第2個狀態(tài)J開始才能有時鐘輸出,而以后的SYNC則從第1個狀態(tài)K就有時鐘輸出。觀察一下SYNC的組成,不難看出只要最后4個位KJKK就可以完全檢測到SYNC了。由此,可得出如圖6所示的SYNC檢測狀態(tài)機以及如圖7所示的相應(yīng)的仿真波形圖。
EOP的檢測也存在同樣的問題。USB規(guī)定全速率接收器必須將后跟1個J變化的、大于等于82ns寬的SE0作為一個有效的EOP來予以接收。對于低速收發(fā)器來說,這個寬度則是330ns。EOP檢測狀態(tài)機以及相應(yīng)的仿真波形圖如圖8所示。
3 綜合與仿真
接收數(shù)據(jù)時,UTMI首先匹配SYNC字段。匹配完成后,系統(tǒng)進入接收數(shù)據(jù)狀態(tài),此時RxActive為高電平。UTMI對接收到的串行數(shù)據(jù)進行NRZI解碼,去掉填充位,送入接收移位寄存器,滿8位后輸出到并行數(shù)據(jù)線,并置RxValid為高電平。UTMI檢測到EOP以后,就拉低RxActive,表明接收1個分組的結(jié)束。接收1個SETUP分組的仿真波形如圖9所示,數(shù)據(jù)為SETUP(0xB4)+Addr(0x00)+EndPoint(0x00)+CRC5(0x08)。
發(fā)送數(shù)據(jù)時,UTMI需要置OE為低電平,以使驅(qū)動器處于發(fā)送狀態(tài)。此時,TxValid應(yīng)為高電平,表明并行數(shù)據(jù)線上有數(shù)據(jù)等待發(fā)送。UTMI首先發(fā)送SYNC,然后讀取并行數(shù)據(jù)線上的數(shù)據(jù),完成串并轉(zhuǎn)換后,依次進行位填充和NRZI編碼,再根據(jù)表1的規(guī)定將數(shù)據(jù)發(fā)送到VPO和VMO上。完成1個字節(jié)的發(fā)送后,UTMI應(yīng)該置TxReady為高電平,表明UTMI可以繼續(xù)發(fā)送下一個字節(jié)。數(shù)據(jù)發(fā)送完成后,UTMI應(yīng)該繼續(xù)發(fā)送EOP信號,然后拉高OE,表明1個分組發(fā)送完畢。發(fā)送1個ACK分組(0x4B)的仿真波形如圖10所示。
4 結(jié)束語
在Lattice公司的ISP expert7.0開發(fā)平臺上,利用Verilog HDL語言實現(xiàn)了USB1.1的UTMI,并完成了最后的綜合和仿真測試。
參考文獻
1 張念淮,江浩.USB總線接口開發(fā)指南.北京:國防工業(yè)出版社,2001
2Universal Serial Bus Specification Revision1.1.http://www.usb.org,2003.10
3 ISP1105 datasheet.http://www.semiconductors.philips.com.2003.10