天天看點

SystemVerilog中的program和module有什麼差別?SystemVerilog中的program和module有什麼差別?

SystemVerilog中的program和module有什麼差別?

在傳統的verilog驗證環境中,測試激勵也往往封裝在module裡。測試module用來産生激勵,發送到DUT待測執行個體的端口上,也可以接收DUT的輸出,并做結果比對。在systemverilog中,多了一個program,作用和module有些類似,是專門用來編寫測試bfm/monitor的。

按照 IEEE Std 1800-2012 § 3.4 & § 24的描述,program和module有幾點不同:

  • cannot cannot contain always procedures, primitive instances, module instances, interface instances (virtual interface and port interface is allowed), or other program instances.
  • specifies scheduling in the Reactive region. This prevents race conditions.
  • has an extra system task $exit, which terminates the program instances that calls it. The simulation will terminate when all program instances have exited.

除了一些使用上的限制外,自動退出機制需要額外注意。

在systemverilog中,可以采用基于class的測試代碼來取代program。因為program是源于Vera的曆史包袱(https://blogs.mentor.com/verificationhorizons/blog/2009/05/07/programblocks/)有着衆多的不友善。

總的來說,輕量級的驗證環境,用program是比較合适的。複雜一些的還是需要基于面向對象的方法。

繼續閱讀