最近使用S家的I2C VIP驗(yàn)證芯片的外圍I2C、SMBus總線,作為同樣由SCL和SDA兩根線支撐起的串行總線,協(xié)議相似,因此該I2C VIP也可以配置成SMBus總線使用。只需要更改其最上層的configuration即可,這一點(diǎn)User Guide寫的很清楚,很方便。
具體到SMBus模式的使用場(chǎng)景,我需要在發(fā)送完一筆數(shù)據(jù)后,修改數(shù)據(jù)中的command值,即第一筆數(shù)據(jù)和第二筆數(shù)據(jù)使用的command相同,但需要修改command對(duì)應(yīng)的值。該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]);
但遇到了問題,數(shù)據(jù)包發(fā)送不完,仿真會(huì)掛死在某個(gè)地方,波形上也會(huì)變成一條直線,但run.log暗示數(shù)據(jù)的確是產(chǎn)生了。隨后,根據(jù)VIP提供的另一個(gè)示例,嘗試在調(diào)用完reconfigure_via_task( )后,通過調(diào)用start( )的方式重新啟動(dòng)sequence,但情況沒有發(fā)生改變。至此,基本定位到了問題出在調(diào)用reconfigure_via_task( )這行代碼上。
重新看run.log,發(fā)現(xiàn)調(diào)用完該task后,VIP的master_agent[0]會(huì)被重新配置成默認(rèn)標(biāo)準(zhǔn)的I2C模式上,這樣問題就合理了,I2C standard模式的確發(fā)不了SMBus fast模式的數(shù)據(jù),這也證實(shí)了run.log中現(xiàn)實(shí)數(shù)據(jù)產(chǎn)生了,但總線上沒有數(shù)據(jù)的情況。
因此,解決的辦法也很簡(jiǎn)單,在調(diào)用reconfigure_via_task( )之前,將SMBus相關(guān)的配置重新配置上即可。
run.log中藏著debug的信息,在出現(xiàn)bug時(shí)一定要仔細(xì)閱讀run.log,經(jīng)驗(yàn)+1。
這個(gè)問題也和config_db跨層傳參失誤有關(guān),后面再寫~
審核編輯:劉清
-
芯片
+關(guān)注
關(guān)注
456文章
51019瀏覽量
425347 -
I2C總線
+關(guān)注
關(guān)注
8文章
391瀏覽量
61054 -
SMBus
+關(guān)注
關(guān)注
1文章
117瀏覽量
22114 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17115
原文標(biāo)題:日常 - I2C VIP 配置小問題
文章出處:【微信號(hào):小杜的芯片驗(yàn)證日記,微信公眾號(hào):小杜的芯片驗(yàn)證日記】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論