USB 2.0主控器软硬件协同仿真系统设计
扫描二维码
随时随地手机看文章
摘要:为了能够充分、快速验证USB 2.0主控器的功能,设计了一个软硬件协同仿真平台。其中,CPU模型部分采用一种高效的SystemC模型,而不使用基于指令集的复杂CPU模型。测试用例采用抽象层次更高的C语言编写,通过调用仿真平台对外提供的API完成激励生成与响应检查。结果表明,该方式能够有效降低对仿真资源的占用,减少仿真时间;同时使软件人员能在IP的硬件验证阶段就能完成软件的设计测试工作,缩短软硬件接口整合时间,加快开发进度。
关键词:软硬协同;联合仿真引擎;CPU模型;通用串行总线;主控器;片上系统
USB由于具有传输速度快、支持即插即用和热插拔、供电方式灵活、总线结构简单、使用和扩展灵活等优点,已经成为业界主流的工业接口标准,并在SoC设计中得到了广泛的应用。在典型的应用案例中,USB主控器作为SoC中的一个子模块,和其他子模块有复杂的互联、通信关系,同时也受系统主CPU的控制。在这样一个复杂的系统中,如何验证USB主控器设计的正确性以及其和SoC系统其他模块协同工作的完整性对项目成功与否是非常关键的。本文设计了一种软硬件协同仿真平台来验证应用在数字电视SoC中的USB2.0主控器,本平台为SoC的验证提供了一个高效、系统的解决方案。结果表明效果良好。
1 待验证USB 2.0主控器系统结构
本文验证的USB 2.0主控器完全兼容USB 1.1规范,EHCI主机控制器接口规范和OCHI主机控制器接口规范。该USB 2.0主控制器包含一个高速主控器和一个全速主控制器,其中高速主控器基于EHCI接口规范实现,用来和连接到根端口的高速(传输速率为480 Mb/s)模式外设进行通信。全速模式主控制器基于OHCI接口规范实现,使USB 2.0主控器可以与全速和低速(传输速率为12 Mb/s和1.5Mb/s)外设进行通信。系统CPU可以通过该主控器的AHB Slave接口对其进行控制。该主控器中还包含AHB Master接口单元,能够扮演AHB Master的角色直接控制主控器与系统存储器之间的数据交换,不需要通过外部DMA控制器的控制,方便系统集成,加快该主控器与系统内存之间的数据交换。该主控器的物理接口端提供满足UTMI+接口规范的接口,通过与PHY相连,可以直接与外设进行通信。图1为该主控器的系统结构框图,图中主控器的列表处理器模块是系统中主要的控制器,其包含多个状态机用来处理规范中描述符定义的内容。
2 验证仿真系统介绍
2.1 使用传统平台验证USB主控器的不足
USB主控器真实的工作环境需要有硬件和软件协同配合,在传统验证平台下,从整个验证过程来看,硬件人员需要描述一套基于Verilog HDL的测试激励模拟软件环境验证其功能,之后软件人员还要再写一遍基于C程序的软件环境验证其功能,这样造成工作的重叠。同时传统验证平台使用Verilog HDL编写,抽象层次较低,在描述高抽象结构(如USB的描述符的数据结构)时比较复杂,而使用抽象层次更高的C语言会相对简单。
2.2 本文设计的软硬协同仿真系统介绍
相对使用传统验证方法,本文设计的软硬件协同仿真系统使用抽象度较高的C语言编写测试激励,通过调用系统中CPU模型对外提供的API完成激励生成与响应检查。基于本引擎编写的测试激励可以方便的移植,所以在硬件仿真阶段就能调试SoC系统软件,不必等到FPGA平台设计完成或芯片设计完成后,从而大大节省了项目开发时间。图2是本文验证USB主控器功能的软硬件协同仿真的系统架构图。本验证环境由3大部分组成:联合仿真引擎,即CPU模型;总线架构及系统内存模块,包括一个DDR模型和DDR控制器;USB协议实现、检查模块,包括待验证的USB主控器、支持UTMI+接口的PHY、外设模型。在该平台下,联合仿真引擎(CPU模型)替换掉SoC中原有的CPU,是整个验证系统的核心也是整个系统设计的核心。通过使能信号触发联合仿真引擎工作来执行C程序,将软件对USB主控器的控制转化成总线时序,将软件和硬件交互的行为模拟到RTL侧。下文将对仿真平台中各个模块,重点对联合仿真引擎进行详细介绍。
2.2.1 基于TLM建模的联合仿真引擎及设计
使用软硬件协同仿真的方法验证USB主控器,只需要用C语言编写USB主控器驱动并将其集到成系统中进行仿真测试,因此要求CPU模型能够简单、高效地执行驱动程序,CPU在SoC中都是直接通过AHBMaster接口连接到总线(BUS)上,对SoC中要验证的IP来讲,CPU就是一个总线Mas ter,IP并不关心CPU是什么指令集,采用何种方式实现。基于此,本联合仿真引擎设计的CPU模型并没有采用基于特定指令集设计的复杂方法,而是采用基于SystemC事物级建模(TLM)技术构造了一个基于AHB协议的总线功能模型(BFM),实现了对CPU对SoC中其他模块所呈现的AHB Master接口的时序封装。这个BFM能和要验证的RTL模块进行连接和通信,它能够编译并解释基于C语言编写的驱动程序,并把这个驱动程序要执行的操作翻译成对应的AHB总线信号。通过层次化的封装,本联合仿真引擎把基于时钟时序精度的RTL的抽象层提升到没有任何时钟和时间概念的软件抽象层。同时,本引擎能取代任何CPU。不管SoC中真正使用的CPU是MIPS指令集、ARM指令集还是其他CPU,都能被本联合仿真引擎替代。
本引擎的CPU模型使用系统仿真用的工作站或者服务器的宿主CPU来运行验证工程师编写的基于C语言的测试激励程序,将需要的具体硬件行为通过Channel向下传送到RTL端。相对于直接使用SoC中CPU IP核的RTL的仿真,该引擎省去了CPU IP核取指令和运行指令的复杂的仿真、运算过程,大大节省了仿真运行的时间。本联合仿真引擎为软件人员和硬件验证人员分别提供了一些总线访问和中断处理的API,为了满足硬件验证的需要,另外设计了一些API可以实现让系统等待一定时钟周期或者时间、停止或重新开始仿真、不通过总线而可以快速访问系统存储器等功能。在系统中CPU模型对USB主控器和DDR控制器的配置均通过这2个模块对外提供的AHB Slave接口。
2.2.2 仿真系统的其他模块介绍
DDR2/3为系统内存,存储USB主控器正常工作需要的描述符和收发的数据。由于本系统中DDR2/3控制器只提供AXI Slave的数据接口,系统中CPU和USB主控器需要通过AHB桥将AHB从机的接口时序转换成AXI Master的接口时序,保证2个模块之间正常的数据通信。系统工作过程中AxI,AHB总线监控器监控2个总线活动,打印出报告信息,方便仿真结果检查。
USB主控器是待验证的主控器(DUT)。PHY模型提供UTMI+接口,有USB 2.0和USB 1.1两种接口分别支持EHCI接口和OHCI接口实现。外设模型包括一个PHY验证IP(VIP)和一个USB外设验证IP,模拟USB外设的行为。USB外设VIP中包含一个USB监控器模型,负责协议检查,记录事物传输进程,监控高速、全速和低速的USB传输,提供数据包级和事物级传输的监控,同时可以监控挂起、恢复和复位信号。
3 基于本验证系统的USB主控器验证过程
由于使用了联合仿真引擎,测试激励既可以使用Verilog HDL编写也可以使用C语言编写。运行C语言编写的测试激励时,需要在测试平台中预先置位使能信号打开联合仿真引擎,触发仿真工具(如NCVerilog)调用C测试激励程序的主函数。在C测试激励顺序执行时,整个RTL的仿真时间会停在当前时刻。只有当C测试激励调用了基本的读/写函数、中断响应之类的底层函数,硬件仿真时间才会向前推进,RTL仿真器继续往前运行。直到RTL反馈后,C测试激励程序才会继续往下一行执行。USB主控器验证系统仿真引擎交互过程如图3所示。
具体过程包括:HDL仿真工具执行Verilog HDL描述的USB的外设模型初始化过程;HDL仿真工具使能联合仿真引擎,测试用例进入联合仿真引擎继续执行;联合仿真引擎初始化待验证USB主控器;联合仿真引擎执行特定API函数.测试用例进入HDL仿真过程;通过调用外设的atta tch命令,使外设模型连接到待验证的USB主控器;联合仿真引擎等待外设模型连接中断,停止在当前时刻,直到中断有效;联合仿真引擎执行外设模型连接中断处理;测试用例继续执行HDL仿真过程。主控器与外设模型按照配置速度,传输类型,传输方向,传送的数据包的工作速度;C驱动循环等待中断信号有效,进行中断处理。AHB监控器、AXI监控器和USB监控器监测主控器AHB端和USB端的工作,进行协议检查,给出报告信息,仿真过程可以通过日志文件方便监测。基于上述思路编写的验证USB主控器各个不同功能的测试用例,在不需要使用任何PLI(编程语言接口)函数的情况下,能够快速、方便地实现USB 2.0主控器各个不同层级的Driver的功能,从而保证能够全面的验证此主控器的特性。表1是在不同的仿真环境下,测试USB主控器与外设进行进行高速传输2 Mb数据所需要的时间。从表中可以看出,系统中使用RTL级CPU IP核的系统,仿真速度最慢;基于ISS指令集模拟器的仿真系统,速度次之;本环境的仿真速度最快。
4 结语
本文设计的用于USB主控器IP验证的软硬件协同仿真系统具有仿真速度快、仿真系统资源占用小、减少软硬件集成验证测试的时间的特点,经实践证明,效果良好。通过使用本系统,软件人员能在硬件设计验证的早期就能进入IP的软件硬件联调,缩短了研发时间。同时,本系统具有良好的可重用性,对其他IP的验证同样有效,可为其他IP的验证提供参考。