1. 驗證的主流語言為什么是System Verilog語言?
一個掌握Verilog語言的工程師初次看SystemVerilog都會有這樣的感受,這就是Verilog啊,很容易啊,So easy啊。沒錯,確實是這樣,System Verilog的產生就是因為芯片設計規模不斷增長,功能日趨復雜,單純的用Verilog和VHDL等硬件語言已經無法滿足驗證的需求,結合C,C++等軟件語言,又顯得難度太大,不容易掌握,因此產生了SystemVerilog,當然也產生了其他驗證語言,比如Vera和e語言,但因為SystemVerilog結合了來自 Verilog、VHDL、C++的概念,還有驗證平臺語言(OpenVera和e語言)和斷言語言(OVA和PSL),使得SystemVerilog在驗證界坐穩了第一的寶座。它將硬件描述語言(HDL)與現代的高層級驗證語言(HVL)結合了起來。使其對于進行當今高度復雜的設計驗證的驗證工程師具有相當大的吸引力。這些都使得SystemVerilog在一個更高的抽象層次上提高了設計建模的能力。隨著不斷地發展,System Verilog擁有芯片設計及驗證工程師所需的全部結構,它集成了面向對象編程、動態線程和線程間通信等特性,作為一種工業標準語言,SV全面綜合了RTL設計、測試平臺、斷言和覆蓋率,為系統級的設計及驗證提供強大的支持作用。另一方面,驗證方法學(VMM、OVM、AVM和UVM等)的推動也功不可沒,System Verilog能夠和芯片驗證方法學結合在一起,即作為實現方法學的一種語言工具。使用驗證方法學可以大大增強模塊復用性、提高芯片開發效率,縮短開發周期。
2.出鏡率較高的數據類型
邏輯(logic)類型。
四狀態類型:interger,reg,logic,time,wire,tri
雙狀態數據類型(更好的性能,更低的內存消耗)。
二狀態類型:bit,int,byte,shortint,longint
隊列,動態和關聯數組(自帶搜索和分類功能)
隊列和數組的操作,常常用在reference model建模或者checker的數據比對過程中。隊列的操作包括常用函數:insert,delete,push_back, pop_back, push_front, push_back等;數組的操作(min最小值,max最大值,unique排除重復,find索引相關,sum求和,sort升序,rsort降序,reverse倒序,shuffle亂序等。
關聯數組(對于非常大的尋址空間存儲建模,我們只需要訪問邊界值,以及中間個別一些空間進行驗證,關聯數組提供保存稀疏矩陣的元素)。
枚舉類型
類似于宏定義,或者使用參數。
typedef enum{WAIT, DECODE, READY}fsmstate_e;
fsmstate_e pstate,nstate;
結構體(支持抽象數據結構)用struct建語句創建數據結構。
typedef struct{bit[7:0] r, g, b} pixel_s;
pixel_s my_pixel;
fork...join塊可以指定一條或多條語句,每一條語句都應該作為并發進程執行。
選項 | 描述 |
join | 父進程會阻塞直到這個分支產生的所有進程結束。 |
join_any | 父進程會阻塞直到這個分支產生的任意一個進程結束。 |
join_none | 父進程會繼續與這個分支產生的所有進程并發執行。在父線程執行一條阻塞語句之前,產生的進程不會啟動執行。 |
Function和Task
function執行不消耗時間,帶時間的操作如#100ns,@,wait等都不能出現在function。所以一般而言,function是不能調用task的,但是在fork……join_none中例外。函數可以有返回值。
消耗時間的操作用task,比如driver里面對信號的驅動過程,一般來講是在task中完成,但是具體的算法是由function完成的,所以,task中調用function。task沒有返回值。
3. System Verilog的Interface
這是一個比較新的概念,Interface封裝了連接性:接口可以作為單個項目通過端口傳遞,從而用單個名稱替換一組名稱。這減少了建模端口連接所需的代碼量,并提高了端口連接的可維護性和可讀性。封裝功能,與通過接口連接的模塊隔離。因此,通信協議的抽象級別和粒度可以完全獨立于模塊進行細化。
可以包含參數、常量、變量、函數和任務、流程和連續分配,這對于系統級建模和測試應用程序都很有用。
可以幫助構建功能覆蓋記錄和報告、協議檢查和斷言等應用程序。
可以用于無端口訪問:接口可以作為模塊中的靜態數據對象直接實例化。因此,可以從設計中的不同點調用用于訪問接口內部狀態信息的方法來共享信息。
靈活性:接口可以像模塊一樣參數化。此外,可以使用未指定的接口實例化(稱為泛型接口)創建模塊頭。這個接口可以在稍后實例化模塊時指定。
4. System Verilog的面向對象(OOP)
面向對象使用戶能夠創建復雜的數據類型,并且將它們跟使用這些數據類型的程序緊密的結合在一起。用戶可以在更加抽象的平臺上建立測試模型,通過調用函數改變信號,而不是直接改變電平信號。
從結構體開始:程序設計=數據結構+算法實現
定義一個類
類將結構體和它相應的函數集合在一起,成為一種新的數據組織形式。在這種新的數據組織形式中,有兩種成分,一種是來自結構體的數據變量,在類中被稱為成員變量;另外一種來自與結構體相對應的函數,被稱為一個類的接口。
繼承一個類
分析所要解決的問題,并找出其中的共性,用這些共性構建一個基類(或者父類);在此基礎上,將問題分類,不同的分類具有各自的共性,使用這些分類的共性構建一個派生類(或者子類)。
多態:多個程序使用一個共同的名字的現象。
靜態變量和方法
一個類的所有實例都共享變量的一個版本,也就是說所有實例都共享同一個copy,該變量對所有實例都是可見并相同的。使用關鍵字static產生。
類的參數化定義
審核編輯 :李倩
-
Verilog
+關注
關注
28文章
1351瀏覽量
110100 -
C++
+關注
關注
22文章
2108瀏覽量
73651 -
芯片驗證
+關注
關注
5文章
34瀏覽量
47229
原文標題:學會這些System Verilog方法,芯片驗證入門沒問題
文章出處:【微信號:于博士Jacky,微信公眾號:于博士Jacky】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論