基于混合原型平台的UART IP核设计与验证

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于混合原型平台的UART IP核设计与验证

摘 要: 传统的软硬件设计方法已无法满足SoC快速验证的应用需求。针对此现状,阐述了虚拟平台与硬件平台相结合的混合原型验证技术,主要介绍了UART IP混合验证方案,分析了UART IP核协议、功能模块设计以及FPGA平台搭建,最后通过构建虚拟平台和编写测试脚本,对IP核进行混合原型验证。验证结果表明,该IP核复用性好,完全可以应用于SoC设计中。
关键词: UART IP核验证;混合原型平台;硬件原型;虚拟原型
0 引言
随着片上系统(System on Chip,SoC)设计复杂度的增加,验证过程也变得更加复杂。传统的软硬件设计方法是在软硬件划分之后,软件和硬件同步进行设计,直到硬件(指芯片或开发板)完成后才可以与软件集成测试;如果此时发现软件或者硬件设计中存在缺陷需要重新修改设计时,势必增加设计周期,影响产品的上市时间。所以,当前迫切需要一种在硬件流片之前,便可以对SoC设计进行软硬件协同验证的方法。混合原型验证便是很好的解决方案。
混合原型验证是虚拟原型与硬件原型相结合的一种验证技术,通常情况下,SoC设计由硬件设计和软件设计两部分组成,硬件设计主要采用寄存器传输级(Register Transfer Level,RTL)代码实现,软件设计主要在中央处理器(Central Process Unit,CPU)中实现,并通过加载Linux内核、编译驱动和应用程序来控制硬件与外界进行交互。混合原型验证是两者功能相结合的一种验证方法,可以进行软硬件协同开发与调试。下面介绍混合原型验证平台的设计方法,并以UART IP核为例,详细阐述其验证过程和验证结果,为IP核设计用户提供一种新型的验证方案。
1 混合原型验证平台


,混合原型验证平台由硬件平台和虚拟平台两部分组成,两者之间通过高速接口Transactors(XACTOR)互联。其中硬件平台基于HAPS(High-performance ASIC Prototyping System,HAPS)原型验证系统实现,平台中有一款容量高达450万门的Virtex-6 LX760 FPGA(Filed Programmable Gate Array),可以为用户提供较大容量的RTL验证;虚拟平台主要由一套完善的开发工具包组成,在添加虚拟模型时,通过引入已经搭建好的虚拟软件开发包,为软件开发人员将虚拟原型演变为一套现成可用的参考开发工具[1];XACTOR接口通过高速总线UMRBus(Universal Multi-Resource Bus)进行数据传输[2],UMRBus是一种高性能、低延时通信总线,它能为所有板载FPGA、存储器、寄存器和其他资源提供连接功能,其传输协议基于AMBA(Advanced Microcontroller Bus Architecture)协议实现。
1.1 硬件平台
HAPS原型验证系统由一套HAPS-61高性能ASIC原型验证平台和一

套复杂的支撑软件组成,支撑软件包括:Certify FPGA代码分割工具、Synplify FPGA综合工具、Xilinx ISE布局布线工具、Confpro下载工具以及Identify在线调试工具。HAPS-61原型验证系统的主要特点包括:容纳高达450万门的门级电路;843个用户I/O接口;12个外部差分时钟输出;一个100 MHz的晶振,2个PLLs能够产生高达700 MHz的时钟频率;可配置的电源网络;高速UMRBus数据传输。
1.2 虚拟平台
与传统RTL级验证相比,虚拟平台的验证建立在电子系统级(Electronic System Level,ESL)之上,运用SystemC库和TLM 2.0标准,可以进行快速的系统建模,仿真速度比RTL高很多。虚拟平台是由一套虚拟软件开发包(Virtualizer Development Kits,VDK)组成,可以提供软件的调试、分析和仿真功能,凭借ARM Cortex处理器的高性能模型、基于AMBA协议的总线以及DesignWare IP,开发者可以方便地将其基于ARM处理器的设计分割到虚拟平台和硬件平台中。在虚拟平台中单独仿真时,通过搭建已经验证好的TLM模型,用户可以脱离硬件进行仿真;在与硬件进行协同仿真时,通过引入TLM Library,然后在TLM Creator中模拟PHY或测试设备,再把模拟好的I/O模型映射到基于FPGA的硬件原型HAPS上,最后通过HAPS端口连接真实的外部世界,从而实现软件和硬件之间的协同开发,加快了系统开发进度。
2 UART IP核混合验证方案
2.1 整体方案设计


