鄧佳偉,張梅娟,王 琪,楊楚瑋,應(yīng)凌楷
(中國(guó)電子科技集團(tuán)第五十八研究所CPU 研究室,江蘇 無(wú)錫 214062)
傳統(tǒng)USB2.0 協(xié)議最大帶寬480 Mb/s,USB2.0 已經(jīng)不能滿(mǎn)足用戶(hù)的需求,USB3.0 作為新一代高速接口,不但兼容USB2.0 協(xié)議,而且在低速、全速、高速的三種傳輸模式基礎(chǔ)上增加了一種超高速模式。USB3.0 工作單元擁有兩個(gè)數(shù)據(jù)傳輸通道,一對(duì)通道用于傳輸速率可高達(dá)5 Gb/s 的超高速數(shù)據(jù)傳輸,同時(shí)還有一對(duì)通道用于支持USB2.0 的數(shù)據(jù)通信。
PowerPC 架構(gòu)是一種精簡(jiǎn)指令集(RISC)架構(gòu),其原始的設(shè)計(jì)源自IBM 的POWER RISC 架構(gòu)。PowerPC 架構(gòu)處理器有著廣泛的應(yīng)用,主要集中在服務(wù)器CPU 和嵌入式CPU 市場(chǎng)。PowerPC 在嵌入式處理器上表現(xiàn)非常優(yōu)異,不僅具備高性能,低功耗以及較低散熱量等特點(diǎn),而且資源豐富,能夠滿(mǎn)足各類(lèi)需求。
芯片驗(yàn)證主要為了驗(yàn)證研制芯片的功能性,驗(yàn)證其各功能設(shè)計(jì)正確。驗(yàn)證的方法有很多,主要有基于事件的驗(yàn)證、基于周期的模擬驗(yàn)證、基于事務(wù)的驗(yàn)證、軟硬件協(xié)同驗(yàn)證、驗(yàn)證仿真器驗(yàn)證和形式驗(yàn)證等。基于軟硬件系統(tǒng)驗(yàn)證[1-2]是將軟硬件同時(shí)集成并加以驗(yàn)證,驗(yàn)證人員直接在芯片設(shè)計(jì)過(guò)程中參與,在硬件設(shè)計(jì)平臺(tái)上運(yùn)行軟件。協(xié)同驗(yàn)證中驗(yàn)證平臺(tái)設(shè)計(jì)采用真實(shí)的輸入激勵(lì)來(lái)模擬,減少了驗(yàn)證平臺(tái)和芯片差異性[3],但由于驗(yàn)證平臺(tái)一般的模擬速度不夠快等問(wèn)題,系統(tǒng)驗(yàn)證提供不了足夠高的性能,特別在實(shí)時(shí)操作系統(tǒng)上運(yùn)行各種應(yīng)用。
本方案主要使用的是軟硬件協(xié)同驗(yàn)證,通過(guò)Xilinx的VCU118 的驗(yàn)證硬件平臺(tái),Linux4.1.8 操作系統(tǒng)系統(tǒng)軟件平臺(tái),協(xié)同配合高效能地完成了方案設(shè)計(jì),證實(shí)了方案的可行性。
本方案中驗(yàn)證平臺(tái)FPGA 包含一個(gè)PowperPC 處理器IP 邏輯,一個(gè)USB3.0 IP 邏輯。各邏輯單元的功能如下。
PowerPC 處理器IP 邏輯單元:基于PowerPC 指令集的一款處理器內(nèi)核。其主頻支持最高達(dá)1.2 GHz。
USB 控制器IP 邏輯單元:USB 控制器邏輯內(nèi)部包含USB3.0 和USB2.0 兩部分。其中USB3.0 控制器邏輯支持最高可達(dá)5 Gb/s 的傳輸速率,USB2.0 控制器邏輯支持最高到480 Mb/s 的傳輸速率。IP 核內(nèi)包括了AHB(Advanced High Performance Bus)總線接口、USB 控制器、發(fā)送接收緩存和USB3.0 和USB2.0 的物理層PHY(Port Physical Layer)。
圖1 為整體IP 邏輯方案設(shè)計(jì)圖。
圖1 整體IP 邏輯方案設(shè)計(jì)圖
本方案的接口主要有處理器和USB 控制器之間的接口、USB 控制器和物理層PHY 的接口。
(1)USB3.0 控制器和PowerPC 接口
PowerPC 處理器IP 邏輯和USB 控制器邏輯通過(guò)AXI(Advanced Extensible Interface)/AHB 總線協(xié)議連接。
PowerPC 處理器IP 邏輯通過(guò)AXI 總線連接到AXIAHB 轉(zhuǎn)換橋,橋和USB3.0 控制器的AHB 接口連接。AHB總線通過(guò)Master 和Slave 兩路數(shù)據(jù)通道連接到USB3.0的控制器上,Master 總線用作DMA 通道,提供給CPU 和USB 設(shè)備的數(shù)據(jù)通信,Slave 總線用作讀寫(xiě)USB 控制和狀態(tài)寄存器和通過(guò)SRAM 進(jìn)行調(diào)試[4]。
(2)USB 控制器邏輯和PHY 的標(biāo)準(zhǔn)接口
USB3.0 控制器邏輯和物理層PHY 通過(guò)PIPE3(Physical Interface for PCI Expressc)。USB2.0 控制器邏輯通過(guò)UTMI+(USB2.0 Transceiver Macrocell Interface)/ULPI (UTMI+Low Pin Interface)標(biāo)準(zhǔn)接口連接。
USB3.0 設(shè)備控制器IP 設(shè)計(jì)如圖2 所示,主要分為六部分:USB 通信功能單元、時(shí)鐘單元、復(fù)位單元、同步單元、應(yīng)用接口單元和PHY 單元。各單元功能如表1 所示。USB 設(shè)備控制器時(shí)鐘單元模塊負(fù)責(zé)內(nèi)部時(shí)鐘、復(fù)位單位負(fù)責(zé)復(fù)位的管理。應(yīng)用接口單元負(fù)責(zé)控制器功能模塊和系統(tǒng)之間的通信。USB 通信功能單元主要負(fù)責(zé)完成USB 的高速和超高速協(xié)議分析[5]。同步單元的作用是應(yīng)用接口單元與USB 通信功能模塊的工作時(shí)鐘在不同的時(shí)鐘域,通過(guò)同步單元進(jìn)行時(shí)鐘同步,PHY 單元負(fù)責(zé)和硬件通信。
圖2 USB3.0 設(shè)備控制器IP 核設(shè)計(jì)
表1 USB IP 內(nèi)部單元
同步單元中包含了多路數(shù)據(jù)選擇器,其根據(jù)USB 工作的速度模式來(lái)決定數(shù)據(jù)流走向[6-8]。
數(shù)據(jù)可以分流到USB2.0 或者USB3.0 的數(shù)據(jù)鏈路上。USB3.0協(xié)議向下兼容USB2.0協(xié)議。因此USB3.0 設(shè)備控制器應(yīng)實(shí)現(xiàn)高速和超高速兩部分。USB3.0 實(shí)現(xiàn)了超高速部分的協(xié)議層和鏈路層[9]。通過(guò)標(biāo)準(zhǔn)的PIPE3 接口與第三方物理層相連完成超高速功能。USB2.0 實(shí)現(xiàn)了全速及以下的傳輸層協(xié)議。通過(guò)標(biāo)準(zhǔn)的UTMI 或者ULPI 連接到內(nèi)置PHY 上。最后通過(guò)PHY 直接和對(duì)端設(shè)備連接[10-11]。
Linux 下USB 驅(qū)動(dòng)分為HOST(主機(jī))端和DEVICE(設(shè)備)端,圖3 為USB 的Linux 驅(qū)動(dòng)框架。
圖3 Linux USB 程序框架圖
Linux 的USB 設(shè)備驅(qū)動(dòng)分為兩部分:主機(jī)端驅(qū)動(dòng)和設(shè)備端驅(qū)動(dòng)。
主機(jī)端驅(qū)動(dòng)包括USB devcie driver 驅(qū)動(dòng)、USB Core驅(qū)動(dòng)、USB HCD 驅(qū)動(dòng)。
(1)USB device driver 驅(qū)動(dòng):管理USB 設(shè)備和主機(jī)通信。
(2)USB Core 驅(qū)動(dòng):設(shè)備驅(qū)動(dòng)程序,提供一個(gè)USB device driver 驅(qū)動(dòng)訪問(wèn)和控制USB 硬件的接口,不用考慮系統(tǒng)當(dāng)前使用哪種處理器架構(gòu)。USB Core 將應(yīng)用的請(qǐng)求反饋到相關(guān)的HCD 驅(qū)動(dòng),應(yīng)用不能直接訪問(wèn)HCD。
(3)USB HCD 驅(qū)動(dòng):主機(jī)控制器之上運(yùn)行的是HCD,是對(duì)主機(jī)控制器硬件的一個(gè)抽象,USB HCD 有多種USB 接口協(xié)議規(guī)范。
①UHCI:Intel 提供,通用主機(jī)控制接口,支持協(xié)議USB1.0/1.1;
②OHCI:微軟提供,開(kāi)放主機(jī)控制接口,支持協(xié)議USB1.0/1.1;
③EHCI:增強(qiáng)主機(jī)控制接口,支持協(xié)議USB2.0;
④XHCI:支持協(xié)議USB3.0,同時(shí)兼容USB2.0 以下版本。
設(shè)備端驅(qū)動(dòng)包括:Gadget Function API 驅(qū)動(dòng)、Gadget Funtion 驅(qū) 動(dòng)、UDC 驅(qū) 動(dòng)。
(1)Gadget Function API:USB 從設(shè)備驅(qū)動(dòng)調(diào)用USB Core 的API。
(2)Gadget Function 驅(qū)動(dòng):Function 驅(qū)動(dòng)調(diào)用通用的Gadget Function API。
(3)USB 設(shè)備端 UDC 驅(qū)動(dòng):作為其他USB 主機(jī)控制器外設(shè)的USB 硬件設(shè)備上底層硬件控制器的驅(qū)動(dòng)。
本方案使用的驗(yàn)證平臺(tái)為Xilinx 的VCU118 開(kāi)發(fā)板卡。驗(yàn)證整體方案如圖4 所示。VCU118 板卡上拓展了JTAG 子板、自研USB/DDR 子板。VCU118 開(kāi)發(fā)板上擁有多個(gè)接口,JTAG 接口用來(lái)從上位機(jī)下載FPGA 邏輯文件文件固化到FPGA 上。UART 接口用來(lái)和上位機(jī)電腦進(jìn)行數(shù)據(jù)通信,顯示系統(tǒng)輸出打印。SD 接口用來(lái)對(duì)接SD卡,UBOOT 程序和Linux 內(nèi)核程序固化放在SD 卡中。USB 接口用來(lái)拓展USB 子板,該子板上有U 盤(pán)插槽用來(lái)插入U(xiǎn) 盤(pán)。DDR 接口用來(lái)對(duì)接擴(kuò)展DDR 內(nèi)存,系統(tǒng)上電后從SD 卡中讀取Linux 系統(tǒng)到DDR 上運(yùn)行。
圖4 驗(yàn)證整體方案圖
具體的驗(yàn)證過(guò)程如下:
(1)Xilinx 開(kāi)發(fā)工具系統(tǒng)綜合生成SOC 的邏輯文件;
(2)通過(guò)Xilinx 下載器將邏輯文件通過(guò)JTAG 下載到FPGA 驗(yàn)證平臺(tái);
(3)熱復(fù)位驗(yàn)證平臺(tái);
(4)驗(yàn)證平臺(tái)熱復(fù)位后,SD 接口將存在SD 卡中Linux的BOOT 程序和Linux 內(nèi)核程序下載到DDR 存儲(chǔ)上;
(5)程序從DDR 開(kāi)始運(yùn)行;
(6)等待Linux 系統(tǒng)完全啟動(dòng);
(7)上位機(jī)通過(guò)UART 接口和連接驗(yàn)證平臺(tái),上位機(jī)通過(guò)控制臺(tái)操作Linux 系統(tǒng)的交互界面;
(8)控制臺(tái)通過(guò)測(cè)試工具,測(cè)試USB2.0 和USB3.0 的大型存儲(chǔ)設(shè)備;
(9)查看能否啟動(dòng)USB 設(shè)備,能否正常讀寫(xiě)設(shè)備。
本方案的Linux 內(nèi)核版本為4.1.5,主要修改的是HCD驅(qū)動(dòng)程序,由于驗(yàn)證的是USB3.0 及其以下版本,因此用的是XHCI 標(biāo)準(zhǔn),通過(guò)修改XHCI 對(duì)接的HOST 控制器代碼來(lái)實(shí)現(xiàn)適配PowerPC 處理器主控制器[12]。
xhci_plat_init 函數(shù)完成了xhci 驅(qū)動(dòng)的初始化,在其調(diào)用的xhci_init_driver 函數(shù)中xhci_plat_hc_driver 的參數(shù)是需要修改的主要結(jié)構(gòu)體。在該結(jié)構(gòu)體下,主要完成的是對(duì)USB 主控制器的抽象。程序主要工作就是適配主控制器到該結(jié)構(gòu)體中[13-15]。
實(shí)驗(yàn)驗(yàn)證平臺(tái)使用Xlinux 公司的VCU 118 開(kāi)發(fā)套件平臺(tái)和自研設(shè)計(jì)的USB3.0 拓展子卡驗(yàn)證USB3.0 的IP 設(shè)計(jì)。
圖5 為整個(gè)開(kāi)發(fā)平臺(tái)和拓展子卡的連接方式,圖中位置1 為JTAG 的位置;位置2 為自研USB 插槽;位置3的背面是SD 卡外部存儲(chǔ)插槽;位置4 為UART 接口位置;位置5 為下載器調(diào)試接口;位置6 的背板上有DDR顆粒。
圖5 實(shí)驗(yàn)場(chǎng)景圖
當(dāng)設(shè)計(jì)調(diào)試完成后,將PowerPC 架構(gòu)下的USB3.0的IP 邏輯文件燒錄到驗(yàn)證平臺(tái)卡中。將VCU118 平臺(tái)通過(guò)撥碼切換到SD 卡啟動(dòng)方式。Linux 相關(guān)程序下載到DDR 中。當(dāng)系統(tǒng)啟動(dòng)后,通過(guò)上位機(jī)控制臺(tái)和UART串口訪問(wèn)平臺(tái),USB2.0 和USB3.03.0 的U 盤(pán)插入U(xiǎn)SB子卡,在控制臺(tái)輸入各種命令查看USB 在位情況。通過(guò)格式化U 盤(pán),寫(xiě)入文件來(lái)驗(yàn)證USB3.0 傳輸單元設(shè)計(jì)成功。
USB2.0 U 盤(pán)插入顯示:圖6 中框內(nèi)就是USB2.0的U 盤(pán)。
圖6 USB2.0 枚舉
USB3.0U 盤(pán)插入顯示:圖7 中框內(nèi)就是USB3.0 的U 盤(pán)。
圖7 USB3.0 枚舉
當(dāng)U 盤(pán)插入到插槽后,內(nèi)核打印如圖8 所示。
圖8 USB 設(shè)備枚舉內(nèi)核打印
通過(guò)Linux 系統(tǒng)給U 盤(pán)制作文件系統(tǒng),如圖9 所示。
圖9 USB 設(shè)備操作
通過(guò)測(cè)試可以看到,U 盤(pán)插入到插槽后,可以在內(nèi)核的輸出打印上看到U 盤(pán)的相關(guān)信息,說(shuō)明U 盤(pán)已經(jīng)被系統(tǒng)識(shí)別。U 盤(pán)可以正常地格式化,在U 盤(pán)格式化過(guò)程中,會(huì)在內(nèi)核中操作USB 主控制器,可以成功地在驗(yàn)證平臺(tái)上運(yùn)行和格式化U 盤(pán),說(shuō)明在PowerPC 架構(gòu)下的USB3.0 已經(jīng)可以正常工作。
隨著USB3.0 設(shè)備的廣泛應(yīng)用,大量的高傳輸、大容量傳輸場(chǎng)景涌現(xiàn),為了適應(yīng)更高傳輸速率的USB 設(shè)備,各類(lèi)處理器的USB 控制器也將升級(jí)到USB3.0 標(biāo)準(zhǔn)。
本方案集合PowerPC 處理器和USB3.0 的IP 核,通過(guò)Xilinx 的VCU118 開(kāi)發(fā)驗(yàn)證平臺(tái),驗(yàn)證了PowerPC 架構(gòu)下USB3.0 的可行性,有效彌補(bǔ)了原USB2.0 控制器速率低、容量小、抗干擾能力弱等缺點(diǎn),驗(yàn)證方式采用了先進(jìn)的軟硬件協(xié)作驗(yàn)證方式,為下一步芯片設(shè)計(jì)和驗(yàn)證提供了有效技術(shù)支撐。