本書是面向數(shù)字芯片設(shè)計(jì)與驗(yàn)證的入門書籍,是微電子相關(guān)專業(yè)的基礎(chǔ)課程。 本書以理論基礎(chǔ)為核心,以參考實(shí)例為主線,幫助讀者迅速建立數(shù)字芯片設(shè)計(jì)和驗(yàn)證的概念和設(shè)計(jì)基礎(chǔ),包括兩篇:數(shù)字電路及Verilog篇講解數(shù)字邏輯電路基礎(chǔ),硬件描述語言Verilog的基礎(chǔ)語法,對(duì)應(yīng)的實(shí)例分析,以及組合邏輯電路和時(shí)序邏輯電路的設(shè)計(jì)和驗(yàn)證的參考實(shí)例;SystemVerilog篇講解包括兼顧設(shè)計(jì)和驗(yàn)證的語言SystemVerilog的基礎(chǔ)語法,對(duì)應(yīng)的實(shí)例分析,以及由簡單到相對(duì)復(fù)雜的運(yùn)算器的設(shè)計(jì)和驗(yàn)證的參考實(shí)例。 本書根據(jù)實(shí)際工程項(xiàng)目的經(jīng)驗(yàn),做了精簡和重難點(diǎn)分析,并提供了豐富的實(shí)例和源代碼供學(xué)習(xí)參考,通俗易懂,并且易于上機(jī)實(shí)踐,提升學(xué)習(xí)效果,適合初學(xué)者入門,也可作為高等院校和培訓(xùn)機(jī)構(gòu)相關(guān)專業(yè)的教學(xué)參考書。
●提供了豐富的實(shí)例和源代碼,在學(xué)習(xí)基礎(chǔ)語法的同時(shí)方便讀者上機(jī)實(shí)踐并加深理解
●提供了豐富的視頻教程,方便參照和進(jìn)一步學(xué)習(xí)
●簡化了在實(shí)際工程項(xiàng)目中很少去使用的語法內(nèi)容的介紹
●側(cè)重對(duì)重點(diǎn)內(nèi)容的學(xué)習(xí)介紹,幫助讀者更快入門
●由易到難的循序漸進(jìn)的參考實(shí)例,幫助讀者更好吸收和理解設(shè)計(jì)和驗(yàn)證的大致過程
前言
行業(yè)發(fā)展
芯片行業(yè)作為高科技設(shè)計(jì)和制造業(yè),是人才、資本齊聚集的行業(yè),既是科技信息行業(yè)的基礎(chǔ),也是大國博弈的必爭之地。然而,芯片行業(yè)的發(fā)展無法一蹴而就,需要長期投入和積累,需要一代一代的人去努力。近年來,我國的芯片行業(yè)正在快速發(fā)展,需要更多的人才進(jìn)入該行業(yè),對(duì)于未來計(jì)劃從事數(shù)字芯片設(shè)計(jì)與驗(yàn)證相關(guān)崗位的初學(xué)者來講,希望本書可以起到一定的幫助作用。
本書內(nèi)容
本書分為兩篇共7章,數(shù)字電路及Verilog篇(第1~5章),SystemVerilog篇(第6章和第7章),兩篇都包括了基礎(chǔ)語法及對(duì)應(yīng)的實(shí)例分析,并且上述內(nèi)容根據(jù)實(shí)際工程項(xiàng)目的經(jīng)驗(yàn),做了內(nèi)容的精簡和重點(diǎn)、難點(diǎn)的分析和補(bǔ)充。
第1章介紹數(shù)字芯片設(shè)計(jì)的基礎(chǔ)概念和常識(shí),從而為學(xué)習(xí)后面的內(nèi)容做鋪墊。
第2章講述數(shù)字邏輯電路基礎(chǔ),包括數(shù)制表示、門電路及分析、組合邏輯和時(shí)序邏輯電路。
第3章講述Verilog硬件描述語言的基礎(chǔ)語法并提供了實(shí)例代碼以幫助讀者理解。
第4章將第2章和第3章的內(nèi)容串聯(lián)在一起,講述如何分析并使用Verilog硬件描述語言實(shí)現(xiàn)組合邏輯電路,并講述如何基于Verilog硬件描述語言搭建測試平臺(tái),從而對(duì)組合邏輯電路設(shè)計(jì)做簡單的功能驗(yàn)證。
第5章將第2章和第3章的內(nèi)容串聯(lián)在一起,講述如何分析并使用Verilog硬件描述語言實(shí)現(xiàn)時(shí)序邏輯電路,然后講述如何基于Verilog硬件描述語言搭建測試平臺(tái),從而對(duì)時(shí)序邏輯電路設(shè)計(jì)做簡單的功能驗(yàn)證。
第6章講述SystemVerilog這種兼顧硬件設(shè)計(jì)和驗(yàn)證的編程語言的基礎(chǔ)語法并提供實(shí)例代碼以幫助讀者理解。
第7章以一個(gè)對(duì)初學(xué)者難度適中的運(yùn)算器設(shè)計(jì)為例,講述整個(gè)設(shè)計(jì)和驗(yàn)證的過程,從而將之前章節(jié)的內(nèi)容都串聯(lián)起來,對(duì)讀者的學(xué)習(xí)效果進(jìn)行鞏固提升。
本書特色
(1) 不同于以往數(shù)字電路和Verilog的相關(guān)書籍,本書在提供基礎(chǔ)語法的同時(shí)還提供了可以練習(xí)的案例和源代碼,并且通過實(shí)例講解,將設(shè)計(jì)和驗(yàn)證的概念串聯(lián)在一起,使讀者學(xué)習(xí)起來更加有針對(duì)性,更有效率。
(2) 本書側(cè)重描述實(shí)際工程中的語法使用,而不只是簡單地介紹基礎(chǔ)的語法而脫離實(shí)際,因?yàn)槭聦?shí)上,有不少語法在實(shí)際工程中并不推薦去使用,因此在實(shí)際工程項(xiàng)目中幾乎不會(huì)用到的內(nèi)容本書將不進(jìn)行講解。
(3) 市面上相對(duì)缺乏對(duì)于SystemVerilog這種兼顧硬件設(shè)計(jì)和驗(yàn)證編程語言的圖書,本書旨在引導(dǎo)廣大讀者更輕松、更容易且更貼近實(shí)際工程項(xiàng)目地學(xué)習(xí)相關(guān)語法知識(shí),并教給讀者如何去應(yīng)用。
讀者對(duì)象
(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ǔ)及實(shí)例章節(jié)都提供了代碼以供下載,建議讀者下載后導(dǎo)入推薦的仿真環(huán)境中進(jìn)行仿真運(yùn)行,從而加深理解,提升學(xué)習(xí)效果。
(3) 本書作為數(shù)字電路設(shè)計(jì)和驗(yàn)證的入門書籍,較為詳盡地講述了常用于硬件設(shè)計(jì)的Verilog硬件描述語言,兼顧硬件設(shè)計(jì)和驗(yàn)證的SystemVerilog編程語言,并且提供了較為豐富的實(shí)例供讀者練手,但依然難以窮盡所有細(xì)節(jié)。讀者在閱讀本書后,應(yīng)根據(jù)在實(shí)際工作中的項(xiàng)目,參考相關(guān)語法標(biāo)準(zhǔn),進(jìn)一步學(xué)習(xí)Verilog、SystemVerilog及涉及的UVM驗(yàn)證方法學(xué)和腳本等內(nèi)容。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應(yīng)章節(jié)的二維碼,可以在線學(xué)習(xí)。
本書所有的代碼都在Synopsys VCS上經(jīng)過了仿真驗(yàn)證(仿真運(yùn)行的腳本在各個(gè)章節(jié)代碼目錄下,名稱為run.do),并且提供了標(biāo)注所在路徑位置的代碼供讀者下載,未標(biāo)注所在路徑位置的代碼都為說明性代碼,相對(duì)比較簡單,因此不提供下載。
仿真環(huán)境
建議使用Synopsys VCS I2014.03以上版本運(yùn)行本書提供的實(shí)例代碼。
致謝
寫書時(shí)可愛的女兒才九個(gè)月,需要照顧和陪伴,而工作和寫作占用了我大部分的時(shí)間,感謝家人,尤其是妻子的理解和支持。
本書一定還存在一些不足之處,懇請(qǐng)讀者給予批評(píng)指正。
作者
2023年6月
馬驍,東南大學(xué)集成電路專業(yè)碩士,已申請(qǐng)芯片驗(yàn)證領(lǐng)域多個(gè)專利,網(wǎng)易云課堂芯片驗(yàn)證:UVM理論與實(shí)戰(zhàn)芯片驗(yàn)證:Python腳本理論與實(shí)戰(zhàn)等課程的作者。
數(shù)字電路及Verilog篇
第1章引言(15min)
1.1基礎(chǔ)概念
1.1.1模擬信號(hào)和數(shù)字信號(hào)
1.1.2計(jì)算機(jī)和芯片的組成關(guān)系
1.1.3芯片設(shè)計(jì)的流程
1.1.4芯片設(shè)計(jì)的方向
1.1.5學(xué)習(xí)數(shù)字電路、Verilog和SystemVerilog的必要性
1.2設(shè)計(jì)與驗(yàn)證的常識(shí)
1.2.1設(shè)計(jì)與驗(yàn)證的關(guān)系
1.2.2驗(yàn)證方案要素
1.2.3測試平臺(tái)組成
1.2.4覆蓋率的分類
1.3本章小結(jié)
第2章數(shù)字邏輯電路基礎(chǔ)(12min)
2.1數(shù)制及其表示
2.1.1數(shù)制
2.1.2有符號(hào)數(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建立時(shí)間和保持時(shí)間
2.4.2組合邏輯電路
2.4.3時(shí)序邏輯電路
2.5硬件描述的抽象級(jí)別
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運(yùn)算符
3.3.1基本運(yùn)算符
3.3.2按位運(yùn)算符
3.3.3邏輯運(yùn)算符
3.3.4關(guān)系運(yùn)算符
3.3.5移位運(yùn)算符
3.3.6拼接運(yùn)算符
3.3.7縮減運(yùn)算符
3.3.8三目運(yùn)算符
3.3.9復(fù)制運(yùn)算符
3.3.10位選擇運(yùn)算符
3.3.11運(yùn)算符的優(yōu)先級(jí)別
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強(qiáng)制賦值語句
3.7條件和循環(huán)語句
3.7.1條件語句
3.7.2循環(huán)語句
3.7.3程序塊的自動(dòng)生成
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仿真時(shí)間單位和精度
3.11.2文件包含
3.11.3全局參數(shù)
3.11.4條件編譯
3.12本章小結(jié)
第4章組合邏輯電路實(shí)例(46min)
4.1解碼器
4.1.1真值表
4.1.2卡諾圖及邏輯表達(dá)式
4.1.3電路圖
4.1.4Verilog實(shí)現(xiàn)
4.1.5測試平臺(tái)
4.1.6仿真驗(yàn)證
4.2加法器
4.2.1真值表
4.2.2卡諾圖及邏輯表達(dá)式
4.2.3電路圖
4.2.4Verilog實(shí)現(xiàn)
4.2.5測試平臺(tái)
4.2.6仿真驗(yàn)證
4.3存儲(chǔ)器
4.3.1Verilog實(shí)現(xiàn)
4.3.2測試平臺(tái)
4.3.3仿真驗(yàn)證
4.4本章小結(jié)
第5章時(shí)序邏輯電路實(shí)例(84min)
5.1觸發(fā)器
5.1.1Verilog實(shí)現(xiàn)
5.1.2測試平臺(tái)
5.1.3仿真驗(yàn)證
5.2移位寄存器
5.2.1Verilog實(shí)現(xiàn)
5.2.2測試平臺(tái)
5.2.3仿真驗(yàn)證
5.3計(jì)數(shù)器
5.3.1Verilog實(shí)現(xiàn)
5.3.2測試平臺(tái)
5.3.3仿真驗(yàn)證
5.4狀態(tài)機(jī)
5.4.1過程分析
5.4.2Verilog實(shí)現(xiàn)
5.4.3測試平臺(tái)
5.4.4仿真驗(yàn)證
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ù)組和隊(duì)列類型
6.1.5自定義類型
6.1.6結(jié)構(gòu)體和聯(lián)合體類型
6.1.7常量
6.1.8變量轉(zhuǎn)換
6.2運(yùn)算符
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)和動(dòng)態(tài)變量及方法
6.9.8類的復(fù)制和克隆
6.9.9類的參數(shù)化
6.10接口
6.10.1基本介紹
6.10.2端口分組
6.10.3時(shí)鐘塊
6.10.4虛接口和接口方法
6.11包
6.12斷言
6.12.1立即斷言
6.12.2并發(fā)斷言
6.13隨機(jī)化
6.13.1類的隨機(jī)及約束
6.13.2隨機(jī)種子
6.13.3單向約束
6.13.4雙向約束
6.13.5權(quán)重分布
6.13.6約束開關(guān)控制
6.13.7隨機(jī)開關(guān)控制
6.13.8隨機(jī)回調(diào)方法
6.13.9檢查器
6.13.10約束求解順序
6.13.11權(quán)重分支
6.13.12軟約束
6.13.13隨機(jī)范圍
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覆蓋率選項(xiàng)參數(shù)
6.17.11覆蓋率方法接口
6.18綁定輔助代碼
6.18.1綁定到模塊
6.18.2綁定到接口
6.19與其他編程語言的通信
6.19.1基本介紹
6.19.2使用步驟
6.20本章小結(jié)
第7章參考實(shí)例
7.1對(duì)運(yùn)算器的設(shè)計(jì)和驗(yàn)證
7.1.1設(shè)計(jì)說明
7.1.2設(shè)計(jì)實(shí)現(xiàn)
7.1.3測試計(jì)劃
7.1.4搭建測試平臺(tái)
7.1.5仿真驗(yàn)證
7.1.6覆蓋率分析和提高
7.2對(duì)寄存器控制的運(yùn)算器的設(shè)計(jì)和驗(yàn)證
7.2.1設(shè)計(jì)說明
7.2.2設(shè)計(jì)實(shí)現(xiàn)
7.2.3測試計(jì)劃
7.2.4搭建測試平臺(tái)
7.2.5仿真驗(yàn)證
7.3對(duì)基于APB總線的運(yùn)算器的設(shè)計(jì)和驗(yàn)證
7.3.1設(shè)計(jì)說明
7.3.2設(shè)計(jì)實(shí)現(xiàn)
7.3.3測試計(jì)劃
7.3.4搭建測試平臺(tái)
7.3.5仿真驗(yàn)證
7.4本章小結(jié)
參考文獻(xiàn)