USB2.0 SIE 的 ASIC 設(shè)計(jì)與實(shí)現(xiàn)
1 引言
通用串行總線 (USB) 是 公司 1996 年提出、由康柏等七家公司聯(lián)合制定的一種新型接口技術(shù)。 USB 歷經(jīng)七年的發(fā)展,目前已經(jīng)到了 2 . 0 版本。由于數(shù)據(jù)傳輸速率高,傳輸可靠,連接靈活,成本低廉,所以 USB 在 PC 領(lǐng)域獲得了廣泛的應(yīng)用。所有的 USB 傳輸事務(wù)都在 USB 系統(tǒng)軟件控制下進(jìn)行,系統(tǒng)軟件包括 USB 設(shè)備驅(qū)動(dòng)、 USB 驅(qū)動(dòng)和 USB 主控制器驅(qū)動(dòng)程序。 USB 設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與 USB 設(shè)備進(jìn)行通信,它提供了 USB 設(shè)備驅(qū)動(dòng)程序和 USB 主控制器之間的接口。這些軟件負(fù)責(zé)把客戶請(qǐng)求轉(zhuǎn)換為一個(gè)或多個(gè)傳輸事務(wù)進(jìn)行處理,然后被直接送往 USB 目標(biāo)設(shè)備或者被目標(biāo)設(shè)備發(fā)出。
每個(gè) USB 傳輸事務(wù)包含一個(gè)或若千個(gè)信息包,包括令牌包、數(shù)據(jù)包、握手包、專(zhuān)用包,信息包采用了非歸零編碼 () 的串行傳輸方式。為了便于接收端信號(hào)的時(shí)鐘恢復(fù),傳輸中的串行數(shù)據(jù)還要進(jìn)行位填充處理,使串行信號(hào)不跳變的最長(zhǎng)時(shí)間為 6bit 。
2 USB 通信模型
USB 系統(tǒng)采用的塔形拓?fù)浣Y(jié)構(gòu)使 USB 系統(tǒng)只能采用共享總線的方式進(jìn)行通信,即所有設(shè)備只能通過(guò)一條數(shù)據(jù)通路與主控制器進(jìn)行通信。在總線中,每個(gè)設(shè)備具有 - —個(gè)地址,而且每個(gè)設(shè)備中的若干端點(diǎn)也被分配了端點(diǎn)地址。所有通信的數(shù)據(jù)來(lái)源或目的都是基于這些端點(diǎn)地址,所以從客戶軟件看來(lái),對(duì)端點(diǎn)的操作就像處于一個(gè)獨(dú)立的管線中。
在 USB 系統(tǒng)中,對(duì)端點(diǎn)的操作被設(shè)備驅(qū)動(dòng)程序分解為 IRP(I/Orequest packets) 。 USBHOST 把這些 IRP 分解為基本的傳輸事務(wù) ( 如 IN , OUT 等 ) ,安排在相同或不同的幀中。每個(gè)傳輸事務(wù)包含若干信息包,其中包含了與 HOST 通信的設(shè)備地址和端點(diǎn)地址,只有地址對(duì)應(yīng)的設(shè)備或端點(diǎn)才能響應(yīng) HOST 發(fā)出的信息包。
基于以上分析,可以構(gòu)造出設(shè)備端 SIE 通信模型。在這個(gè)模型中,由端點(diǎn)控制/狀態(tài)寄存器 (CSR) 和端點(diǎn) 組成的管線記錄了端點(diǎn)的狀態(tài)和通信的有效數(shù)據(jù)。端點(diǎn)控制邏輯用于端點(diǎn)選擇及端點(diǎn)訪問(wèn)控制。通過(guò) USB 設(shè)備功能接口,設(shè)備功能軟件可以方便地以管線形式對(duì)端點(diǎn)進(jìn)行狀態(tài)控制,以實(shí)現(xiàn) USB 通信。
3 USB SIE 電路結(jié)構(gòu)和設(shè)計(jì)
3.1USB SIE 電路結(jié)構(gòu)
根據(jù) USB 通信模型 ,構(gòu)造的 SIE(serial inter face engine) 電路結(jié)構(gòu)。主要包含 UTMI , PL( 由 PD , PA , PE 組成 ) , MA , UC_RF , BUFFER , WB 等功能模塊 , 可以完成 USB 速度識(shí)別、解析信息包、組構(gòu)信息包、底層協(xié)議處理、緩存管理、中斷請(qǐng)求等功能。此外它還需要外接控制器才能完成 USB 通信。
3.2 USB SIE 各功能模塊說(shuō)明
UTM(USB transceiver macrocell) 主要完成兩個(gè)功能:從 USB 總線上接收數(shù)據(jù),經(jīng)過(guò) 解碼和位剝離后,轉(zhuǎn)換為 8 位并行數(shù)據(jù),傳送給 SIE 中的 UTMI £》或從 UTMI 接收 8 位并行數(shù)據(jù),經(jīng)過(guò) 編碼和位填充后,發(fā)送到 USB 總線。
UTMI(UTM ) 的主要功能有兩個(gè):接受 PD , PA 的控制,在 UTM 數(shù)據(jù)線上輸入或輸出數(shù)據(jù):檢測(cè)總線狀態(tài)以及識(shí)別總線速度。
PD(packet disassembler) 將接收到的信息包數(shù)據(jù)進(jìn)行解析,解析出包標(biāo)識(shí) (PID) 、端點(diǎn)地址和 Function 地址以及包含在包中的有效數(shù)據(jù)。在解碼時(shí),要對(duì)必要的令牌包進(jìn)行 CRC5 校驗(yàn),對(duì)數(shù)據(jù)包進(jìn)行 CRCl6 校驗(yàn)。
PA(packet assembler) 根據(jù) PE 送來(lái)的 PID 組織相應(yīng)的信息包,把要發(fā)送的數(shù)據(jù)安排在相應(yīng)的數(shù)據(jù)包,或者組織令牌包。發(fā)送令牌包時(shí),不必產(chǎn)生 CRC5 校驗(yàn)位。在發(fā)送數(shù)據(jù)包寸,需要把有效數(shù)據(jù)的 CRCl6 校驗(yàn)位放在包末尾一起發(fā)送。
PE(protocol engine) 可以對(duì) IN,OUT 以及 事務(wù)進(jìn)行單線程處理 ( 串行總線不能同時(shí)進(jìn)行兩個(gè)以上 USB 傳輸事務(wù) ) ,且確定當(dāng)前傳輸事務(wù)要操作的端點(diǎn)地址,所有對(duì) MA 和 RF 的當(dāng)前操作都基于這個(gè)端點(diǎn)地址。 PE 要根據(jù)當(dāng)前端點(diǎn)的配置或當(dāng)前狀態(tài)處理傳輸事務(wù),并在傳輸事務(wù)中實(shí)時(shí)更新控制/狀態(tài)寄存器 CSR 。 SIE 還能通過(guò) CSR 中的中斷向量請(qǐng)求設(shè)備總線的控制支持。 PD , PA , PE 三個(gè)模塊組成了 USB SIE 的協(xié)議層 (PL) 。
MA( buffer ) 管理數(shù)據(jù)的流向, WB 通過(guò)最高位地址選擇讀寫(xiě)目標(biāo)是 還是UC_RF ; PE 則通過(guò)端點(diǎn)地址選擇相應(yīng)的 和 UC_RF 。在對(duì) FIFO 的操作上, PE 比 MA 有更高的優(yōu)先權(quán)。
UC_RF(USBcorer egister file) 最多支持 16 個(gè)端點(diǎn)。每個(gè)端點(diǎn)的 CSR 分別存儲(chǔ)本端點(diǎn)的當(dāng)前狀態(tài)。每個(gè)端點(diǎn)的 CSR ,包含 5 組寄存器,分別為配置 CSR 、協(xié)議 CSR 、進(jìn)程 CSR 、中斷狀態(tài) CSR 和中斷屏蔽 CSR 。它們可以接受 MA 和 PE 讀寫(xiě)。
BUFFER(USB SIE buffer) 對(duì)相應(yīng)的端點(diǎn)收發(fā)數(shù)據(jù)進(jìn)行緩存,最多支持 16 個(gè)端點(diǎn)。每個(gè)端點(diǎn) FIFO 占用固定的 區(qū)域,分別有讀指針和寫(xiě)指針指向該端點(diǎn)對(duì)應(yīng)的區(qū)域。
WB(Wishbone ) , 標(biāo)準(zhǔn) Wishbone 接口,連接兩個(gè)不同的時(shí)鐘域,在數(shù)據(jù)傳輸時(shí)要把兩個(gè)時(shí)鐘域分割開(kāi)。
4 USB SIE 驗(yàn)證
4.1 驗(yàn)證環(huán)境
所設(shè)計(jì)的 USB SIE 集成了符合 USBl.1 規(guī)范的 UTM ,可以外接 .0 規(guī)范的 UTM 。所設(shè)計(jì)的 SIE 實(shí)現(xiàn)了SIE電路,完成了通信模型的所有功能。通過(guò)修改配置文件,可以定制電路的一些參數(shù)和結(jié)構(gòu),如包含的端點(diǎn)數(shù)目以及每個(gè)端點(diǎn)的通信模式等。 .0SIE 的驗(yàn)證環(huán)境是圍繞 USB SIE 這個(gè) IP 核展開(kāi)的。
為了驗(yàn)證電路的功能,需要建立一個(gè) USB HOST 端的 HDL 行為模型,這個(gè)模型模擬了一個(gè)真實(shí) HOST 的行為過(guò)程,如上電檢測(cè)、速度識(shí)別、標(biāo)準(zhǔn)設(shè)備請(qǐng)求等過(guò)程,并且可以檢測(cè) USB 設(shè)備應(yīng)答數(shù)據(jù)是否正確。另外還可以啟動(dòng)對(duì) USB 設(shè)備容錯(cuò)性能的檢測(cè),通過(guò)在 USB 通信中插入隨機(jī)錯(cuò)誤信息,檢測(cè) SIE 通信的健壯性以及 SIE" 陜復(fù)機(jī)制的可靠性。最后這個(gè)模型還要能夠保證 SIE 的 HDL 代碼有足夠的覆蓋率,即完成對(duì) SIE 所有工作情況的測(cè)試。這個(gè)模型可以測(cè)試多種 USB 設(shè)備,以后還可以作 USB 設(shè)備的后續(xù)開(kāi)發(fā)。
我們還設(shè)計(jì)了一個(gè)專(zhuān)用的控制器,它可以實(shí)現(xiàn) SIE 的上電初始化過(guò)程 ( 向 SIE 中控制/狀態(tài)寄存器堆寫(xiě)入初始數(shù)據(jù) ) 、 SIE 中斷處理并完成 USB 傳輸事務(wù)、使 SIE 擺脫異常狀態(tài)等功能。這個(gè)專(zhuān)用控制器和 USB SIE 一起構(gòu)成一個(gè)完整的 USB 設(shè)備。
在硬件驗(yàn)證時(shí), 采用 公司 STRATIX 系列的 。由于時(shí)鐘速度和器件選購(gòu)的限制, Transceiver 器件采用了 USBl.1 的收發(fā)端器件 。這樣實(shí)際通信只是 USBl.1 全速以及低速的通信,雖然 .0 的某些特性驗(yàn)證不到,但是在已有的條件下,已經(jīng)驗(yàn)證了 USB2.0 在全速模式下工作的所有特性。
4.2驗(yàn)證方法和過(guò)程
首先進(jìn)行代碼仿真驗(yàn)證。在此過(guò)程中, USB SIE 和專(zhuān)用控制器構(gòu)成的 USB 設(shè)備和 HOST 行為模型一起進(jìn)行仿真驗(yàn)證,通過(guò)比較控制器和 HOST 模型收發(fā)的數(shù)據(jù)是否一致,可以驗(yàn)證所設(shè)計(jì)的硬件是否正常工作。在所設(shè)計(jì)的 USB 設(shè)備通過(guò) HOST 模型的多樣化測(cè)試以后,再進(jìn)行后仿真。
在所有的代碼驗(yàn)證成功后,進(jìn)行硬件驗(yàn)證。把 USBSIE 和專(zhuān)用控制器構(gòu)成的 USB 設(shè)備在 中得以實(shí)現(xiàn), 擴(kuò)展電路板上的 USB Transceiver 滿足了總線的電氣性能要求,而 HOST 模型則為真實(shí)的 PC 機(jī) USB 接口。為了監(jiān)測(cè)總線通信過(guò)程是否正確,在總線上接入了 USB 總線,通過(guò)總線數(shù)據(jù)分析,可以確定通信故障,進(jìn)而糾正設(shè)計(jì)中的疏漏。
4.3 硬件驗(yàn)證結(jié)果
FPGA 外接電路板上的 USB Transceiver 可以連接成全速或低速。我們對(duì)兩種工作情況都進(jìn)行了硬件驗(yàn)證。這是 PC 機(jī)對(duì)所實(shí)現(xiàn)的 USB 全速設(shè)備進(jìn)行配置的一段過(guò)程,分析時(shí)過(guò)濾了 SOF 包。
在總線樣本中, PC 端的 USBHOST 首先發(fā)出 包,設(shè)備地址 0x0(USB 設(shè)備未分配地址前的默認(rèn)地址 ) ,端點(diǎn)為 0x0( 控制端點(diǎn) ) ,這是一個(gè)標(biāo)準(zhǔn)請(qǐng)求的開(kāi)始。然后 HOST 發(fā)出一個(gè)數(shù)據(jù)包,數(shù)據(jù)是 80 06 00 0l 00 00 40 00 ,這是一個(gè) GET_ DESCRIPTOR 標(biāo)準(zhǔn)設(shè)備請(qǐng)求;設(shè)備收到數(shù)據(jù)后,應(yīng)答了 ACK 握手包,表示數(shù)據(jù)接收正確。這是控制傳輸?shù)? Stage 。
在控制傳輸?shù)?Data 期 Stage 階段, HOST 發(fā)出 IN 包,要求 USB 設(shè)備回復(fù)設(shè)備描述符,設(shè)備在經(jīng)過(guò)一次符合協(xié)議規(guī)范的 ( 表示設(shè)備未準(zhǔn)備好 ) 后,應(yīng)答了描述符的內(nèi)容 12 0l 00 01 00 00 00 08 ,然后 HOST 應(yīng)答了 ACK 表示通信成功。
根據(jù)協(xié)議, HOST 在 Status Stage 階段發(fā)出了 OUT 包,數(shù)據(jù)內(nèi)容是空的,設(shè)備應(yīng)答的 ACK 握手包表示了 Status Stage 的結(jié)束,也表示一次控制傳輸?shù)某晒Α?
經(jīng)過(guò)多次標(biāo)準(zhǔn)請(qǐng)求后,所設(shè)計(jì)的 USB 設(shè)備成功地與主機(jī)進(jìn)行了數(shù)據(jù)交換。這樣既完備驗(yàn)證了所設(shè)計(jì)的 USB 設(shè)備,也完備驗(yàn)證了 USB 設(shè)備中的通信核心一一 SIE 。
另外值得一提的是 USBSIE 的工作頻率。為了降低功耗,在 USB 全速或者低速工作時(shí), SIE 可以工作在 UTM 工作頻率的 1 / 4 ,即全速時(shí)工作于 ,低速時(shí)工作于 375kHz 。
5 總結(jié)
本文簡(jiǎn)要分析了 USB 系統(tǒng)體系,分析了 SIE 中各功能模塊的工作過(guò)程,構(gòu)造了 USB 設(shè)備芯片的通信模型。基于所構(gòu)造的通信模型,設(shè)計(jì)了 USB2.0SIE ,并在 FPGA 上通過(guò)了驗(yàn)證。