日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上)

發布時間:2024/1/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

伴隨著SV推廣的熱浪,SV已經不只是作為一種驗證語言流行開來,實際上它同樣在早期也作為了一種硬件描述語言和一種通用編程語言得到了應用。在軟件編程的過程中,SV同Java一般也有了更為豐富的數據類型和類的相應概念,這種面向對象編程的思想使得一些軟件工程師在“移民”到驗證領域時的陣痛期并不會太久,但隨后他們會感到一些失望,因為SV盡管有著類Java的編程方式、內存管理方式等等,但又缺少一些東西,比如在一些底層數據類型操作的函數在使用起來有點掣肘,下面是一些數據:

這張表格是對于各個主流編程語言中對于字符串String類型的函數數量對比,而更習慣于軟件編程的用戶(同時精通于Java、Python等)就會對SV目前底層函數的支持表示不滿。這些軟件用戶們更懷念過去在Java、Python中各種豐富的底層函數應用,而從硬件一側遷移到SV的新用戶們則有點“劉姥姥進大觀園”,已經覺得新添加的特性有點應接不暇,夠學幾輩子的了(比起之前的hdl硬件編程需要的語法來看)。

Python的忠實粉絲都知道Python世界的一句諺語“Batteries included”,這指的是官方發行的Python版本自帶了相當齊全的軟件庫,拿來就可以直接寫程序,一般不需要安裝額外的庫,就同一出生就含著金鑰匙為自己生命代言的天才一樣,做什么都是手到擒來。而SV的用戶,尤其在適應了軟件編程思維,同時又熟悉一些其它編程語言特性的時候,就對SV缺少像Python一樣豐富底層函數的氣質頗有微詞了。

所以,那些見識過“好東西”的verifier們就局部地聯合了起來(公共的驗證開源項目數量少而死亡率太高),他們首先在自己的公司內部按照所處項目的實際要求,試圖在SV基礎上開發一些擴展地庫,來彌補一些SV應該具備的底層庫;同時,在這些庫后來日益完善的基礎上,經過公司的同意,他們將這些庫開源了出來,并希望不斷更新(或者被收入SV的標準第三方庫)。我們本節為大家分享兩個開源質量較高且至今保持活力的SV的第三方庫,通過簡明地介紹它們的主要特性,希望讀者們首先知道這些庫提供的基本特性,而在后期項目使用中,如果有需要就可以快速安裝它們,不必再重復造輪子。同時,我們也希望通過本節,讀者在以后的工作中,可以有目的性地將庫分為公共庫(有更廣的使用潛力)和VIP庫(更有針對性),而將過去那些有收錄進公共庫潛力的方法、類可以整理到一起,相應地做好單元測試(庫開發的標準流程)和文檔,造福公司內更多的同事,或者在允許的情況下也開源出來。

SV開源庫之一:svlib

verilog公司開源了他們之前開發的SV的擴展底層庫svlib,這個庫可以從這個鏈接中找到。另外既然推薦了他們的功德庫svlib,也簡單介紹一下這家公司,作為他們共享svlib的一點回報吧。路桑跟這家公司之前在項目中有過合作,他們是一家“高端”的驗證咨詢公司,可以說里面的接觸到的每一位工程師都很有氣質(驗證工程師的軟硬通吃的氣質),而且個個以一當十。截止到目前他們在中國還沒有直接的業務,但如果接下來他們進入中國尋求業務而且在招聘質量不打折的前提下,這是一家提供良好咨詢服務平臺的公司。好了,這一段軟廣告就嵌入到這里吧。

www.verilab.com/resources

svlib分成了若干個分支,不同分支具備相應的功能,這些可以拆解和獨立開發的功能包括有:通用的字符串處理和正則表達式功能。

可以對文件和目錄操作的功能,包括目錄查找、列表、文件屬性征詢的功能。

可以同操作系統互動的功能,包括有查找環境變量、傳入命令行、時鐘日期信息查詢等功能。

各種其它方便的功能,例如與枚舉類型相關的函數操作。

成套的插件用來從.ini或者YAML配置文件讀入,繼而存儲為配置數據格式DOM;或者反之,從DOM格式,存為.ini或者YAML標準格式。

另外,svlib也有類似uvm_macros.svh的宏文件svlib_macros.svh,該文件也定義了一些易用的宏,方便使用者。下面我們就上面的幾種主要的功能做簡單介紹。

字符串處理

正如上面拿字符串string類型的例子,SV的string有一點尷尬的是,它并不允許直接讓用戶在string類型上面擴展,而盡管它看起來就有點像類,但又無法去繼承。

string S = " ? Some text ? ";

int n = S.len();

S = S.toupper();

對于上面字符串的操作,跟對象的使用很像,但如果像擴展string類型,只能考慮在svlib中添加一個新的類Str,通過類的方法來實現擴展。例如下面的例子:

Str ss = Str::create(" ? Some text ? ");

ss.trim(Str::Right);

$display("\"%s\"", ss.get());

輸出結果:

" ? Some text"

通過添加新的字符串類Str(內嵌string變量并且對其操作),這可以在原有string類型的基礎上擴展更多需要的方法,例如上面的去除字符串右邊的空格。這個新的方法看起來可以帶來更多新的特性,但同時也帶來了一點麻煩。例如原有的SV用戶已經習慣于對string變量本身的操作、通過操作符例如{}來合并字符串、或者直接賦值的形式來獲取字符串內容等,這一點同新添加的Str類通過自帶函數的操作有明顯的差別。

如果SV的用戶不習慣新的方式,又或者原有的SV代碼不想大規模改動的時候怎么辦呢?svlib同時也提供了經典的package內建函數的形式,將一些主要的函數也同時按照就有的函數操作的形式來實現。

$display("\"%s\"", str_strim(S, Str::BOTH));

輸出結果:

"Some text"

上面這個方式更貼近于原有的字符串操作,用戶可以選擇任何一種方式來實現字符串的操作。

正則表達式處理

對于熟悉正則表達式的讀者,尤其是Python中正則表達式習慣的讀者,對于svlib中新添加的正則表達式類Regex和其函數處理應該不會感到陌生。

Regex re;

re = regex_match("06/07/17", "([0-9]+)/([0-9]+)/([0-9]+)");

if (re != null) begin

$display("Looks like a data");

void'(re.subst("$2-$1-20$3"));

$display("data = %s", re.getStrContents());

end

輸出結果:

Look like a data

07-06-2017

svlib提供非常全面的跟正則表達式相關的匹配和替換的方法,更多的函數可以在svlib的文檔中找到。

文件和目錄操作

文件和目錄的操作在腳本語言中是經常使用到的,而SV欠缺這一點(或者說現有的文件打開、讀寫的操作不滿足多樣需求)。svlib提供了與路徑相關的類、與文本信息相關的類等等。譬如,SV無法批量地得到相關的文件名,而這一些與目錄有關的操作,svlib提供了方法。下面的例碼就可以將當前目錄下所有后綴名以sv結尾的文件都找到并寫入到一個字符串的隊列中。

string dirList [$];

dirList = sys_fileGlob("*sv");

下面通過Pathname類來完成文件路徑的有關操作,通過自帶的函數可以取得文件的擴展名、路徑名以及文件名本身。

Pathname path = Pathname::create("/home/svlib/src/svlib_pkg.sv");

$display(path.extension()); // .sv

$diaplay(path.dirname()); // /home/svlib/src

$display(path.tAIl()); // svlib_pkg.sv

總結

以上是生活随笔為你收集整理的sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。