本書系統地介紹了EDA 技術和VHDL 硬件描述語言,將VHDL 的基礎知識、編程技巧和實用方法與實際工程開發技術在Quartus II 13.1 上很好地結合起來,使讀者通過本書的學習能迅速了解并掌握EDA技術的基本理論和工程開發實用技術,為后續的深入學習和發展打下堅實的理論與實踐基礎。
作者依據高校課堂教學和實驗操作的規律與要求,并以提高學生的實際工程設計能力和自主創新能力為目的,合理編排全書內容。全書共分為8 個部分:EDA 技術的概述、VHDL 語法知識及其實用技術、Quartus II 及LPM 宏模塊的詳細使用方法、有限狀態機設計技術、16 位實用CPU 設計技術及創新實踐項目、基于ModelSim 的Test Bench 仿真技術、以及基于MATLAB 和DSP Builder 平臺的EDA 設計技術及大量實用系統設計示例。除個別章節外,其他章節都安排了相應的習題和大量針對性強的實驗與設計項目。書中列舉的VHDL 示例都已經編譯通過或經硬件測試通過。
本書主要用于高等院校本、專科的EDA 技術和VHDL 語言基礎課,推薦作為電子工程、通信、工業自動化、計算機應用技術、電子對抗、儀器儀表、數字信號或圖像處理等學科專業和相關實驗指導課的教材用書或主要參考書,同時也可作為電子設計競賽、FPGA 開發應用的自學參考書。
與此教材配套的還有 CAI 教學課件、實驗指導課件、實驗源程序,以及與實驗設計項目相關的詳細技術資料等,讀者都可免費索取。
全書重點講解基礎知識,強調基礎數字模塊的設計與熟練應用。在內容編寫上采用縱向和橫向相結合的寫法,縱向基礎知識的學習穿插大量實例講解,使學生建立完整的知識體系;橫向應用實例的學習穿插基礎知識要點和設計經驗講解,使學生掌握理論知識的具體應用,從而幫助讀者從不同角度認識EDA和vhdl,提高靈活運用的能力,建立自己的設計思路。
新版教程的變化主要表現在新版 EDA 軟件和較新的FPGA 的使用上:
(1)考慮到Quartus II 13.1 和 Quartus Prime Standard 16.1 版本的用法和功能基本相同,而13.1 版本支持的早期器件系列較多,包括Cyclone III。所以在一些重要的章節和示例中,用QuartusII 13.1 軟件取代了舊版的Quartus II 9.1。
(2)在上一版的前言中就已提到過,Quartus II 10.0 版本后不再支持內置的門級仿真器,即Altera 已將Quartus II 10.0 及此后版本的軟件中曾經一貫內置的門級波形仿真器移除了,這使得Quartus 的使用者不得不使用接口于Quartus II 的第三方仿真器ModelSim-Altera。顯然這一舉措對于多數初學者和相關的教學造成很大的不便。因為必須承認,Quartus II 9.x及之前版本軟件中一直內置的波形仿真器的易學、高效和便捷的巨大優勢,對于EDA 教學和初學者的學習是十分重要的。為此,Quartus II 13.1 及其以后的16.1 版本,借助ModelSim-ase 構建了一個類似于波形仿真器的仿真工具。其在用法上也有少許不同之處,書中也做了介紹。
(3)由于新版軟件的波形仿真器是建立在第三方仿真軟件ModelSim-ase 上的,所以在安裝軟件時需要特別注意要把ModelSim-ase 裝上,書中對此加入了Quartus II 13.1 安裝的簡要說明。
(4)考慮到較新的Cyclone 4 型FPGA 已經得到廣泛使用,并兼顧目前多數學校仍然使用基于Cyclone 3 系列FPGA 的實驗設備的事實,在此新版教材中包含了這兩種FPGA的使用示例。
(5)在FPGA 和CPLD 的結構介紹方面,做了一定更新,介紹了較新近發展的FPGA(Cyclone4)和CPLD(內嵌Flash 的FPGA 器件)的結構特點。
(6)對一些習題和實驗項目做了精簡與完善。
(7)對第10 章的Test Bench 仿真示例升級在Quartus II 13.1 平臺上完成。
(8)對第11 和第12 章內容做了進一步的完善。
與本書 VHDL 內容相對應的Verilog HDL 教材可參考清華大學出版社出版的《EDA 技術與Verilog HDL(第3 版)》。
基于工程領域中 EDA 技術的巨大實用價值,以及對EDA 教學中實踐能力和創新意識培養的極端重視,本書的特色主要體現在如下兩個方面。
1.注重實踐能力和創新能力的培養
在絕大部分章節中都安排了針對性較強的實驗與設計項目,使學生對每一章的課堂教學內容和教學效果能及時通過實驗得以消化和強化,并盡可能地從一開始學習就有機會將理論知識與實踐、自主設計緊密聯系起來。
全書包含數十個實驗及其相關的設計項目,這些項目涉及的 EDA 工具軟件類型較多、技術領域也較寬、知識涉獵密集、針對性強,而且自主創新意識的啟示性好。與書中的示例相同,所有的實驗項目都通過了EDA 工具的仿真測試及FPGA 平臺的硬件驗證。每一個實驗項目除給出詳細的實驗目的、實驗原理和實驗報告要求外,還有2~5 個子項目或子任務。它們通常分為:第一個層次的實驗是與該章某個闡述內容相關的驗證性實驗,并通常提供詳細的且被驗證的設計源程序和實驗方法,學生只需將提供的設計程序輸入計算機,并按要求進行編譯仿真,在實驗系統上實現即可,這使學生有一個初步的感性認識,也提高了實驗的效率;第二個層次的實驗任務要求在上一實驗基礎上做一些改進和發揮;第三個層次的實驗通常是提出自主設計的要求和任務;第四、第五個實驗層次則是在僅給出一些提示的情況下提出自主創新性設計的要求。因此,教師可以根據學時數、教學實驗的要求以及不同的學生對象,布置不同層次含不同任務的實驗項目。
2.注重教學選材的靈活性和完整性相結合
本教材的結構特點決定了授課學時數可十分靈活,即可長可短,應視具體的專業特點、課程定位及學習者的前期教育程度等因素而定,大致在30~54 學時。考慮到EDA 技術課程的特質和本教材的特色,具體教學可以是粗放型的,其中多數內容,特別是實踐項目,都可放手讓學生更多地自己去查閱資料、提出問題、解決問題,乃至創新與創造;而授課教師只需做一個啟蒙者、引導者、鼓勵者和學生成果的檢驗者與評判者。授課的過程多數情況只需點到為止,大可不必拘泥細節、面面俱到。但有一個原則,即安排的實驗學時數應多多益善。
事實上,任何一門課程的學時數總是有限的,為了有效增加學生的實踐和自主設計的時間,可以借鑒清華大學的一項教改措施,即其電子系本科生從一入學就每人獲得一塊FPGA 實驗開發板,可從本科一年級一直用到研究生畢業。這是因為EDA 技術本身就是一個可把全部實驗和設計帶回家的課程。
我校對于這門課程也基本采用了這一措施,即每個上EDA 課的同學都可借出一套EDA實驗板,使他們能利用自己的計算機在課余時間完成自主設計項目,強化學習效果。實踐表明,這種安排使得實驗課時得到有效延長,教學成效自然顯著。
我們建議積極鼓勵學生利用課余時間盡可能學完本書的全部內容,掌握本書介紹的所有EDA 工具軟件和相關開發手段,并盡可能多地完成本書配置的實驗和設計任務,甚至能參考教材中的要求,安排相關的創新設計競賽,進一步激發同學的學習積極性和主動性,并強化他們的動手能力和自主創新能力。
還有一個問題有必要在此探討,即自主創新能力的培養盡管重要,但對其有效提高絕非一朝一夕之事。多年的教學實踐告訴我們,針對這一問題的教改必須從兩方面入手,一是教學內容,二是設課時間。二者密切聯系,不可偏廢。
前者主要指建立一個內在相關性好、設課時間靈活且易于將創新能力培養寓于知識傳播之中的課程體系。
后者主要指在課程安排的時段上,將這一體系的課程盡可能地提前。這一舉措是成功的關鍵,因為我們不可能到了本科三、四年級才去關注能力培養,并期待奇跡發生,更不可能指望一兩門課程就能解決問題。尤其是以卓越工程師為培養目標的工科高等教育,自主創新能力的培養本身就是一項教學雙方必須投入密集實踐和探索的創新活動。我校的EDA 技術國家級精品課程正是針對這一教改目標建立的課程體系,而數字電子技術基礎
是這一體系的組成部分和先導課程。它的提前設課是整個課程體系提前的必要條件。
通過數年的試點教學實踐和經驗總結,現已成功在部分本科學生中將此課程的設課時間從原來的第四或第五學期提前到了第一或第二學期。而這一體系的其他相關課程,如EDA 技術、單片機(相關教材是清華大學出版社的《單片機原理與應用技術》,潘明、黃繼業等編著)、SOC 片上系統、計算機接口、嵌入式系統和DSP 等也相應提前,從而使學生到本科二年級時就具備了培養工程實踐和自主開發能力的條件。
另外有一個問題須在此說明。
針對本教材中的實驗和實踐項目所能提供的演示示例原設計文件的問題:本書中多數實驗都能提供經硬件驗證調試好的演示示例原設計,目的是讓讀者能順利完成實驗驗證和設計;有的示例的目的是希望能啟發或引導讀者完成更有創意的設計,其中一些示例盡管看上去頗有創意,但都不能說是最佳或最終結果,這給讀者留有許多改進和發揮的余地。此外還有少數示例無法提供源代碼(只能提供演示文件),是考慮到本書作者以外的設計者的著作權,但這些示例仍能在設計的可行性、創意和創新方面給讀者以寶貴的啟示。
為了盡可能降低本書的成本和售價,不再配置光盤。與本書相關的其他資料,包括本書的配套課件、實驗示例源程序資料、相關設計項目的參考資料和附錄中提到的mif 文件編輯生成軟件等文件資料都可免費索取;此外對于一些與本教材相關的工具軟件,包括Quartus II、Synplify Pro、ModelSim-Atera 和DSP-Builder/MATLAB 等EDA 軟件的安裝使用問題都可咨詢(包括教學課件與實驗課件,以及實驗系統的FPGA 引腳查詢及對照表等的免費索取)sunliangzhu@126.com,或與作者探討EDA 技術教學和實踐(hjynet@163.com);或直接與出版社聯系(主要是索取教學課件等)。
清華大學出版社的網址和聯系方式分別是:www.tup.com.cn,zzfangcn@vip.163.com。
作
者
于杭州電子科技大學
第 1 章 EDA 技術概述 1
11 EDA 技術 1
12 EDA 技術應用對象 2
13 常用的硬件描述語言 4
14 EDA 技術的優勢 5
15 面向FPGA 和CPLD 的開發流程 6
151 設計輸入 7
152 綜合 7
153 適配(布線布局) 9
154 仿真 9
155 RTL 描述 10
16 可編程邏輯器件 10
161 PLD 的分類 11
162 PROM 可編程原理 12
163 GAL
14
17 CPLD 的結構與可編程原理 15
18 FPGA 的結構與工作原理 18
181 查找表邏輯結構 18
182 Cyclone 4E 系列器件的結構原理 18
183 內嵌Flash 的FPGA 器件 21
19 硬件測試技術 21
191 內部邏輯測試 21
192 JTAG 邊界掃描測試 22
110 編程與配置 22
111 Quartus II 23
112 IP 核 25
113 EDA 的發展趨勢 25
習題 27
第2 章程序結構與數據對象 28
21 VHDL 程序結構 28
22 VHDL 程序基本構建 30
221 實體和端口模式 30
222 結構體 31 223 庫和庫的種類 32
224 庫和程序包的調用方法 34
225 配置 35
23 VHDL 文字規則 36
231 數字 36
232 字符串 36
233 關鍵詞 37
234 標識符及其表述規則 37
235 文件取名和存盤 38
236 規范的程序書寫格式 38
24 VHDL 數據對象 39
241 常數 39
242 變量 39
243 信號 40
習題 42
第3 章數據類型與順序語句 43
31 VHDL 數據類型 43
311 BIT 和BIT_VECTOR 類型 44
312 STD_LOGIC 和STD_LOGIC_VECTOR
類型 44
313 整數類型INTEGER 46
314 布爾數據類型BOOLEAN 47
315 SIGNED 和UNSIGNED 類型 47
316 其他預定義類型 49
317 數據類型轉換函數 50
32 常用順序語句 52
321 賦值語句 52
322 CASE 語句 53
323 PROCESS 語句 54
324 并置操作符& 55
325 IF 語句 56
33 IF 語句使用示例 57
331 D 觸發器的VHDL 描述 57
332 含異步復位和時鐘使能D 觸發器的描述 60
333 基本鎖存器的描述 60
334 含清零控制鎖存器的描述 62
335 實現時序電路的不同表述方式 63
336 4 位二進制加法計數器設計 64
337 計數器更常用的VHDL 表達方式 65
338 設計一個實用計數器 67 339 含同步并行預置功能的8 位移位寄存器設計 69
3310 優先編碼器設計 70
34 VHDL 其他順序語句 71
341 LOOP 循環語句 72
342 NEXT 語句 72
343 EXIT 語句 73
344 WAIT 語句 74
345 GENERIC 參數定義語句 77
346 REPORT 語句 77
347 斷言語句 78
348 端口數據含1 個數的統計電路模塊設計 80
習題 81
第4 章時序仿真與硬件實現 83
41 代碼編輯輸入和系統編譯 83
411 編輯和輸入設計文件 83
412 創建工程 84
413 約束項目設置 85
414 全程綜合與編譯 87
415 RTL 圖觀察器應用 88
42 時序仿真 89
43 硬件測試 91
431 引腳鎖定 92
432 編譯文件下載 93
433 通過JTAG 口對配置芯片進行間接編程 95
434 USB-Blaster 驅動程序安裝方法 96
44 電路原理圖設計流程 96
441 設計一個半加器 96
442 完成全加器頂層設計 98
443 對全加器進行時序仿真和硬件測試 99
45 利用屬性表述實現引腳鎖定 100
46 SignalTap II 的用法 101
47 編輯SignalTap II 的觸發信號 106
48 安裝Quartus II 131 說明 106
習題 111
實驗與設計 112
實驗4-1 多路選擇器設計實驗 112
實驗4-2 十六進制7 段數碼顯示譯碼器設計 112
實驗4-3 應用宏模塊設計數字頻率計 114
實驗4-4 計數器設計實驗 117實驗4-5 數碼掃描顯示電路設計 118
實驗4-6 硬件消抖動電路設計 118
實驗4-7 串行靜態顯示控制電路設計 119
第5 章并行語句 121
51 并行信號賦值語句 121
511 簡單信號賦值語句 121
512 條件信號賦值語句 122
513 選擇信號賦值語句 123
514 塊語句 124
515 元件例化語句 124
516 例化語句應用示例 125
517 生成語句 127
518 GENERIC 參數傳遞映射語句及其使用方法 129
519 數據類型定義語句 131
5110 VHDL 的存儲器描述 134
5111 信號屬性及屬性函數 136
52 VHDL 運算操作符 138
521 邏輯操作符 138
522 關系操作符 140
523 算術操作符 141
524 省略賦值操作符 144
53 keep 屬性應用 145
54 SignalProbe 使用方法 146
習題 148
實驗與設計 149
實驗5-1 8 位加法器設計實驗 149
實驗5-2 高速硬件除法器設計 149
實驗5-3 移位相加型8 位硬件乘法器設計
150
實驗5-4 基于VHDL 代碼的頻率計設計 150
實驗5-5 VGA 彩條信號顯示控制電路設計 152
實驗5-6 不同類型的移位寄存器設計實驗 156
第6 章 LPM宏模塊使用方法 157
61 調用計數器宏模塊示例 157
611 計數器LPM 模塊文本代碼的調用 157
612 LPM 計數器代碼與參數傳遞語句應用 159
613 創建工程與仿真測試 160
62 利用屬性控制乘法器構建的示例 161
63 LPM_RAM 宏模塊用法 162
631 初始化文件及其生成 162 632 LPM_RAM 的設置與調用 164
633 測試LPM_RAM 166
634 用VHDL 代碼描述存儲器以及用初始化文件加載表述 166
64 LPM_ROM 使用示例 168
641 簡易正弦信號發生器設計 168
642 正弦信號發生器硬件實現和測試 169
65 在系統存儲器數據讀寫編輯器應用 171
66 LPM 嵌入式鎖相環調用 172
661 建立嵌入式鎖相環元件 172
662 測試鎖相環 175
67 In-System Sources and Probes Editor 用法 175
68 DDS 實現原理與應用 178
681 DDS 原理 178
682 DDS 信號發生器設計示例 180
習題 181
實驗與設計 181
實驗6-1 查表式硬件運算器設計 181
實驗6-2 正弦信號發生器設計 182
實驗6-3 簡易邏輯分析儀設計 182
實驗6-4 DDS 正弦信號發生器設計 183
實驗6-5 移相信號發生器設計 184
實驗6-6 VGA 簡單圖像顯示控制模塊設計 185
實驗6-7 AM 幅度調制信號發生器設計 186
第7 章 VHDL 設計深入 188
71 進程中的信號賦值與變量賦值 188
72 含高阻輸出的電路設計 192
721 三態門設計 192
722 雙向端口的設計方法 193
723 三態總線電路設計 195
73 資源優化 196
731 資源共享 197
732 邏輯優化 198
733 串行化 199
74 速度優化 200
741 流水線設計 201
742 關鍵路徑法 203
75 仿真延時 204
751 固有延時 204
752 傳輸延時 205 753 仿真 205
習題 206
實驗與設計 207
實驗7-1 4X4 陣列鍵盤鍵信號檢測電路設計 207
實驗7-2 樂曲硬件演奏電路設計 207
實驗7-3 PS2 鍵盤控制模型電子琴電路設計 210
實驗7-4 直流電機綜合測控系統設計 213
實驗7-5 VGA 動畫圖像顯示控制電路設計 215
第8 章狀態機設計技術 216
81 VHDL 狀態機的一般形式 216
811 狀態機的特點與優勢 216
812 VHDL 狀態機的一般結構 217
813 狀態機設計初始約束與表述 220
82 Moore 型狀態機的設計 221
821 多進程狀態機 222
822 序列檢測器之狀態機設計 225
83 Mealy 型狀態機的設計 226
84 狀態編碼 230
841 直接輸出型編碼 230
842 順序編碼 232
843 一位熱碼狀態編碼 232
844 狀態編碼設置 233
85 安全狀態機設計 234
851 程序直接導引法 235
852 狀態編碼監測法 235
853 借助EDA 優化控制工具生成安全狀態機 236
習題 236
實驗與設計 236
實驗8-1 序列檢測器設計 236
實驗8-2 并行ADC 采樣控制電路實現與硬件驗證 237
實驗8-3 數據采集模塊設計 238
實驗8-4 五功能智能邏輯筆設計 239
實驗8-5 串行ADC/DAC 采樣或信號輸出控制電路設計 240
第9 章 16 位CPU 創新設計 241
91 KX9016 的結構與特色 241
92 KX9016 基本硬件系統設計 244
921 單步節拍發生模塊 244
922 運算器 244
923 比較器 245 924 基本寄存器與寄存器陣列組 246
925 移位器 250
926 程序與數據存儲器 251
93 KX9016v1 指令系統設計 251
931 指令格式 251
932 指令操作碼 252
933 軟件程序設計實例 254
934 KX9016 v1 控制器設計 255
935 指令設計實例詳解 259
94 KX9016 的時序仿真與硬件測試 260
941 時序仿真與指令執行波形分析 260
942 CPU 工作情況的硬件測試 262
95 KX9016 應用程序設計實例和系統優化 264
951 乘法算法及其硬件實現 264
952 除法算法及其硬件實現 265
953 KX9016v1 的硬件系統優化 266
習題 267
實驗與設計 268
實驗9-1 16 位CPU 驗證性設計綜合實驗 268
實驗9-2 新指令設計及程序測試實驗 268
實驗9-3 16 位CPU 的優化設計與創新 269
第10 章 VHDL 仿真和語句補充 271
101 VHDL 仿真流程 272
102 VHDL 測試基準實例 274
103 VHDL Test Bench 測試流程 276
104 VHDL 子程序 278
1041 函數 278
1042 重載函數 281
1043 決斷函數 283
1044 過程 284
1045 重載過程 286
1046 子程序調用語句 286
1047 RETURN 語句 288
1048 并行過程調用語句 289
105 VHDL 程序包 291
習題 293
實驗與設計 294
實驗10-1 在ModelSim 上對VHDL Test Bench 進行仿真 294
第11 章 DSP Builder 系統設計方法 295 111 MATLAB/DSP Builder 及其設計流程 295
112 正弦信號發生器設計 297
1121 建立設計模型 298
1122 Simulink 模型仿真 304
1123 SignalCompiler 使用方法 307
1124 使用ModelSim 進行RTL 級仿真 308
1125 使用Quartus II 實現時序仿真 310
1126 硬件測試與硬件實現 310
113 DSP Builder 層次化設計 311
114 基于DSP Builder 的DDS 設計 314
1141 DDS 模塊設計 314
1142 FSK 調制器設計 316
1143 正交信號發生器設計 318
1144 數控移相信號發生器設計 318
1145 幅度調制信號發生器設計 318
115 HIL 硬件測試 320
習題 324
實驗與設計 325
實驗11-1 利用MATLAB/DSP Builder 設計基本電路模塊 325
實驗11-2 基于DSP Builder 的DDS 應用模型設計 326
實驗11-3 HIL 硬件環仿真實驗 327
第12 章 DSP Builder 設計深入 329
121 FIR 數字濾波器設計 329
1211 FIR 濾波器原理 329
1212 使用DSP Builder 設計FIR 濾波器 330
1213 使用MATLAB 的濾波器設計工具 334
1214 使用FIR IP Core 設計FIR 濾波器 340
122 HDL 模塊插入仿真及其設計 343
習題 346
實驗與設計 347
實驗12-1 FIR 數字濾波器設計實驗 347
實驗12-2 調制解調模塊設計實驗 348
實驗12-3 HDL Import 模塊應用實驗 348
附錄A EDA 開發系統及相關電路與表格 349
A1 KX_CDS 系列EDA/SOPC 系統 350
A2 部分實驗擴展模塊 354
A3 mif 文件生成器使用方法 355
A4 核心板FPGA 擴展至KX_CDS 系統對照表 357
A5 多功能重配置結構可切換的部分實驗電路圖 359