本書是為本科生和研究生撰寫的教材,主要講述了VHDL的全部特征,也包含了有關數字系統(tǒng)設計的知識。全書共分為13章,內容包括電子設計自動化工具的使用、CMOS和可編程邏輯工藝,布爾代數和組合邏輯設計的基本原則,各種建模的技術,有限狀態(tài)機的設計,以及三個重要的可測試性設計:掃描路徑、內置自檢和邊界掃描等。最后介紹了VHDL-AMS和混合信號建模。本書與前一版相比的不同之處是在相關章節(jié)中包含了寫測試基準的小節(jié),同時增加了有關VHDL-AMS和混合信號建模的一章。本書可用做大學電子、電氣和計算機專業(yè)本科生、碩士生的教材,也可用做相關工程技術人員的參考書。前言關于本書當本書第一版出版時,寫一本結合VHDL和數字設計的書似乎是新穎的想法。就在這時,幾本相近主題的書出版了。本書現在已被幾所大學用做教材。此外,本書第一版已被翻譯為波蘭語并在中華人民共和國出版了英文影印本。這些使我確信寫一本結合VHDL和數字系統(tǒng)設計的書的想法是很好的,但是我不能確定第一版是否完美。本版(也就是第二版)修改了一些到目前為止所發(fā)現的前一版中的錯誤并增加了兩個重要的主題(這些將在后面說明)。本書是作為本科生和研究生所用的教材編寫的。大多數講述VHDL的圖書以工程師作為對象,因此,并不講述VHDL的全部特征。同樣,本書所包含的有關數字系統(tǒng)設計方面的內容在其他典型的VHDL書中也不會涉及。在不同的國家、大學或者學院,電氣、電子和計算機工程學位的教學大綱有很大的不同。本書的內容是通過數屆二年級、三年級本科生和研究生的教學和使用發(fā)展而來的。我們假設學生對布爾代數和組合邏輯設計的原則非常熟悉。在南安普敦大學,一年級本科生的教學大綱也包括了同步時序設計和可編程邏輯的介紹。因此本書是建立在這些基礎上的。過去我們經常認為像VHDL這樣的專題對于二年級的教學來說太專業(yè)化,最好能在本科最后一年講述或者作為研究生課程。有幾個很好的原因使得我們應該在課程計劃中更早地介紹VHDL。隨著集成電路復雜度的增加,工業(yè)的發(fā)展要求畢業(yè)生具有VHDL以及相關設計工具的知識。如果將上述課程放在本科生的最后一年,學生只有很少、甚至沒有時間來將知識應用到實際工作中去。第二,從與其他國家同行的交流中可知,現在的學生在電氣或電子工程以及計算機科學或計算機工程的選擇上,都更傾向于后者。VHDL在硬件設計方面給計算機方向的學生提供了一個很好的方法。最后,仿真和綜合工具目前比較成熟,在教學中使用PC機構建的工作平臺也相對比較便宜和容易獲得。第二版中的變化現在看來,前一版的錯誤是在大多數的例子中用std_ulogic代替了std_logic。從純教學的觀點來看,這個決定是正確的,因為這樣的用法會清楚地在仿真中指出什么時候塊的輸出被不經意地連在一起。從實用的觀點來看,這樣的用法與大多數業(yè)界的實際使用不一致,并可能在EDA(electronicdesignautomation)工具中導致一些問題。所有的例題已經修正為使用std_logic,好幾個例題也被簡化了(例如,通過使用直接實例化來簡化)。在第一版出版時,有一些EDA工具只支持VHDL1987標準?,F在這種情況有了大的改變,因此筆者在第二版中傾向于優(yōu)先使用新的1993標準。當然也有一個22的修訂版。雖然在本書寫作時幾乎沒有工具支持新的標準,但標準的變化很小并且只在附錄C中討論了重大的變化(共享變量的形式)。雖然筆者也反對堅持使用IEEEnumeric_std包(與std_logic_arith對立的包)的傾向,但是業(yè)已證明筆者選擇的正確性。所增加的兩個主要內容有兩種形式。第一,有幾個章節(jié)現在包括了寫測試基準的小節(jié)。通過仿真驗證VHDL模型對于生產正確的硬件是不可缺少的。據可靠估計,至少一半的VHDL是為了驗證模型的某種形式而編寫的測試基準。因為這方面是如此重要,所以這些資料已經包括在需要它們的章節(jié)中,而沒有單獨的一個有關測試基準的章節(jié)。筆者強烈建議讀者用文本仿真模型,并使用這些測試基準的例子以得到幫助。第二,新增了有關VHDL-AMS和混合信號建模的一章。所有的數字設備硬件不得不和“真實”世界在某一個方面相互影響。雖然混合信號仿真器已經存在了15年,但是它們的使用因為在數字部分和模擬部分之間書寫接口模塊的困難而受到限制。VHDL-AMS集成這兩個世界并提供了幾個混合信號仿真器。這一章并不是想要成為在轉換設計方面的一個全面的指導,也沒有描述VHDL-AMS的所有細節(jié),但是筆者希望它將會鼓勵設計者嘗試將他們的系統(tǒng)作為一個整體來建模。本書的結構第1章介紹了本書的一些概念,即電子設計自動化工具的使用、CMOS和可編程邏輯工藝。我們也考慮了一些工程問題,像噪聲容限和扇出。在第2章,我們回顧了一下布爾代數和組合邏輯設計的基本原則。我們也將討論時序和冒險相關的問題,以及一些數據表示的基本技巧。第3章通過基本邏輯門模型介紹VHDL,強調了一些重要文檔代碼。我們將展示怎樣構造基本門的網表以及怎樣通過門模擬延時。我們也將討論參數化的模塊、常量和未連接的輸入、輸出。通過使用測試基準介紹用VHDL驗證VHDL模塊的設計觀念。最后,我們簡要介紹一下配置的概念。第4章描述了各種建模的技術。組合邏輯塊、緩沖、編碼器、解碼器、多路選擇器、加法器和奇偶檢查器都用一定的并行和順序VHDL代碼結構進行了建模。本章、第5章、第6章和第7章中我們仍將從設計原則、可綜合方面介紹硬件的VHDL模型,雖然到底什么樣的模型和設計才可以支持這些特性的討論推遲到第9章才會介紹。另外,我們也將介紹IEEE相關符號。第5章可能是全書最重要的章節(jié)。在此我們將討論被認為是數字系統(tǒng)設計的基石:有限狀態(tài)機的設計。我們使用了ASM圖表符號,描述了從ASM圖表符號到D觸發(fā)器、次態(tài)和輸出邏輯的設計過程。介紹了狀態(tài)機的VHDL模型。第6章介紹了各種時序構件塊:鎖存器、觸發(fā)器、寄存器、計數器、存儲器和一個時序乘法器。對IEEE相關符號、測試基準設計,以及VHDL代碼結構的引入,我們使用與第4章一樣的格式。第7章把前面三章介紹的概念組合起來。ASM圖標符號被擴展到包括兩個狀態(tài)機和寄存器的輸出,因此有了數據通路控制器的劃分。從這里,我們用硬件術語解釋了指令集的思想,并進一步用VHDL對一個非常簡單的微處理器建模。這也提供了介紹VHDL子程序和包的方法。VHDL仍然是一個建模語言。第8章描述了一個VHDL仿真器的操作。最先介紹事件驅動仿真的思想,同時討論VHDL仿真器的特性。雖然整個VHDL語言都能被仿真,但是某些結構體的仿真效率高于其他的結構體;因此,在此我們也討論如何編寫更加高效的模塊。因為文件操作只適合于仿真模塊,所以在本章也對之加以討論。另外,就像我們在第9章中討論的,VHDL作為描述可綜合模型的語言的作用將越來越重要?,F在主要的綜合工具的類型是針對RTL級別的綜合。這樣的工具能從VHDL模塊描述中推理出需要哪些觸發(fā)器和鎖存器。我們描述了這樣的結構體。相反,如果語言描述得非常差,那么可能會錯誤地建立觸發(fā)器。我們也描述了一些常見的陷阱。綜合進程能被一些約束條件控制,因為這些約束條件不屬于VHDL語言,所以我們使用普通的術語來討論。我們討論了一些適合于FPGA綜合的結構體。最后,我們簡單地考察一下有希望成為一項重要設計技術的行為級綜合。第1章和第11章關注測試和可測試性設計的主題。這個領域過去經常被忽略,但是現在大家已經認識到測試是設計過程中很重要的一部分。第1章介紹了故障模型化的思想,接著介紹測試生成方法。測試的效率由故障仿真來決定。在寫作本書時,市場上還沒有商業(yè)化的基于VHDL的故障仿真器。這一章的最后一部分展示什么樣的故障模型和故障仿真能使用標準的VHDL仿真器來執(zhí)行。本章的VHDL代碼也介紹指針和全局變量等結構。在第11章中,我們描述了三個重要的可測試性設計:掃描路徑、內置自檢(BIST,built-inself-test)和邊界掃描。雖然這些一直是非??菰锏念}目,但是可以使用VHDL仿真器展示一個內置自檢(BIST)結構怎樣為無故障電路和故障電路生成不同的特征值。邊界掃描使用一個VHDL的子集來描述在芯片上使用的測試結構。本書給出了一個例子。在第12章中,我們使用VHDL作為工具來研究和探索異步時序電路中的不規(guī)則行為。雖然主要的設計模式是同步并發(fā)模式,但是由同步電路組成的數字系統(tǒng)大量增加了彼此之間的異步通信。我們介紹了基本模式的概念并說明了怎樣分析和設計異步電路。我們使用VHDL仿真功能來說明冒險問題、競爭問題、建立和保持時間違法問題。我們也將討論亞穩(wěn)性的問題。最后一章介紹了VHDL-AMS和混合信號建模。簡要介紹了數模轉換器(DAC)和模數轉換器(ADC),給出了用VHDL-AMS結構來對這些轉換的建模。我們也在此介紹鎖相環(huán)(PLL)的思想,并給出一個簡單的混合信號模型。本書后面有三個附錄。附錄A列出了各種VHDL相關的標準和未來VHDL發(fā)展的一些問題。附錄B簡要描述了Verilog硬件描述語言。Verilog是相對于VHDL的另一個主要選擇,兩者非常相似。附錄C涵蓋了一些共享變量的說明,特別是在1993版和22版之間的區(qū)別。在每一章的末尾都有一定數量的習題。這些習題都是一些將該章所涉及的指令恰當運用而形成的可綜合的VHDL例子。為了執(zhí)行這些模擬仿真和綜合的任務,讀者可能不得不寫出自己的測試基準和約束文件。這些例子都能夠在“Web資源”一節(jié)中提供的網站上找到。怎樣使用本書很明顯,本書根據課程級別的不同可以有很多種使用方法。在南安普敦大學,筆者像下面這樣使用本書。電子工程和計算機工程系二年級學生第1章和第2章是復習內容,我們希望學生能夠獨立閱讀。講義中應該包括書中第3章~第7章的內容。其中的某些章節(jié)是可選的,例如3.8節(jié)、6.3節(jié)和6.7節(jié)。另外,如果時間緊張,某些結構體,例如withselect結構,可以省略。但是講稿中應該包括1.2節(jié)的單一固定故障模型、1.3節(jié)的測試原型生成的基本原則與11.2節(jié)中所講述的掃描設計的基本原則等內容。電子工程和計算機工程系三年級學生我們希望學生能獨立閱讀第3章到第7章的內容。講義中應該包括書中第8章~第12章的內容。第13章、VHDL-AMS現在包括在四年級學生的課程中。在整個學習過程中,學生需要能夠掌握VHDL仿真器和RTL綜合工具,從而能學習和使用書中的例子。在二年級學生的課程中,一組包括在FPGA中進行綜合的設計習題是對本書內容的非常好的補充。在南安普敦大學的三年級課程中,所有學生都要做一個獨立的項目。本書沒有安排其他正式的實驗課程,一些獨立的項目將包括VHDL語言的使用。Web資源本書配套的網站為www.booksites.net/Zwolinski。該網站提供了有價值的教學與自學材料,如書中所有的VHDL示例,以及至VHDL工具的鏈接。