Verilog HDL 程序設計教程, 2/e
王金明 王婧菡
相關主題
商品描述
本書系統講解Verilog HDL的語言規則、語法體系,以Verilog-2001和Verilog-2005兩個語言標準為依據,知識點全面、準確。本書主要內容包括Verilog HDL入門、數據類型、表達式、門級和開關級建模、數據流建模、行為級建模、層次結構、任務與函數、Test Bench測試與時序檢查、Verilog設計進階、Verilog有限狀態機設計、Verilog HDL驅動I/O外設、Verilog信號處理實例等。
本書可作為電工電子相關專業本科生和研究生的教學用書,也可供從事電路設計和系統開發的工程技術人員參考。
作者簡介
王金明,博士,解放军陆军工程大学教授、硕士生导师。曾获军队科技进步一等奖1项,军队科技进步二等奖3项,军队科技进步三等奖5项,获军队级教学成果二等奖1项;获国家发明专利授权2项,软件授权1项;发表论文80余篇,其中SCI、EI收录30余篇;主编教材多部,并入选“十一五”国家规划教材和“十二五”国家规划教材;2013年获军队院校育才奖银奖;2014年由国家留学基金委资助,在美国威斯康星大学麦迪逊分校访问研究1年;指导学生参加全国大学生电子设计竞赛,获全国一等奖、二等奖多项。
目錄大綱
目 錄
第 1章 Verilog HDL入門 1
1.1 Verilog HDL的發展簡史 1
1.2 Verilog HDL描述的層級和方式 2
1.3 Verilog設計的目標器件 3
1.4 Verilog設計的流程 4
1.4.1 設計輸入 4
1.4.2 綜合 5
1.4.3 佈局布線 5
1.4.4 時序分析 5
1.4.5 功能模擬與時序模擬 6
1.4.6 編程與配置 6
1.5 Verilog HDL的文字規則 6
1.5.1 詞法 6
1.5.2 空白符 7
1.5.3 註釋 7
1.5.4 操作符 7
1.5.5 字符串 7
1.5.6 關鍵字 9
1.6 數字 9
1.6.1 整數 9
1.6.2 實數 10
1.6.3 數的轉換 11
1.7 標識符 11
練習 13
第 2章 數據類型 14
2.1 值集合 14
2.2 net數據類型 14
2.2.1 wire型與tri型 15
2.2.2 其他net類型 16
2.3 variable數據類型 17
2.3.1 reg型 17
2.3.2 integer型與time型 18
2.3.3 real型與realtime型 19
2.4 向量 19
2.5 數組 20
2.5.1 數組簡介 20
2.5.2 存儲器 20
2.5.3 數組的賦值 20
2.6 參數 21
2.6.1 parameter參數 21
2.6.2 localparam參數 23
2.6.3 specparam參數 24
2.6.4 參數值修改 24
練習 25
第3章 表達式 26
3.1 操作符 26
3.1.1 算術操作符 26
3.1.2 關系操作符 28
3.1.3 等式操作符 28
3.1.4 邏輯操作符 29
3.1.5 位操作符 29
3.1.6 縮減操作符 31
3.1.7 移位操作符 31
3.1.8 指數操作符 33
3.1.9 條件操作符 33
3.1.10 拼接操作符 33
3.1.11 操作符的優先級 34
3.2 操作數 35
3.2.1 整數 35
3.2.2 位選和段選 35
3.2.3 數組 37
3.2.4 字符串 38
3.3 表達式的符號 38
3.4 表達式的位寬 41
3.4.1 表達式位寬的規則 41
3.4.2 表達式位寬示例 41
3.5 賦值和截斷 44
練習 45
第4章 門級和開關級建模 46
4.1 Verilog HDL門元件 46
4.2 門元件的例化 49
4.2.1 門元件的例化簡介 49
4.2.2 門延時 50
4.2.3 驅動強度 52
4.3 開關級元件 54
4.3.1 MOS開關 54
4.3.2 雙向導通開關 55
4.4 門級結構建模 56
4.5 用戶自定義元件 57
4.6 組合邏輯UDP元件 58
4.7 時序邏輯UDP元件 59
4.7.1 電平敏感時序UDP元件 59
4.7.2 邊沿敏感時序UDP元件 60
4.7.3 電平敏感和邊沿敏感行為的
混合描述 60
4.8 時序UDP元件的初始化和例化 61
4.8.1 時序UDP元件的初始化 61
4.8.2 時序UDP元件的例化 62
練習 63
第5章 數據流建模 64
5.1 連續賦值 64
5.1.1 net型變量聲明時賦值 65
5.1.2 賦值延時和線網延時 66
5.1.3 驅動強度 66
5.2 數據流建模 67
5.3 加法器和減法器 69
5.4 格雷碼與二進制碼的轉換 73
5.5 三態邏輯設計 75
練習 77
第6章 行為級建模 78
6.1 行為級建模概述 78
6.1.1 always過程 79
6.1.2 initial過程 80
6.2 過程時序控制 81
6.2.1 延時控制 81
6.2.2 事件控制 81
6.3 過程賦值 83
6.3.1 variable型變量聲明時賦值 84
6.3.2 阻塞過程賦值 84
6.3.3 非阻塞過程賦值 84
6.3.4 阻塞過程賦值與非阻塞過程
賦值的區別 85
6.4 過程連續賦值 87
6.4.1 assign和deassign 87
6.4.2 force和release 88
6.5 塊語句 89
6.5.1 串行塊begin-end 89
6.5.2 並行塊fork-join 90
6.5.3 塊命名 90
6.6 條件語句 92
6.6.1 if-else語句 92
6.6.2 case語句 94
6.6.3 casez與casex語句 97
6.7 循環語句 98
6.7.1 for語句 98
6.7.2 repeat、while和forever
語句 99
練習 101
第7章 層次結構 103
7.1 模塊和模塊例化 103
7.2 帶參數模塊例化與參數傳遞 105
7.2.1 帶參數模塊例化 105
7.2.2 用parameter進行參數
傳遞 106
7.2.3 用defparam進行參數
重載 108
7.3 層次路徑名 109
7.4 generate生成語句 110
7.4.1 generate、for生成語句 110
7.4.2 generate、if生成語句 113
7.4.3 generate、case生成語句 113
7.5 屬性 115
練習 117
第8章 任務與函數 118
8.1 任務 118
8.1.1 任務的定義和調用 118
8.1.2 任務示例 119
8.2 函數 122
8.2.1 函數簡介 122
8.2.2 任務和函數的區別 125
8.3 automatic任務和函數 125
8.3.1 automatic任務 126
8.3.2 automatic函數 127
8.4 系統任務與系統函數 128
8.5 顯示類任務 129
8.5.1 $display與$write 129
8.5.2 $strobe與$monitor 131
8.6 文件操作類任務 132
8.6.1 $fopen與$fclose 132
8.6.2 $fgetc與$fgets 133
8.6.3 $readmemh與$readmemb 135
8.7 控制和時間類任務 135
8.7.1 $finish與$stop 135
8.7.2 $time、$stime與$realtime 137
8.7.3 $printtimescale與
$timeformat 137
8.7.4 $signed與$unsigned 139
8.8 隨機數及概率分佈系統函數 140
8.8.1 $random 140
8.8.2 概率分佈系統函數 141
8.9 編譯指令 142
8.9.1 'timescale 143
8.9.2 'define和'undef 144
8.9.3 'ifdef、'else、'elsif、
'endif和'ifndef 145
8.9.4 'include 147
8.9.5 'default_nettype 147
8.9.6 其他編譯指令 148
練習 149
第9章 Test Bench測試與時序檢查 150
9.1 Test Bench測試 150
9.1.1 Test Bench 150
9.1.2 產生復位信號和激勵
信號 151
9.1.3 產生時鐘信號 152
9.1.4 讀寫文件 152
9.1.5 顯示結果 154
9.2 測試示例 154
9.3 Verilog中的延時定義 158
9.3.1 specify塊 158
9.3.2 模塊路徑 159
9.3.3 路徑延時和分佈延時
混合 161
9.4 時序檢查 162
9.4.1 $setup和$hold 162
9.4.2 $width和$period 163
9.5 SDF文件 164
練習 165
第 10章 Verilog設計進階 166
10.1 面向綜合的設計 166
10.2 加法器設計 168
10.2.1 行波進位加法器 169
10.2.2 超前進位加法器 170
10.3 乘法器設計 173
10.3.1 用乘法操作符實現 173
10.3.2 用布斯乘法器實現 174
10.3.3 查找表乘法器 177
10.4 有符號數的運算 182
10.4.1 有符號數的加法運算 182
10.4.2 有符號數的乘法運算 183
10.4.3 絕對值運算 184
10.5 ROM 185
10.5.1 用數組例化存儲器 186
10.5.2 通過例化lpm_rom實現
存儲器 188
10.6 RAM 189
10.6.1 單口RAM 190
10.6.2 異步FIFO緩存器 191
10.7 流水線設計 195
10.8 資源共享 199
練習 201
第 11章 Verilog有限狀態機設計 202
11.1 引言 202
11.2 有限狀態機的Verilog描述 203
11.2.1 三段式狀態機描述 203
11.2.2 兩段式狀態機描述 205
11.2.3 單段式狀態機描述 205
11.3 狀態編碼 207
11.3.1 常用的狀態編碼方式 207
11.3.2 狀態編碼的定義 208
11.3.3 用屬性指定狀態編碼
方式 211
11.4 用有限狀態機設計除法器 212
11.5 用有限狀態機控制流水燈 215
11.6 用狀態機控制字符液晶顯示器 216
練習 223
第 12章 Verilog HDL驅動I/O外設 225
12.1 標準PS/2鍵盤 225
12.2 4×4矩陣鍵盤 230
12.3 漢字圖形點陣液晶顯示模塊 234
12.3.1 LCD12864B漢字圖形點陣
液晶顯示模塊 234
12.3.2 漢字圖形點陣液晶靜態
顯示 235
12.3.3 漢字圖形點陣液晶動態
顯示 237
12.4 VGA顯示器 238
12.4.1 VGA顯示原理與時序 238
12.4.2 VGA彩條信號發生器 241
12.4.3 VGA圖像顯示 244
12.5 TFT液晶屏 248
12.5.1 TFT液晶屏 248
12.5.2 TFT液晶屏顯示彩色
圓環 251
12.5.3 TFT液晶屏顯示動態
矩形 255
12.6 音符、樂曲演奏 256
12.6.1 音符演奏 256
12.6.2 樂曲演奏 261
練習 265
第 13章 Verilog信號處理實例 267
13.1 超聲波測距 267
13.2 整數開方運算 272
13.3 FIR濾波器 275
13.3.1 FIR濾波器的參數設計 276
13.3.2 FIR濾波器的FPGA
實現 280
13.4 Cordic算法及實現 283
13.4.1 Cordic算法 284
13.4.2 Cordic算法的Verilog
實現 286
練習 292
附錄 Verilog HDL關鍵字 293