編輯推薦
本書可以作為學習System Verilog驗證語言的初級階段讀物。書中描述瞭語言的工作原理並且包含瞭很多例子,這些例子演示瞭如何使用麵嚮對象編程(OOP)的方法建立一個基本的、由覆蓋率驅動並且受約束的隨機分層測試平颱。本書在創建測試平颱方麵有很多引導性的建議,能夠幫你弄清楚為什麼要使用類、隨機化和功能覆蓋率的概念。一旦你掌握瞭這門語言,就可以通過參考文獻中所列舉的方法學方麵的書籍來學習關於建立測試平颱的更多信息。
內容簡介
本書講解瞭SystemVerilog語言的工作原理,介紹瞭類、隨機化和功能覆蓋率等測試手段和概念,並且在創建測試平颱方麵提供瞭很多引導性的建議。本書藉助大量的實例說明SystemVerilog的各種驗證方法,以及如何根據實際的應用情況選擇zui優的方法達到盡可能高的覆蓋率。而且,重點演示瞭如何使用麵嚮對象編程(OOP)的方法建立由覆蓋率驅動並且受約束的基本的隨機分層測試平颱,此外,還論述瞭SystemVerilog與C語言的接口技術。
本書可供具有一定Vetilog編程基礎的電路工程技術人員使用,也可作為高等院校電子類、自動化類、計算機類的學生參考書。
目錄
第1章 驗證導論
1.1 驗證流程
1.1.1 不同層次上的測試
1.1.2 驗證計劃
1.2 驗證方法學
1.3 基本測試平颱的功能
1.4 定嚮測試
1.5 方法學基礎
1.6 受約束的隨機激勵
1.7 你的隨機化對象是什麼
1.7.1 設備和環境配置
1.7.2 輸入數據
1.7.3 協議異常、錯誤和違例
1.7.4 時延和同步
1.7.5 並行的隨機測試
1.8 功能覆蓋率
1.8.1 從功能覆蓋率到激勵的反饋
1.9 測試平颱的構件
1.10 分層的測試平颱
1.10.1 不分層的測試平颱
1.10.2 信號和命令層
1.10.3 功能層
1.10.4 場景層
1.10.5 測試的層次和功能覆蓋率
1.11 建立一個分層的測試平颱
1.11.1 創建一個簡單的驅動器
1.12 仿真環境的階段
1.13 zui大限度的代碼重用
1.14 測試平颱的性能
1.15 結束語
第2章 數據類型
2.1 內建數據類型
2.1.1 邏輯(logic)類型
2.1.2 雙狀態數據類型
2.2 定寬數組
2.2.1 定寬數組的聲明和初始化
2.2.2 常量數組
2.2.3 基本的數組操作——for和foreach
2.2.4 基本的數組操作——復製和比較
2.2.5 同時使用位下標和數組下標
2.2.6 閤並數組
2.2.7 閤並數組的例子
2.2.8 閤並數組和非閤並數組的選擇
2.3 動態數組
2.4 隊列
2.5 關聯數組
2.6 鏈錶
2.7 數組的方法
2.7.1 數組縮減方法
2.7.2 數組定位方法
2.7.3 數組的排序
2.7.4 使用數組定位方法建立記分闆
2.8 選擇存儲類型
2.8.1 靈活性
2.8.2 存儲器用量
2.8.3 速度
2.8.4 排序
2.8.5 選擇zui優的數據結構
2.9 使用typedef創建新的類型
2.10 創建用戶自定義結構
2.10.1 使用struct創建新類型
2.10.2 對結構進行初始化
2.10.3 創建可容納不同類型的聯閤
2.10.4 閤並結構
2.10.5 在閤並結構和非閤並結構之間進行選擇
2.11 類型轉換
2.11.1 靜態轉換
2.11.2 動態轉換
2.11.3 流操作符
2.12 枚舉類型
2.12.1 定義枚舉值
2.12.2 枚舉類型的子程序
2.12.3 枚舉類型的轉換
2.13 常量
2.14 字符串
2.15 錶達式的位寬
2.16 結束語
第3章 過程語句和子程序
3.1 過程語句
3.2 任務、函數以及void函數
3.3 任務和函數概述
3.3.1 在子程序中去掉begin...end
3.4 子程序參數
3.4.1 c語言風格的子程序參數
3.4.2 參數的方嚮
3.4.3 高級的參數類型
3.4.4 參數的缺省值
3.4.5 采用名字進行參數傳遞
3.4.6 常見的代碼錯誤
3.5 子程序的返迴
3.5.1 返迴(return)語句
3.5.2 從函數中返迴一個數組
3.6 局部數據存儲
3.6.1 自動存儲
3.6.2 變量的初始化
3.7 時間值
3.7.1 時間單位和精度
3.7.2 時間參數
3.7.3 時間和變量
3.7.4 $time與$realtime的對比
3.8 結束語
第4章 連接設計和測試平颱
4.1 將測試平颱和設計分開
4.1.1 測試平颱和DUT之間的通信
4.1.2 與端口的通信
4.2 接口
4.2.1 使用接口來簡化連接
4.2.2 連接接口和端口
4.2.3 使用modport將接口中的信號分組
4.2.4 在總綫設計中使用modport
4.2.5 創建接口監視模塊
4.2.6 接口的優缺點
4.2.7 更多側子和信息
4.3 激勵時序
4.3.1 使用時鍾塊控製同步信號的時序
4.3.2 接口中的logic和wire對比
4.3.3 Verilog的時序問題
4.3.4 測試平颱一設計間的競爭狀態
4.4.4 程序塊(ProgramBlock)和時序區域(TImingRegion)
4.3.6 仿真的結束
4.3.7 指定設計和測試平颱之間的延時
4.4 接口的驅動和采樣
4.4.1 接口同步
4.4.2 接口信號采樣
4.4.3 接口信號驅動
4.4.4 通過時鍾塊驅動接口信號
4.4.5 接口中的雙嚮信號
4.4.6 為什麼在程序
4.4.7 時鍾發生器
4.5 將這些模塊都連接起來
4.5.1 端口列錶中的接口必須連接
4.6 頂層作用域
4.7 程序——模塊交互
4.8 SystemVerilog斷言
4.8.1 立即斷言(ImmediateAssertion)
4.8.2 定製斷言行為
4.8.3 並發斷言
4.8.4 斷言的進一步探討
4.9 四端口的ATM路由器
4.9.1 使用端口的ATM路由器
4.9.2 使用端口的ATM頂層網單
4.9.3 使用接口簡化連接
4.9.4 ATM接口
4.9.5 使用接口的ATM路由器模型
4.9.6 使用接口的ATM頂層網單
……
第5章 麵嚮對象編程基礎
第6章 隨機化
第7章 綫程以及綫程間的通信
第8章 麵嚮對象編程的高級技巧指南
第9章 功能覆蓋率
第10章 高級接口
第11章 完整的System Verilog測試平颱
第12章 System Verilog與C語言的接口
精彩書摘
第1章 驗證導論
“有些人相信,我們缺乏能夠描述這個完美世界的編程語言……”
——《黑客帝國》,1999
設想一下,你被委任去為彆人建一幢房子。你該從哪裏開始呢?是不是一開始就考慮如何選擇門窗、塗料和地毯的顔色,或者浴室的用料?當然不是!首先你必須考慮房的主人將如何使用房子內部的空間,這樣纔能確定應該建造什麼類型的房子。你應該考慮的問題是他們是喜歡烹飪並且需要一個高端的廚房,還是喜歡在傢裏邊看電影邊吃外賣比薩?他們是需要一間書房或者額外的臥室,還是受預算所限要求更簡樸一些?
在開始學習有關SystemVerilog語言的細節之前,你需要理解如何製訂計劃來驗證你的設計,以及這個驗證計劃對測試平颱結構的影響。如同所有房子都有廚房、臥室和浴室一樣,所有測試平颱也都需要共享一些用於産生激勵和檢驗激勵響應的結構。本章將就測試平颱的構建和設計給齣一些引導性的建議和編碼風格方麵的參考,以滿足個性化的需要。這些技術使用瞭Bergeron等人2006年所著《SystemVerilog驗證方法學》書中的一些概念,但不包括基本類。
作為一個驗證工程師,你能學到的zui重要的原則是“程序漏洞利大於弊”。不要因為害羞而不敢去找下一個漏洞,每次找到漏洞都應該果斷報警並記錄下來。整個項目的驗證團隊假定設計中存在漏洞,所以在流片之前每發現一個漏洞就意味著zui終到客戶手裏少一個漏洞。你應該盡可能細緻深入地去檢驗設計,並提取齣所有可能的漏洞,盡管這些漏洞可能很容易修復。不要讓設計者拿走瞭所有的榮譽——沒有你的耐心細緻、花樣翻新的驗證,設計有可能無法正常工作!
前言/序言
SystemVerilog語言的齣現隻有短短幾年的時間,目前市麵上關於systemVerilog語言的中文書籍並不多見,而且大多都是介紹systemVerilog語言的設計特性。實際上,SystemVerilog語言除瞭具有設計特性外,還具有驗證及其他諸多方麵的特性。“驗證”經常被認為是簡單的仿真,這當然是一種誤解,本書將告訴你其中緣由。
本書主要介紹SystemVerllog語言的驗證技術,尤其側重闡述如何使用受約束的隨機測試來達到令人滿意的覆蓋率。原著作者剋裏斯·斯皮爾(chrisSpear)是一名資深的數字電路工程師,在軟件編程方麵有很豐富的經驗,書中的很多觀點和例子就來自於作者平時工作的積纍。本書沒有深奧的理論,敘述上深入淺齣。而且由於作者同時也精通c++、Verilog和Vera等編程語言,所以書中對於systemVerilog與這些語言之間的差彆以及易混淆的地方交代得十分清楚,特彆適閤systemerilog的初學者閱讀。
本書的翻譯過程頗為波摺,前後總共持續瞭一年多的時間。當我們在2008年初開始著手翻譯工作時,使用的還是本書的第一版。但翻譯工作進行到將近一半時。獲悉本書的第二版即將發行,於是轉為等待翻譯第二版。第二版除瞭章節內容上有所增補以外,原有章節的很多字句也有所改動,隻得重新翻譯、校對。
本書的翻譯具體分工如下:第6、11章的翻譯由張春負責;前言和第1、2、3、7、9章的翻譯由麥宋平負責;第4、5、8、10、12章的翻譯由趙益新負責;全書的審校和zui終定稿由張春負責。
衷心感謝清華大學微電子學研究所的王誌華教授,他在本書翻譯之初就提齣瞭很多具有指導性的意見,並且為翻譯工作提供瞭很多支持。
衷心感謝科學齣版社的支持,正是齣版社各位編輯的鼓勵和督促,以及他們勤勤懇懇的工作,纔使得本書的中譯本得以如期與讀者見麵。
由於本書的翻譯稿齣現第一版和第二版交叉,新詞匯又比較多。圃於譯者的經驗和水平,雖然經過多次仔細的斟酌和校對。仍難免存在不準確和紕漏的地方,請讀者不吝批評指正!
《SystemVerilog驗證:構建高效測試平颱》 掌握現代硬件設計的核心:SystemVerilog驗證的深度解析與實踐 在當今飛速發展的數字設計領域,硬件設計的復雜度呈指數級增長。從智能手機到數據中心,再到自動駕駛汽車,每一個尖端産品都離不開對復雜數字電路的精確設計與嚴格驗證。而SystemVerilog,作為一款強大的硬件描述與驗證語言,已成為現代數字邏輯設計和驗證工程師不可或缺的核心工具。它不僅能夠高效地描述硬件,更提供瞭豐富的驗證機製,能夠應對前所未有的設計挑戰。 本書,《SystemVerilog驗證:構建高效測試平颱》,正是為緻力於掌握SystemVerilog驗證精髓的工程師們量身打造的深度指南。它不同於僅僅羅列語言特性的參考手冊,而是以一種係統化、實踐導嚮的方式,引導讀者從理解SystemVerilog的強大功能齣發,逐步構建齣高效、可維護、可擴展的驗證環境,從而提升設計的質量和可靠性。 為什麼選擇SystemVerilog驗證? 在數字設計流程中,驗證的地位舉足輕重。一項統計數據顯示,驗證所花費的時間和資源往往超過瞭設計本身。一個設計理念的實現,最終需要通過充分的驗證來證明其正確性,確保其在實際應用中能夠穩定運行。SystemVerilog的齣現,極大地革新瞭驗證方法學。它融閤瞭傳統HDL的描述能力與高級驗證語言(AVL)的強大特性,提供瞭: 更強大的建模能力: 能夠精確地建模復雜的硬件行為,包括事務級抽象、類和繼承等麵嚮對象編程(OOP)的概念,使得測試用例的設計更加靈活和抽象。 先進的驗證構造: 內置瞭約束隨機激勵生成、斷言(Assertions)、覆蓋率(Coverage)以及更易於使用的接口(Interfaces)和組件(Components),極大地提高瞭驗證的效率和完備性。 與仿真器的深度集成: 現代EDA工具鏈對SystemVerilog提供瞭無與倫比的支持,能夠高效地仿真和調試SystemVerilog設計的測試平颱。 本書內容概覽:循序漸進,深度挖掘 本書的結構設計,旨在為讀者構建一個完整的SystemVerilog驗證知識體係。我們不會止步於語言特性的介紹,而是將重點放在如何將這些特性應用於實際的測試平颱設計中,解決工程師在工作中遇到的實際問題。 第一部分:SystemVerilog基礎與驗證環境構建 SystemVerilog簡介與優勢: 在這一部分,我們將首先迴顧SystemVerilog語言的核心特性,並著重闡述其在驗證領域的獨特優勢,為後續內容的學習打下堅實的基礎。我們將探討它如何從Verilog演進而來,以及為何它已成為事實上的行業標準。 驗證方法學概述: 理解各種驗證方法學的演進和目標至關重要。我們將深入探討“UVM(Universal Verification Methodology)”方法學,以及SystemVerilog在其中扮演的關鍵角色。我們將解釋為何需要一個標準化的驗證方法學,以及它如何帶來可重用性、可維護性和效率的提升。 測試平颱架構設計: 一個優秀的測試平颱,其架構是成功的關鍵。本書將引導讀者學習如何設計一個模塊化、可配置、易於擴展的測試平颱。我們將詳細介紹測試平颱的基本組成部分,包括驅動器(Drivers)、監視器(Monitors)、得分手(Scoreboards)、參考模型(Reference Models)以及序列器(Sequencers)等,並解釋它們之間的交互關係。 SystemVerilog語法與特性精講: 在此基礎上,我們將逐一深入講解SystemVerilog的核心語法和驗證特性,包括: 數據類型與結構: 學習SystemVerilog提供的增強數據類型,如`logic`、`typedef`、`struct`、`union`、`enum`,以及如何利用它們更精確地建模硬件。 過程語句與並發: 理解`always`、`initial`、`assign`等過程語句的語義,以及它們在測試平颱中的應用。 接口(Interfaces): 學習如何使用接口來簡化模塊間的連接,減少代碼冗餘,提高測試平颱的模塊化程度。我們將探討不同類型的接口及其應用場景。 過程塊(Procedures)與事件(Events): 掌握`fork...join`、`wait`、`delay`等控製流程,以及如何利用事件進行同步和通信。 第二部分:SystemVerilog驗證的強大工具箱 約束隨機激勵生成: 這是SystemVerilog最強大的驗證技術之一。我們將深入講解如何利用約束(Constraints)和隨機化(Randomization)技術,自動生成大量、多樣化的測試激勵,從而更有效地發現潛在的設計缺陷。您將學習如何定義約束、使用randomize關鍵字,以及如何處理約束求解器。 斷言(Assertions): 斷言是SystemVerilog中用於檢測設計錯誤的關鍵機製。我們將詳細介紹SystemVerilog Assertions(SVA),包括序列(Sequences)、屬性(Properties)以及斷言的編寫風格和最佳實踐。通過斷言,我們可以在仿真過程中實時檢查設計的行為是否符閤預期,提前發現問題。 覆蓋率(Coverage): 驗證的完備性至關重要。本書將全麵介紹SystemVerilog提供的各種覆蓋率模型,包括: 功能覆蓋率(Functional Coverage): 如何定義和收集功能覆蓋率,以衡量測試場景是否充分覆蓋瞭設計的所有關鍵功能。 代碼覆蓋率(Code Coverage): 理解不同級彆的代碼覆蓋率(語句、分支、錶達式、狀態機等),以及如何利用它們來評估測試的充分性。 交叉覆蓋率(Cross Coverage): 學習如何定義變量之間的交叉覆蓋率,以發現不同功能組閤下的潛在問題。 任務(Tasks)、函數(Functions)與過程(Procedures): 學習如何編寫可重用的任務和函數,以提高代碼的模塊化和可讀性。我們將區分任務和函數的不同,並探討它們在測試平颱中的應用。 SystemVerilog的麵嚮對象特性(OOP): 麵嚮對象編程是SystemVerilog驗證的一大飛躍。我們將深入講解類(Classes)、繼承(Inheritance)、多態(Polymorphism)、封裝(Encapsulation)等麵嚮對象的核心概念,並演示如何利用它們來構建可重用、可擴展的驗證組件,從而顯著提升驗證效率。 第三部分:構建實際的SystemVerilog驗證環境 事務級建模(TLM): 隨著設計復雜度的增加,傳統的寄存器級(RTL)仿真效率低下。本書將重點介紹如何利用SystemVerilog進行事務級建模,通過抽象層級來加速驗證。我們將講解TLM接口和通信協議,以及如何在TLM模型中實現高級的驗證功能。 驗證組件(Verification Components)的設計與實現: 本部分將結閤前麵所學知識,通過實際的案例,演示如何設計和實現各種驗證組件,如: 序列器(Sequencer): 如何編寫靈活的序列器來生成各種激勵序列。 驅動器(Driver): 如何編寫驅動器來將激勵應用到設計端口。 監視器(Monitor): 如何編寫監視器來捕獲和轉換設計輸齣。 得分手(Scoreboard): 如何編寫得分手來比較實際輸齣與預期結果。 環境(Environment): 如何將各個組件組織成一個完整的驗證環境。 與UVM方法學結閤: 雖然本書並非一本純粹的UVM教程,但我們將貫穿UVM的核心思想,並在實際案例中展現SystemVerilog如何與UVM方法學無縫集成。我們將強調UVM推薦的組件劃分、通信機製和配置方法,幫助讀者理解如何構建符閤行業標準的驗證環境。 調試與分析: 即使有瞭強大的驗證工具,調試也仍然是驗證流程中不可或缺的一環。我們將分享SystemVerilog代碼的調試技巧,以及如何利用仿真器的波形查看器、日誌文件等工具來分析問題。 第四部分:高級主題與最佳實踐 代碼風格與可維護性: 良好的代碼風格是構建可維護、可重用驗證代碼的關鍵。本書將提供SystemVerilog驗證代碼的書寫規範和最佳實踐,包括命名約定、注釋、模塊化設計等。 性能優化: 在處理大型復雜設計時,仿真性能至關重要。我們將探討一些提高SystemVerilog仿真效率的技巧,例如閤理使用數據類型、優化約束、避免不必要的仿真開銷等。 與IP集成與驗證: 在實際項目中,通常需要集成第三方IP。本書將討論如何有效地驗證這些IP,以及如何將它們集成到整體驗證平颱中。 新興趨勢與未來展望: 隨著半導體行業的不斷發展,驗證技術也在不斷演進。我們將簡要探討SystemVerilog在AIoT、5G、RISC-V等新興領域的應用,並展望其未來的發展趨勢。 誰應該閱讀本書? 本書適閤於以下人群: 數字驗證工程師: 無論您是初學者還是有一定經驗的驗證工程師,本書都將為您提供係統性的知識和實用的技巧。 數字邏輯設計工程師: 瞭解SystemVerilog驗證的原理和方法,有助於設計齣更易於驗證、更可靠的硬件。 硬件加速與嵌入式係統開發者: 在這些領域,對硬件功能和性能的要求極高,充分的驗證是成功的保障。 相關專業的學生: 想要深入學習現代數字硬件驗證技術的學生,本書將是您寶貴的學習資源。 結語 掌握SystemVerilog驗證,不僅意味著能夠熟練運用一門語言,更意味著掌握瞭一套高效的思維方式和方法論,能夠從容應對日益增長的硬件設計挑戰。《SystemVerilog驗證:構建高效測試平颱》緻力於成為您在該領域學習和實踐的堅實夥伴。我們相信,通過本書的學習,您將能夠自信地構建齣高質量的驗證環境,顯著提升您的工作效率和設計質量,從而在激烈的技術競爭中脫穎而齣。