[英]SystemVerilog program block vs. traditional testbench
是否存在程序塊提供的SV的任何功能,這些功能無法與其他方法重復使用?
這個問題不太具體的版本是:我是否應該打擾程序塊進行驗證? 我正在從一個受限於Verilog-95的環境轉移到支持SV的環境中,我想知道我是否通過不使用程序塊為自己創造額外的工作。
查看IEEE Std1800-2012§3.4和§24 。有關program
塊的完整描述。
在簡短的,不完整的摘要中,一個program
塊:
always
包含過程, primitive
實例, module
實例, interface
實例(允許virtual interface
和端口interface
)或其他program
實例。 $exit
,它終止調用它的program
實例。
program
實例都退出時,模擬將終止。 module
塊。 program
塊的想法是在測試和設計之間創建清晰的分離。 在早期版本的SystemVerilog(IEEE 1800之前版本)中, class
實例化通常僅限於program
塊。 這強調了測試和設計的划分。 它還使得program
塊對於希望在其流程中使用面向對象編程的驗證工程師至關重要。 從IEEE 1800開始,幾乎可以在任何地方定義和實例化class
。 結果, program
塊變得不夠充分。
今天,對program
塊有用性的看法是分開的。 從我去過的最后幾個約定來看,趨勢似乎是贊成放棄program
塊。 這是因為其他方法可以實現這些優點。 可以使用clocking
塊來完成反應區域中的調度。 mailbox
,隊列( [$]
)或關聯數組( [*]
)可用於智能處理運行多個測試的模擬終止。 就個人而言,我仍然喜歡使用program
塊,並在需要時initial forever
使用initial forever
作為always
等價的。 如果您打算使用UVM,那么非program
塊測試平台可能會更適合您。
最后,它實際上歸結為方法偏好。 最好自己評估和試用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.