RTL基本知識:關於disable fork的誤解


 

分析說明:

initial"塊"在仿真開始時執行,開啟進程procedure_0,創建一個對應的可執行的線程.該進程中開啟了5個進程(ini_process_0、ini_process_1、ini_process_2、ini_process_3和ini_process_4),其中並沒有哪個進程創建對應的可執行的線程,這5個進程順序執行.在進程ini_process_1中開啟了3個進程(bg_process_0、bg_process_1和bg_process_2),這三個進程也是順序執行,當執行bg_process_2時,因為其所屬的線程只有procedure_0(ini_process_1並沒有創建對應的線程),所以在執行該進程時,將會終止ini_process_0和bg_process_1.所以,在使用disable fork時,如果沒有注意線程和進程之間的關系,那么極易導致額外的進程被終止.

總結

綜上示例所述,課件<<SystemVerilog forVerification>>中將線程和進程互換使用對於理解disable fork不合適,並且IEEE中並沒有完全采取混用,否則也沒有必要強調哪些進程可以產生線程了.書中示例7.17將initialbegin...end中所有的函數調用標注為線程(Tasks and function areprocedure that are enabled from one or more places in other procedures.(IEEEStandard for SystemVerilog-Unified Hardware Design,Specification,andVerification Language))是不合理的,這樣對於理解disable fork的作用范圍的理解可能會產生誤導,書中示例進程中之所以存在線程是因為其中具體實現存在產生線程的結構.disable fork只能終止那些調用線程產生的進程.因此,在使用disable fork終止fork進程時需要注意一下幾點:

  • 哪些語句屬於進程?哪些語句屬於線程?

  • begin...end和fork...join的執行順序是什么?

  • 哪些進程處於激活狀態?

  • 不同的仿真工具仿真出來的結果可能存在差異(目前Cadence和Synopsys仿真結果基本一致,Mentor仿真結果與這兩家EDA工具的仿真結果不一致);

     

     

參考文獻

Chris Spear.SystemVerilog for Verificatio.2008.Springer

IEEE.IEEE Standard for SystemVerilog-Unified HardwareDesign,Specification,and Verification Language.2013.IEEE

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM