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