本書對Verilog HDL程序設計作了系統的介紹,以可綜合的設計為重點,同時對仿真和模擬也作了深入的闡述。 本書以Verilog-1995標準為基礎,介紹了Verilog HDL的詞法、語法、語句,可綜合程序的編寫,仿真程序的編寫,一般數字邏輯的實現,復雜邏輯和算法的實現等,討論了設計中的方法與技巧,并以大量經過驗證的設計實例為依據,深入淺出地闡述了Verilog程序開發所涉及的各個方面。對Verilog-2001的新增語法結構也作了介紹。 著眼于實用是本書的出發點,由于HDL語言的學習與使用必須依托一定的EDA環境,因此對典型EDA軟件的使用與接口也作了介紹。 本書可作為電子工程、通信工程及相關專業高年級本科生和研究生教學用書,也可供從事電路設計和系統開發的工程設計人員閱讀參考。
在現代電子設計領域,EDA技術已成為每個工程師和設計師必須掌握的工具,起著越來越重要的作用,從PCB設計到芯片版圖的制作,從原理圖輸入到HDL語言的描述,從FPGA設計到ASIC,從綜合到仿真等等。這些功能的實現,無不依靠EDA技術提供了強有力的支持。 EDA技術的發展使得現代電子系統設計從設計思想、設計工具一直到實現方式都產生了深刻的變化,因此,怎樣在當前的EDA教學中體現出這一些變化,抓住EDA技術的實質,則是每一個從事EDA教學的考師所面臨和思考的問題,其根本目的是在有限的不時內將EDA技術本質的內容作為講授的重點傳厲害給學生,使其能夠掌握EDA技術的精髓。
第1章 EDA技術綜述 1
本章內容簡介 1
1.1 引言 1
1.2 EDA技術及其發展 2
1.3 設計方法與設計技術 3
1.3.1 Top-down設計 3
1.3.2 Bottom-up設計 5
1.3.3 IP復用技術與SOC 5
1.4 EDA設計的實現 6
1.5 硬件描述語言 7
思考與練習 9
第2章 EDA設計軟件與設計流程 10
本章內容簡介 10
2.1 EDA軟件工具概述 10
2.1.1 集成的CPLD/FPGA開發工具 10
2.1.2 輸入工具(Design Input Tools) 11
2.1.3 邏輯綜合工具(Synthesis Tools) 12
2.1.4 仿真工具(Simulation Tools) 12
2.1.5 IC版圖工具 13
2.1.6 其他EDA工具 14
2.2 EDA設計的流程 14
2.2.1 輸入(Design Input) 14
2.2.2 綜合(Synthesis) 15
2.2.3 適配(Fitter) 16
2.2.4 仿真(Simulation) 16
2.2.5 編程(Program) 17
思考與練習 17
第3章 Verilog HDL設計初步 18
本章內容簡介 18
3.1 Verilog語言的歷史及與C語言的比較 18
3.2 完整的Verilog HDL設計 20
3.2.1 4位全加器和4位計數器 20
3.2.2 綜合 21
3.2.3 仿真 22
3.3 Verilog模塊基本結構剖析 27
3.3.1 Verilog模塊的結構 27
3.3.2 邏輯功能定義 29
思考與練習 30
第4章 Verilog HDL語言要素 32
本章內容簡介 32
4.1 詞法 32
4.1.1 空白符和注釋 32
4.1.2 數字與字符串(Numbers & Strings) 33
4.1.3 標識符(Identifiers) 35
4.1.4 運算符(Operators) 36
4.1.5 關鍵字(Keywords) 36
4.2 數據類型 36
4.2.1 連線型(Net Type) 36
4.2.2 寄存器型(Register Type) 38
4.2.3 parameter 38
4.3 寄存器和存儲器 39
4.3.1 寄存器 39
4.3.2 存儲器 39
4.4 運算符 40
4.4.1 運算符 40
4.4.2 運算符的優先級 44
思考與練習 44
第5章 Verilog HDL行為語句 45
本章內容簡介 45
5.1 概述 45
5.2 過程語句 46
5.2.1 always過程語句 46
5.2.2 initial語句 50
5.3 塊語句 51
5.3.1 串行塊begin-end 51
5.3.2 并行塊fork-join 52
5.4 賦值語句 53
5.4.1 持續賦值與過程賦值 53
5.4.2 阻塞賦值與非阻塞賦值 55
5.5 條件語句 56
5.5.1 if-else語句 56
5.5.2 case語句 58
5.5.3 條件語句使用要點 60
5.6 循環語句 61
5.6.1 for語句 61
5.6.2 repeat語句 62
5.6.3 while和forever語句 63
5.7 編譯向導 65
5.7.1 宏替換`define 66
5.7.2 文件包含`include 66
5.7.3 條件編譯`ifdef、`else、`endif 67
思考與練習 68
第6章 進程、任務與函數 69
本章內容簡介 69
6.1 進程(process) 69
6.1.1 進程 69
6.1.2 進程間的通信 70
6.2 任務(task) 71
6.3 函數(function) 74
6.3.1 函數 74
6.3.2 任務與函數的區別 79
6.4 順序執行與并發執行 79
6.5 Verilog-2001新增語法結構簡介 81
思考與練習 84
第7章 Verilog HDL的描述風格 85
本章內容簡介 85
7.1 概述 85
7.2 結構描述 86
7.2.1 Verilog HDL內置門元件 86
7.2.2 門級結構描述 89
7.3 行為描述方式 90
7.4 數據流描述方式 91
7.5 不同描述風格的例子 93
7.5.1 半加器 93
7.5.2 1位全加器 95
7.5.3 4位全加器 98
思考與練習 100
第8章 仿真 101
本章內容簡介 101
8.1 概述 101
8.2 系統任務與系統函數 102
8.2.1 $display與$write 102
8.2.2 $monitor與$strobe 103
8.2.3 $time與$realtime 104
8.2.4 $finish與$stop 105
8.2.5 $readmemh與$readmemb 105
8.2.6 $random 106
8.2.7 文件輸出 106
8.3 用戶自定義元件(UDP) 107
8.3.1 組合電路UDP元件 107
8.3.2 時序邏輯UDP元件 110
8.3.3 UDP元件縮記符 111
8.4 延時模型的表示 112
8.4.1 時間標尺定義`timescale 112
8.4.2 延時的表示方法 113
8.4.3 延時說明塊(specify塊) 114
8.5 測試平臺(Test Bench) 114
8.5.1 Test Bench 114
8.5.2 測試程序的編寫 116
8.6 仿真示例 119
8.6.1 組合電路的仿真 119
8.6.2 時序電路的仿真 124
思考與練習 125
第9章 Verilog HDL設計進階 126
本章內容簡介 126
9.1 基本組合電路的設計 126
9.1.1 簡單門電路 126
9.1.2 編譯碼器 129
9.1.3 數據選擇器 132
9.1.4 用組合電路實現的ROM 133
9.2 基本時序電路的設計 134
9.2.1 D觸發器與JK 觸發器 134
9.2.2 鎖存器與寄存器 136
9.2.3 計數器 139
9.2.4 ROM/RAM模塊 140
9.2.5 串/并轉換 141
9.3 簡單的微處理器 142
9.3.1 設計實現 142
9.3.2 仿真 143
9.4 乘累加器(MAC)的設計 144
思考與練習 147
第10章 設計方法與設計技巧的探討 148
本章內容簡介 148
10.1 可綜合的設計技術的討論 148
10.1.1 可綜合的Verilog HDL結構 148
10.1.2 可綜合設計的要點 150
10.2 流水線設計技術(Pipeline Design) 151
10.3 資源共享(Resource Sharing) 155
10.4 有限狀態機(FSM)設計 157
10.4.1 基于狀態機的設計 157
10.4.2 頻率計控制器設計舉例 160
10.4.3 幾點討論 162
10.5 多層次結構電路的設計 164
10.5.1 圖形與文本混合設計 164
10.5.2 文本設計 165
10.6 阻塞與非阻塞賦值使用要點 167
10.6.1 進程的設計 167
10.6.2 阻塞賦值與非阻塞賦值 168
10.6.3 應用要點 171
10.7 片內存儲器的使用 172
10.7.1 片內存儲器 172
10.7.2 設計舉例 173
10.8 如何消除毛刺 175
10.8.1 毛刺的產生 176
10.8.2 毛刺的消除 177
思考與練習 179
第11章 Verilog HDL綜合設計實踐 180
本章內容簡介 180
11.1 數字跑表 180
11.1.1 設計輸入與編譯 180
11.1.2 仿真 183
11.2 4位數字頻率計 183
11.2.1 功能與原理 183
11.2.2 設計實現 184
11.3 交通燈控制器 187
11.3.1 功能要求 187
11.3.2 設計實現 188
11.4 樂曲演奏電路 191
11.4.1 音調的控制 192
11.4.2 音長的控制 193
11.4.3 樂曲演奏電路源程序 193
11.5 自動售飲料機的設計 197
11.6 實用多功能數字鐘 199
11.6.1 功能 200
11.6.2 源程序 200
11.7 計費器設計 205
思考與練習 209
第12章 算法與復雜邏輯的實現 210
本章內容簡介 210
12.1 加法器設計 210
12.1.1 級連加法器 211
12.1.2 并行加法器 212
12.1.3 超前進位加法器 212
12.1.4 流水線加法器 219
12.2 乘法器設計 219
12.2.1 并行乘法器 219
12.2.2 移位相加乘法器 220
12.2.3 查找表乘法器 220
12.2.4 加法樹乘法器 223
12.3 FIR濾波器的設計 225
12.3.1 FIR濾波器的結構 225
12.3.2 抽頭系數編碼 226
12.3.3 源代碼及仿真 227
12.4 數字相關器 231
12.5 信道編譯碼器 233
12.5.1 線性分組碼編譯碼器 233
12.5.2 循環碼編譯碼器 237
12.6 CRC校驗碼 241
思考與練習 244
第13章 EDA軟件使用指南 245
本章內容簡介 245
13.1 概述 245
13.2 Synplify Pro使用指南 246
13.2.1 Synplify Pro的性能特點 247
13.2.2 Synplify Pro使用指南 248
13.2.3 Synplify Pro與MAX+PLUS II的接口 251
13.3 Synplify 使用指南 253
13.3.1 Synplify的功能特點 253
13.3.2 Synplify使用舉例 254
13.4 ModelSim使用指南 256
13.4.1 ModelSim功能仿真 257
13.4.2 ModelSim時序仿真 262
13.5 ispLEVER使用指南 264
13.5.1 ispLEVER的特點 264
13.5.2 基于ispLEVER的Verilog設計 264
13.6 MAX+PLUS II使用指南 268
13.7 Quartus II使用指南 274
13.7.1 創建工程文件 274
13.7.2 編譯 278
13.7.3 仿真 281
13.7.4 Synplify Pro與Quartus II的接口 284
13.8 結束語 285
附錄A Verilog HDL(IEEE Std 1364-1995)關鍵字 286
附錄B Synplify Pro/Synplify可綜合的Verilog結構 287
附錄C MAX+PLUS II軟件支持的Verilog結構 288
附錄D 形式化句法定義 289
附錄E 附帶光盤內容及說明 304
參考文獻 308