關於UVM的重載

最近做項目的時候,重用了別人的驗證組件,需要對發包的driver做一定的修改,於是想到了重載。但是報了這樣一個錯:

# UVM_FATAL @ 0: reporter [FCTTYP] Factory did not return a component of type 'sds_ge_driver'. A component of type 'my_sds_ge_driver' was returned instead.

覺得非常的奇怪,因爲其他的關於激勵的重載都是OK的。這個問題定位了很久,排查了重載格式不對,重載了兩次,sds_ge_driver被例化了2次的可能,還是沒有解決這個問題。後來我在整理filelist的時候,發現sds_ge_driver.sv這個文件,被加進來了兩次,一次是組件VIP裏的,一次是我自己在外面添加的。問題就出現在了這裏,我自己添加的sds_ge_driver.sv文件內容上跟VIP裏的一模一樣,但是開頭的宏文件有區別,我的定義是這樣的:

`ifndef  SDS_GE_DRIVER_SV

`define SDS_GE_DRIVER_SV

VIP裏是這樣的:

`ifndef  SDS_GE_DRIVER__SV

`define SDS_GE_DRIVER__SV

多了一個下劃線。。。。。這個還是用軟件統一生產的頭文件,很難發現。。。。

就是因爲宏定義的不同,導致了sds_ge_driver.sv這個文件被編譯了兩次,在UVM的factory中被註冊了兩次,導致在重載的時候報錯。去掉我自己添加的文件,重載OK!。

最後引用我師父的一句話:詭異的問題一般都是低級問題。。

發佈了5 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章