加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 第一章 關(guān)于本文檔
    • 1.1 概要
    • 1.2 版本信息
    •  
    • 1.3 版權(quán)信息
    • 1.4 作者聯(lián)系方式
    • 第二章 簡介與概述
    •  
    • 第三章 編譯并運行svlib
    • 3.1 Mentor Graphics QuestaSim
    • 3.2 Cadence Incisive
    • 3.3 Synopsys VCS
    •  
    • 第四章 一些使用規(guī)則與約定
    • 4.1 庫的結(jié)構(gòu)概述
    • 4.2 類或者包內(nèi)的函數(shù)?
    • 4.3 構(gòu)造svlib對象
    • 4.4 錯誤處理
    • 4.5 svlib的內(nèi)部隱藏特性
    • 4.6 命名約定
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

svlib文檔翻譯(第一至四章)

2021/04/22
292
閱讀需 15 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

中文版本由空白的貝塔君整理發(fā)布

鏈接為https://github.com/recogni/svlib

第一章 關(guān)于本文檔

1.1 概要

本文檔是對systemverilog使用庫svlib的說明和編程指導。

1.2 版本信息

版本號 日期 作者 說明
0.0 2014.02.10 J Bromley Initial release for discussion
0.1 2014.02.23 J Bromley Working towards a first release
0.2 2014.03.02 J Bromley All sections present, ready for initial release. Some explanatory text is still missing.
0.3 2014.06.05 J Bromley Fix issues #18, #19 and various other minor errors. Complete most of the text.
0.4 2015.01.04 J Bromley Fix issues #20, #21, #22.
0.5 2015.07.14 J Bromley Fixes #24, #27, #28, #29, #31

 

1.3 版權(quán)信息

本文版權(quán)所有©Verilab Inc. 2014-2015。本文作為svlib使用庫的附加信息。本文件允許無限復制,但必須包括第一章的全部內(nèi)容,不得修改。

1.3.1 責任限制

Verilab公司對該軟件包的運行不承擔任何責任。如果你想使用它,你將自行承擔全部責任。

1.3.2 作者

這份文件是由Jonathan Bromley、Paul Marriott和André Winkelmann在Verilab, Inc (www.verilab.com)準備的。

1.3.3 開源許可

svlib是一個開放源代碼包,所以您可以自由地使用源代碼并以任何您想要的方式修改它。為了方便使用,本文檔以PDF格式提供,因此并不是嚴格的開源。原始的可編輯文檔可根據(jù)要求從作者處獲得。

1.4 作者聯(lián)系方式

可以通過電子郵件地址svlib@verilab.com聯(lián)系此軟件包和文檔的作者。作者很高興收到意見與建議,并盡可能迅速回復。

第二章 簡介與概述

本文檔介紹了systemverilog的實用程序庫svlib。svlib為我們的日常驗證工作提供了SystemVerilog所缺乏的功能:字符串處理、操作系統(tǒng)接口和許多其他有用的函數(shù)。

  • 第三章介紹了如何在仿真器和你的驗證環(huán)境中使用svlib第四章介紹了了svlib的一些基本原則和規(guī)則。第五章介紹了svlib的特性,這些特性補充了SystemVerilog語言中所沒有的字符串處理與操作。第六章介紹了正則匹配與替換的特性。第七章給出了Pathname類的詳細信息,借助這個類,可以更加簡單的進行常見的文件操作,例如確定目錄、根據(jù)目錄生成路徑名、查找文件的擴展名等。這些操作只是專用的字符串函數(shù),并不能對文件系統(tǒng)進行任何讀寫。第八章介紹了用于查詢文件系統(tǒng)的svlib工具。通過這些函數(shù)可以查詢文件的屬性,如“這個文件存在嗎”,“文件最后修改的日期是什么”,“是否擁有寫權(quán)限”,“它是一個目錄”和許多其他屬性。第九章介紹了操作系統(tǒng)查詢函數(shù)。通過這些函數(shù)可以輕松地獲取當前時間和日期,以各種人類可讀的格式呈現(xiàn)日期,獲取操作系統(tǒng)的環(huán)境變量,以字符串隊列的形式獲取目錄內(nèi)容,并讀取計時器。第十章討論如何在svlib中處理錯誤。默認情況下,錯誤會報告在模擬器的控制臺,但通過svlib可以以各種方式自定義錯誤處理,甚至可以通過自己的SystemVerilog代碼處理錯誤。第十二章詳細介紹了支持以.ini或YAML格式讀寫配置文件的類和函數(shù),并說明了如何在自定義配置類和svlib的內(nèi)部文檔對象模型(DOM)表示之間傳輸配置數(shù)據(jù)。第十三章介紹了一個通過運行仿真來查詢仿真環(huán)境的功能。第十四章介紹了一些實用的函數(shù),這些函數(shù)優(yōu)化了SystemVerilog枚舉類型的使用體驗。第十五章介紹了以SystemVerilog宏的形式提供的一些實用特性。最后,第十六章提供了一些示例,展示了svlib工具的實際應用。

 

