本書(shū)簡(jiǎn)明扼要地闡述了Verilog 硬件描述語(yǔ)言的基礎(chǔ)知識(shí)。Verilog硬件描述語(yǔ)言通常簡(jiǎn)稱(chēng)為Verilog HDL,可以用于在多個(gè)層次上(從開(kāi)關(guān)級(jí)到算法級(jí))為數(shù)字設(shè)計(jì)建模。該語(yǔ)言提供了一套功能強(qiáng)大的原語(yǔ)(primitive),其中包括邏輯門(mén)和用戶(hù)定義的原語(yǔ)(即基元),還提供了范圍寬廣的語(yǔ)言結(jié)構(gòu),不但可以為硬件的并發(fā)行為建模,也可以為硬件的時(shí)序特性和電路構(gòu)造建模。通過(guò)編程語(yǔ)言接口(PLI)還可以擴(kuò)展該語(yǔ)言的功能。Verilog HDL語(yǔ)言使用簡(jiǎn)便,但功能強(qiáng)大,可以在多個(gè)抽象層次上為數(shù)字設(shè)計(jì)建模。Verilog HDL語(yǔ)言于1995年經(jīng)由IEEE批準(zhǔn)成為一種標(biāo)準(zhǔn)語(yǔ)言,稱(chēng)為IEEE Std 13641995。2001年IEEE又對(duì)Verilog語(yǔ)言進(jìn)行了更新,批準(zhǔn)了IEEE Std 13642001新標(biāo)準(zhǔn)。該新標(biāo)準(zhǔn)包括了許多新的特性,例如多維數(shù)組、生成語(yǔ)句、配置以及一些其他特性。本書(shū)(第3版)是根據(jù)最新版Verilog HDL標(biāo)準(zhǔn)編寫(xiě)的。
本書(shū)的宗旨是想通過(guò)具體例子的講解,闡明Verilog HDL語(yǔ)言的重要基本概念,從而向讀者介紹這種硬件描述語(yǔ)言。本書(shū)是Verilog語(yǔ)言入門(mén)的初級(jí)課本。作者用清晰、簡(jiǎn)明的語(yǔ)言對(duì)Verilog語(yǔ)言的每一個(gè)方面進(jìn)行了闡述,使初學(xué)者很容易理解,不至于產(chǎn)生畏難情緒。作者希望本書(shū)能為讀者的Verilog HDL語(yǔ)言入門(mén)提供幫助。
本書(shū)從語(yǔ)言特點(diǎn)和建模應(yīng)用兩個(gè)方面出發(fā),對(duì)Verilog語(yǔ)言的基本概念進(jìn)行了全面深入的講解,為每一種語(yǔ)言結(jié)構(gòu)提供了大量的例子,并且舉例說(shuō)明了如何使用多種語(yǔ)言結(jié)構(gòu)來(lái)構(gòu)造硬件模型。本書(shū)對(duì)Verilog HDL語(yǔ)言支持的多種建模風(fēng)格進(jìn)行了詳細(xì)的描述。本書(shū)還講解了如何用同一種Verilog語(yǔ)言描述激勵(lì)和控制,包括響應(yīng)的監(jiān)視和驗(yàn)證。許多語(yǔ)法結(jié)構(gòu)都采用便于閱讀的形式呈現(xiàn)給讀者,盡管有時(shí)候程序代碼并不完整。這樣做的目的是便于理解語(yǔ)言結(jié)構(gòu)。Verilog語(yǔ)言的完整語(yǔ)法結(jié)構(gòu)放在附錄中供讀者參考。
本書(shū)從本質(zhì)上講并不是理論性的。書(shū)中用普通的術(shù)語(yǔ)介紹Verilog語(yǔ)言的語(yǔ)法和語(yǔ)義,避免使用形式化定義的技術(shù)術(shù)語(yǔ)。本書(shū)未曾試圖對(duì)Verilog語(yǔ)言進(jìn)行完整的闡述,例如編程語(yǔ)言接口、開(kāi)關(guān)級(jí)別的建模和隨機(jī)模型語(yǔ)法特色,本書(shū)就沒(méi)有涉及。本書(shū)只局限于講解Verilog語(yǔ)言中那些最基本和最有用的語(yǔ)法,有了這些知識(shí)就足以編寫(xiě)簡(jiǎn)單或者復(fù)雜的設(shè)計(jì)代碼。
本書(shū)針對(duì)的讀者包括硬件設(shè)計(jì)師、電路和系統(tǒng)設(shè)計(jì)師、軟件工具開(kāi)發(fā)者,以及那些對(duì)學(xué)習(xí)使用Verilog HDL語(yǔ)言進(jìn)行硬件建模感興趣的人士。本書(shū)也可以作為計(jì)算機(jī)輔助設(shè)計(jì)、硬件建模和綜合等大學(xué)課程的入門(mén)教材。本書(shū)也適合專(zhuān)業(yè)人士、大學(xué)本科和研究生學(xué)習(xí)。設(shè)計(jì)人員可以把本書(shū)作為了解Verilog語(yǔ)言的途徑,也可以把它用作Verilog HDL語(yǔ)言的參考書(shū)。學(xué)生和教授們將會(huì)發(fā)現(xiàn)本書(shū)作為硬件設(shè)計(jì)和硬件描述語(yǔ)言的教學(xué)工具將是很有用的。
本書(shū)假定讀者具有數(shù)字硬件設(shè)計(jì)的基本知識(shí),并熟悉某種高級(jí)編程語(yǔ)言(例如 C語(yǔ)言)。
本書(shū)是一本有關(guān)語(yǔ)言的書(shū),因此并不強(qiáng)調(diào)某一領(lǐng)域特定的建模風(fēng)格(例如 RTL(Register Transfer Lerel)建模風(fēng)格)。為了學(xué)習(xí)RTL綜合建模,請(qǐng)參考本書(shū)的姐妹篇Verilog HDL Synthesis, A
Practical Primer。
最后,我還要告訴讀者,僅僅通過(guò)閱讀來(lái)學(xué)習(xí)一種語(yǔ)言是不切合實(shí)際的。最佳的學(xué)習(xí)途徑是把書(shū)上例子中的代碼打印出來(lái),在Verilog仿真器上編譯這些代碼,進(jìn)行仿真,通過(guò)實(shí)際操作來(lái)學(xué)習(xí),只有這樣才能完整、全面地理解這種語(yǔ)言。一旦掌握了本書(shū)上的知識(shí),就可以參閱IEEE標(biāo)準(zhǔn)語(yǔ)言參考手冊(cè)(LRM),進(jìn)一步學(xué)習(xí)有關(guān)Verilog HDL標(biāo)準(zhǔn)的更完整的資料。
第1章 簡(jiǎn)介
1.1 什么是Verilog
HDL?1
1.2 歷史2
1.3 主要能力2
1.4 練習(xí)題4
第2 章 入門(mén)指南
2.1 模塊5
2.2 延遲7
2.3 數(shù)據(jù)流風(fēng)格的描述7
2.4 行為風(fēng)格的描述9
2.5 結(jié)構(gòu)風(fēng)格的描述12
2.6 混合設(shè)計(jì)風(fēng)格的描述14
2.7 設(shè)計(jì)的仿真15
2.8 練習(xí)題19
第3章 Verilog語(yǔ)言要素
3.1 標(biāo)識(shí)符20
3.2 注釋21
3.3 格式21
3.4 系統(tǒng)任務(wù)和系統(tǒng)函數(shù)22
3.5 編譯器指令22
3.5.1 `define和`undef22
3.5.2` ifdef、`ifndef、`else、elseif和
`endif23
3.5.3` default_nettype24
3.5.4` include24
3.5.5` resetall24
3.5.6` timescale25
3.5.7` unconnected_drive 和`nounconnected_drive26
3.5.8` celldefine和`endcelldefine27
3.5.9 line27
3.6 值集合27
3.6.1 整型數(shù)28
3.6.2 實(shí)數(shù)30
3.6.3 字符串30
3.7 數(shù)據(jù)類(lèi)型31
3.7.1 線(xiàn)網(wǎng)類(lèi)型31
3.7.2 未聲明的線(xiàn)網(wǎng)35
3.7.3 向量線(xiàn)網(wǎng)和標(biāo)量線(xiàn)網(wǎng)35
3.7.4 變量類(lèi)型36
3.7.5 數(shù)組41
3.7.6 reg與wire的不同點(diǎn)42
3.8 參數(shù)(parameter)42
局部參數(shù)43
3.9 練習(xí)題44
第4 章 表達(dá)式
4.1 操作數(shù)45
4.1.1 常數(shù)45
4.1.2 參數(shù)46
4.1.3 線(xiàn)網(wǎng)46
4.1.4 變量47
4.1.5 位選47
4.1.6 部分位選48
4.1.7 存儲(chǔ)器和數(shù)組元素49
4.1.8 函數(shù)調(diào)用50
4.1.9 符號(hào)50
4.2 操作符50
4.2.1 算術(shù)操作符52
4.2.2 關(guān)系操作符55
4.2.3 相等操作符56
4.2.4 邏輯操作符57
4.2.5 按位操作符58
4.2.6 縮減操作符59
4.2.7 移位操作符60
4.2.8 條件操作符62
4.2.9 拼接和復(fù)制操作符62
4.3 表達(dá)式的類(lèi)型63
4.4 練習(xí)題64
第5章 門(mén)級(jí)建模
5.1 內(nèi)建基元(原語(yǔ))門(mén)65
5.2 多輸入門(mén)66
5.3 多輸出門(mén)68
5.4 三態(tài)門(mén)69
5.5 上拉門(mén)和下拉門(mén)(電阻)70
5.6
MOS開(kāi)關(guān)71
5.7 雙向開(kāi)關(guān)72
5.8 門(mén)延遲73
5.9 實(shí)例數(shù)組75
5.10 隱含的線(xiàn)網(wǎng)76
5.11 一個(gè)簡(jiǎn)單的示例76
5.12 24 編碼器舉例78
5.13 主/從觸發(fā)器舉例78
5.14 奇偶校驗(yàn)電路79
5.15 練習(xí)題80
第6章 用戶(hù)定義的原語(yǔ)(基元UDP)
6.1 UDP的定義82
6.2 組合邏輯的UDP83
6.3 時(shí)序邏輯的UDP84
6.3.1 狀態(tài)變量的初始化85
6.3.2 電平觸發(fā)的時(shí)序邏輯UDP85
6.3.3 沿觸發(fā)的時(shí)序邏輯UDP85
6.3.4 沿觸發(fā)的和電平敏感的混合行為86
6.4 另一個(gè)示例87
6.5 表項(xiàng)的總結(jié)88
6.6 練習(xí)題88
第7章 數(shù)據(jù)流建模
7.1 連續(xù)賦值語(yǔ)句89
7.2 示例91
7.3 線(xiàn)網(wǎng)聲明賦值91
7.4 賦值延遲92
7.5 線(xiàn)網(wǎng)延遲94
7.6 示例95
7.6.1 主/從觸發(fā)器95
7.6.2 幅值比較器96
7.7 練習(xí)題96
第8章 行為級(jí)建模
8.1 過(guò)程性結(jié)構(gòu)97
8.1.1 initial語(yǔ)句97
8.1.2 always語(yǔ)句100
8.1.3 兩類(lèi)語(yǔ)句在模塊中的使用102
8.2 時(shí)序控制104
8.2.1 延遲控制104
8.2.2 事件控制105
8.3 語(yǔ)句塊109
8.3.1 順序語(yǔ)句塊109
8.3.2 并行語(yǔ)句塊111
8.4 過(guò)程性賦值113
8.4.1 語(yǔ)句內(nèi)部延遲114
8.4.2 阻塞性過(guò)程賦值115
8.4.3 非阻塞性過(guò)程賦值116
8.4.4 連續(xù)賦值與過(guò)程賦值的比較119
8.5 條件語(yǔ)句121
8.6 case語(yǔ)句122
8.7 循環(huán)語(yǔ)句125
8.7.1 forever循環(huán)語(yǔ)句125
8.7.2 repeat循環(huán)語(yǔ)句126
8.7.3 while循環(huán)語(yǔ)句127
8.7.4 for循環(huán)語(yǔ)句127
8.8 過(guò)程性連續(xù)賦值128
8.8.1 assign與deassign語(yǔ)句128
8.8.2 force與
release語(yǔ)句129
8.9 握手協(xié)議示例130
8.10 練習(xí)題132
第9章 結(jié)構(gòu)建模
9.1 模塊134
9.2 端口134
9.3 模塊實(shí)例引用語(yǔ)句137
9.3.1 未連接的端口139
9.3.2 不同的端口位寬139
9.3.3 模塊參數(shù)值140
9.4 外部端口144
9.5 舉例148
9.6 generate語(yǔ)句151
9.6.1 generate循環(huán)語(yǔ)句151
9.6.2 generateconditional條件語(yǔ)句153
9.6.3 generatecase分支語(yǔ)句156
9.7 配置157
9.8 練習(xí)題161
第10章 其他論題
10.1 任務(wù)162
10.1.1 任務(wù)的定義162
10.1.2 任務(wù)的調(diào)用164
10.2 函數(shù)167
10.2.1 函數(shù)的定義168
10.2.2 函數(shù)的調(diào)用171
10.2.3 常數(shù)函數(shù)172
10.3 系統(tǒng)任務(wù)和系統(tǒng)函數(shù)172
10.3.1 顯示任務(wù)173
10.3.2 文件輸入/輸出任務(wù)177
10.3.3 時(shí)間標(biāo)度任務(wù)180
10.3.4 仿真控制任務(wù)181
10.3.5 仿真時(shí)間函數(shù)182
10.3.6 轉(zhuǎn)換函數(shù)182
10.3.7 概率分布函數(shù)183
10.3.8 字符串格式化184
10.4 禁止語(yǔ)句185
10.5 命名事件187
10.6 結(jié)構(gòu)描述方式和行為描述方式的混合使用189
10.7 層次路徑名191
10.8 共享任務(wù)和函數(shù)193
10.9 屬性195
10.10 值變轉(zhuǎn)儲(chǔ)文件196
10.10.1 四狀態(tài)型VCD文件196
10.10.2 拓展的VCD文件197
10.10.3 示例198
10.10.4 VCD文件格式200
10.11 指定塊 201
10.12 強(qiáng)度207
10.12.1 驅(qū)動(dòng)強(qiáng)度207
10.12.2 電荷強(qiáng)度208
10.13 競(jìng)爭(zhēng)的狀況208
10.14 命令行參變量210
10.15 練習(xí)題211
第11章 驗(yàn)證
11.1 編寫(xiě)測(cè)試平臺(tái)213
11.2 波形的生成214
11.2.1 值序列214
11.2.2 重復(fù)模式216
11.3 測(cè)試平臺(tái)舉例221
11.3.1 解碼器221
11.3.2 觸發(fā)器223
11.4 從文本文件中讀取向量225
11.5 向文本文件中寫(xiě)入向量228
11.6 其他示例229
11.6.1 時(shí)鐘分頻器229
11.6.2 階乘設(shè)計(jì)231
11.6.3 序列檢測(cè)器235
11.6.4 LED序列237
11.7 實(shí)用程序239
11.7.1 檢測(cè)x239
11.7.2 將文件傳遞到任務(wù)中240
11.7.3 操作碼的調(diào)試241
11.7.4 檢測(cè)時(shí)鐘脈沖是否出現(xiàn)丟失的情況242
11.7.5 突發(fā)時(shí)鐘發(fā)生器242
11.8 練習(xí)題243
第12章 建模示例
12.1 簡(jiǎn)單元素的建模245
12.2 不同風(fēng)格的建模方式249
12.3 延遲的建模251
12.4 真值表的建模254
12.5 條件操作的建模256
12.6 同步邏輯建模258
12.7 通用移位寄存器262
12.8 格雷碼計(jì)數(shù)器
263
12.9 十進(jìn)制數(shù)計(jì)數(shù)器264
12.10 并行到串行轉(zhuǎn)換器265
12.11 狀態(tài)機(jī)建模265
12.12 狀態(tài)機(jī)的交互268
12.13 Moore有限狀態(tài)機(jī)的建模272
12.14 Mealy有限狀態(tài)機(jī)的建模273
12.15 簡(jiǎn)化的黑杰克程序275
12.16 掃描單元278
12.17 7段BCD碼譯碼器279
12.18 實(shí)用程序280
12.19 練習(xí)題281
附錄A 語(yǔ)法參考資料
A.1 關(guān)鍵字282
A.2 語(yǔ)法規(guī)則284
A.3 語(yǔ)法284
參考文獻(xiàn)315
索引316