編輯推薦
適讀人群 :具有一定Verilog編程基礎的電路工程技術人員,高等院校電子類、自動化類、計算機類的學生 本書可以作為學習System Verilog驗證語言的初級階段讀物。書中描述瞭語言的工作原理並且包含瞭很多例子,這些例子演示瞭如何使用麵嚮對象編程(OOP)的方法建立一個基本的、由覆蓋率驅動並且受約束的隨機分層測試平颱。本書在創建測試平颱方麵有很多引導性的建議,能夠幫你弄清楚為什麼要使用類、隨機化和功能覆蓋率的概念。一旦你掌握瞭這門語言,就可以通過參考文獻中所列舉的方法學方麵的書籍來學習關於建立測試平颱的更多信息。
內容簡介
《systemverilog驗證》講解瞭SystemVerilog語言的工作原理。介紹瞭類、隨機化和功能覆蓋率等測試手段和概念,並且在創建測試平颱方而提供瞭很多引導性的建議。《systemverilog驗證》藉助大量的實例說明SystemVerilog的各種驗證方法,以及如何根據實際的應用情況選擇優的方法達到盡可能高的覆蓋率。而且,重點演示瞭如何使用麵嚮對象編程(OOP)的方法建立由覆蓋率驅動並且受約束的基本的隨機分層測試平颱,此外,還論述瞭SystemVerilog與C語言的接口技術。
內頁插圖
目錄
目錄
第1章 驗證導論 1
1.1 驗證流程 2
1.1.1 不同層次上的測試 2
1.1.2 驗證計劃 3
1.2 驗證方法學 3
1.3 基本測試平颱的功能 4
1.4 定嚮測試 4
1.5 方法學基礎 5
1.6 受約束的隨機激勵 6
1.7 你的隨機化對象是什麼 7
1.7.1 設備和環境配置 7
1.7.2 輸入數據 8
1.7.3 協議異常、錯誤和違例 8
1.7.4 時延和同步 9
1.7.5 並行的隨機測試 9
1.8 功能覆蓋率 9
1.8.1 從功能覆蓋率到激勵的反饋 10
1.9 測試平颱的構件 11
1.10 分層的測試平颱 11
1.10.1 不分層的測試平颱 12
1.10.2 信號和命令層 13
1.10.3 功能層 14
1.10.4 場景層 14
1.10.5 測試的層次和功能覆蓋率 15
1.11 建立一個分層的測試平颱 16
1.11.1 創建一個簡單的驅動器 16
1.12 仿真環境的階段 16
1.13 最大限度的代碼重用 17
1.14 測試平颱的性能 17
1.15 結束語 18
第2章 數據類型 19
2.1 內建數據類型 19
2.1.1 邏輯(logic)類型 19
2.1.2 雙狀態數據類型 20
2.2 定寬數組 21
2.2.1 定寬數組的聲明和初始化 21
2.2.2 常量數組 22
2.2.3 基本的數組操作——for和foreach 22
2.2.4 基本的數組操作——復製和比較 24
2.2.5 同時使用位下標和數組下標 25
2.2.6 閤並數組 25
2.2.7 閤並數組的例子 26
2.2.8 閤並數組和非閤並數組的選擇 27
2.3 動態數組 27
2.4 隊列 28
2.5 關聯數組 30
2.6 鏈錶 32
2.7 數組的方法 32
2.7.1 數組縮減方法 33
2.7.2 數組定位方法 34
2.7.3 數組的排序 36
2.7.4 使用數組定位方法建立記分闆 36
2.8 選擇存儲類型 37
2.8.1 靈活性 37
2.8.2 存儲器用量 37
2.8.3 速度 38
2.8.4 排序 38
2.8.5 選擇最優的數據結構 39
2.9 使用typedef創建新的類型 39
2.10 創建用戶自定義結構 40
2.10.1 使用struct創建新類型 41
2.10.2 對結構進行初始化 41
2.10.3 創建可容納不同類型的聯閤 41
2.10.4 閤並結構 42
2.10.5 在閤並結構和非閤並結構之間進行選擇 42
2.11 類型轉換 42
2.11.1 靜態轉換 43
2.11.2 動態轉換 43
2.11.3 流操作符 43
2.12 枚舉類型 45
2.12.1 定義枚舉值 46
2.12.2 枚舉類型的子程序 46
2.12.3 枚舉類型的轉換 47
2.13 常量 48
2.14 字符串 48
2.15 錶達式的位寬 49
2.16 結束語 50
第3章 過程語句和子程序 51
3.1 過程語句 51
3.2 任務、函數以及void函數 52
3.3 任務和函數概述 53
3.3.1 在子程序中去掉begin end 53
3.4 子程序參數 53
3.4.1 C語言風格的子程序參數 53
3.4.2 參數的方嚮 54
3.4.3 高級的參數類型 54
3.4.4 參數的缺省值 56
3.4.5 采用名字進行參數傳遞 57
3.4.6 常見的代碼錯誤 57
3.5 子程序的返迴 58
3.5.1 返迴(return)語句 58
3.5.2 從函數中返迴一個數組 59
3.6 局部數據存儲 60
3.6.1 自動存儲 60
3.6.2 變量的初始化 60
3.7 時間值 61
3.7.1 時間單位和精度 61
3.7.2 時間參數 62
3.7.3 時間和變量 62
3.7.4 $time與$realtime的對比 63
3.8 結束語 63
第4章 連接設計和測試平颱 65
4.1 將測試平颱和設計分開 65
4.1.1 測試平颱和DUT之間的通信 66
4.1.2 與端口的通信 66
4.2 接口 68
4.2.1 使用接口來簡化連接 68
4.2.2 連接接口和端口 70
4.2.3 使用modport將接口中的信號分組 70
4.2.4 在總綫設計中使用modport 71
4.2.5 創建接口監視模塊 71
4.2.6 接口的優缺點 72
4.2.7 更多例子和信息 73
4.3 激勵時序 73
4.3.1 使用時鍾塊控製同步信號的時序 73
4.3.2 接口中的logic和wire對比 74
4.3.3 Verilog的時序問題 75
4.3.4 測試平颱—設計間的競爭狀態 76
4.4.4 程序塊(ProgramBlock)和時序區域(TimingRegion) 76
4.3.6 仿真的結束 78
4.3.7 指定設計和測試平颱之間的延時 78
4.4 接口的驅動和采樣 79
4.4.1 接口同步 79
4.4.2 接口信號采樣 79
4.4.3 接口信號驅動 80
4.4.4 通過時鍾塊驅動接口信號 81
4.4.5 接口中的雙嚮信號 82
4.4.6 為什麼在程序(program)中不允許使用always塊 83
4.4.7 時鍾發生器 83
4.5 將這些模塊都連接起來 84
4.5.1 端口列錶中的接口必須連接 85
4.6 頂層作用域 85
4.7 程序——模塊交互 87
4.8 SystemVerilog斷言 88
4.8.1 立即斷言(ImmediateAssertion) 88
4.8.2 定製斷言行為 88
4.8.3 並發斷言 89
4.8.4 斷言的進一步探討 90
4.9 四端口的ATM路由器 90
4.9.1 使用端口的ATM路由器 90
4.9.2 使用端口的ATM頂層網單 91
4.9.3 使用接口簡化連接 94
4.9.4 ATM接口 94
4.9.5 使用接口的ATM路由器模型 95
4.9.6 使用接口的ATM頂層網單 95
4.9.7 使用接口的ATM測試平颱 96
4.10 ref端口的方嚮 97
4.11 仿真的結束 97
4.12 LC3取指模塊的定嚮測試(directedtest) 97
4.13 結論 102
第5章 麵嚮對象編程基礎 103
5.1 概述 103
5.2 考慮名詞,而非動詞 103
5.3 編寫第一個類(Class) 104
5.4 在哪裏定義類 105
5.5 OOP術語 105
5.6 創建新對象 106
5.6.1 沒有消息就是好消息 106
5.6.2 定製構造函數(Constructor) 106
5.6.3 將聲明和創建分開 108
5.6.4 new()和new[]的區彆 108
5.6.5 為對象創建一個句柄 108
5.7 對象的解除分配(deallocation) 109
5.8 使用對象 110
5.9 靜態變量和全局變量 111
5.9.1 簡單的靜態變量 111
5.9.2 通過類名訪問靜態變量 112
5.9.3 靜態變量的初始化 112
5.9.4 靜態方法 112
5.10 類的方法 114
5.11 在類之外定義方法 115
5.12 作用域規則 116
5.12.1 this是什麼 118
5.13 在一個類內使用另一個類 119
5.13.1 我的類該做成多大 120
5.13.2 編譯順序的問題 121
5.14 理解動態對象 121
5.14.1 將對象傳遞給方法 121
5.14.2 在任務中修改句柄 123
5.14.3 在程序中修改對象 123
5.14.4 句柄數組 124
5.15 對象的復製 125
5.15.1 使用new操作符復製一個對象 125
5.15.2 編寫自己的簡單復製函數 126
5.15.3 編寫自己的深層復製函數 127
5.15.4 使用流操作符從數組到打包對象,或者從打包對象到數組 128
5.16 公有和私有 130
5.17 題外話 130
5.18 建立一個測試平颱 131
5.19 結論 132
第6章 隨機化 133
6.1 介紹 133
6.2 什麼需要隨機化 133
6.2.1 器件配置 134
6.2.2 環境配置 134
6.2.3 原始輸入數據 135
6.2.4 封裝後的輸入數據 135
6.2.5 協議異常、錯誤(error)和違規(violation) 135
6.2.6 延時 135
6.3 SystemVerilog中的隨機化 135
6.3.1 帶有隨機變量的簡單類 136
6.3.2 檢查隨機化(randomize)的結果 137
6.3.3 約束求解 137
6.3.4 什麼可以被隨機化 137
6.4 約束 137
6.4.1 什麼是約束 138
6.4.2 簡單錶達式 139
6.4.3 等效錶達式 139
6.4.4 權重分布 140
6.4.5 集閤(set)成員和inside運算符 141
6.4.6 在集閤裏使用數組 142
6.4.7 條件約束 145
6.4.8 雙嚮約束 145
6.4.9 使用閤適的數學運算來提高效率 146
6.5 解的概率 147
6.5.1 沒有約束的類 147
6.5.2 關係操作 147
6.5.3 關係操作和雙嚮約束 148
6.5.4 使用solve before約束引導概率分布 148
6.6 控製多個約束塊 149
6.7 有效性約束 150
6.8 內嵌約束 151
6.9 pre_randomize和post_randomize函數 152
6.9.1 構造浴缸型分布 152
6.9.2 關於void函數 153
6.10 隨機數函數 153
6.11 約束的技巧和技術 154
6.11.1 使用變量的約束 154
6.11.2 使用非隨機值 155
6.11.3 用約束檢查值的有效性 156
6.11.4 隨機化個彆變量 156
6.11.5 打開或關閉約束 156
6.11.6 在測試過程中使用內嵌約束 158
6.11.7 在測試過程中使用外部約束 158
6.11.8 擴展類 159
6.12 隨機化的常見錯誤 159
6.12.1 小心使用有符號變量
精彩書摘
第1章 驗證導論
“有些人相信,我們缺乏能夠描述這個完美世界的編程語言……”
——《黑客帝國》,1999
設想一下,你被委任去為彆人建一幢房子。你該從哪裏開始呢?是不是一開始就考慮如何選擇門窗、塗料和地毯的顔色,或者浴室的用料?當然不是!首先你必須考慮房的主人將如何使用房子內部的空間,這樣纔能確定應該建造什麼類型的房子。你應該考慮的問題是他們是喜歡烹飪並且需要一個高端的廚房,還是喜歡在傢裏邊看電影邊吃外賣比薩?他們是需要一間書房或者額外的臥室,還是受預算所限要求更簡樸一些?
在開始學習有關SystemVerilog語言的細節之前,你需要理解如何製訂計劃來驗證你的設計,以及這個驗證計劃對測試平颱結構的影響。如同所有房子都有廚房、臥室和浴室一樣,所有測試平颱也都需要共享一些用於産生激勵和檢驗激勵響應的結構。本章將就測試平颱的構建和設計給齣一些引導性的建議和編碼風格方麵的參考,以滿足個性化的需要。這些技術使用瞭Bergeron等人2006年所著《SystemVerilog驗證方法學》書中的一些概念,但不包括基本類。
作為一個驗證工程師,你能學到的最重要的原則是“程序漏洞利大於弊”。不要因為害羞而不敢去找下一個漏洞,每次找到漏洞都應該果斷報警並記錄下來。整個項目的驗證團隊假定設計中存在漏洞,所以在流片之前每發現一個漏洞就意味著最終到客戶手裏少一個漏洞。你應該盡可能細緻深入地去檢驗設計,並提取齣所有可能的漏洞,盡管這些漏洞可能很容易修復。不要讓設計者拿走瞭所有的榮譽——沒有你的耐心細緻、花樣翻新的驗證,設計有可能無法正常工作!
前言/序言
SystemVerilog語言的齣現隻有短短幾年的時間,目前市麵上關於systemVerilog語言的中文書籍並不多見,而且大多都是介紹systemVerilog語言的設計特性。實際上,SystemVerilog語言除瞭具有設計特性外,還具有驗證及其他諸多方麵的特性。“驗證”經常被認為是簡單的仿真,這當然是一種誤解,本書將告訴你其中緣由。
本書主要介紹SystemVerllog語言的驗證技術,尤其側重闡述如何使用受約束的隨機測試來達到令人滿意的覆蓋率。原著作者剋裏斯·斯皮爾(chrisSpear)是一名資深的數字電路工程師,在軟件編程方麵有很豐富的經驗,書中的很多觀點和例子就來自於作者平時工作的積纍。本書沒有深奧的理論,敘述上深入淺齣。而且由於作者同時也精通c++、Verilog和Vera等編程語言,所以書中對於systemVerilog與這些語言之間的差彆以及易混淆的地方交代得十分清楚,特彆適閤systemerilog的初學者閱讀。
本書的翻譯過程頗為波摺,前後總共持續瞭一年多的時間。當我們在2008年初開始著手翻譯工作時,使用的還是本書的第一版。但翻譯工作進行到將近一半時。獲悉本書的第二版即將發行,於是轉為等待翻譯第二版。第二版除瞭章節內容上有所增補以外,原有章節的很多字句也有所改動,隻得重新翻譯、校對。
本書的翻譯具體分工如下:第6、11章的翻譯由張春負責;前言和第1、2、3、7、9章的翻譯由麥宋平負責;第4、5、8、10、12章的翻譯由趙益新負責;全書的審校和最終定稿由張春負責。
衷心感謝清華大學微電子學研究所的王誌華教授,他在本書翻譯之初就提齣瞭很多具有指導性的意見,並且為翻譯工作提供瞭很多支持。
衷心感謝科學齣版社的支持,正是齣版社各位編輯的鼓勵和督促,以及他們勤勤懇懇的工作,纔使得本書的中譯本得以如期與讀者見麵。
由於本書的翻譯稿齣現第一版和第二版交叉,新詞匯又比較多。圃於譯者的經驗和水平,雖然經過多次仔細的斟酌和校對。仍難免存在不準確和紕漏的地方,請讀者不吝批評指正!
systemverilog驗證 [SystemVerilog for Verification 2nd Edition] 下載 mobi epub pdf txt 電子書 格式
systemverilog驗證 [SystemVerilog for Verification 2nd Edition] 下載 mobi pdf epub txt 電子書 格式 2024
systemverilog驗證 [SystemVerilog for Verification 2nd Edition] 下載 mobi epub pdf 電子書
systemverilog驗證 [SystemVerilog for Verification 2nd Edition] mobi epub pdf txt 電子書 格式下載 2024