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

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 第一章 關(guān)于本文檔
    • 1.1 概要
    • 1.2 版本信息
    •  
    • 1.3 版權(quán)信息
    • 1.4 作者聯(lián)系方式
    • 第二章 簡介與概述
    •  
    • 第三章 編譯并運(yù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對(duì)象
    • 4.4 錯(cuò)誤處理
    • 4.5 svlib的內(nèi)部隱藏特性
    • 4.6 命名約定
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

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

中文版本由空白的貝塔君整理發(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.svdpi/svlib_dpi.c。已經(jīng)在使用DPI的用戶可以直接拓展已經(jīng)有的DPI,或者也可以鏈接到動(dòng)態(tài)鏈接庫文件。對(duì)于新用戶或者只是想試試的用戶,建議按照仿真器的編譯、鏈接以及運(yùn)行的流程使用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選項(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中所示。

相關(guān)推薦

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