I2C ip验证
2026/7/14 18:49:48 网站建设 项目流程

文章目录

  • 简介
  • 测试点
  • testbench框架
  • 测试用例
    • 寄存器
    • 中断
  • 问题

简介

针对synopsys的I2c ip,提取测试点,搭建测试框架,分析功能和代码覆盖率,反向完善整个测试功能集。

测试点

  1. 寄存器

testbench框架


这边使用S家的i2c vip来验证DUT,DUT的设计需要满足行业统一协议,S家的统一VIP是进过验证的满足行业协议的。自己的vip或者直接让DUT交叉对接,回环测试的话,只能证明这个DUT自己和自己能正常工作,但是不能证明和其他外设能通信正常。但如果一段使用DUT,另一端使用VIP验证的话就能很好地检验DUT是否满足行业标准,这也是验证中常用的做法。S家的VIP基本上都是统一的封装一个agt,其中包含drv,mon,sqr,cfg等组件。cfg是用来配置改变vip行为的,这个配置需要仔细研究。

测试用例

寄存器

中断

  1. 发送空中断

问题

  1. 配置apb总线的sequence只能执行第一个transaction就会卡死,剩下的transaction不会执行。
    怀疑寄存器模型中adapter中打开了provides_responses = 1,寄存器模型会等待get_response,但是driver中没有put_response或者item_done(rsp),把adapter中response关闭还是会卡死,所以卡死的点并不是等待response。verdi中停止调试,直接看sequence的调用栈,直接看卡死在哪一行,然后去反推。调用栈如下所示:

    发现是卡在end_tr函数上,每个transaction执行完之后没有调用end_tr导致。这是因为 vip 中使用了UVM_DISABLE_AUTO_ITEM_RECORDING这个宏,使用这个宏之后item_done不会自动调用end_tr,需要手工调用。

  2. slave seq一直卡死,只有开始时间,没有结束时间。

    深入调试uvm_do发送slave seq发现一直卡在wait_for_grant,这是由于driver测一直没有get_next_item导致的。观测控制台打印的log发现如下信息:

    发现slave测runphase自从打印wait for reset之后再也没打印其他东西,那么很有可能是vip测复位释放有问题。检查代码发现dut复位有效是低电平,而vip复位有效是高电平,所以复位信号传到vip之前需要翻转一下。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询