2015-01-03 69 views
1

我一直在閱讀UVM: illegal combination of driver and procedural assignment warning和附在答案中的紙張。 如何在復位時初始化時鐘塊信號

但是,驅動程序被用來驅動接口信號而不是時鐘信號的復位值,所以時鐘不能保證在復位時運行。

那麼如果接口信號被聲明爲導線,我該如何解決這種情況。

例如, 考慮鏈接問題中的代碼。一般的情況是

@(vif.cb); 
vif.cb.opcode <= value; 

這是正確的,即使操作碼聲明接口事業時鐘攔網會照顧分配正確的。但我不能說

@(vif.rst); 
vif.cb.opcode <= init_value; 

因爲我不能保證復位時鐘。爲了適應這一點,我必須改變時鐘發生策略。

無論是我可以說

vif.opcode <= init_value; 

導致其非法使用與網式信號

程序分配

另一種方法是門控宣佈爲網帶復位信號,但我認爲,我將有在界面中聲明臨時信號。任何人都可以詳細說明如何在重置時實現驅動網絡?

+0

恐怕你必須在這裏更具體。顯示導致您問題的代碼。 –

+0

我希望現在的問題能夠正確闡述,請告知我是否應該添加更多詳細信息,謝謝 – wisemonkey

回答

2

雖然從程序代碼中分配網絡是非法的,但強制值到它們是合法的。你可以做到以下幾點:

@(negedge vif.rst); 
force vif.opcode = 0; 

獎勵:IMO你不應該有opcode定義爲線。程序性和連續性駕駛員警告的非法組合是錯誤的。

有可能使用一種過程分配以分配給具有輸出clockvar相關聯的信號:SV 2012標準在14.16.2驅動時鐘輸出信號明確指出。當關聯信號爲變量時,程序性分配將爲變量分配一個新值,變量應保持該值直到發生另一次分配(從驅動器到時鐘塊輸出 或其他程序分配)。

+0

,所以我們基本上都在等待工具來更新和適應SV 2012標準。現在我將相應地在接口網絡上使用強制,並嘗試使用邏輯信號創建另一個分支,以便我們擁有正確的功能。謝謝 – wisemonkey

+0

@wisemonkey其實,我用'logic'試過了它,它沒有任何警告。您鏈接的問題中的警告必須來自其他地方(設置與時鐘塊和連續賦值不完全相同)。 –

+0

@wisemonkey但w.r.t.等待適應標準,這是真的。我不認爲有任何工具已經實現了它的100%。 –