SystemVerilog中,為了是代碼簡潔、易記,允許用戶根據個人需要使用typedef自定義數據類型名,常用的使用方法可參見“define和typedef區別”。但是在SystemVerilog引入面向對象編程后,經常會遇到在編寫某個類或者類型的定義之前需要先使用對變量進行聲明,往往這種情況下編譯都會報錯,為此本文示例typedef的另外一種用法,可以稱之為“forward typedef”。
【示例】未使用forward typedef
【仿真結果】
示例中,因為transaction的定義出現在使用該類型的transactor之后,所以在編譯時,仿真器編譯到transactor中的transaction時,發現已經變異的庫中並沒有對應文件的定義,所以此時編譯會報錯,認為transaction還沒有定義。但是往往在進行驗證環境設計搭建時,經常需要像示例中的方式使用,為此SystemVerilog中可以通過typedef將要使用的類型進行前置,如下例。
【示例】
【仿真結果】
但是使用時必須要注意,如果使用“forward typedef”,那么被typedef前置的類型的定義必須在當前代碼的后續編譯過程中出現其定義,否則還是會報錯,如下例。
【示例】
【仿真結果】
除了上述用法外,typedef還可以用於具有參數的class。
【示例】
【仿真結果】
通過上述示例,typedef可以用於將一些數據類型進行前置聲明(forward declaration),這樣仿真工具允許該類型的定義在后續的編譯過程中再出現,特別是對於比較復雜的驗證環境的構造過程中,該種用法還是比較多的。但是這里需要注意的時,一旦使用typedef的前置聲明方法,那么在后續的編譯過程中,必須要出現前置聲明的類型的具體定義。
更多技術內容,可關注下圖個人技術微信公眾號,歡迎朋友們關注溝通!