前言
行業(yè)發(fā)展
芯片行業(yè)作為高科技設(shè)計和制造業(yè),是人才、資本齊聚集的行業(yè),既是科技信息行業(yè)的基礎(chǔ),也是大國博弈的必爭之地。然而,芯片行業(yè)的發(fā)展無法一蹴而就,需要長期投入和積累,需要一代一代的人去努力。近年來,我國的芯片行業(yè)正在快速發(fā)展,需要更多的人才進(jìn)入該行業(yè),對于未來計劃從事數(shù)字芯片設(shè)計與驗證相關(guān)崗位的初學(xué)者來講,希望本書可以起到一定的幫助作用。
本書內(nèi)容
本書分為兩篇共7章,數(shù)字電路及Verilog篇(第1~5章),SystemVerilog篇(第6章和第7章),兩篇都包括了基礎(chǔ)語法及對應(yīng)的實例分析,并且上述內(nèi)容根據(jù)實際工程項目的經(jīng)驗,做了內(nèi)容的精簡和重點、難點的分析和補充。
第1章介紹數(shù)字芯片設(shè)計的基礎(chǔ)概念和常識,從而為學(xué)習(xí)后面的內(nèi)容做鋪墊。
第2章講述數(shù)字邏輯電路基礎(chǔ),包括數(shù)制表示、門電路及分析、組合邏輯和時序邏輯電路。
第3章講述Verilog硬件描述語言的基礎(chǔ)語法并提供了實例代碼以幫助讀者理解。
第4章將第2章和第3章的內(nèi)容串聯(lián)在一起,講述如何分析并使用Verilog硬件描述語言實現(xiàn)組合邏輯電路,并講述如何基于Verilog硬件描述語言搭建測試平臺,從而對組合邏輯電路設(shè)計做簡單的功能驗證。
第5章將第2章和第3章的內(nèi)容串聯(lián)在一起,講述如何分析并使用Verilog硬件描述語言實現(xiàn)時序邏輯電路,然后講述如何基于Verilog硬件描述語言搭建測試平臺,從而對時序邏輯電路設(shè)計做簡單的功能驗證。
第6章講述SystemVerilog這種兼顧硬件設(shè)計和驗證的編程語言的基礎(chǔ)語法并提供實例代碼以幫助讀者理解。
第7章以一個對初學(xué)者難度適中的運算器設(shè)計為例,講述整個設(shè)計和驗證的過程,從而將之前章節(jié)的內(nèi)容都串聯(lián)起來,對讀者的學(xué)習(xí)效果進(jìn)行鞏固提升。
本書特色
(1) 不同于以往數(shù)字電路和Verilog的相關(guān)書籍,本書在提供基礎(chǔ)語法的同時還提供了可以練習(xí)的案例和源代碼,并且通過實例講解,將設(shè)計和驗證的概念串聯(lián)在一起,使讀者學(xué)習(xí)起來更加有針對性,更有效率。
(2) 本書側(cè)重描述實際工程中的語法使用,而不只是簡單地介紹基礎(chǔ)的語法而脫離實際,因為事實上,有不少語法在實際工程中并不推薦去使用,因此在實際工程項目中幾乎不會用到的內(nèi)容本書將不進(jìn)行講解。
(3) 市面上相對缺乏對于SystemVerilog這種兼顧硬件設(shè)計和驗證編程語言的圖書,本書旨在引導(dǎo)廣大讀者更輕松、更容易且更貼近實際工程項目地學(xué)習(xí)相關(guān)語法知識,并教給讀者如何去應(yīng)用。
讀者對象
(1) 相關(guān)專業(yè)的在校大學(xué)生。
(2) 相關(guān)領(lǐng)域的技術(shù)工程人員。
學(xué)習(xí)建議
(1) 本書內(nèi)容由易到難,建議讀者按照章節(jié)順序進(jìn)行學(xué)習(xí),也可根據(jù)自身掌握情況適當(dāng)跳過部分基礎(chǔ)章節(jié)的內(nèi)容進(jìn)行學(xué)習(xí)。
(2) 本書語法基礎(chǔ)及實例章節(jié)都提供了代碼以供下載,建議讀者下載后導(dǎo)入推薦的仿真環(huán)境中進(jìn)行仿真運行,從而加深理解,提升學(xué)習(xí)效果。
(3) 本書作為數(shù)字電路設(shè)計和驗證的入門書籍,較為詳盡地講述了常用于硬件設(shè)計的Verilog硬件描述語言,兼顧硬件設(shè)計和驗證的SystemVerilog編程語言,并且提供了較為豐富的實例供讀者練手,但依然難以窮盡所有細(xì)節(jié)。讀者在閱讀本書后,應(yīng)根據(jù)在實際工作中的項目,參考相關(guān)語法標(biāo)準(zhǔn),進(jìn)一步學(xué)習(xí)Verilog、SystemVerilog及涉及的UVM驗證方法學(xué)和腳本等內(nèi)容。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應(yīng)章節(jié)的二維碼,可以在線學(xué)習(xí)。
本書所有的代碼都在Synopsys VCS上經(jīng)過了仿真驗證(仿真運行的腳本在各個章節(jié)代碼目錄下,名稱為run.do),并且提供了標(biāo)注所在路徑位置的代碼供讀者下載,未標(biāo)注所在路徑位置的代碼都為說明性代碼,相對比較簡單,因此不提供下載。
仿真環(huán)境
建議使用Synopsys VCS I2014.03以上版本運行本書提供的實例代碼。
致謝
寫書時可愛的女兒才九個月,需要照顧和陪伴,而工作和寫作占用了我大部分的時間,感謝家人,尤其是妻子的理解和支持。
本書一定還存在一些不足之處,懇請讀者給予批評指正。
作者
2023年6月
數(shù)字電路及Verilog篇
第1章引言(15min)
1.1基礎(chǔ)概念
1.1.1模擬信號和數(shù)字信號
1.1.2計算機和芯片的組成關(guān)系
1.1.3芯片設(shè)計的流程
1.1.4芯片設(shè)計的方向
1.1.5學(xué)習(xí)數(shù)字電路、Verilog和SystemVerilog的必要性
1.2設(shè)計與驗證的常識
1.2.1設(shè)計與驗證的關(guān)系
1.2.2驗證方案要素
1.2.3測試平臺組成
1.2.4覆蓋率的分類
1.3本章小結(jié)
第2章數(shù)字邏輯電路基礎(chǔ)(12min)
2.1數(shù)制及其表示
2.1.1數(shù)制
2.1.2有符號數(shù)
2.2布爾代數(shù)
2.3基本邏輯電路
2.3.1與門電路
2.3.2或門電路
2.3.3非門電路
2.3.4鎖存器
2.3.5觸發(fā)器
2.4邏輯電路結(jié)構(gòu)
2.4.1建立時間和保持時間
2.4.2組合邏輯電路
2.4.3時序邏輯電路
2.5硬件描述的抽象級別
2.6本章小結(jié)
第3章Verilog基礎(chǔ)(85min)
3.1數(shù)值表示
3.2數(shù)據(jù)類型
3.2.1變量
3.2.2線網(wǎng)
3.2.3參數(shù)
3.2.4字符串
3.3運算符
3.3.1基本運算符
3.3.2按位運算符
3.3.3邏輯運算符
3.3.4關(guān)系運算符
3.3.5移位運算符
3.3.6拼接運算符
3.3.7縮減運算符
3.3.8三目運算符
3.3.9復(fù)制運算符
3.3.10位選擇運算符
3.3.11運算符的優(yōu)先級別
3.4程序塊語句
3.4.1順序執(zhí)行程序塊
3.4.2并行執(zhí)行程序塊
3.4.3混合執(zhí)行程序塊
3.5結(jié)構(gòu)語句
3.5.1initial語句
3.5.2always語句
3.6賦值語句
3.6.1阻塞和非阻塞賦值語句
3.6.2連線賦值語句
3.6.3強制賦值語句
3.7條件和循環(huán)語句
3.7.1條件語句
3.7.2循環(huán)語句
3.7.3程序塊的自動生成
3.8任務(wù)和函數(shù)
3.8.1任務(wù)
3.8.2函數(shù)
3.9控制語句
3.9.1終止程序語句
3.9.2同步等待語句
3.10系統(tǒng)函數(shù)
3.10.1$display和$write,$time和$realtime
3.10.2$random
3.10.3$finish
3.10.4$readmemb和$readmemh
3.10.5$fopen、$fclose、$fdisplay和$fwrite
3.10.6$test$plusargs和$value$plusargs
3.10.7$realtobits和$bitstoreal
3.10.8$signed和$unsigned
3.10.9$monitor
3.11宏定義
3.11.1仿真時間單位和精度
3.11.2文件包含
3.11.3全局參數(shù)
3.11.4條件編譯
3.12本章小結(jié)
第4章組合邏輯電路實例(46min)
4.1解碼器
4.1.1真值表
4.1.2卡諾圖及邏輯表達(dá)式
4.1.3電路圖
4.1.4Verilog實現(xiàn)
4.1.5測試平臺
4.1.6仿真驗證
4.2加法器
4.2.1真值表
4.2.2卡諾圖及邏輯表達(dá)式
4.2.3電路圖
4.2.4Verilog實現(xiàn)
4.2.5測試平臺
4.2.6仿真驗證
4.3存儲器
4.3.1Verilog實現(xiàn)
4.3.2測試平臺
4.3.3仿真驗證
4.4本章小結(jié)
第5章時序邏輯電路實例(84min)
5.1觸發(fā)器
5.1.1Verilog實現(xiàn)
5.1.2測試平臺
5.1.3仿真驗證
5.2移位寄存器
5.2.1Verilog實現(xiàn)
5.2.2測試平臺
5.2.3仿真驗證
5.3計數(shù)器
5.3.1Verilog實現(xiàn)
5.3.2測試平臺
5.3.3仿真驗證
5.4狀態(tài)機
5.4.1過程分析
5.4.2Verilog實現(xiàn)
5.4.3測試平臺
5.4.4仿真驗證
5.5本章小結(jié)
SystemVerilog篇
第6章SystemVerilog基礎(chǔ)(169min)
6.1數(shù)據(jù)類型
6.1.1基本類型
6.1.2枚舉類型
6.1.3字符串類型
6.1.4數(shù)組和隊列類型
6.1.5自定義類型
6.1.6結(jié)構(gòu)體和聯(lián)合體類型
6.1.7常量
6.1.8變量轉(zhuǎn)換
6.2運算符
6.3任務(wù)和函數(shù)
6.3.1Verilog與SystemVerilog的差異
6.3.2支持ref端口類型
6.4循環(huán)及其控制語句
6.4.1循環(huán)語句
6.4.2控制及結(jié)束語句
6.5結(jié)構(gòu)語句
6.5.1final語句
6.5.2always_comb和always_ff語句
6.5.3末尾標(biāo)簽
6.6并行執(zhí)行程序塊語句
6.7控制語句
6.7.1wait fork等待語句
6.7.2iff條件控制語句
6.7.3inside匹配語句
6.7.4進(jìn)程控制類
6.8分支語句
6.9面向?qū)ο缶幊?/p>
6.9.1面向?qū)ο蟮母拍?/p>
6.9.2結(jié)構(gòu)體和類
6.9.3類的封裝
6.9.4類的繼承
6.9.5類的多態(tài)
6.9.6類的模板
6.9.7類的靜態(tài)和動態(tài)變量及方法
6.9.8類的復(fù)制和克隆
6.9.9類的參數(shù)化
6.10接口
6.10.1基本介紹
6.10.2端口分組
6.10.3時鐘塊
6.10.4虛接口和接口方法
6.11包
6.12斷言
6.12.1立即斷言
6.12.2并發(fā)斷言
6.13隨機化
6.13.1類的隨機及約束
6.13.2隨機種子
6.13.3單向約束
6.13.4雙向約束
6.13.5權(quán)重分布
6.13.6約束開關(guān)控制
6.13.7隨機開關(guān)控制
6.13.8隨機回調(diào)方法
6.13.9檢查器
6.13.10約束求解順序
6.13.11權(quán)重分支
6.13.12軟約束
6.13.13隨機范圍
6.14系統(tǒng)函數(shù)
6.14.1$isunknown
6.14.2$urandom_range
6.14.3$system
6.14.4$bits
6.14.5$typename
6.14.6$left、$right、$size、$dimensions
6.14.7$clog2
6.14.8$sformatf
6.14.9$fscanf
6.14.10$root
6.15宏函數(shù)
6.16線程間的通信
6.16.1旗語
6.16.2郵箱
6.16.3事件
6.17覆蓋率收集
6.17.1基本介紹
6.17.2覆蓋組
6.17.3設(shè)置覆蓋倉
6.17.4設(shè)置采樣條件
6.17.5參數(shù)化的覆蓋組
6.17.6翻轉(zhuǎn)覆蓋率收集
6.17.7覆蓋倉中的通配符
6.17.8交叉覆蓋率
6.17.9忽略和非法覆蓋倉
6.17.10覆蓋率選項參數(shù)
6.17.11覆蓋率方法接口
6.18綁定輔助代碼
6.18.1綁定到模塊
6.18.2綁定到接口
6.19與其他編程語言的通信
6.19.1基本介紹
6.19.2使用步驟
6.20本章小結(jié)
第7章參考實例
7.1對運算器的設(shè)計和驗證
7.1.1設(shè)計說明
7.1.2設(shè)計實現(xiàn)
7.1.3測試計劃
7.1.4搭建測試平臺
7.1.5仿真驗證
7.1.6覆蓋率分析和提高
7.2對寄存器控制的運算器的設(shè)計和驗證
7.2.1設(shè)計說明
7.2.2設(shè)計實現(xiàn)
7.2.3測試計劃
7.2.4搭建測試平臺
7.2.5仿真驗證
7.3對基于APB總線的運算器的設(shè)計和驗證
7.3.1設(shè)計說明
7.3.2設(shè)計實現(xiàn)
7.3.3測試計劃
7.3.4搭建測試平臺
7.3.5仿真驗證
7.4本章小結(jié)
參考文獻(xiàn)