邓佳伟,张梅娟,王 琪,杨楚玮,应凌楷
(中国电子科技集团第五十八研究所CPU 研究室,江苏 无锡 214062)
传统USB2.0 协议最大带宽480 Mb/s,USB2.0 已经不能满足用户的需求,USB3.0 作为新一代高速接口,不但兼容USB2.0 协议,而且在低速、全速、高速的三种传输模式基础上增加了一种超高速模式。USB3.0 工作单元拥有两个数据传输通道,一对通道用于传输速率可高达5 Gb/s 的超高速数据传输,同时还有一对通道用于支持USB2.0 的数据通信。
PowerPC 架构是一种精简指令集(RISC)架构,其原始的设计源自IBM 的POWER RISC 架构。PowerPC 架构处理器有着广泛的应用,主要集中在服务器CPU 和嵌入式CPU 市场。PowerPC 在嵌入式处理器上表现非常优异,不仅具备高性能,低功耗以及较低散热量等特点,而且资源丰富,能够满足各类需求。
芯片验证主要为了验证研制芯片的功能性,验证其各功能设计正确。验证的方法有很多,主要有基于事件的验证、基于周期的模拟验证、基于事务的验证、软硬件协同验证、验证仿真器验证和形式验证等。基于软硬件系统验证[1-2]是将软硬件同时集成并加以验证,验证人员直接在芯片设计过程中参与,在硬件设计平台上运行软件。协同验证中验证平台设计采用真实的输入激励来模拟,减少了验证平台和芯片差异性[3],但由于验证平台一般的模拟速度不够快等问题,系统验证提供不了足够高的性能,特别在实时操作系统上运行各种应用。
本方案主要使用的是软硬件协同验证,通过Xilinx的VCU118 的验证硬件平台,Linux4.1.8 操作系统系统软件平台,协同配合高效能地完成了方案设计,证实了方案的可行性。
本方案中验证平台FPGA 包含一个PowperPC 处理器IP 逻辑,一个USB3.0 IP 逻辑。各逻辑单元的功能如下。
PowerPC 处理器IP 逻辑单元:基于PowerPC 指令集的一款处理器内核。其主频支持最高达1.2 GHz。
USB 控制器IP 逻辑单元:USB 控制器逻辑内部包含USB3.0 和USB2.0 两部分。其中USB3.0 控制器逻辑支持最高可达5 Gb/s 的传输速率,USB2.0 控制器逻辑支持最高到480 Mb/s 的传输速率。IP 核内包括了AHB(Advanced High Performance Bus)总线接口、USB 控制器、发送接收缓存和USB3.0 和USB2.0 的物理层PHY(Port Physical Layer)。
图1 为整体IP 逻辑方案设计图。
图1 整体IP 逻辑方案设计图
本方案的接口主要有处理器和USB 控制器之间的接口、USB 控制器和物理层PHY 的接口。
(1)USB3.0 控制器和PowerPC 接口
PowerPC 处理器IP 逻辑和USB 控制器逻辑通过AXI(Advanced Extensible Interface)/AHB 总线协议连接。
PowerPC 处理器IP 逻辑通过AXI 总线连接到AXIAHB 转换桥,桥和USB3.0 控制器的AHB 接口连接。AHB总线通过Master 和Slave 两路数据通道连接到USB3.0的控制器上,Master 总线用作DMA 通道,提供给CPU 和USB 设备的数据通信,Slave 总线用作读写USB 控制和状态寄存器和通过SRAM 进行调试[4]。
(2)USB 控制器逻辑和PHY 的标准接口
USB3.0 控制器逻辑和物理层PHY 通过PIPE3(Physical Interface for PCI Expressc)。USB2.0 控制器逻辑通过UTMI+(USB2.0 Transceiver Macrocell Interface)/ULPI (UTMI+Low Pin Interface)标准接口连接。
USB3.0 设备控制器IP 设计如图2 所示,主要分为六部分:USB 通信功能单元、时钟单元、复位单元、同步单元、应用接口单元和PHY 单元。各单元功能如表1 所示。USB 设备控制器时钟单元模块负责内部时钟、复位单位负责复位的管理。应用接口单元负责控制器功能模块和系统之间的通信。USB 通信功能单元主要负责完成USB 的高速和超高速协议分析[5]。同步单元的作用是应用接口单元与USB 通信功能模块的工作时钟在不同的时钟域,通过同步单元进行时钟同步,PHY 单元负责和硬件通信。
图2 USB3.0 设备控制器IP 核设计
表1 USB IP 内部单元
同步单元中包含了多路数据选择器,其根据USB 工作的速度模式来决定数据流走向[6-8]。
数据可以分流到USB2.0 或者USB3.0 的数据链路上。USB3.0协议向下兼容USB2.0协议。因此USB3.0 设备控制器应实现高速和超高速两部分。USB3.0 实现了超高速部分的协议层和链路层[9]。通过标准的PIPE3 接口与第三方物理层相连完成超高速功能。USB2.0 实现了全速及以下的传输层协议。通过标准的UTMI 或者ULPI 连接到内置PHY 上。最后通过PHY 直接和对端设备连接[10-11]。
Linux 下USB 驱动分为HOST(主机)端和DEVICE(设备)端,图3 为USB 的Linux 驱动框架。
图3 Linux USB 程序框架图
Linux 的USB 设备驱动分为两部分:主机端驱动和设备端驱动。
主机端驱动包括USB devcie driver 驱动、USB Core驱动、USB HCD 驱动。
(1)USB device driver 驱动:管理USB 设备和主机通信。
(2)USB Core 驱动:设备驱动程序,提供一个USB device driver 驱动访问和控制USB 硬件的接口,不用考虑系统当前使用哪种处理器架构。USB Core 将应用的请求反馈到相关的HCD 驱动,应用不能直接访问HCD。
(3)USB HCD 驱动:主机控制器之上运行的是HCD,是对主机控制器硬件的一个抽象,USB HCD 有多种USB 接口协议规范。
①UHCI:Intel 提供,通用主机控制接口,支持协议USB1.0/1.1;
②OHCI:微软提供,开放主机控制接口,支持协议USB1.0/1.1;
③EHCI:增强主机控制接口,支持协议USB2.0;
④XHCI:支持协议USB3.0,同时兼容USB2.0 以下版本。
设备端驱动包括:Gadget Function API 驱动、Gadget Funtion 驱 动、UDC 驱 动。
(1)Gadget Function API:USB 从设备驱动调用USB Core 的API。
(2)Gadget Function 驱动:Function 驱动调用通用的Gadget Function API。
(3)USB 设备端 UDC 驱动:作为其他USB 主机控制器外设的USB 硬件设备上底层硬件控制器的驱动。
本方案使用的验证平台为Xilinx 的VCU118 开发板卡。验证整体方案如图4 所示。VCU118 板卡上拓展了JTAG 子板、自研USB/DDR 子板。VCU118 开发板上拥有多个接口,JTAG 接口用来从上位机下载FPGA 逻辑文件文件固化到FPGA 上。UART 接口用来和上位机电脑进行数据通信,显示系统输出打印。SD 接口用来对接SD卡,UBOOT 程序和Linux 内核程序固化放在SD 卡中。USB 接口用来拓展USB 子板,该子板上有U 盘插槽用来插入U 盘。DDR 接口用来对接扩展DDR 内存,系统上电后从SD 卡中读取Linux 系统到DDR 上运行。
图4 验证整体方案图
具体的验证过程如下:
(1)Xilinx 开发工具系统综合生成SOC 的逻辑文件;
(2)通过Xilinx 下载器将逻辑文件通过JTAG 下载到FPGA 验证平台;
(3)热复位验证平台;
(4)验证平台热复位后,SD 接口将存在SD 卡中Linux的BOOT 程序和Linux 内核程序下载到DDR 存储上;
(5)程序从DDR 开始运行;
(6)等待Linux 系统完全启动;
(7)上位机通过UART 接口和连接验证平台,上位机通过控制台操作Linux 系统的交互界面;
(8)控制台通过测试工具,测试USB2.0 和USB3.0 的大型存储设备;
(9)查看能否启动USB 设备,能否正常读写设备。
本方案的Linux 内核版本为4.1.5,主要修改的是HCD驱动程序,由于验证的是USB3.0 及其以下版本,因此用的是XHCI 标准,通过修改XHCI 对接的HOST 控制器代码来实现适配PowerPC 处理器主控制器[12]。
xhci_plat_init 函数完成了xhci 驱动的初始化,在其调用的xhci_init_driver 函数中xhci_plat_hc_driver 的参数是需要修改的主要结构体。在该结构体下,主要完成的是对USB 主控制器的抽象。程序主要工作就是适配主控制器到该结构体中[13-15]。
实验验证平台使用Xlinux 公司的VCU 118 开发套件平台和自研设计的USB3.0 拓展子卡验证USB3.0 的IP 设计。
图5 为整个开发平台和拓展子卡的连接方式,图中位置1 为JTAG 的位置;位置2 为自研USB 插槽;位置3的背面是SD 卡外部存储插槽;位置4 为UART 接口位置;位置5 为下载器调试接口;位置6 的背板上有DDR颗粒。
图5 实验场景图
当设计调试完成后,将PowerPC 架构下的USB3.0的IP 逻辑文件烧录到验证平台卡中。将VCU118 平台通过拨码切换到SD 卡启动方式。Linux 相关程序下载到DDR 中。当系统启动后,通过上位机控制台和UART串口访问平台,USB2.0 和USB3.03.0 的U 盘插入USB子卡,在控制台输入各种命令查看USB 在位情况。通过格式化U 盘,写入文件来验证USB3.0 传输单元设计成功。
USB2.0 U 盘插入显示:图6 中框内就是USB2.0的U 盘。
图6 USB2.0 枚举
USB3.0U 盘插入显示:图7 中框内就是USB3.0 的U 盘。
图7 USB3.0 枚举
当U 盘插入到插槽后,内核打印如图8 所示。
图8 USB 设备枚举内核打印
通过Linux 系统给U 盘制作文件系统,如图9 所示。
图9 USB 设备操作
通过测试可以看到,U 盘插入到插槽后,可以在内核的输出打印上看到U 盘的相关信息,说明U 盘已经被系统识别。U 盘可以正常地格式化,在U 盘格式化过程中,会在内核中操作USB 主控制器,可以成功地在验证平台上运行和格式化U 盘,说明在PowerPC 架构下的USB3.0 已经可以正常工作。
随着USB3.0 设备的广泛应用,大量的高传输、大容量传输场景涌现,为了适应更高传输速率的USB 设备,各类处理器的USB 控制器也将升级到USB3.0 标准。
本方案集合PowerPC 处理器和USB3.0 的IP 核,通过Xilinx 的VCU118 开发验证平台,验证了PowerPC 架构下USB3.0 的可行性,有效弥补了原USB2.0 控制器速率低、容量小、抗干扰能力弱等缺点,验证方式采用了先进的软硬件协作验证方式,为下一步芯片设计和验证提供了有效技术支撑。