第三章 編譯并運行svlib

svlib代碼分為三個不同的部分,都可以src/目錄中找到:

  • 宏定義,如果想使用宏相關(guān)的功能,請在代碼中添加``include "svlib_macros.svh"`systemverilog代碼,已經(jīng)打包成一個svlib_pkg,使用前需要用編譯器編譯svlib_pkg.sv文件C代碼,通過systemverilog DPI調(diào)用,包含了多個庫,目前打包成了一個文件dpi/svlib_dpi.c

要使用svlib,必須編譯svlib_pkg.svdpi/svlib_dpi.c。已經(jīng)在使用DPI的用戶可以直接拓展已經(jīng)有的DPI,或者也可以鏈接到動態(tài)鏈接庫文件。對于新用戶或者只是想試試的用戶,建議按照仿真器的編譯、鏈接以及運行的流程使用svlib。為了簡化流程,請參考文件src目錄下的svlib.f

占位符代表svlib的目錄。

下面以三種主流仿真器為例,說明使用方法

3.1 Mentor Graphics QuestaSim

qverilog的一步流程

qverilog +incdir+/src –f /src/svlib.f  

3.2 Cadence Incisive

irun的一步流程

irun +incdir+/src –f /src/svlib.f   

3.3 Synopsys VCS

vcs的一步流程。請注意附加的-LDFLAGS選項,它是鏈接VCS默認沒有鏈接的C庫時所必需的選項。-R選項不是強制性的,它只是使simv可執(zhí)行文件在編譯和鏈接完成后自動開始運行。

vcs –sverilog –R +incdir+/src –f /src/svlib.f  
                  –LDFLAGS –lrt  
                    

如果要簡化這個命令,我們準備了了一個vcs.f文件,它包含所需的-LDFLAGS和-sverilog選項以及svlib的其他內(nèi)容,然后就可以使用下面的命令運行:

vcs–R +incdir+/src –f /src/vcs.f   

 

第四章 一些使用規(guī)則與約定

svlib被設(shè)計成在任何SystemVerilog環(huán)境都盡可能不影響原環(huán)境并且都能正常運行。為了實現(xiàn)這些目標,有必要引入一些對整個庫都通用的底層行為。對于用戶來說,了解這些行為,避免意外,是很重要的。

4.1 庫的結(jié)構(gòu)概述

4.1.1 package

svlib已經(jīng)封裝成了一個叫svlib_pkg的SystemVerilog包。仿真器編譯之后,用戶應該把這個包導入到自己的代碼中,這樣svlib的工具就可以隨時使用。pkg的import語句應該在任何需要它的模塊或包的域中,就在module或package的開頭。不要把import語句放在任何module或package的外側(cè),會使svlib導入到$unit空間,存在潛在風險。

4.1.2 marco

除了包之外,svlib還有一些在使用包特性時有用或必要的宏。為了使這些宏定義社工小,用戶應該在代碼中添加:

`include "svlib_macros.svh"

