0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用APB_I2C模块搭建层次化验证平台

电子工程师 来源:博客园 作者:博客园 2022-08-10 11:14 次阅读

	

一、前言

近期疫情严重,身为社畜的我只能在家中继续钻研技术了。之前写过一篇关于搭建FIFO验证平台的博文,利用SV的OOP特性对FIFO进行初步验证,但有很多不足之处,比如结构不够规范、验证组件类不独立于DUT等问题。此次尝试验证更复杂的IP,并利用SV的更多高级特性来搭建层次化验证平台。

二、APB_I2C IP概述

实践出真知,于是在opencores网站上下载了个APB_I2C的IP核,便着手展开验证工作。第一步是理清楚这个IP的整体功能、引脚作用以及顶层结构。整体功能从模块名称便可得知是带有APB总线接口的I2C_master。要了解引脚作用与时序,直接截取SPEC上的示意图查看:

APB_WRITE:

41e5a8a4-17df-11ed-ba43-dac502259ad0.png

APB_READ:

41fa1dc0-17df-11ed-ba43-dac502259ad0.png

I2C_PROTOCOL:

421c0b88-17df-11ed-ba43-dac502259ad0.png

接口和协议这里就不细说了,感兴趣的朋友查找相关的资料。至于顶层结构这方面,最好还是交给工具方便点。无奈回家没有带回我的虚拟机硬盘,只能下载个WINDOW版本的EDA工具了。本文使用QuestaSim,原理图如下:

4230e9c2-17df-11ed-ba43-dac502259ad0.png

很容易看出该模块顶层包含APB接口模块APB、分别用于缓存发送和接收数据的FIFO_TX和FIFO_RX,以及I2C协议转换模块I2X_INTERNAL_RX_TX。master通过APB总线访问该IP核内部的数据缓存区和配置寄存器,无需关注内部实现。

除了这几个方面,配置寄存器的访问也非常重要。IP核必须做出正确的配置和使能才可以按照需要正常工作。配置寄存器见下表:

4247bd64-17df-11ed-ba43-dac502259ad0.png

三、QuestaSim常用指令

QuestaSim工具的WINDOWS/LINUX版本很容易下载到,和Modelsim的主要区别是对SV UVM的支持性较好,这一点非常符合本文的意愿。但仿真过程中一次次点击鼠标很麻烦,只好学习学习操作命令了,写个脚本配合SV实现自动化仿真。以下是在官方文档user manual和tutorial中截取的常用指令及解释。

1 Compile the source files. vloggates.v and2.v cache.v memory.v proc.v set.v top.v

2 Use thevoptcommand to optimize the design with full visibility into all design units

vopt +acc -o -debugdb

The+accargument enables full visibility into the design for debugging purposes. The-oargument is required for naming the optimized design object. The-debugdbargument collects combinatorial and sequential logic data into the work library.

3 Use the optimized design name to load the design with thevsimcommand: vsim testcounter_opt -debugdb

4set WildcardFilter "Variable Constant Generic Parameter SpecParam Memory Assertion Endpoint ImmediateAssert" With this command, youremove “CellInternal”from the default list of Wildcard filters. This allows all signals in cells to be logged by the simulator so they will be visible in the debug environment.

5Add Wave*

