在進行模擬時,經常遇到設計程式碼中需要呼叫一些標準的庫檔案,但是在設計的編譯列表filelist中卻沒有相應的庫檔案,這時為了完成模擬,需要設計人員提供對應的庫檔案或者庫檔案所在的路徑,然後模擬時將這些庫檔案或者路徑新增到編譯命令中,以實現模擬編譯的正常進行。這個過程在實際中是通過”-y”和”-v”將對應的這些庫檔案或者庫路徑告訴模擬器,這樣在編譯時模擬器就會在對應的庫檔案或者庫路徑下尋找對應的module程式碼。本文將示例”-y”和”-v”具體如何使用。

1 使用庫檔案

如果模組中存在對於某個庫檔案中的某個module的例項化,那麼可以通過在編譯命令中使用”-v”的方式指定要搜尋的庫檔案。其格式如下:

compile_order -v library_file.v

其中compile_order為模擬器的編譯命令,library_file.v為庫檔案,其中可以包含多個模組,編譯時只編譯用到的模組。

2 使用庫路徑

如果在編譯的時候,不知道資料夾中到底哪個庫檔案包含需要的模組,那麼這是可以使用”-y”的方式,指定要搜尋的資料夾,但是這是需要注意,使用”-y”的同時需要配合使用”+libext+”用於指定要在搜尋資料夾中哪些字尾型別的檔案中進行搜尋。其格式如下:

compile_order -y ./path_name +libext+.v

其中compile_order為模擬器的編譯命令,./path_name用於指定要搜尋的資料夾的路徑(路徑名包含要搜尋的資料夾名), +libext+.v用於指定要在被搜尋資料夾中搜索的檔案的字尾,如果要搜尋多個字尾可以繼續追加”+libext+.v+字尾名”,如果沒有後綴可以使用兩個”++”連續寫即可。

【示例】

示例檔案的結構如下圖,top_tb中例化了兩個模組,分別是t2and和t1xor。t2and在t2.v中,t2.v中還存在另一個模組t2x2and,並且與top_tb.v位於同一個資料夾中。t1xor位於資料夾path中,該path資料夾下還有另外兩個檔案:t0xor.v和t2xor.v,並且在t1xor例化了t0xor。整體結構如下圖所示:

【原始碼】

【模擬命令】

注:其中的file.f中僅包含top_tb.v一個檔案。

【模擬結果】

通過編譯後模擬器分析的電路層次結構我們可以可以看到,只有在top_tb中被呼叫的模組出現在了設計層次中,沒有被呼叫的並沒有出現,即只有被呼叫的模組被編譯到了設計中。同時我們注意到,因為t1xor中例化了t0xor,編譯時會自動識別庫中本身的層次呼叫關係,將相關的庫檔案自動搜尋編譯,但是需要注意的是這時t1xor和t0xor必須都位於相同的資料夾中。

通過示例我們可以知道,使用-v或-y選項指定庫時,編譯器將只編譯那些設計中用到的模組,這些用到的模組無需再新增到filelist中,這樣可以大大壓縮編譯時間及記憶體空間,避免了在眾多檔案或者路徑下找模組的問題,將人力工作交由電腦來完成。

【總結】

  • 使用庫檔案

在命令列中使用選項:-v file_name

  • 使用庫目錄

在命令列中使用選項 -y directory_name

在命令列中使用選項 +libext+file_extension

  • ”-y”和”-v”在Verilog和SystemVerilog的LRM中並沒有出現,但是他們不是某家EDA大廠所特有的,所有的EDA大廠生產的模擬器都支援;
  • ”-y”和”-v”僅適用於Verilog和SystemVerilog的程式碼;
  • 使用”-y”和”-v”指定庫檔案和庫路徑時,只編譯那些設計中用到的模組。如果沒有使用”-v”,那麼庫檔案中所有的模組都將會被編譯;

更多技術內容,可關注下圖個人技術微信公眾號,歡迎朋友們關注溝通!