代碼應該添加在最外層($unit)范圍內(nèi),在任何模塊或包之外。推薦在整個環(huán)境的頂層添加這行代碼,此外,代碼使用了ifdef語句,避免了二次定義

4.2 類或者包內(nèi)的函數(shù)?

幾乎所有的svlib功能都是由包中定義的類提供的。用戶可以根據(jù)需要創(chuàng)建這些類的實例(見下文4.3節(jié))。然而,在某些情況下,簡單地調(diào)用一個函數(shù),比創(chuàng)建一個對象、配置數(shù)據(jù),然后調(diào)用它的方法并最終從對象中提取處理過的數(shù)據(jù)更方便。很多特性這兩種形式都有,因此可以選擇更方便的一種。有關(guān)更多細節(jié),請參閱每個特性的文檔。

4.3 構(gòu)造svlib對象

svlib的許多部分都使用定義了SystemVerilog類。因此,為了使用svlib特性,用戶的代碼中必須創(chuàng)建這些類型的新對象。然而,為了穩(wěn)定性,提高內(nèi)存管理效率,「用戶代碼不應該直接調(diào)用任何svlib類的new函數(shù)」。所有的對象都應該用內(nèi)建的靜態(tài)函數(shù)create創(chuàng)建,每個類的create函數(shù)在后續(xù)章節(jié)都有介紹。

這個問題在參考的會議論文[1]中有更詳細的討論。所有主流的SystemVerilog仿真器現(xiàn)在都提供了對受保護的構(gòu)造函數(shù)的全面支持。因此,所有的svlib類構(gòu)造函數(shù)都聲明為protected的,因此用戶代碼不可能直接調(diào)用它們。

4.4 錯誤處理

偶爾,svlib函數(shù)可能會導致內(nèi)部錯誤。尤其是函數(shù)調(diào)用C庫時,在C庫中可能存在內(nèi)存分配、文件權(quán)限甚至文件存在等問題。這樣的錯誤總是被傳回到SystemVerilog中進行處理,但是錯誤處理的具體斜街在某種程度上是由程序員控制的。svlib的默認行為是拋出斷言的錯誤,但是還有更加細致的控制。詳情見第十章。

4.5 svlib的內(nèi)部隱藏特性

svlib的一些特性被設(shè)計為對用戶保持隱藏。這樣做是為了讓包能夠保持DPI的C端和SystemVerilog端數(shù)據(jù)的一致性。但是,SystemVerilog沒有提供任何方法在語言中實現(xiàn)強制隱藏。為了幫助用戶避免意外地破壞這種封裝,svlib的隱藏部分被放置在一個單獨的包svlib_private_base_pkg中。用戶代碼不應該直接導入這個包,也不應該嘗試使用其中的任何數(shù)據(jù)、函數(shù)、類或DPI導入。

4.6 命名約定

整個svlib中盡可能使用了一致的命名方案,因此更容易記住或猜測給定特性的名稱。為了方便使用,命名盡可能短,但有時由于與systemverilog關(guān)鍵字或者其他包,例如UVM,沖突,或者為了在包中保持一些獨特的名字,命名會比較長。

4.6.1 類

幾乎所有的svlib類都是以大寫字母開頭的短名稱,或者都是小寫的。例如,表示正則表達式的類是Regex,也有一些例外,比如,配置特性有幾個以cfg前綴命名的類,比如cfgNode

4.6.2 類的方法

svlib類的方法的名稱盡可能短,同時盡量好記。如果一個名字是由多個單詞組成的,那么這個名字用駝峰式拼寫(沒有下劃線,除了第一個單詞外都大寫),比如,cfgNode類的addNode函數(shù)。

4.6.3 pkg級函數(shù)的前綴

svlib函數(shù)分組大多數(shù)比較直觀。例如,有幾個與操作系統(tǒng)交互有關(guān)的pkg級函數(shù)。這些函數(shù)的名稱都以前綴sys開頭,與名稱的主要部分用下劃線分隔,如sys_dayTime中所示。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