中文版本由空白的貝塔君
整理發(fā)布
鏈接為https://github.com/recogni/svlib
第一章 關(guān)于本文檔
1.1 概要
本文檔是對(duì)systemverilog使用庫svlib
的說明和編程指導(dǎo)。
1.2 版本信息
版本號(hào) | 日期 | 作者 | 說明 |
---|---|---|---|
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使用庫的附加信息。本文件允許無限復(fù)制,但必須包括第一章的全部內(nèi)容,不得修改。
1.3.1 責(zé)任限制
Verilab公司對(duì)該軟件包的運(yùn)行不承擔(dān)任何責(zé)任。如果你想使用它,你將自行承擔(dān)全部責(zé)任。
1.3.2 作者
這份文件是由Jonathan Bromley、Paul Marriott和André Winkelmann在Verilab, Inc (www.verilab.com)準(zhǔn)備的。
1.3.3 開源許可
svlib是一個(gè)開放源代碼包,所以您可以自由地使用源代碼并以任何您想要的方式修改它。為了方便使用,本文檔以PDF格式提供,因此并不是嚴(yán)格的開源。原始的可編輯文檔可根據(jù)要求從作者處獲得。
1.4 作者聯(lián)系方式
可以通過電子郵件地址svlib@verilab.com聯(lián)系此軟件包和文檔的作者。作者很高興收到意見與建議,并盡可能迅速回復(fù)。
第二章 簡介與概述
本文檔介紹了systemverilog的實(shí)用程序庫svlib。svlib為我們的日常驗(yàn)證工作提供了SystemVerilog所缺乏的功能:字符串處理、操作系統(tǒng)接口和許多其他有用的函數(shù)。
- 第三章介紹了如何在仿真器和你的驗(yàn)證環(huán)境中使用svlib第四章介紹了了svlib的一些基本原則和規(guī)則。第五章介紹了svlib的特性,這些特性補(bǔ)充了SystemVerilog語言中所沒有的字符串處理與操作。第六章介紹了正則匹配與替換的特性。第七章給出了Pathname類的詳細(xì)信息,借助這個(gè)類,可以更加簡單的進(jìn)行常見的文件操作,例如確定目錄、根據(jù)目錄生成路徑名、查找文件的擴(kuò)展名等。這些操作只是專用的字符串函數(shù),并不能對(duì)文件系統(tǒng)進(jìn)行任何讀寫。第八章介紹了用于查詢文件系統(tǒng)的svlib工具。通過這些函數(shù)可以查詢文件的屬性,如“這個(gè)文件存在嗎”,“文件最后修改的日期是什么”,“是否擁有寫權(quán)限”,“它是一個(gè)目錄”和許多其他屬性。第九章介紹了操作系統(tǒng)查詢函數(shù)。通過這些函數(shù)可以輕松地獲取當(dāng)前時(shí)間和日期,以各種人類可讀的格式呈現(xiàn)日期,獲取操作系統(tǒng)的環(huán)境變量,以字符串隊(duì)列的形式獲取目錄內(nèi)容,并讀取計(jì)時(shí)器。第十章討論如何在svlib中處理錯(cuò)誤。默認(rèn)情況下,錯(cuò)誤會(huì)報(bào)告在模擬器的控制臺(tái),但通過svlib可以以各種方式自定義錯(cuò)誤處理,甚至可以通過自己的SystemVerilog代碼處理錯(cuò)誤。第十二章詳細(xì)介紹了支持以.ini或YAML格式讀寫配置文件的類和函數(shù),并說明了如何在自定義配置類和svlib的內(nèi)部文檔對(duì)象模型(DOM)表示之間傳輸配置數(shù)據(jù)。第十三章介紹了一個(gè)通過運(yùn)行仿真來查詢仿真環(huán)境的功能。第十四章介紹了一些實(shí)用的函數(shù),這些函數(shù)優(yōu)化了SystemVerilog枚舉類型的使用體驗(yàn)。第十五章介紹了以SystemVerilog宏的形式提供的一些實(shí)用特性。最后,第十六章提供了一些示例,展示了svlib工具的實(shí)際應(yīng)用。
第三章 編譯并運(yùn)行svlib
svlib代碼分為三個(gè)不同的部分,都可以src/目錄中找到:
- 宏定義,如果想使用宏相關(guān)的功能,請?jiān)诖a中添加``include "svlib_macros.svh"`systemverilog代碼,已經(jīng)打包成一個(gè)
svlib_pkg
,使用前需要用編譯器編譯svlib_pkg.sv
文件C代碼,通過systemverilog DPI調(diào)用,包含了多個(gè)庫,目前打包成了一個(gè)文件dpi/svlib_dpi.c
要使用svlib,必須編譯svlib_pkg.sv
和dpi/svlib_dpi.c
。已經(jīng)在使用DPI的用戶可以直接拓展已經(jīng)有的DPI,或者也可以鏈接到動(dòng)態(tài)鏈接庫文件。對(duì)于新用戶或者只是想試試的用戶,建議按照仿真器的編譯、鏈接以及運(yùn)行的流程使用svlib。為了簡化流程,請參考文件src
目錄下的svlib.f
。
占位符
下面以三種主流仿真器為例,說明使用方法
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選項(xiàng),它是鏈接VCS默認(rèn)沒有鏈接的C庫時(shí)所必需的選項(xiàng)。-R選項(xiàng)不是強(qiáng)制性的,它只是使simv
可執(zhí)行文件在編譯和鏈接完成后自動(dòng)開始運(yùn)行。
vcs –sverilog –R +incdir+/src –f /src/svlib.f
–LDFLAGS –lrt
如果要簡化這個(gè)命令,我們準(zhǔn)備了了一個(gè)vcs.f
文件,它包含所需的-LDFLAGS和-sverilog選項(xiàng)以及svlib的其他內(nèi)容,然后就可以使用下面的命令運(yùn)行:
vcs–R +incdir+/src –f /src/vcs.f
第四章 一些使用規(guī)則與約定
svlib被設(shè)計(jì)成在任何SystemVerilog環(huán)境都盡可能不影響原環(huán)境并且都能正常運(yùn)行。為了實(shí)現(xiàn)這些目標(biāo),有必要引入一些對(duì)整個(gè)庫都通用的底層行為。對(duì)于用戶來說,了解這些行為,避免意外,是很重要的。
4.1 庫的結(jié)構(gòu)概述
4.1.1 package
svlib
已經(jīng)封裝成了一個(gè)叫svlib_pkg的SystemVerilog包。仿真器編譯之后,用戶應(yīng)該把這個(gè)包導(dǎo)入到自己的代碼中,這樣svlib
的工具就可以隨時(shí)使用。pkg的import語句應(yīng)該在任何需要它的模塊或包的域中,就在module或package的開頭。不要把import語句放在任何module或package的外側(cè),會(huì)使svlib
導(dǎo)入到$unit
空間,存在潛在風(fēng)險(xiǎn)。
4.1.2 marco
除了包之外,svlib還有一些在使用包特性時(shí)有用或必要的宏。為了使這些宏定義社工小,用戶應(yīng)該在代碼中添加:
`include "svlib_macros.svh"
代碼應(yīng)該添加在最外層($unit)范圍內(nèi),在任何模塊或包之外。推薦在整個(gè)環(huán)境的頂層添加這行代碼,此外,代碼使用了ifdef
語句,避免了二次定義
4.2 類或者包內(nèi)的函數(shù)?
幾乎所有的svlib
功能都是由包中定義的類提供的。用戶可以根據(jù)需要?jiǎng)?chuàng)建這些類的實(shí)例(見下文4.3節(jié))。然而,在某些情況下,簡單地調(diào)用一個(gè)函數(shù),比創(chuàng)建一個(gè)對(duì)象、配置數(shù)據(jù),然后調(diào)用它的方法并最終從對(duì)象中提取處理過的數(shù)據(jù)更方便。很多特性這兩種形式都有,因此可以選擇更方便的一種。有關(guān)更多細(xì)節(jié),請參閱每個(gè)特性的文檔。
4.3 構(gòu)造svlib
對(duì)象
svlib
的許多部分都使用定義了SystemVerilog類。因此,為了使用svlib特性,用戶的代碼中必須創(chuàng)建這些類型的新對(duì)象。然而,為了穩(wěn)定性,提高內(nèi)存管理效率,「用戶代碼不應(yīng)該直接調(diào)用任何svlib類的new函數(shù)」。所有的對(duì)象都應(yīng)該用內(nèi)建的靜態(tài)函數(shù)create
創(chuàng)建,每個(gè)類的create
函數(shù)在后續(xù)章節(jié)都有介紹。
這個(gè)問題在參考的會(huì)議論文[1]中有更詳細(xì)的討論。所有主流的SystemVerilog仿真器現(xiàn)在都提供了對(duì)受保護(hù)的構(gòu)造函數(shù)的全面支持。因此,所有的svlib類構(gòu)造函數(shù)都聲明為protected
的,因此用戶代碼不可能直接調(diào)用它們。
4.4 錯(cuò)誤處理
偶爾,svlib
函數(shù)可能會(huì)導(dǎo)致內(nèi)部錯(cuò)誤。尤其是函數(shù)調(diào)用C庫時(shí),在C庫中可能存在內(nèi)存分配、文件權(quán)限甚至文件存在等問題。這樣的錯(cuò)誤總是被傳回到SystemVerilog中進(jìn)行處理,但是錯(cuò)誤處理的具體斜街在某種程度上是由程序員控制的。svlib
的默認(rèn)行為是拋出斷言的錯(cuò)誤,但是還有更加細(xì)致的控制。詳情見第十章。
4.5 svlib
的內(nèi)部隱藏特性
svlib
的一些特性被設(shè)計(jì)為對(duì)用戶保持隱藏。這樣做是為了讓包能夠保持DPI的C端和SystemVerilog端數(shù)據(jù)的一致性。但是,SystemVerilog沒有提供任何方法在語言中實(shí)現(xiàn)強(qiáng)制隱藏。為了幫助用戶避免意外地破壞這種封裝,svlib
的隱藏部分被放置在一個(gè)單獨(dú)的包svlib_private_base_pkg
中。用戶代碼不應(yīng)該直接導(dǎo)入這個(gè)包,也不應(yīng)該嘗試使用其中的任何數(shù)據(jù)、函數(shù)、類或DPI導(dǎo)入。
4.6 命名約定
整個(gè)svlib中盡可能使用了一致的命名方案,因此更容易記住或猜測給定特性的名稱。為了方便使用,命名盡可能短,但有時(shí)由于與systemverilog關(guān)鍵字或者其他包,例如UVM,沖突,或者為了在包中保持一些獨(dú)特的名字,命名會(huì)比較長。
4.6.1 類
幾乎所有的svlib
類都是以大寫字母開頭的短名稱,或者都是小寫的。例如,表示正則表達(dá)式的類是Regex
,也有一些例外,比如,配置特性有幾個(gè)以cfg前綴命名的類,比如cfgNode
。
4.6.2 類的方法
svlib
類的方法的名稱盡可能短,同時(shí)盡量好記。如果一個(gè)名字是由多個(gè)單詞組成的,那么這個(gè)名字用駝峰式拼寫(沒有下劃線,除了第一個(gè)單詞外都大寫),比如,cfgNode
類的addNode
函數(shù)。
4.6.3 pkg級(jí)函數(shù)的前綴
svlib
函數(shù)分組大多數(shù)比較直觀。例如,有幾個(gè)與操作系統(tǒng)交互有關(guān)的pkg級(jí)函數(shù)。這些函數(shù)的名稱都以前綴sys
開頭,與名稱的主要部分用下劃線分隔,如sys_dayTime
中所示。