为了验证已经设计好的UART IP核,构建的混合验证方案。图中,中间部分为HAPS硬件平台,包含了全部FPGA硬件实现,其中UART IP核是自主设计的基于APB(Advanced Peripheral Bus)接口的待验证IP核,XACTOR是由本系统提供的接口IP,两端分别通过APB总线连接UART IP核,再通过UMRBus高速总线连接虚拟平台;Clock/Reset是由HAPS提供的时钟和复位模块。左半部分为虚拟平台,通过基于标准TLM2.0的XACTOR接口,用户可以访问硬件单元,从而实现基于事务级模型的协同仿真。虚拟平台中事务级建模测试方法可以由2种方法实现:基于GFRBM(Generic File Reader Bus Master)模式的Testbench输入和基于Linux内核的UART驱动加载,分别可以对硬件RTL中的寄存器读写功能和IP核数据传输功能进行测试。右半部分为连接RS-232串口的超级终端,通过Minicom工具来观测IP核数据收发的正确性,进而协助虚拟平台完成整个系统验证[3]。
2.2 UART IP核设计
2.2.1 UART协议
UART接口是计算机串行通信广泛使用的接口,包含了RS-232、RS-422、RS-485等串口。本设计采用Verilog来开发符合RS-232标准的UART IP核。UART传输只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收与发送是全双工实现。其工作原理是将传输数据的每个字符进行编

码,一位接着一位的传输,传输的速率由波特率时钟控制[4]。其中各比特的意义。

起始位:低电平信号发起,表示传输字符开始;
数据位:起始位后紧接着数据位,位数由7~8位构成一个字符,由时钟控制从低位开始传送;
奇偶校验位:数据位加上这一位后,得出“1”的位数为偶数或者奇数,以此来校验数据传输的正确性;
停止位:可以是1位、1.5位、2位的高电平,是一个数据帧结束的标志;
空闲位:处于高电平状态,表示当前线路上没有数据传送,若空闲位后出现低电平,则表示下一个数据帧的起始位。
2.2.2 功能模块设计

为了简化IP核设计,在具备基本异步串行收发功能的前提下,去掉了Modem控制器功能模块。IP核内部设计结构,主要由波特率发生模块、线路状态与控制模块、接收模块、发送模块、接收FIFO模块、发送FIFO模块、中断控制模块等组成[5]。
各模块之间的工作关系如下:当发送数据时,APB总线把数据写入发送FIFO中,当发送移位寄存器是空时,先由发送逻辑根据线路状态对数据进行配置,即在数据头部加上起始位,在数据尾部加上奇偶校验位和停止位,然后把数据压入到发送移位寄存器中,最后在发送时钟的控制下,通过Data_out线把数据发送出去;接收数据时,在接收时钟的控制下,串行数据通过Data_in线逐位送入接收移位寄存器中,当检测到停止位时,数据被转换为并行数据并送入接收FIFO模块中,并被总线读取,后面进入空闲状态,等待下一次任务。
线路状态与控制模块通过地址选通信号锁存片选信号和地址信号,当片选信号有效时,锁存读、写选通信号,当检测到读或写的数据到来时,进行相关寄存器操作。
中断控制模块要求当任何中断发生时,中断使能寄存器根据中断优先级的不同,允许对应的中断发生。UART IP核的中断申请可以分为4个优先级,从高至低的顺序为:INT0(接收器状态错误),INT1(接收数据准备好),INT2(发送器空),INT3(Modem控制中断)。
2.2.3 构建UART IP核的FPGA工程
设计完基于APB接口的UART IP核后,为使虚拟平台能够通过UMRBus总线访问IP核,需要把IP核添加到顶层文件包含UMRBus高速接口的FPGA工程中。该功能模块是由例化的XACTOR实现,XACTOR是由本平台提供的接口IP,主要通过AMBA协议实现软件平台与硬件平台之间的数据传输,每一个XACTOR由一个CAPIM(Client Application Interface Module)组成,系统总共提供了5类XACTOR供用户使用:APB、AHB、AXI、GPIO、INT。用户需要根据自己设计的IP核接口类型,选择对应的XACTOR添加到自己的工程中,然后修改相

应的端口、时钟、reset信号等,从而产生包含UMRBus高速接口的FPGA工程。
2.3 虚拟平台设计
2.3.1 搭建虚拟平台

