基于Avalon-MM的I2C总线控制器设计及VMM验证

2016-03-17 01:55张晓龙
计算机测量与控制 2016年2期
关键词:覆盖率控制器

张晓龙

(上海大学 微电子研究与开发中心,上海 200072)



基于Avalon-MM的I2C总线控制器设计及VMM验证

张晓龙

(上海大学 微电子研究与开发中心,上海200072)

摘要:分析了Avalon-MM总线的架构以及I2C总线的传输方式,提出了一种可行的I2C总线控制设计方案,并说明了详细的实现过程;设计的基于Avalon-MM总线的I2C总线控制器可复用IP核,可以不加修改地应用在基于Altera公司产品的SOPC系统中;使用VMM验证方法学构建了多层次可复用的验证平台,对设计进行了全面的验证;整个验证平台使用systemverilog语言实现,仿真工具使用VCS-MX200606;最后仿真结果显示,设计被完全地验证并达到100%覆盖率。

关键词:总线接口;控制器;验证方向学;覆盖率

0引言

现在半导体制造技术的发展已经可以实现一块芯片容纳几亿个晶体管,这使得一块芯片中可以集成更多的系统功能,并且引发了芯片设计方法学的变革。制造工艺的发展和对功能更强产品的需求使得SOC的设计成为主流[1]。传统的设计方法已经不能适用于这种规模复杂芯片的设计,对于SOC设计,设计复用-重用之前编写和验证过的代码-是唯一以可接收的代价完成 如此复杂设计的方法[2]。现在设计人员的主要挑战是使完成的设计是可复用的和如何复用之前的设计。

使用标准总线接口的设计可以有效提高可重用性,使用标准的接口可使设计易于理解和易于找到可用的IP核加快设计的进度[3]。另外,针对此标准接口的验证IP核也可在多个项目中重用,加速验证过程。使用标准接口的设计的功能模块也更容易在系统层次的集成,因为IP接口信号与总线信号是统一的[4]。

随着芯片门数和复杂度的急剧增加,芯片验证的工作量达到了整个芯片研发的70%,功能验证越来越成为设计过程中的瓶颈[5]。这催生了专门用于验证的编程语言(systemverilog)和一系列基于该语言的验证方法学的产生和发展,例如VMM,AVM,OVM,UVM等。基于方法学的验证可通过多种机制显著提高验证生成率,例如断言、抽象、自动化和重用[6]。

本文设计了一个I2C总线控制器[7],该控制器使用Avalon-MM标准接口,可不加修改地应用于使用Altera公式产品构建的SOPC系统中[8]。然后应用VMM验证方法学为该设计搭建了一个可移植、重用、扩展、完全自动检查、具有层次化结构的验证平台,使用受约束的随机激励生成和功能覆盖率等技术,对设计进行了全面的功能验证,并且达到100% 的覆盖率。

1设计描述

设计可以分为两个主要部分:I2C协议产生部分和Avalon-MM总线接口部分。I2C总线协议部分负责完成在I2C总线上按照协议完成数据的传输。Avalon-MM总线接口部分联系系统处理器和I2C控制器部分,处理器通过该接口完成对I2C传输数据和地址等信息的控制。设计的详细模块如图1所示。

图1 设计架构

1.1I2C协议产生器

I2C,全称Inter Integrated Circuit,是由飞利浦公司开发的一种两线式串行总线。它用两根线,时钟线和数据线,实现数据的双向同步传输,具有结构简单,成本低等优点,得到越来越广泛的应用。I2C已经成为芯片间低速串行通信的事实标准,应用于各类消费电子、电子控制设备和各式传感器中。

I2C总线采用简单的两线式结构,可以最小化引脚和PCB布线的开销。I2C总线支持多主机结构,但在同一时刻只允许一个主机获得总线控制权,所以要通过仲裁来解决多个主机争抢总线的问题,以免发生数据冲突。每个从机都有唯一的7比特的地址码,主机依据此地址码选址从机。

I2C定义了严格的数据传输时序,它以一个字节为单位进行数据传输,一次8比特数据传输结束后,接收方应发送一位响应位以确认数据接收成功。每次传输主机都要发送一位开始位和结束位来发起和结束一次数据传输。

1)空闲状态:I2C总线的空闲状态是时钟信号SCL的数据信号SDA同时处于高电平的状态,此时没有主机占用总线,由于上拉电阻的缘故,两根信号被上拉至高电平。

