SystemVerilog是建立在IEEE Std 1364之上的。SystemVerilog提高了基於Verilog的代碼的生產率、可讀性和可重用性。SystemVerilog中的語言增強提供了更簡潔的硬件描述,同時還提供了使用現有工具進入當前硬件實現流的簡單路徑。這些增強還爲定向和約束隨機測試臺開發、覆蓋驅動驗證和基於斷言的驗證提供了廣泛的支持。
本標準中使用的慣例
這個標準被組織成條款,每個條款側重於語言的特定領域。每個子條款中都有子條款來討論各個構造和概念。討論從介紹和可選的構造或概念的基本原理開始,接着是語法和語義描述,接着是示例和註釋。
本標準中使用的術語慣例如下:
-該詞用於表示嚴格遵守的強制性要求,以符合標準,不允許有任何偏差(應等於要求)。
-這個詞應該用來表示,在幾種可能性中,有一種被推薦爲特別合適,而不提及或排除其他可能性;或者某一行動方針是可取的,但不一定是必需的;或者(以否定的形式)某一行動方案被否決但不被禁止(應該等於建議)。
-may一詞用於表示在標準範圍內允許的行動(may等於允許的行動)。
-can一詞用於陳述可能性和能力,無論是物質的、物理的還是因果的(can等於能夠)。
句法描述
正文使用以下約定:
-定義術語時的斜體字體
-等寬字體,用於示例、文件名和對常量的引用,特別是0、1、x和z值
-當引用實際關鍵字時,Verilog和SystemVerilog關鍵字爲粗體等寬字體
使用Backus-Naur形式(BNF)描述SystemVerilog的形式語法。
巴科斯範式 以美國人巴科斯(Backus)和丹麥人諾爾(Naur)的名字命名的一種形式化的語法表示方法,用來描述語法的一種形式體系,是一種典型的元語言。又稱巴科斯-諾爾形式(Backus-Naur form)。它不僅能嚴格地表示語法規則,而且所描述的語法是與上下文無關的。它具有語法簡單,表示明確,便於語法分析和編譯的特點。BNF表示語法規則的方式爲:非終結符用尖括號括起。每條規則的左部是一個非終結符,右部是由非終結符和終結符組成的一個符號串,中間一般以“::=”分開。具有相同左部的規則可以共用一個左部,各右部之間以直豎“|”隔開。
在雙引號中的字("word")代表着這些字符本身。而double_quote用來代表雙引號。
在雙引號外的字(有可能有下劃線)代表着語法部分。
尖括號( < > )內包含的爲必選項。
方括號( [ ] )內包含的爲可選項。
大括號( { } )內包含的爲可重複0至無數次的項。
豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。
::= 是“被定義爲”的意思。
使用以下約定:
-小寫單詞,有些包含嵌入下劃線,表示語法類別。例如:
模塊聲明
-黑體紅色字符表示保留的關鍵字、運算符和標點符號,作爲語法的必需部分。例如:
模塊=>;
-豎線(|)分隔可選項,除非它以粗體紅色顯示,在這種情況下,它代表自己。例如:
unary_operator ::=
+ | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~
-方括號([])包含可選項。例如:
input_declaration ::= input [ range ] list_of_variables ;
-大括號({})將一個重複的項括起來,除非它以粗體紅色出現,在這種情況下,它代表自己。該項可能出現零次或多次;重複從左到右,就像使用等效的左遞歸規則一樣。因此,以下兩條規則是等價的:
list_of_param_assignments ::= param_assignment { , param_assignment }
list_of_param_assignments ::=
param_assignment
| list_of_param_assignment , param_assignment
-如果任何類別的名稱以斜體部分開頭,則等同於沒有斜體部分的類別名稱。斜體部分旨在傳達一些語義信息。例如,“msb_index”和“lsb_index”等同於“index”
本標準內容
文中簡要介紹了條款和附件,以供參考。有31條和11條
附件。所有條款以及附件A至附件I均爲本標準的規範性部分。附件J和
附件K僅供參考。
第1條描述了本標準的內容和本標準中使用的慣例。
第2條列出了實施本標準所需的其他標準的參考。
第3條描述SystemVerilog源文本中使用的詞法標記及其約定。它描述了
如何指定和解釋詞法標記。
第4條描述了對Verilog數據對象和數據類型的增強,包括新的變量數據對象
和類型、網絡數據類型擴展、字符串類型、枚舉類型、用戶定義類型、結構和
工會。
第5條描述SystemVerilog數組,包括打包和解包數組、動態數組、關聯數組
數組、隊列和各種數組方法。
第6條描述瞭如何聲明網絡、變量和常量數據、關於寫入變量的增強規則、信號
別名和類型兼容性。
第7條描述了SystemVerilog中的面向對象編程功能。主題包括定義
類,動態構造對象,繼承和子類,數據隱藏和封裝,多態性,
以及參數化類。
第8條描述了新的運算符、SystemVerilog數據類型的操作規則、數組上的操作,
運算符方法和運算符重載。
第9條描述SystemVerilog增強的仿真調度語義。
第10條描述了對Verilog決策語句和循環結構的增強,新的過程
語句、最終塊、語句和塊標籤、增強的事件類型和事件控制。
第11條描述了用於建模組合邏輯、鎖存邏輯和
順序邏輯;對Verilog連續分配的增強;過程控制。
第12條描述了對Verilog任務和函數的許多增強,以及用於導入的語法
功能從一門外語和輸出任務和功能到一門外語。
第13條描述了動態地生成隨機數,約束隨機數的生成
更改約束,並植入隨機數生成器(RNGs)和隨機case語句
執行。
第14條描述了內置的信號量和郵箱類,並描述了增強的Verilog事件類型和
操作員。
第15條定義了時鐘塊、輸入和輸出偏差、週期延遲和默認時鐘。
第16條描述了測試臺程序的構造、測試臺比賽條件的消除和程序
控制任務。
第17條描述了即時斷言、併發斷言、屬性、序列、序列操作,
多鎖序列、時鐘解析和斷言綁定。
第18條描述了覆蓋組、覆蓋點、交叉覆蓋、覆蓋選項和覆蓋範圍
方法。
第19條描述包、編譯單元($unit)、頂級實例($root)、嵌套模塊、外部
模塊、增強的端口聲明、時間單位和精度、端口連接規則和名稱空間。
第20條描述了接口語法、接口端口、modport、接口任務和函數,參數化
接口、虛擬接口和訪問接口內的對象。
第21條描述了對Verilog配置的增強。
第22條描述了對Verilog系統任務和系統功能的幾個擴展,包括$typename
函數,$bits size函數,range函數,數組查詢函數,斷言控制任務,隨機
數字功能、程序控制任務、覆蓋功能和對Verilog系統任務和
系統功能。
第23條描述了Verilog“define and”include指令的擴展,以及用於控制
關鍵詞兼容性。
第24條描述了支持SystemVerilog數據對象的值更改轉儲(VCD)文件的擴展名
和數據類型。
第25條涵蓋了Verilog defparam語句和Verilog過程
分配/取消分配語句。
第26條描述了SystemVerilog與外語的直接接口。
第27條描述了對VPI對象圖的增強,以支持SystemVerilog構造。
第28條描述SystemVerilog中的斷言API。
第29條描述SystemVerilog中的覆蓋API。
第30條描述了對VPI的增強,以支持從文件訪問設計和仿真數據。
附錄A使用BNF定義了SystemVerilog的形式語法。
附件B列出了SystemVerilog關鍵字。
附件C描述了郵箱、信號量、隨機化和進程的系統類型定義。
附錄D定義了一個實現列表數據結構的列表包,類似於標準模板
庫(STL)。
附錄E描述了SystemVerilog併發斷言的形式化語義。
附錄F定義了SystemVerilog DPI的C語言層。
附錄G定義了用於SystemVerilog DPI應用程序的標準svdpi.h include文件。
附件H描述了在SystemVerilog中包含外語代碼的通用指南
申請。
附件一提供了sv vpi_user.h文件的內容列表,該文件擴展了Verilog
vpi_user.h包含文件。
附錄J定義了本標準中使用的術語。
附錄K列出了與本標準相關的參考文件。