關(guān)于我們
書單推薦
新書推薦
|
數(shù)字設(shè)計(jì):原理與實(shí)踐(英文版 第5版)
本書是數(shù)字設(shè)計(jì)領(lǐng)域的經(jīng)典教材,是作者牢固的理論功底、嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)風(fēng)范與豐富的實(shí)踐經(jīng)驗(yàn)的完美融合。原理方面涵蓋高級(HDL)、低級(電子電路)以及“廣泛中間級”(門電路、觸發(fā)器和一些較高級的數(shù)字設(shè)計(jì)構(gòu)件)的多層次基礎(chǔ)知識,更加方便不同專業(yè)的教學(xué)內(nèi)容選;實(shí)踐方面專注于Verilog一種實(shí)現(xiàn)語言,強(qiáng)調(diào)基于FPGA的設(shè)計(jì),并且添加了更多應(yīng)用實(shí)例。
前言
本書寫給所有需要設(shè)計(jì)和構(gòu)建真正的數(shù)字電路的讀者。為達(dá)到這個(gè)目的,讀者必須掌握數(shù)字電路的基本原理,同時(shí)理解它們在真實(shí)世界中是如何運(yùn)轉(zhuǎn)的。正是基于這一理念,我們選取了“原理與實(shí)踐”這兩大主題。 在過去的30年里,隨著集成電路的速度和集成度的快速提高,數(shù)字設(shè)計(jì)實(shí)踐經(jīng)歷了重大轉(zhuǎn)變。過去,數(shù)字設(shè)計(jì)者用成千甚至上萬的門電路和觸發(fā)器來構(gòu)建系統(tǒng),因此專業(yè)課程的重點(diǎn)就是如何最小化和有效地利用芯片及板級資源。 今天,一個(gè)芯片可以包含幾千萬個(gè)晶體管,并且可以通過編程來構(gòu)建片上系統(tǒng)。過去要實(shí)現(xiàn)這樣的系統(tǒng),需要用幾百個(gè)包含上百萬單個(gè)門電路和觸發(fā)器的分立芯片。如今,產(chǎn)品開發(fā)能否成功更多地取決于設(shè)計(jì)團(tuán)隊(duì)正確、完整地定義產(chǎn)品詳細(xì)功能的能力,而不是將需要的所有電路集成到一塊電路板或芯片上的能力。因此,現(xiàn)代專業(yè)課程的重點(diǎn)是設(shè)計(jì)方法論和軟件工具,包括硬件描述語言(HDL)。設(shè)計(jì)團(tuán)隊(duì)利用HDL便可以完成超大型分層數(shù)字系統(tǒng)的設(shè)計(jì)。 借助HDL,一方面可以看到典型設(shè)計(jì)的抽象層次變得更高,超越了單個(gè)門電路和觸發(fā)器的層次。但與此同時(shí),芯片級和電路板級數(shù)字電路的速度和集成度的提高,也迫使設(shè)計(jì)者必須在較低的電子電路級提升競爭力。 大多數(shù)優(yōu)秀的數(shù)字設(shè)計(jì)師都精通或者至少熟悉上述兩個(gè)抽象層次。本書提供了高級(HDL)、低級(電子電路)以及“廣泛中間級”(門電路、觸發(fā)器和一些較高級的數(shù)字設(shè)計(jì)構(gòu)件)的多層次基礎(chǔ)知識。 目標(biāo)讀者本書可以作為電氣工程、計(jì)算機(jī)工程或計(jì)算機(jī)科學(xué)專業(yè)數(shù)字邏輯設(shè)計(jì)課程的入門教材或中級教材。對于計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生,如果不熟悉基本電子學(xué)概念或者對數(shù)字器件的電氣特性不感興趣,可以跳過第14章,書中其他章節(jié)基本上都不需要這一章內(nèi)容作為預(yù)備知識。另一方面,具有基本電子學(xué)基礎(chǔ)的讀者,則可通過閱讀第14章來快速掌握數(shù)字電子學(xué)知識。 雖然本書是入門級的,但卻比普通的入門教材包含更多內(nèi)容。我希望常規(guī)課程采用書中不超過三分之二的材料,但是,每門課程所用到的是不同的三分之二。因此,請各位教師或讀者按照自己的需要決定閱讀內(nèi)容。為了幫助大家做選擇,我已經(jīng)在可選章節(jié)的標(biāo)題上打了星號。一般情況下,可以跳過這些章節(jié)而不影響后續(xù)必選章節(jié)的內(nèi)容連貫性。此外,矩形文本框(如下所示)中的材料也是可以跳過的。 這是一個(gè)簡單一些讀者抱怨之前的版本太厚了,我縮減了這一版的篇幅,但依然要提醒大家注意: 的文本框示例不必一字不落地讀完所有內(nèi)容,打星號的章節(jié)都可以略過。 寫在這種框里的內(nèi)容通常也可以略過。 我要求出版社調(diào)大了字號(本書采用11磅字,而大部分科技類教材都采用10磅字),這樣不僅閱讀起來更加舒服,而且圖表的位置也更加合理。隨手翻開一頁,你會(huì)發(fā)現(xiàn)大部分圖表和對圖表內(nèi)容的講解都位于同一頁。(我親自做的排版工作,著實(shí)花了一番心血。)本書的主題非常全面,在學(xué)習(xí)后續(xù)課程時(shí),你可以再回頭翻看相關(guān)知識點(diǎn),甚至參加工作后,依然能從書里學(xué)到新東西。不過,教科書總會(huì)過時(shí),難逃被丟進(jìn)垃圾桶的厄運(yùn),但也有些“幸運(yùn)兒”成了書架上的藏品,它的命運(yùn)最終將系于讀者之手。 有些課程會(huì)把本書當(dāng)作中級教程或?qū)嶒?yàn)課本來使用。高年級學(xué)生可以跳過基礎(chǔ)內(nèi)容而直接進(jìn)入感興趣的章節(jié)。一旦掌握了基礎(chǔ)知識,你會(huì)發(fā)現(xiàn)Verilog數(shù)字設(shè)計(jì)實(shí)例中包含更多重要的和有趣的知識。 建議讀者好好利用貫穿全書的頁邊注釋,這將幫助你把握重要的定義和知識點(diǎn)。 各章內(nèi)容概述接下來簡短介紹一下本書15章的主要內(nèi)容。這可能會(huì)讓你想起一般軟件指南中所說的,“寫給不喜歡閱讀手冊的人”?催^這部分后,也許你就不必閱讀本書的剩余內(nèi)容了。 第1章給出了一些基本定義和重要主題的預(yù)覽,還有一點(diǎn)關(guān)于數(shù)字電路的內(nèi)容,使讀者在不深入閱讀第14章的情況下可以順利學(xué)習(xí)其他內(nèi)容。 第2章介紹二進(jìn)制數(shù)制和編碼。在軟件課程中已經(jīng)熟悉二進(jìn)制數(shù)制的讀者,仍需要閱讀2.10~2.13節(jié),以便理解硬件是如何使用二進(jìn)制編碼的。高年級學(xué)生可以閱讀2.14節(jié)和2.15節(jié),其中清楚地介紹了檢錯(cuò)碼。每個(gè)讀者都應(yīng)該閱讀2.16.1節(jié),因?yàn)樵谠S多現(xiàn)代系統(tǒng)中都要用到它。 第3章講解組合邏輯設(shè)計(jì)原理,包括開關(guān)代數(shù)、組合電路分析、綜合與最小化。 第4章從文檔標(biāo)準(zhǔn)開始介紹各種數(shù)字設(shè)計(jì)實(shí)踐,文檔標(biāo)準(zhǔn)可能是設(shè)計(jì)者開始實(shí)踐時(shí)的第一步,也是很重要的一步。然后介紹定時(shí)的概念,特別是組合電路的定時(shí),最后以關(guān)于HDL、設(shè)計(jì)流程和工具的討論結(jié)束。 第5章是關(guān)于Verilog的教程和參考資料,Verilog是本書剩余部分所采用的硬件描述語言。所有讀者都應(yīng)該閱讀前幾節(jié)內(nèi)容,但是部分讀者可能希望跳過其余內(nèi)容,直到需要時(shí)再開始閱讀。這也是沒問題的,因?yàn)樾碌腣erilog結(jié)構(gòu)集中在后續(xù)章節(jié)(主要是第6章),第一次用到時(shí)才會(huì)進(jìn)行講述。 第6章描述了兩個(gè)通用的組合構(gòu)件ROM和PLD。然后介紹兩個(gè)最常用的功能構(gòu)件—譯碼器和多路復(fù)用器,每一個(gè)都會(huì)給出門級和基于Verilog的設(shè)計(jì)。讀者可以從這里直接跳到第9章的狀態(tài)機(jī),然后再回到第7章和第8章。 第7章繼續(xù)討論門級和用Verilog實(shí)現(xiàn)的組合構(gòu)件,包括三態(tài)器件、優(yōu)先編碼器、異或門和奇偶函數(shù)以及比較器,然后用一個(gè)非平凡“隨機(jī)邏輯”函數(shù)的Verilog設(shè)計(jì)實(shí)例引出結(jié)論。 第8章討論實(shí)現(xiàn)算術(shù)功能的組合電路,包括加法和減法、移位、乘法和除法。 第9章介紹使用D觸發(fā)器的傳統(tǒng)狀態(tài)機(jī),包括采用狀態(tài)表、狀態(tài)圖、ASM圖和Verilog的狀態(tài)機(jī)的分析和綜合。 第10章介紹其他時(shí)序元件,包括鎖存器、邊沿觸發(fā)器件及其Verilog行為模型。這一章還描述了用典型的FPGA實(shí)現(xiàn)的時(shí)序元件,并為感興趣的讀者準(zhǔn)備了關(guān)于時(shí)序型PLD和反饋時(shí)序電路的章節(jié)。 第11章重點(diǎn)講解兩個(gè)最常用的時(shí)序電路構(gòu)件—計(jì)數(shù)器和移位寄存器,包括它們的應(yīng)用,以及門級和基于Verilog的例子。 第12章包含關(guān)于如何采用Verilog對狀態(tài)機(jī)建模的更詳細(xì)的內(nèi)容,以及更多例子。 第13章討論時(shí)序電路設(shè)計(jì)的重要實(shí)際概念,包括同步系統(tǒng)結(jié)構(gòu)、時(shí)鐘和時(shí)鐘偏移、異步輸入和亞穩(wěn)定性,以及一個(gè)用Verilog實(shí)現(xiàn)的雙時(shí)鐘同步的詳細(xì)例子。 第14章介紹數(shù)字電路運(yùn)算,重點(diǎn)在于邏輯器件的外部特性。學(xué)習(xí)起點(diǎn)是基礎(chǔ)的電子學(xué)知識,包括電壓、電流和歐姆定律。對于如何使真實(shí)電路運(yùn)作起來不感興趣的讀者,或者有權(quán)把這項(xiàng)辛苦活交給別人完成的讀者可以跳過本章。 第15章全部都是關(guān)于存儲器件和FPGA的內(nèi)容。存儲器方面包括只讀存儲器以及靜態(tài)、動(dòng)態(tài)讀/寫存儲器的內(nèi)部電路和功能行為特性。最后一節(jié)會(huì)詳細(xì)介紹Xilinx7系列的FPGA結(jié)構(gòu)。 大多數(shù)章節(jié)都包含參考資料、訓(xùn)練題和練習(xí)題。訓(xùn)練題通常是簡答題或“輕而易舉”的問題,可以直接根據(jù)書中材料給出答案,而練習(xí)題通常需要花時(shí)間仔細(xì)思考。第14章的訓(xùn)練題尤其廣泛,是為了幫助非電子工程師能較容易地理解本章內(nèi)容而專門設(shè)計(jì)的。 與第4版的區(qū)別對于用過本書之前版本的讀者和教師而言,除了普通的更新之外,第5版還有以下關(guān)鍵的不同之處。 新版只涉及Verilog,沒有VHDL。在不同語言之間跳轉(zhuǎn)只會(huì)使人分神。另外,Verilog及其后繼SystemVerilog是目前非官方背景下所選擇的HDL。推薦大家閱讀SteveGolson和LeahClark的論文,“再論21世紀(jì)的語言之爭:Verilog與VHDL”(2016SynopsysUsersGroupConference)。這是一篇精彩紛呈且論據(jù)充足的論文,如果你不想閱讀全文的話,可以直接跳到最后一節(jié)。 新版有更多HDL的例子,更加強(qiáng)調(diào)設(shè)計(jì)流程和測試平臺,包括純粹的激勵(lì)和自檢信號。 對于并非旨在培養(yǎng)電子工程師的計(jì)算機(jī)工程專業(yè)的學(xué)生,為了使本書更容易閱讀,關(guān)于CMOS電路的詳細(xì)內(nèi)容移到了第14章,而在第1章中加入了最少量的電子學(xué)知識,這樣,學(xué)生就可以跳過整個(gè)關(guān)于CMOS的章節(jié)。 關(guān)于TTL、SSI、MSI、74系列邏輯、PLD以及CPLD的內(nèi)容都刪除了。 簡化了卡諾圖化簡的內(nèi)容。 盡管第5章依然是關(guān)于Verilog的綜合性教程和參考資料,但Verilog的概念也散布在第6章和第7章的文本框中。它們會(huì)在需要相關(guān)知識點(diǎn)的地方及時(shí)出現(xiàn),學(xué)生可以直接在那里找到“好東西”。 更強(qiáng)調(diào)基于FPGA的設(shè)計(jì)、FPGA結(jié)構(gòu)特性、綜合結(jié)果以及權(quán)衡。 原來關(guān)于組合邏輯元件的一章被分成了三章,以便有需要的讀者可以直接從一開始就跳到狀態(tài)機(jī)的內(nèi)容。而且,還可以在最后講解更多算術(shù)運(yùn)算電路的內(nèi)容。 用一整章內(nèi)容講解如何用Verilog實(shí)現(xiàn)狀態(tài)機(jī),包括許多例子。 關(guān)于同步設(shè)計(jì)方法論的章節(jié)目前包含一個(gè)詳細(xì)的控制單元加數(shù)據(jù)通路的例子,以及一個(gè)關(guān)于采用異步FIFO的交叉時(shí)鐘域的綜合例子。 希望我在書里開的玩笑不會(huì)太糟糕。 數(shù)字設(shè)計(jì)軟件工具書中所有Verilog的例子都是采用XilinxVivado套件編譯和測試的,這個(gè)套件包括以Xilinx7系列FPGA為目標(biāo)器件的Verilog、SystemVerilog以及VHDL。然而,這些例子一般并不特別要求采用Vivado編譯,甚至不要求目標(biāo)器件是Xilinx或任何其他FPGA。本書不包含關(guān)于Vivado的教程,而Xilinx有豐富的在線資源可供參考。因此,讀者可以將本書與任何Verilog工具一起使用,包括下面提及的工具。 可以從Xilinx下載免費(fèi)的Vivado“Webpack”版本。這個(gè)版本支持較小型的7系列FPGA,帶有ZynqSoc的FPGA以及評估板。這是一個(gè)龐大的文件,超過10GB,但也是一個(gè)綜合工具套件。支持前7系列FPGA以及較小型ZynqFPGA的XilinxISE(IntegratedSoftwareEnvironment)也包含在免費(fèi)的“Webpack”版本中。注意,“l(fā)egacy”模式支持ISE,而自從2013年后,ISE就再也沒有更新過。要獲取任何一種套件,可以登錄www.xilinx.com,搜索“Webpackdownload”。 如果你正在使用Altera(現(xiàn)在是Intel的一部分了)器件,他們還提供了不錯(cuò)的“大學(xué)計(jì)劃”和工具。你可以搜索“Alterauniversitysupport”,然后導(dǎo)航到“ForStudent”網(wǎng)頁。免費(fèi)的工具包括QuartusPrimeLite版本,用于以入門級FPGA和CPLD為目標(biāo)器件的Verilog、SystemVerilog和VHDL設(shè)計(jì)。還有一個(gè)配套的ModelSim模擬軟件初始版本,這一版本也是符合工業(yè)標(biāo)準(zhǔn)的。 Altera和Xilinx都提供廉價(jià)的評估板,適用于直接或通過第三方等效實(shí)現(xiàn)基于FPGA的學(xué)生項(xiàng)目。這樣的評估板可以包括開關(guān)、LED、模擬/數(shù)字轉(zhuǎn)換器以及運(yùn)動(dòng)傳感器
約翰·F. 韋克利(John F. Wakerly) 于斯坦福大學(xué)獲得電子工程博士學(xué)位。他目前是思科系統(tǒng)公司廣域網(wǎng)業(yè)務(wù)部主管工程項(xiàng)目的副總裁,還是斯坦福大學(xué)的兼職教授。他在數(shù)字設(shè)計(jì)、微型計(jì)算機(jī)體系結(jié)構(gòu)、計(jì)算機(jī)可靠性等方面出版了50多部著作,并在電信與網(wǎng)絡(luò)領(lǐng)域擁有13項(xiàng)專利。
Contents
1 INTRODUCTION 1 1.1 About Digital Design1 1.2Analog versus Digital3 1.3Analog Signals7 1.4Digital Logic Signals7 1.5Logic Circuits and Gates9 1.6Software Aspects of Digital Design13 1.7Integrated Circuits16 1.8Logic Families and CMOS19 1.9CMOS Logic Circuits20 1.10Programmable Devices25 1.11Application-Specific ICs27 1.12Printed-Circuit Boards28 1.13Digital-Design Levels29 1.14The Name of the Game33 1.15Going Forward34 Drill Problems34 2 NUMBER SYSTEMS AND CODES 35 2.1Positional Number Systems36 2.2Binary, Octal, and Hexadecimal Numbers37 2.3Binary-Decimal Conversions39 2.4Addition and Subtraction of Binary Numbers42 2.5Representation of Negative Numbers44 2.5.1Signed-Magnitude Representation 2.5.2Complement Number Systems 2.5.3Two’s-Complement Representation 2.5.4Ones’-Complement Representation 2.5.5Excess Representations 2.6Two’s-Complement Addition and Subtraction48 2.6.1Addition Rules 2.6.2A Graphical View 2.6.3Overflow 2.6.4Subtraction Rules 2.6.5Two’s-Complement and Unsigned Binary Numbers 2.7Ones’-Complement Addition and Subtraction52 2.8Binary Multiplication54 2.9Binary Division56 2.10Binary Codes for Decimal Numbers57 2.11Gray Code602.12Character Codes62 2.13Codes for Actions, Conditions, and States64 2.14n-Cubes and Distance66 2.15Codes for Detecting and Correcting Errors67 2.15.1Error-Detecting Codes 2.15.2Error-Correcting and Multiple-Error-Detecting Codes 2.15.3Hamming Codes 2.15.4CRC Codes 2.15.5Two-Dimensional Codes 2.15.6Checksum Codes 2.15.7m-out-of-n Codes 2.16Codes for Transmitting and Storing Serial Data78 2.16.1Parallel and Serial Data 2.16.2Serial Line CodesReferences82 Drill Problems83 Exercises85 3SWITCHING ALGEBRA AND COMBINATIONAL LOGIC89 3.1Switching Algebra91 3.1.1Axioms 3.1.2Single-Variable Theorems 3.1.3Two- and Three-Variable Theorems 3.1.4n-Variable Theorems 3.1.5Duality 3.1.6Standard Representations of Logic Functions 3.2Combinational-Circuit Analysis104 3.3Combinational-Circuit Synthesis110 3.3.1Circuit Descriptions and Designs 3.3.2Circuit Manipulations 3.3.3Combinational-Circuit Minimization 3.3.4Karnaugh Maps 3.4Timing Hazards122 3.4.1Static Hazards 3.4.2Finding Static Hazards Using Maps 3.4.3Dynamic Hazards 3.4.4Designing Hazard-Free CircuitsReferences126 Drill Problems128Exercises129 4DIGITAL DESIGN PRACTICES133 4.1Documentation Standards133 4.1.1Block Diagrams 4.1.2Gate Symbols 4.1.3Signal Names and Active Levels 4.1.4Active Levels for Pins 4.1.5Constant Logic Signals 4.1.6Bubble-to-Bubble Logic Design 4.1.7Signal Naming in HDL Models 4.1.8Drawing Layout 4.1.9Buses 4.1.10Additional Schematic Information 4.2Circuit Timing154 4.2.1Timing Diagrams 4.2.2Propagation Delay 4.2.3Timing Specifications 4.2.4Sample Timing Specifications 4.2.5Timing Analysis Tools 4.3HDL-Based Digital Design165 4.3.1HDL History 4.3.2Why HDLs? 4.3.3EDA Tool Suites for HDLs 4.3.4HDL-Based Design FlowReferences172 Drill Problems 174Exercises176 5VERILOG HARDWARE DESCRIPTION LANGUAGE177 5.1Verilog Models and Modules179 5.2Logic System, Nets, Variables, and Constants184 5.3Vectors and Operators189 5.4Arrays193 5.5Logical Operators and Expressions194 5.6Compiler Directives197 5.7Structural Models198 5.8Dataflow Models203 5.9Behavioral Models (Procedural Code)205 5.9.1Always Statements and Blocks 5.9.2Procedural Statements 5.9.3Inferred Latches 5.9.4Assignment Statements 5.9.5begin-end Blocks 5.9.6if and if-else Statements 5.9.7case Statements 5.9.8Looping Statements 5.10Functions and Tasks220 5.11The Time Dimension224 5.12Simulation225 5.13Test Benches226 5.14Verilog Features for Sequential Logic Design232 5.15Synthesis232 References233 Drill Problems234 Exercises235 6BASIC COMBINATIONAL LOGICELEMENTS237 6.1Read-Only Memories (ROMs)240 6.1.1ROMs and Truth Tables 6.1.2Using ROMs for Arbitrary Combinational Logic Functions 6.1.3FPGA Lookup Tables (LUTs) 6.2Combinational PLDs246 6.2.1Programmable Logic Arrays 6.2.2Programmable Array Logic Devices 6.3Decoding and Selecti
你還可能感興趣
我要評論
|