2)起始位:I2C总线定义在SCL为高电平时,SDA由高电平跳到低电平为起始信号。通过发送起始位信号,主机通知从机开始数据传输。

3)数据帧:在发送起始位后,主机开始从SDA逐位发送或结收数据帧,主机首先发送一个字节的从机地址码以寻址从机,该字节包含7比特的从器件地址和一位读写标志,1代表读,0代表写。需要注意的是,在数据帧传输期间SDA信号值只能在SCL为低时改变,只有在起始位结束位时,SDA才能在SCL为高电平时改变。

4)相应位:主机或从机每发送完一个字节,需要对方释放掉SDA的控制权来接收对方的响应。如果对方响应(SDA为低电平)则可继续传输,如果不响应(SDA为高电平)则应结束传输。

5)结束位:I2C总线规定当SCL为高时,SDA由低电平变为高电平为结束信号。结束位的产生代表着一次传输的结束,总线回到空闲状态,直到下次起始位。

图2 I2C控制的状态机

1.2Avalon-MM总线接口

Avalon-MM是Avalon总线的一个子集。Avalon总线是Altera公司专门为可编程芯片片上系统(System-On-a-Programmable-Chip, 以下简称SOPC)而推出的一套片内总线系统,与Nios系列的处理器软核一起,二者构成了Altera公司SOPC解决方案中的核心部分。

Avalon-MM全称是Avalon Memory- Mapped,是一套互联式总线接口,主要用于多节点的互联,具有较好的数据交换特性和很高的总线带宽,由于是针对SOPC设计的,Avalon-MM总线模块具有结构简单,采用全同步时序,以及可以灵活地配置等特点,其运行时钟、位宽、接口信号以及接口时序等都可以灵活地选择或配置。

Avalon-MM总线外设的控制或数据寄存器都可映射为处理器寻址空间内的一个地址。该设计中使用4个映射到地址空间的寄存器为I2C控制器提供所需的数据信息。寄存器slave_ID用于指示要控制的从机编号和最后一位读写控制位。寄存器sub_addr用于说明要访问的从机内部地址。寄存器data 是要写入从设备或从从机接收到的数据。寄存器status 指示控制器的当前状态。图3是本文设计的控制器选择的接口信号和对控制器内寄存器的读写时序。

图3 接口读取时序

1.3接口与协议产生部分的连接

I2C总线是低速总线,其时钟最大不超过400 kHz。而外部的主器件可能工作在很高的频率,比如50 MHz甚至更高。这样两个时钟域之间的信息交换可能会由于不能满足建立时间或保持时间而导致亚稳态的发生。为了避免亚稳态,使用了全同步式设计,所有的寄存器都由接口的高频时钟驱动,但为了实现I2C的低频传输,将使用分频得到的低频时钟作为参考时钟,通过脉冲边沿检测的方式,控制I2C状态机的转换,完成数据的低频传输。

Avalon接口的status寄存器是状态寄存器,Avalon可以写入该寄存器以控制I2C协议发生器,也可以读取该寄存器以了解I2C的当前状态。寄存器最后一位代表I2C协议发生器的闲忙状态,0代表空闲,接口可以通过写入寄存器相应的值,并在status寄存器最后一位写入1来启动一次I2C传输,每次传输结束该位会被清零,可以接收下一次的传输。

2验证平台

本文使用VMM验证方法学实现了一个分层验证平台,并设计了足够的测试用例来覆盖所有可能的边界条件。如图4所示,该验证平台包含激励生成器、驱动器、监视器、记分板和覆盖率统计等功能组件,它们协同工作完成对DUT(design under test,待验证设计,这里指的是I2C控制器)的功能验证。

图4 分层结构的验证平台

2.1激励生成器

激励生成器i2c_gen派生至vmm_xactor类,用来随机产生用于激励DUT的各种数据,并通过数据通道(i2c_trans_channel)传输给下层结构i2c_Driver。生成器产生的数据结构i2c_trans派生至vmm_data,加入了工程相关的特定的数据结构和子程序。要进行一次I2C总线传输,需要知道从设备的标号、访问的从设备内部地址和传输的数据的等信息。但是不是每一个由生成器产生的这些信息都是有效的,所以使用受约束的激励生成器可以产生理想的数据,而不是之后分析并丢弃无效的数据。

随机生成器的目标是应该能生成完全验证特定设计所需的全部激励。不同的测试用例可能需产生不同的激励,所以生成器中使用了工厂模式,可以实现在testcase中改变要产生的目标数据,而不是修改i2c_gen结构。

