【原創】如何通過-y和-v使用庫文件

在進行模擬時,經常遇到設計程式碼中需要調用一些標準的庫文件,但是在設計的編譯列表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」,那麼庫文件中所有的模組都將會被編譯;

 

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