本方案需要在虚拟平台中创建虚拟模型,并分别搭建能够对硬件RTL寄存器读写功能测试和对IP核数据传输功能测试的虚拟平台。其中,对硬件RTL寄存器读写功能测试的虚拟平台。图中,i_GFRBM_TLM2作为事件发起方(Initiator),通过连接tlm2bus总线,可以与硬件平台进行操作;i_ClockGenerator是虚拟时钟产生模块,为总线和Initiator提供时钟单元;i_ResetGenerator是虚拟模型复位模块,提供系统的复位功能;i_TlmTarget2UmrAMBA和i_IntInitiator2Umr是基于SystemC实现的并与硬件CAPIM相对应的XACTOR,通过标准的TLM2.0 Socket接口,实现软件平台与硬件平台的数据交互功能。
2.3.2 设计脚本
虚拟平台搭建完成后,需要在i_GFRBM_TLM2中写入测试脚本访问硬件寄存器,以测试IP核寄存器设计是否正确。在GFRBM模式下,Testbench采用标准的STL 2.0(Socket Transactor Language)语言实现,STL是由OCPIP(Open Core Protocol International Partnership)组织提出的标准Socket语言,主要由3个不同的子集组成:
(1)Basic commands:基于单指令任务的控制传输模式;
(2)Macro statements:采用短指令的突发传输序列;
(3)Behavioral statements:用户自定义控制指令。
根据本设计需要,UART IP核可以被访问的寄存器名字和地址如表1所示。

可访问的寄存器确定完成后,采用STL语言编写测试脚本,示例。

3 验证过程与结果分析
混合原型验证方案中,对IP核进行混合验证之前,首先需要使用仿真器对RTL代码进行仿真。当仿真通过之后,才可以在硬件平台上进行混合原型验证。硬件实现时,首先采用Certify工具进行代码分割,再使用Synplify工具进行代码综合,然后使用ISE工具进行布局布线并产生可加载的.bin文件,最后使用Confpro工具配置硬件系统。当硬件系统配置完成后,按照图2所示的方式进行连接,并启动虚拟平台开始混合原型验证。
3.1 寄存器读写功能测试
在虚拟平台中通过GFRBM模式对UART IP核进行寄存器读写访问时,参照2.3.1节中搭建的虚拟平台和2.3.2节中给出的测试脚本,分别采用固定值读写和随机数读写两种方式测试寄存器,结果如下:
(1)固定值读写测试:分别对表1给出的寄存器写入固定值0x0000、0x5555、0xaaaa、0xffff,然后读取该寄存器的值。经对比,读出值与写入值完全一致。
(2)随机值读写测试:分别对表1给出的寄存器写入随机值$random, 然后读取该寄存器的值。经对比,读出值与写入值完全一致。
3.2 UART数据传输测试
与寄存器读写功能测试

不同,在测试UART IP核的传输功能时,首先仿照2.3.1节的方法,构建包含处理器IP核模型的虚拟平台,然后在虚拟平台中加载ARM?誖CortexTM处理器IP模型,并编译UART软件环境,包括操作系统、驱动以及应用程序等。测试时,首先在虚拟平台中对IP核进行传输配置,包括传输速率、数据位、奇偶校验等,并把发送数据通过IP核发送到TXD端口,再通过串口传送到上位机超级终端进行显示;接收数据时,超级终端发送数据至IP核的RXD端口,虚拟平台读取IP核接收的数据,然后把数据在虚拟平台中打印出来,从而确定IP核传输功能的正确性。下面分别采用单端发送和回环传输两种方法进行测试。
(1)单端发送测试:即从虚拟平台发送数据,通过UART IP核传送至超级终端Minicom,在Minicom中显示发送的数据是否正确。虚拟平台中,对UART IP核数据传输协议配置如下:传输速率9 600 b/s、8 bit数据、无校验位、1 bit停止位,同样在Minicom中配置相同的传输参数。经测试,Minicom接收的数据与发送数据完全一致。测试结果。

(2)回环测试:即从虚拟平台发送数据,通过UART IP核传送至Minicom,Minicom接收到数据后,再把接收到的数据发送至UART IP核,虚拟平台读取IP核接收的数据,然后在虚拟平台显示窗口进行收发数据对比,以此确定回环传输的正确性。同样在虚拟平台和Minicom中配置如下参数:传输速率9 600 b/s、8 bit数据、无校验位、1 bit停止位。经测试,虚拟平台接收的数据与发送数据完全一致,从而确定整个通路传输是正确的。
4 结论
本文介绍了基于虚拟平台与硬件平台相结合的混合原型验证技术,并以UART IP核为例,对设计过程进行分析并对结果进行验证。由于采用了混合原型验证技术,使得SoC设计人员在开发早期便可发现设计的缺陷或故障,进而改进系统的功能和性能,降低开发风险。另外,本方案开发的IP核完全采用Verilog语言设计,移植性好,其接口采用标准的APB总线接口协议,所以不需要用户进行修改,便可很好地应用于SoC设计中,具有较高的应用价值。

相关文档
最新文档