2.2驱动器和监测器

在验证平台中,位于命令层的驱动器(driver)和监测器(monitor)是直接与DUT交互的功能组件,将上层的事务转化为信号层DUT引脚的实际激励。他们是基于事务(transaction)的验证环境的基础,更高的抽象级别是验证平台不在关注底层信号的细节,更容易复杂的功能。

接口(interface)是systemverilog中的一个重要数据结构,它是连接DUT中静态信号和验证环境中动态数据结构的纽带。I2C控制器的Avalon总线接口被抽象成一个interface数据结构,该结构在驱动器实例化时被传进该验证组件内部,在驱动器内部以虚接口(virtual interface)的形式存在。之后,驱动器就可根据从上层组件接收到的事务并按照Avalon总线的时序对虚接口内的信号进行操作完成对DUT的驱动。

同样地,监测器也是通过虚接口跟I2C总线交互,通过监测这两根信号的变化,按照I2C协议来接收数据并做相应的响应。并将监测和响应的信息抽象成事务传输给上层结构。

2.3自检结构和断言

自检结构记分板(scoreboard)是在运行时检查DUT响应是否正确的验证组件。记分板按顺序比较驱动器发给DUT的激励和监视器响应的数据,如果不相等则报出一个错误。

断言(assertion)是观察和定位设计中协议或规则错误的一种有效手段,当断言在仿真过程中失败,从报告的错误信息中很容易定位到错误所在。在本文中使用断言检测Avalon总线协议和I2C协议的正确性。

2.4功能覆盖率

功能覆盖率是衡量设计可信度和验证进度的重要指标,验证的目的是保证设计在实际的运行过程中的行为正确。设计规范对设计的行为进行详细的描述,验证计划从中抽象出相应的设计特性。验证平台为设计仿真出实际的运行环境,并从验证环境中收集数据以确定设计的哪些行为特性已经被仿真覆盖,以此估计验证的功能覆盖率。

功能覆盖率信息的收集使用驱动器回调函数(callback method)的方式实现,这能保证验证环境的灵活性。不同的测试用例可能要求验证组件表现不同的行为,回调函数使验证组件的功能是可控的和可配置的,而不必为每一个测试用例使用不同的验证组件。驱动器在每次向DUT发送激励后,执行回调函数并将激励信息作为参数传给回调函数,函数内的covergroup结构完成覆盖率信息的收集。

2.5验证环境

验证环境类i2c_env派生至vmm_env类,作为验证平台的顶层包装,它将各种验证组件封装在一起,并提供仿真过程控制的语法。验证平台的各种组件都会在该环境类中被创建和实例化,并在环境类的控制下完成仿真。为了避免竞争和冒险,仿真过程被分成许多个执行步骤,各个阶段完成指定的工作,这通过环境类中的各种虚函数实现。当i2c_env::run()函数在testcase中被显式调用时,环境类中的以下虚函数会依次地被隐含地调用,完成各自的功能,最后完成仿真过程。

1)gen_cfg(),该函数产生随机的DUT和验证平台配置数据。用于配置DUT和验证平台的工作状态。

2)build(),该函数创建各个验证组件,并用产生的配置信息配置验证环境,将各验证组件通过管道相互连接,以传输数据。

3)reset_dut(),该函数给DUT发送重置信号,是DUT进入初始状态,避免因为没有正确初始化导致的错误。

4)cfg_dut(),该函数用产生的配置信息配置DUT,使其工作在合适的工作状态。

5)start(),该函数使各个验证组件开始工作。

6)wait_for_end(),该函数阻塞以等待测试的结束条件。

7)stop(),该函数使各验证组件停止工作。

8)cleanup(),该函数清理残留的数据,使仿真正常地结束。

9)report(),该函数报告最终的仿真结果是失败还是成功,并关闭所有文件。至此一次仿真过程结束。

3实验结果

使用Synopsys公司的VCS仿真工具对该控制器的设计和验证平台进行了仿真,VCS首先对设计和验证环境的源代码进行编译,然后执行仿真过程。仿真的运行过程有验证平台的环境类控制。首先随机产生各种配置参数,创建验证组件的实例并用产生的配置参数配置验证平台。然后初始化并配置设计使之处于有效的状态,并开始启动各个验证组件,产生激励信息并驱动设计,同时观察设计的响应,根据自检结构的比对结果判断设计的功能正确与否。为了检测各种条件下设计的运行结果,读写方式和读写的地址空间都随机化。这样就可以产生读读、写写、写读、读写等不同的激励序列,对设计进行全方位的验证。等到功能覆盖率组件检测到预定义的覆盖率达到一定值,验证完成,就可以结束仿真过程。在结束仿真工作退出前,还有做些收尾工作,如停止各个验证组件的运行和报告仿真的结构等。这些工作对于仿真的正常运行和以后的统计和调试都是必不可少的。

