內容簡介
本書緊跟EDA技術發展趨勢,以工程實踐套用為出發點,以流行EDA集成工具QuartusⅡ和仿真工具Modelsim為設計平台,以實例的形式深入淺出地講解了EDA技術、VHDL語言以及數字電子系統的設計。
全書共9章,分為“EDA技術概述”、“基礎電路設計”、“系統電路設計”三個層次。“EDA技術概述”層次作為EDA技術的入門,首先講解了與EDA技術相關的軟硬體知識(第1章),然後比較全面地介紹了可程式邏輯器件,包括硬體結構、特點、編程和配置電路、主流型號等(第2章);“基礎電路設計”層次以VHDL語言和經典電路模組為主,首先以實例引入VHDL語言的基本語法結構(第3章),然後系統地講解了VHDL語言的要素(第4章)、VHDL語言的各種基本語句(第5章)以及狀態機的設計方法(第6章);“系統電路設計”層次以代碼的重用、層次型設計和數字電子系統的設計為主,介紹了程式包和子程式的使用(第7章)、仿真測試平台(第8章)以及數字電子系統的設計及實例(第9章)。
本書可供高等院校電子工程、通信工程、自動化、計算機等相關專業本科生或研究生使用,也可作為相關工程技術人員的參考用書。
目錄
第1章 EDA技術概述 1
1.1 EDA技術及其發展 1
1.1.1 EDA技術的概念 1
1.1.2 EDA技術的發展 2
1.2 EDA設計流程 3
1.2.1 FPGA/CPLD工程設計流程 3
1.2.2 ASIC工程設計方法及流程 6
1.3 EDA設計方法 7
1.4 硬體描述語言 8
1.4.1 硬體描述語言的出現和意義 8
1.4.2 VHDL和Verilog HDL 9
1.4.3 硬體描述語言的發展 9
1.4.4 學習硬體描述語言的要點 10
1.5 常用EDA工具 11
1.5.1 集成EDA工具 11
1.5.2 專用EDA工具 12
1.5.3 EDA工具的發展趨勢 13
1.6 IP核與EDA技術的關係 14
習題 15
第2章 可程式邏輯器件 16
2.1 可程式邏輯器件概述 16
2.1.1 從TTL到可程式邏輯 16
2.1.2 邏輯元件和PLD內部結構電路的符號表示 18
2.1.3 PLD的發展歷程 19
2.1.4 PLD的分類 23
2.2 典型CPLD和FPGA器件結構 24
2.2.1 Altera CPLD 基本結構 24
2.2.2 從CPLD到FPGA 26
2.2.3 Altera FPGA器件結構 27
2.2.4 CPLD與FPGA對比 33
2.3 CPLD和FPGA的編程與配置 34
2.3.1 CPLD和FPGA的編程與配置概述 34
2.3.2 CPLD的編程電路 37
2.3.3 FPGA的配置電路 39
2.4 典型CPLD和FPGA產品 46
2.4.1 Xilinx公司的CPLD和FPGA 46
2.4.2 Altera公司的CPLD和FPGA 48
2.4.3 Lattice公司的CPLD和FPGA 52
習題 54
第3章 VHDL語言入門 55
3.1 VHDL語言概述 55
3.2 兩個簡單的組合電路示例 56
3.2.1 2選1多路選擇器的設計 56
3.2.2 半加器的設計 58
3.2.3 VHDL代碼設計基本結構 60
3.3 庫和程式包 60
3.3.1 庫和程式包的種類 61
3.3.2 庫和程式包的使用 63
3.3.3 程式包的定義 63
3.4 實體描述 64
3.4.1 實體描述語句的結構 64
3.4.2 連線埠聲明 65
3.4.3 類屬聲明 66
3.5 結構體描述 67
3.5.1 結構體描述語句結構 67
3.5.2 說明語句 68
3.5.3 功能描述語句 68
3.6 配置 72
3.7 層次結構的VHDL描述 74
3.7.1 元件聲明和元件例化 74
3.7.2 類屬參量的套用 76
3.8 簡單時序電路的描述 78
習題 80
第4章 VHDL語言要素 82
4.1 VHDL文字規則 82
4.1.1 數值型文字 82
4.1.2 標識符 83
4.2 數據對象 84
4.2.1 常量 84
4.2.2 變數 85
4.2.3 信號 86
4.2.4 變數與信號的比較 88
4.3 VHDL的數據類型 93
4.3.1 預定義數據類型 93
4.3.2 用戶自定義數據類型 97
4.3.3 數據類型的轉換 102
4.4 VHDL操作符 104
4.4.1 分配操作符 104
4.4.2 邏輯操作符 105
4.4.3 算術操作符 106
4.4.4 關係操作符 108
4.4.5 移位操作符 109
4.4.6 串聯操作符 111
4.4.7 符號操作符 112
4.4.8 操作符優先權 112
4.5 屬性 112
4.5.1 預定義屬性 112
4.5.2 用戶自定義屬性 114
習題 114
第5章 VHDL基本語句 119
5.1 並行語句 119
5.1.1 並行語句的特點 119
5.1.2 進程語句 122
5.1.3 元件例化語句 126
5.1.4 並行信號賦值語句 127
5.1.5 塊語句 130
5.1.6 並行過程調用語句 133
5.1.7 生成語句 133
5.2 順序語句 138
5.2.1 順序賦值語句 138
5.2.2 IF語句 138
5.2.3 CASE語句 141
5.2.4 LOOP語句 144
5.2.5 WAIT語句 150
5.2.6 NULL語句 152
5.3 常用語句的比較 152
5.3.1 IF語句與CASE語句的比較 152
5.3.2 IF語句與WHEN/ELSE語句的比較 154
5.3.3 CASE語句與WITH/SELECT/WHEN語句的比較 154
5.4 組合邏輯電路的設計 155
5.4.1 三態門電路和雙向連線埠的設計 155
5.4.2 編碼器和解碼器的設計 158
5.4.3 串列進位加法器的設計 161
5.4.4 計算矢量中“0”個數的電路設計 162
5.5 時序邏輯電路的設計 164
5.5.1 邊沿JK觸發器的設計 164
5.5.2 移位暫存器的設計 166
5.5.3 數字分頻器的設計 167
5.5.4 兩位十進制計數器的設計 170
習題 175
第6章 狀態機的設計 178
6.1 狀態機概述 178
6.2 狀態機的分類 181
6.2.1 按狀態個數分類 181
6.2.2 按信號輸出分類 181
6.2.3 按結構分類 182
6.2.4 按狀態的表達方式分類 182
6.2.5 按與時鐘的關係分類 183
6.3 MOORE型狀態機 183
6.3.1 一個簡單的MOORE型狀態機的設計 183
6.3.2 序列檢測器的多進程狀態機設計 186
6.3.3 序列檢測器的單進程狀態機設計 188
6.4 MEALY型狀態機 190
6.5 狀態編碼和剩餘狀態處理 192
6.5.1 狀態編碼 192
6.5.2 剩餘狀態的處理 197
6.6 利用QuartusⅡ軟體的圖形化工具設計狀態機 198
6.7 狀態機設計實例 201
6.6.1 八進制詹森計數器的設計 201
6.6.2 彩燈控制器的設計 205
6.6.3 信號發生器的設計 208
習題 210
第7章 程式包和子程式 213
7.1 程式包 213
7.2 子程式 216
7.2.1 函式的創建和調用 216
7.2.2 函式的重載 221
7.2.3 決斷函式 226
7.2.4 過程的創建與調用 229
7.2.5 過程的重載 233
7.2.6 函式與過程的比較 234
習題 235
第8章 仿真測試平台 236
8.1 VHDL仿真概述 236
8.2 幾種常見的Test Bench模型 240
8.2.1 簡單Test Bench 241
8.2.2 帶有獨立源的Test Bench 246
8.2.3 使用TEXTIO的Test Bench 250
8.3 ASSERT語句 257
習題 260
第9章 數字電子系統設計及典型實例 261
9.1 數字電子系統的構成 261
9.2 數字電子系統設計基本流程 262
9.3 數字電子系統設計實例 263
9.3.1 數字跑表的設計 263
9.3.2 十字路口交通信號燈控制系統的設計 279
9.3.3 離線誤碼檢測儀的設計 288
習題 299
附錄A 預定義程式包 301
A.1 STD庫程式包 301
A.1.1 standard程式包 301
A.1.2 textio程式包 308
A.2 IEEE庫程式包 311
A.2.1 std_logic_1164程式包 311
A.2.2 std_logic_arith程式包 314
A.2.3 std_logic_unsigned程式包 320
A.2.4 std_logic_signed程式包 321
A.2.5 std_logic_textio程式包 323
附錄B VHDL保留關鍵字 326
參考文獻 327