0
強制翻轉信號的位使用此方法有效嗎?System Verilog - 強制信號翻轉/翻轉
1.
task
begin
force higher_level.lower_level.a[1] = ~higher_level.lower_level.a[1];
end
我和混合的結果充其量嘗試這個。有時候這個位會翻轉,但有時它仍然是一樣的。
不過,我也寫一個不太優雅的代碼與翻轉位,它的工作原理所有的時間相同的目的,如下所示:
2.
task
begin
if(higher_level.lower_level.a[1] == 1'b1)
force higher_level.lower_level.a[1] = 1'b0;
else
force higher_level.lower_level.a[1] = 1'b1;
end
的是第一個代碼不是翻轉位的好方法?還是有什麼我錯過了?
凡higher_level.lower_level.a[51:0]
是一個52位信號
感謝:d
嗨戴夫,只是想知道你是什麼意思的抽樣過程?我也忘了提及這個代碼是在一個'task'塊中,所以,當'task'塊結束時,無限循環的問題就不會成爲問題。如果我的理解是正確的,那麼一旦任務結束,「力量」應該停止強制信號。 – TheSprintingEngineer
我的意思是「if」語句必須在某個時刻評估它的分支表達式,也就是說當你忘記提及的任務被調用時。 「力量」聲明建立了一個新的過程,它像一個連續的任務一樣:每當RHS上的信號發生變化時,RHS就會得到重新評估,並向LHS提供一個委託人。這個過程一直存在,直到另一個'force'取代它,或者有一個'release'。 –
噢好吧,對於第一種方法,如果我在任務結束時使用'release',那麼信號應該保持該值,直到其他值被寫入信號'a',或者方法1不會工作在任何條件下,我應該只堅持方法2? – TheSprintingEngineer