仿真运行结果如图5所示。可以看到,覆盖率监视器报告的最后对DUT的验证达到100%的覆盖率,说明验证全面,对该控制器的所有可能的运行场景都进行了仿真。而自检结构记分板的报告显示共进行了508次的比对,并且全部比对正确。为了便于调试,在仿真过程中使用verdi工具提供的波形产生函数生成了波形,verdi查看波形如图6所示。从图中也可以看到,Avalon接口和I2C总线的时序都是满足协议标准的。综上所述,可以说明设计的I2C控制器功能正确,可以用于工程应用。

图5 仿真运行结果

4结论

基于标准总线的设计可以使一个复杂的SOC工程分为几个部分,各部分可以独立地开发,最后集成在一起,并且可以`复用已有的IP核以加速整个SOC的研发。本文设计的I2C总线控制器,可不加修改地应用于任何使用Altera公式产品构建的SOPC系统中。复杂设计给验证的挑战迫使验证在更高的抽象级别上进行,本文基于VMM验证方法学搭建的验证平台在事务级运行,可显著提高验证的效率。验证平台的部分模块也可在系统级验证平台中复用。

参考文献:

[1] 钟洪. 基于FPGA的SOC设计研究[J]. 机电元件, 2013(3):13-18.

[2] Keating M J, Bricaud P. Reuse Methodology Manual for System-on-a-Chip Designs[M]. System-on-a-Chip Designs. Springer-Verlag GmbH, 2007:486-490.

[3] Bergeron J. Verification Methodology Manual for SystemVerilog[M]. Springer, Berlin, 2006.

[4] 杨鑫, 徐伟俊, 陈先勇,等. Avalon总线最新接口标准综述[J]. 中国集成电路, 2007, 16(11):24-29.

[5] Wang J, Ji X H, Yang N X, et al. An Advanced Verification Environment Based on VMM[J]. Advanced Materials Research, 2013, 655-657: 900-904.

[6] 冯星宇, 黄新, 颜学龙. 支持AVALON总线协议的SPI通信设计实现[J]. 国外电子测量技术, 2013, 32(3):66-70.

[7] Semiconductor P. The I2C-Bus Specification Version2.1[EB/OL].2000: http://www.semiconductors.philips.com/acrobat/various/I2C_BUS_SPECIFICATION_3.pdf,2000.

Avalon-MM Based I2C Bus Controller Design and Verification Using VMM

Zhang Xiaolong

(Microelectronic Resarch and Development Center,Shanghai200072,China)

Abstract:In this paper, the architecture of Avalon-MM and the I2C bus protocol is analyzed. Then, a design of reusable I2C bus controller based on Avalon-MM bus and the detailed implement process is presented. This reusable IP core can be used in the SOPC system built on Altera company product without modification. A multi-level and reusable verification platform is implemented using VMM to verify this design. The whole verification environment uses the System Verilog language, and the simulation tool is Synopsys VCS-MX200606. The verification results indicate that design has been exactly checked out with 100% coverage.

Keywords:bus interface; controller; verification methodology manual; coverage

文章编号:1671-4598(2016)02-0147-04

DOI:10.16526/j.cnki.11-4762/tp.2016.02.040

中图分类号:TP332

文献标识码:A

作者简介:张晓龙(1990-),男,河南开封通许人,硕士研究生,主要从事图像处理和集成电路的设计和验证工作。

收稿日期:2015-08-03;修回日期:2015-08-31。

猜你喜欢
覆盖率控制器
民政部等16部门:到2025年村级综合服务设施覆盖率超80%
工商业IC卡控制器改造为物联网控制器实践
我国全面实施种业振兴行动 农作物良种覆盖率超过96%
电信800M与移动联通4G网络测试对比分析
基于喷丸随机模型的表面覆盖率计算方法
基于DSP的复合跟踪控制器的设计
2015年湖南省活立木蓄积量、森林覆盖率排名前10位的县市区
航空软件代码覆盖率分析的项目管理
模糊PID控制器设计及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列