《高等院校電子信息科學與工程規劃教材:EDA技術與Verilog HDL(第2版)》系統地介紹了EDA技術和VerilogHDL硬件描述語言,將VerilogHDL的基礎知識、編程技巧和實用方法與實際工程開發技術在先進的EDA設計平臺——QuartusII上很好地結合起來,使讀者通過《高等院校電子信息科學與工程規劃教材:EDA技術與Verilog HDL(第2版)》的學習能迅速了解并掌握EDA技術的基本理論和工程開發實用技術,為后續的深入學習和發展打下堅實的理論與實踐基礎。
作者依據高校課堂教學和實驗操作的規律與要求,并以提高學生的實際工程設計能力和自主創新能力為目的,恰當編排了全書內容。全書共分為7個部分:EDA技術的概述、VerilogHDL語法知識及其實用技術、QuartusII及LPM宏模塊的詳細使用方法、基于Verilog的有限狀態機設計技術、基于Verilog的16位實用CPU設計技術及創新實踐項目、基于ModelSim的TestBench仿真技術,以及基于MATLAB和DSPBuilder平臺的EDA設計技術及大量實用系統設計示例。除個別章節外,其余各章都安排了相應的習題和大量針對性強的實驗與設計項目。書中列舉的VerilogHDL示例都經編譯通過或經硬件測試通過。
《高等院校電子信息科學與工程規劃教材:EDA技術與Verilog HDL(第2版)》主要面向高等院校本、專科的EDA技術和VerilogHDL語言基礎課,推薦作為電子工程、通信、工業自動化、計算機應用技術、電子對抗、儀器儀表、數字信號或圖像處理等學科專業和相關實驗指導課的教材用書或主要參考書,同時也可作為電子設計競賽、FPGA開發應用的自學參考書。
與此教材配套的還有CAI教學課件、實驗指導課件、實驗源程序和實驗設計項目相關的詳細技術資料等,讀者都可免費索取。
與第1版相比,新版的內容與結構都有了較大變化,主要表現在以下幾個方面。
(1)為了突出重點、精簡篇幅,將有關EDA技術、硬件描述語言導言的內容、EDA工具基本知識及FPGA與CPLD結構原理等基本概念的內容都放在了第1章。
(2)對硬件描述語言的講述,改用了比較系統和循序漸進的講述方法,確保了HDL基本內容的完整性和系統性。為了便于理解和提高學習效率,給出了大量有針對性的HDL設計示例。這部分內容主要包括在第2、第3和第5章中。
(3)為了能使讀者盡快學到HDL知識并付諸實踐,更好地從結合工程實際的層面來檢驗學習效果,本書在較早階段就安排了對應的硬件設計技術的學習和豐富的實驗內容,同時將HDL知識的學習有機地融入了實踐中。這部分內容主要包括在第4和第6章中。
(4)第7章主要對之前章節內容進行了歸納綜合,期待為后續的學習奠定更堅實的基礎。其中許多內容是新加入的。
(5)第8章的內容有所擴充,主要是圍繞有限狀態機的設計,介紹了更為實用的EDA技術和HDL編程設計方法,其中增加了許多新的、更貼近工程實際的狀態機設計與應用方面的實用知識。
(6)第9章的內容基本是新加入的。其中介紹了一個較大的設計項目,即一個有實用意義的16位CPU的設計。這對于之前的理論知識和實踐能力的綜合運用是一個很好的訓練項目,特別是還可以將此章的內容作為一個創新設計競賽項目。這其中首先給出一個完整的CPU設計原型和詳細的設計流程,然后在這個基礎上向參賽者提出不同層次要求的創新設計方案和系統設計。此類教學和實踐內容在國外高等院校同類課程和教材中經常出現。
(7)第10章主要介紹基于ModelSim的Test Bench仿真技術。這部分內容也是新加入的,這主要考慮到Quartus II 10.0后不再支持內置的門級仿真器,而Test Bench仿真技術在EDA技術中更具一般性,適用領域更廣,更實用。
(8)第11和第12章主要介紹基于DSP-Builder和MATLAB/Simulink的EDA技術,其中包括了大量設計示例和對應的實驗。這部分內容主要是面向涉及復雜算法的EDA系統設計,如數字通信領域中的系統功能模塊的設計和高速DSP硬件系統的設計,為EDA技術和復雜數字系統的設計和驗證拓展了更廣闊和更一般的領域,使不同的EDA工具輕易地融為一體,從而強化了各類EDA工具的優勢。隨著Quartus II和DSP-Builder版本的升級,這部分內容也有很大的變化和擴充,本書對原有的內容做了更新。
與本書的Verilog HDL內容相對應的VHDL教材是清華大學出版社出版的《EDA技術與VHDL》。
基于工程領域中的EDA技術的巨大實用價值,以及對EDA教學中實踐能力和創新意識培養的極端重視,本書的特色主要體現在如下兩個方面。
1.注重實踐能力和創新能力的培養
在絕大部分章節中都安排了針對性較強的實驗與設計項目,使學生對每一章的課堂教學內容和教學效果能及時通過實驗得以消化和強化,并盡可能地從一開始學習就有機會將理論知識與實踐、自主設計緊密聯系起來。
全書包含數十個實驗及其相關的設計項目,這些項目涉及的EDA工具軟件類型較多、技術領域也較寬、知識涉獵密集、針對性強,而且自主創新意識的啟示性好。與書中的示例相同,所有的實驗項目都通過了EDA工具的仿真測試及FPGA平臺的硬件驗證。每一個實驗項目除給出詳細的實驗目的、實驗原理和實驗報告要求外,都有2~5個子項目或子任務。它們通常分為:第一個層次的實驗是與該章某個闡述內容相關的驗證性實驗,并通常提供詳細的且被驗證的設計源程序和實驗方法。學生只需將提供的設計程序輸入計算機,并按要求進行編譯仿真,在實驗系統上實現即可;使學生有一個初步的感性認識,這也提高了實驗的效率;第二個層次的實驗任務是要求在上一實驗基礎上做一些改進和發揮;第三個層次的實驗通常是提出自主設計的要求和任務;第四、第五個實驗層次則是在僅給出一些提示的情況下提出自主創新性設計的要求。因此,教師可以根據學時數、教學實驗的要求以及不同的學生對象,布置不同層次含不同任務的實驗項目。
2.注重教學選材的靈活性和完整性相結合
本教材的結構特點決定了授課學時數可十分靈活,即可長可短,應視具體的專業特點、課程定位及學習者的前期教育程度等因素而定,大致在30~54學時。考慮到EDA技術課程的特質和本教材的特色,具體教學可以是粗放型的,其中多數內容,特別是實踐項目,都可放手讓學生更多地自己去查閱資料、提出問題、解決問題,乃至創新與創造;而授課教師只需做一個啟蒙者、引導者、鼓勵者和學生成果的檢驗者與評判者。授課的過程多數情況只需點到為止,大可不必拘泥細節、面面俱到。但有一個原則,即安排的實驗學時數應多多益善。
事實上,任何一門課程的學時數總是有限的,為了有效增加學生的實踐和自主設計的時間,可以借鑒清華大學的一項教改措施,即其電子系本科生從一入學就每人獲得一塊FPGA實驗開發板,可從本科一年級一直用到研究生畢業。這是因為EDA技術本身就是一個可把全部實驗和設計帶回家的課程。
我校對于這門課程也基本采用了這一措施,即每個上EDA課的同學都可借出一套EDA實驗板,使他們能利用自己的計算機在課余時間完成自主設計項目,強化學習效果。實踐表明,這種安排使得實驗課時得到有效延長,教學成效自然顯著。
我們建議積極鼓勵學生利用課余時間盡可能學完本書的全部內容,掌握本書介紹的所有EDA工具軟件和相關開發手段,并盡可能多地完成本書配置的實驗和設計任務,甚至能參考教材中的要求,安排相關的創新設計競賽,進一步激發同學的學習積極性和主動性,并強化他們的動手能力和自主創新能力的培養。
還有一個問題有必要在此探討,即自主創新能力的培養盡管重要,但對其有效提高絕非一朝一夕之事。多年的教學實踐告訴我們,針對這一問題的教改必須從兩方面入手,一是教學內容,二是設課時間。二者密切聯系,不可偏廢。
前者主要指建立一個內在相關性好、設課時間靈活且易于將創新能力培養寓于知識傳播之中的課程體系。
后者主要指在課程安排的時段上,將這一體系的課程盡可能地提前。這一舉措是成功的關鍵,因為我們不可能到了本科三、四年級才去關注能力培養,并期待奇跡發生,更不可能指望一兩門課程就能解決問題。
尤其是以卓越工程師為培養目標的工科高等教育,自主創新能力的培養本身就是一項教學雙方必須投入密集實踐和探索的創新活動。我校的EDA技術國家級精品課程正是針對這一教改目標建立的課程體系,而“數字電子技術基礎”是這一體系的組成部分和先導課程。它的提前設課是整個課程體系提前的必要條件。
通過數年的試點教學實踐和經驗總結,現已成功在部分本科學生中將此課程的設課時間從原來的第四或第五學期提前到了第一或第二學期。而這一體系的其他相關課程,如EDA技術、單片機(相關教材是清華大學出版社的《單片機原理與應用技術》,潘明、黃繼業等編著)、SOC片上系統、計算機接口、嵌入式系統和DSP等也相應提前,從而使學生到本科二年級時就具備了培養工程實踐和自主開發能力的條件了。
不可否認,數字電路課程的大幅提前必須要以其教學內容改革為前提,否則將傳統的教學內容強行提前必將歸于失敗。為此,在總結了數字電路多年教改成果的基礎上,我們推出了適應新需求的教材,即電子工業出版社出版的《實用數字電子技術基礎》一書。此書創新性地解決了傳統教材中的手工數字技術與現代自動化數字技術間的關系,使此二者能平穩過渡且有機融合,在有效促進理論與實踐緊密結合的同時,強化實踐訓練,突顯了創新意識啟蒙的良好效果,同時實現了與后續課程的良好銜接性,很好地適應了當前的教改目標。盡管這一切尚處于我校的局部教學實踐中,但已清晰地展示了諸多頗具說服力的證明。
例如,相比于其他同類情況(如同年級、同專業、同授業課程等),那些曾經參加這一課程體系的同學在大學生電子設計競賽、飛思卡爾車模大賽以及一些國外企業主導的自主設計賽事中,都獲得了更多的獎項和更好的成績。而且這些學生的獲獎比例逐年提高,例如,在2011年我校的全國大學生電子設計競賽的一、二等獎項(分別是3個和6個)的獲獎同學中,本科二年級學生的比例高達80%(同年我校多數本科三年級學生選擇考研復習,未參賽)。若按傳統的工科本科教學流程,二年級學生就有能力獲全國一等獎是不可想象的!
其實,類似的教改活動和教改成績,我校遠非唯一。國內早有不少院校將數字電路放在第一或第二學期,其實踐訓練的內容包括超過數萬至數十萬邏輯門規模的數字系統自主設計訓練,不少受益的學生在各類電子設計競賽中也都獲得了好成績。前面提到的清華大學的教改活動也說明,他們至少有部分學生于本科一年級就有數字系統設計方面的訓練;后來的調研也證明了這一點,如該校計算機專業本科二年級學生就能自主設計出各種極具創新特色的數字系統,如語音處理及數字立體聲播放、硬件超級瑪麗游戲顯示與控制系統等;又如東南大學在一次省級數字電路課程電子設計競賽中,有一組同學完成了指紋識別數字鎖的設計而獲一等獎;再如美國Michigan大學本科一年級學生就能設計數字電子琴這樣的復雜系統,其中包括用FPGA控制VGA顯示五線譜,PS/2鍵盤作為琴鍵及數字立體聲音樂播放等。
另外有兩個問題必須在此說明。
第一是關于本教材對于Quartus II版本選擇的問題。盡管目前Altera早已頒布了Quartus II?12.0,但本教材中示例的說明仍然選擇Quartus II?9.x,這是因為Altera已將Quartus II?10.0及此后版本軟件中曾經一貫內置的門級波形仿真器移除了,并推薦使用接口于Quartus II的ModelSim-Altera仿真器。然而這一舉措對于初學者未必是一個好消息,因為必須承認,Quartus II?9.x及之前版本軟件中一直內置的波形仿真器的易學、高效和便捷的巨大優勢,對于EDA教學和初學者的學習是十分重要的。況且Quartus II?9.x與Quartus II 12.0相比,總體上變化不大,又好在本書在第10章中針對Test Bench仿真,重點介紹了ModelSim-Altera的使用方法。
第二是針對本教材中的實驗和實踐項目所能提供的演示示例原設計文件的問題。本書中多數實驗都能提供經硬件驗證調試好的演示示例原設計,目的是為讀者能順利完成實驗驗證和設計;有的示例的目的是希望能啟發或引導讀者完成更有創意的設計,其中一些示例盡管看上去頗有創意,但都不能說是最佳或最終結果,這給讀者留有許多改進和發揮的余地。此外還有少數示例無法提供源代碼(只能提供演示文件),是考慮到本書作者以外的設計者的著作權,但這些示例仍能在設計的可行性、創意和創新方面給讀者以寶貴的啟示。所有與此教材相關的設計示例和實驗項目的原設計程序和工程項目(包括第9章的CPU設計和第11、第12章基于DSP-Builder/MATLAB的設計)都可瀏覽相關網址或與作者聯系而免費索取。
為了盡可能降低本書的成本和售價,就不再配置光盤了。與本書相關的其他資料,包括本書的配套課件、實驗示例源程序資料、相關設計項目的參考資料和附錄中提到的mif文件編輯生成軟件等文件資料都可免費索取;此外對于一些與本教材相關的工具軟件,包括Quartus II、Synplify Pro、ModelSim-Atera和DSP-Builder/MATLAB等EDA軟件的安裝使用問題都可咨詢www.kx-soc.com,或與作者探討(pmr123@sina.cn);或直接與出版社聯系(主要是索取教學課件)。
為了本書的順利出版,杭州康芯公司的高級工程師姜兆剛先生在IP核的應用、大量實驗設計項目的驗證和各種EDA軟件工具的安裝調試等方面完成了大量的和無可替代的工作,在此表示誠摯的謝意!
清華大學出版社的網址和聯系方式是:www.tup.com.cn,zzfangcn@vip.163.com。
編 者
于杭州電子科技大學
第1章 EDA技術概述
1.1 EDA技術
1.2 EDA技術應用對象
1.3 常用HDL和Verilog HDL
1.4 EDA技術的優勢
1.5 面向FPGA的EDA開發流程
1.5.1 設計輸入
1.5.2 綜合
1.5.3 適配(布線布局)
1.5.4 仿真
1.5.5 RTL描述
1.6 可編程邏輯器件
1.6.1 PLD的分類
1.6.2 PROM可編程原理
1.6.3 GAL
1.7 CPLD的結構與可編程原理
1.8 FPGA的結構與工作原理
1.8.1 查找表邏輯結構
1.8.2 Cyclonelll系列器件的結構原理
1.9 硬件測試技術
1.9.1 內部邏輯測試
1.9.2 JTAG邊界掃描測試
1.10 編程與配置
1.11 Quartus Ⅱ
1.12 IP核
1.13 EDA的發展趨勢
習題
第2章 Verilog程序結構與數據類型
2.1 Verilog程序結構
2.1.1 Verilog的模塊的表達方式
2.1.2 Verilog模塊的端口信號名和端口模式
2.1.3 Verilog信號類型定義
2.1.4 Verilog模塊功能描述
2.2 Verilog數據類型
2.2.1 net網線類型
2.2.2 wire網線型變量的定義方法
2.2.3 register寄存器類型
2.2.4 reg寄存器型變量的定義方法
2.2.5 integer整數型寄存器類型變量定義方法
2.2.6 存儲器類型
2.3 Verilog基本要素與文字規則
2.3.1 Verilog的4種邏輯狀態
2.3.2 Verilog的數字表達形式
2.3.3 數據類型表示方式
2.3.4 常量
2.3.5 標識符、關鍵詞及其他文字規則
2.3.6 參數定義關鍵詞parameter和localparam的用法
習題
第3章 Verilog行為語句
3.1 過程語句
3.1.1 always語句
3.1.2 always語句在D觸發器設計中的應用
3.1.3 多過程應用與異步時序電路設計
3.1.4 簡單加法計數器及其Verilog表述
3.1.5 initial語句
3.2 塊語句
3.3 case條件語句
3.4 if祭件語句
3.4.1 if語句的一般表述形式
3.4.2 基于if語句的組合電路設計
3.4.3 基于if語句的時序電路設計
3.4.4 含異步復位和時鐘使能的D觸發器的設計
3.4.5 含同步復位控制的D觸發器的設計
3.4.6 含清零控制的鎖存器的設計
3.4.7 時鐘過程表述的特點和規律
3.4.8 實用加法計數器設計
3.4.9 含同步預置功能的移位寄存器設計
3.4.10 關注if語句中的條件指示
……
第4章 時序仿真與硬件實現
第5章 Verilog運算符與結構描述語句
第6章 LPM宏模塊的應用
第7章 Verilog設計深入
第8章 Verilog狀態機設計技術
第9章 基于Verilog的實用CPU創新設計
第10章 Verilog Test Bench仿真
第11章 DSP Builder設計初步
第12章 DSP Bu.lder設計深入