公司动态
I2C ip验证
文章目录简介测试点testbench框架测试用例寄存器中断问题简介针对synopsys的I2c ip提取测试点搭建测试框架分析功能和代码覆盖率反向完善整个测试功能集。测试点寄存器testbench框架这边使用S家的i2c vip来验证DUTDUT的设计需要满足行业统一协议S家的统一VIP是进过验证的满足行业协议的。自己的vip或者直接让DUT交叉对接回环测试的话只能证明这个DUT自己和自己能正常工作但是不能证明和其他外设能通信正常。但如果一段使用DUT另一端使用VIP验证的话就能很好地检验DUT是否满足行业标准这也是验证中常用的做法。S家的VIP基本上都是统一的封装一个agt其中包含drvmonsqrcfg等组件。cfg是用来配置改变vip行为的这个配置需要仔细研究。测试用例寄存器中断发送空中断问题配置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需要手工调用。slave seq一直卡死只有开始时间没有结束时间。深入调试uvm_do发送slave seq发现一直卡在wait_for_grant这是由于driver测一直没有get_next_item导致的。观测控制台打印的log发现如下信息发现slave测runphase自从打印wait for reset之后再也没打印其他东西那么很有可能是vip测复位释放有问题。检查代码发现dut复位有效是低电平而vip复位有效是高电平所以复位信号传到vip之前需要翻转一下。