6add log /*

This will provide the historic values of the events of interest plus its drivers

7 run 500

四、搭建验证环境

这一节是本文的核心内容了。通用的验证环境的结构和组件如图:

42589c24-17df-11ed-ba43-dac502259ad0.png

Stimulus将测试激励送入待测试模块DUT,Monitor观察响应并发送给检Checker。遇到复杂的设计还需要设计Reference model,进而对比实际响应与黄金参考的响应区别。并且当Monitor无法简单直接地收集DUT响应时,还需要设计VIP来解析复杂的响应信号时序。这几天参照工具书和网上的教程视频,根据APB_I2C模块的特性构思出基本的验证环境。

APB_I2C模块并不复杂,所以没必要设计reference model。若想利用Monitor组件获取DUT响应需要解析I2C协议时序,这里编写个VIP来帮助它解析出有效数据,进而与Stimulus数据对比。Monitor因VIP的存在得到了很大程度上的简化,主要的功能为将等待触发事件发生后,将数据通过MAILBOX传输给Checker进行比较。

另外,为了让Stimulus脱离具体接口信号操作,建立Generator和Initiator类分别用于产生读写访问和将读写访问转换成读写操作对应的具体信号逻辑。为了实现OOP特性中的“细节隐藏”,建立配置类Config来配置验证环境,这里主要是配置Generator发送特定场景的读写请求。想要测试不同的功能特性,只需改动传入Config的参数即可。到此验证环境包含了Generator Initiator Monitor Checker Config五个验证组件,这里再建立Environment类将这些组件包在一起,方便调用方法。还是上图更直观些(有点丑,凑活看吧)

426c1204-17df-11ed-ba43-dac502259ad0.png

除了验证环境结构,好的代码结构也能极大提高平台的重用性。这里将所有类及对应的属性方法封装到Package components中,方便被import到testbench中。验证过程中用到的所有变量类型、参数放置在defines.sv中。

五、仿真分析

当Config类对象的配置参数为CONFIG_WR_DATA时,generator发起写请求。波形如下:

428462c8-17df-11ed-ba43-dac502259ad0.png

观察打印的Log可以看出每个SCL时钟周期采集到一个bit,MAILBOX正确传输,checker对比正确,故而仿真PASS。4295ba78-17df-11ed-ba43-dac502259ad0.png

验证过程中发现该模块有很多BUG!!这里举两个例子。

1 SDA为双向端口,但当sda_enable为0时,并没有赋值为高阻态,即释放信号线控制权给slave。做出如下修改并让VIP在ACK阶段拉低SDA。 42a6af90-17df-11ed-ba43-dac502259ad0.png

2 SCL在读操作状态机中没有被toggle,因此config的配置参数为CONFIG_RD_DATA时SCL没有翻转。在读操作状态机中添加翻转逻辑,使BR_CLK_RX_O信号在counter_receive_data == clk_t_1_4时拉高,counter_receive_data==clk_t_3_4时拉低。

42dd7502-17df-11ed-ba43-dac502259ad0.png

波形显示在读操作时SCL正常翻转。

42efb85c-17df-11ed-ba43-dac502259ad0.png

该模块的读操作很多地方不正确还有待修改,就不一一赘述了。总的来说就是根本不能用o(╥﹏╥)o 不抱希望了,之后我还是自己写一个吧。

六、总结

本文利用APB_I2C模块为例搭建了层次化验证平台,但还有待改善。这里列出几点:

1 没有完全做到测试用例与环境分离

2 没有构建场景层给予丰富的pattern

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IP
    IP
    +关注

    关注

    5

    文章

    1646

    浏览量

    149324
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1481

    浏览量

    123261
  • questasim
    +关注

    关注

    0

    文章

    5

    浏览量

    7483
  • 验证平台
    +关注

    关注

    0

    文章

    8

    浏览量

    2850

原文标题:SystemVerilog搭建APB_I2C IP 层次化验证平台

文章出处:【微信号:ZYNQ,微信公众号:ZYNQ】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如果芯片不具有硬件I2C模块怎么办?

    这样做的好处是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模块,或者硬件 I2C 模块损坏,又或者使用硬件 I2C
    的头像 发表于 10-30 15:59 4826次阅读
    如果芯片不具有硬件<b class='flag-5'>I2C</b><b class='flag-5'>模块</b>怎么办?

    利用MP3C和Spartan-IIE开发板实现复杂FFT电路的验证

    MP3C系统是Aptix公司的产品,是一种价格低、验证速度快、基于层次化和模块化的硬件验证平台
    发表于 01-30 13:08 799次阅读
    <b class='flag-5'>利用</b>MP3<b class='flag-5'>C</b>和Spartan-IIE开发板实现复杂FFT电路的<b class='flag-5'>验证</b>

    i2c详解+送apb_i2c工程+送中英文协议

      0.本文的内容目录 本文一共接近一万一千字,为了帮助大家阅读,我把本文的内容目录截图如下,大家根据需要阅读,或者一次阅读不完,下次再读的时候方便查阅。 1.I2C概述 I2C
    的头像 发表于 01-02 01:19 1950次阅读
    <b class='flag-5'>i2c</b>详解+送<b class='flag-5'>apb_i2c</b>工程+送中英文协议

    利用RC1000和SoC设计展示评估平台RC200搭建一个原型验证系统的样机?

    SoC原型的Handel-C描述及其实现流程是怎样的?利用RC1000和SoC设计展示评估平台RC200搭建一个原型验证系统的样机?
    发表于 05-28 06:15

    基于I2C总线的键盘显示模块设计

    介绍了利用P87LPC76X系列单片机设计的一个键盘显示模块,通过I2C总线与主控芯片相连,具有灵活、控制方便等特点。文中给出了部分硬件设计和软件流程。关键词:I2C总线;P87LPC
    发表于 08-05 14:43 24次下载

    I2C总线接口模块设计

    本实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据写入EEPROM,然后再
    发表于 11-02 17:01 41次下载

    ;C总线的验证及实现--Proven Imple

    ;C总线的验证及实现--Proven Implementations of the ;C Bus Abstract
    发表于 01-22 16:16 2102次阅读
    <b class='flag-5'>I²</b>;<b class='flag-5'>C</b>总线的<b class='flag-5'>验证</b>及实现--Proven Imple

    AVR利用USI模块作为I2C从机

    AVR利用USI模块作为I2C从机
    发表于 10-08 17:02 82次下载
    AVR<b class='flag-5'>利用</b>USI<b class='flag-5'>模块</b>作为<b class='flag-5'>I2C</b>从机

    基于SystemVerilog的I2C总线模块验证

    文中分析了基于Systemverilog验证环境的结构,并在介绍I 2 C总线协议的基础上,重点论述了验证环境中事务产生器及驱动器的设计。
    发表于 12-22 17:20 27次下载
    基于SystemVerilog的<b class='flag-5'>I2C</b>总线<b class='flag-5'>模块</b><b class='flag-5'>验证</b>

    VaaS平台已支持区块链平台智能合约的形式化验证

    VaaS形式化验证平台,采用了多种形式化验证方法,具有验证效率高、自动化程度高、人工参与度低、易于使用、支持多个合约开发语言、可支持大容量区块链底层
    发表于 12-14 10:18 1083次阅读

    Arduino教程之I2C模块使用教程资料免费下载

    为什么叫I2C模块?和一元硬币差不多大小的一块PCB上放了三个芯片,分管三个功能:时间计算、温度侦测、数据存储。这三个芯片都是通过I2C总线通信的。 我们知道,I2C理论上可以级联
    发表于 01-22 16:59 9次下载
    Arduino教程之<b class='flag-5'>I2C</b><b class='flag-5'>模块</b>使用教程资料免费下载

    利用Systemverilog+UVM搭建soc验证环境

    利用Systemverilog+UVM搭建soc验证环境
    发表于 08-08 14:35 5次下载

    可编程逻辑电路—版图验证工具的作用

    版图验证工具不仅要支持扁平化验证,而且要支持层次化验证。扁平化验证是版图验证工具的基础;
    发表于 08-29 11:00 2665次阅读

    基于EsDA开发平台快速搭建I2C数据采集监测系统

    EsDA开发平台为产品上线提供动力。本文将基于EsDA开发平台,通过拖拽、连线方式,10分钟快速搭建一个I2C数据采集监测业务,为客户产品开发、部署、上线缩短周期。
    的头像 发表于 10-14 11:48 1135次阅读

    Testbench自动化验证方法介绍

    自动化验证testbench结果可以减少人工检查的时间和可能犯的失误,尤其对于比较大的设计。
    的头像 发表于 09-04 09:15 857次阅读