记录一下使用I2C VIP验证芯片的一个bug

最近使用s家的i2c vip验证芯片的外围i2c、smbus总线,作为同样由scl和sda两根线支撑起的串行总线,协议相似,因此该i2c vip也可以配置成smbus总线使用。只需要更改其最上层的configuration即可,这一点user guide写的很清楚,很方便。
具体到smbus模式的使用场景,我需要在发送完一笔数据后,修改数据中的command值,即第一笔数据和第二笔数据使用的command相同,但需要修改command对应的值。该command在_agent_configuration中声明,vip提供了reconfigure_via_task( )来更改该command。
我参考vip中提供的示例编写了sequence,其中更改command的代码如下:
smbus_cfg.master_cfg[0].xxx_cmd = 'hxx;env.system_env.master[0].reconfigure_via_task(smbus_cfg.master_cfg[0]);  
但遇到了问题,数据包发送不完,仿真会挂死在某个地方,波形上也会变成一条直线,但run.log暗示数据的确是产生了。随后,根据vip提供的另一个示例,尝试在调用完reconfigure_via_task( )后,通过调用start( )的方式重新启动sequence,但情况没有发生改变。至此,基本定位到了问题出在调用reconfigure_via_task( )这行代码上。
重新看run.log,发现调用完该task后,vip的master_agent[0]会被重新配置成默认标准的i2c模式上,这样问题就合理了,i2c standard模式的确发不了smbus fast模式的数据,这也证实了run.log中现实数据产生了,但总线上没有数据的情况。
因此,解决的办法也很简单,在调用reconfigure_via_task( )之前,将smbus相关的配置重新配置上即可。
run.log中藏着debug的信息,在出现bug时一定要仔细阅读run.log,经验+1。
这个问题也和config_db跨层传参失误有关,后面再写~


基于FPGA的TDC延时设计方案
智能时代,联接产业正迎来五大变化
实体零售店的痛点可以让物联网来解决吗
华为P10数据大盘点,这颜值也是没谁了!
集成数值比较器
记录一下使用I2C VIP验证芯片的一个bug
zigbee使用的频段与有几个不同的频率
详谈广域网SDN应用部署、七大功能及架构设计
索尼将Xperia 5 II添加到了Xperia引人入胜的产品系列中
投入式静压液位测量已成为测量静态压力最为有效的方法之一
嵌入式Linux设备驱动原理原来是这样编写的!
俄罗斯将与华为开展5G合作_华为将为俄罗斯第一个提供5G技术支持
三星的一份专利显示,三星正在着手研究“屏中屏”
高效CDTE和CIGS薄膜太阳能电池的亮点与挑战
基于GaN功率器件的大功率和高功率密度EV逆变器
救援无人机“渐成气候”救援无人机市场前景广阔
ad转换的四个步骤是什么
NVIDIA Cambridge-1加速AI在医疗健康领域的应用
力矩传感器工作原理_力矩传感器的优点
LabVIEW中集合的相关知识