用Verilog設計FPGA樣機實例解析(Xilinx Spartan-3版)
定 價:165 元
叢書名:國際信息工程先進技術譯叢
- 作者:[美] 彭皮·楚 著;李艷志 譯
- 出版時間:2016/11/1
- ISBN:9787111536444
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP332.1
- 頁碼:553
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書主要內(nèi)容包括三部分:基本的數(shù)字電路、外圍模塊和內(nèi)嵌的微控制器。介紹了基礎的HDL結(jié)構和對應硬件,并示范如何用這些結(jié)構來搭建基本的數(shù)字電路。第二部分是應用部分的技術為原型板設計外圍模塊,介紹了一個單獨外設的開發(fā)、實現(xiàn)和驗證?梢詫⑦@些模塊組成一個復雜的系統(tǒng)。第三部分介紹了基于FPGA的軟核微控制器,即PicoBlaze,展示了如何將通用處理器和定制電路進行集成。本書通過實例深入淺出地介紹了使用Verilog對可編程邏輯器件進行設計的方法,不僅介紹了HDL的語法,還重點介紹了對可編程邏輯器件的設計方法,提供了一系列使用Verilog對可編程邏輯器件進行設計的實例,書中的實例均可運行于Xilinx公司的Spartan3原型開發(fā)板中,使讀者能夠邊動手邊學習,達到快速入門并掌握其要領的目的。
本書可作為可編程邏輯器件的學習指導書,通過書中的案例,初學者終可以完全掌握可編程邏輯器件的設計。同時,也可作為工程實踐的指導用書,對提高可編程邏輯器件開發(fā)人員的設計水平有借鑒價值。
適讀人群 :可變程邏輯器件
本書主要特色:
本書深入淺出地介紹了如何使用Verilog對可編程邏輯器件進行設計的方法,主要針對可編程邏輯器件的設計,而不是僅僅介紹HDL的語法。同時還提供了一系列使用Verilog對可編程邏輯器件進行設計過程的實例,從簡單的門級電路,到帶有8位軟核處理器和定制I/O外設的復雜嵌入式系統(tǒng)。這些實例可作為通用的基本模塊組合成具體電路,乃至結(jié)構復雜的大系統(tǒng)。
本書中的實例嚴格遵循設計準則,編碼和設計方法是“向上兼容的”,特點如下:
同樣的方法可應用于未來的大型設計之中。
同樣的方法能夠有助于其他系統(tǒng)的開發(fā)項目,包括仿真,時序分析,驗證和測試。
同樣的方法能夠應用到ASIC技術和不同類型的FPGA器件中。
代碼能夠被不同廠家的軟件綜合。
總之,本書是一本實用的、以硬件為核心的教材,其內(nèi)容涉及用簡潔的HDL、遵循規(guī)范的設計和編碼原則,大限度地實現(xiàn)向上兼容。
HDL(硬件描述語言)和FPGA(現(xiàn)場可編程門陣列)器件可以使設計者很快地完成復雜數(shù)字電路的開發(fā)和仿真,并在樣機器件上實現(xiàn),隨后對器件電路的實際運行情況進行檢查。隨著工藝的成熟,HDL和FPGA已經(jīng)成為設計實踐的主流。利用PC機和普通的FPGA開發(fā)板就能構造出十分復雜的數(shù)字系統(tǒng)。本書采用實際操作的學習方法,利用豐富的示例來闡述FPGA和HDL的開發(fā)和設計過程。書中包含了大量實例,從簡單的門級電路,到帶有8位軟核處理器和定制I/O外設的復雜嵌入式系統(tǒng)。所有這些例子都可以被綜合成具體電路,并在開發(fā)板上進行實際測試。
本書關注要點:
本書關注的重點是綜合后生成硬件的優(yōu)劣,而不是HDL語法。本書只關注一小部分可綜合子集,并使用少量的代碼模板為不同類型的電路提供框架,而不是解釋每一個語句的結(jié)構。這些模板都是通用的,很容易綜合到復雜的系統(tǒng)中。雖然這種方法限制了語法表達的“自由”,但并不妨礙我們開發(fā)創(chuàng)新性的硬件結(jié)構。由于HDL語言的通用性和適應性,同一個電路通?梢杂枚喾N語言結(jié)構和代碼風格表達。其中許多代碼是用于建模的。這些代碼綜合后可能導致不必要的復雜硬件實現(xiàn),有時還根本不可能綜合成任何具體電路。這種模板方式實際上能夠促使我們更多地去思考硬件電路本身,養(yǎng)成良好的編碼習慣。由于我們的主要興趣是在硬件上,所以花一些時間研究如何使用同一個代碼模板來開發(fā)多種不同的硬件結(jié)構,而不是用多種不同版本的代碼來描述同一個電路是十分有價值的。
目前有兩種流行的HDL語言,它們分別是VHDL和Verilog。這兩種語言都得到廣泛的應用,并且都是IEEE標準。本書使用Verilog,而另一本標題類似的書使用VHDL。盡管兩者的語法差異較大,但它們的功能卻非常相似,都能很好地達到設計目標。當我們掌握了一種語言的設計實踐和編碼方法后,再學習另一種語言就會變得非常簡單。
雖然本書是為初學者編寫的,但書中的示例都嚴格遵循設計準則,可為讀者今后的工作打下良好的基礎。編碼和設計方法是“向上兼容的”,意思是:
同樣的方法可應用于未來的大型設計之中。
同樣的方法能夠有助于其它的系統(tǒng)開發(fā)任務,包括仿真,時序分析,驗證和測試。
同樣的方法能夠被應用到ASIC技術和不同類型的FPGA器件中。
代碼能夠被不同廠家的綜合軟件綜合。
總之,本書是一本實用的、以硬件為核心的教材,其內(nèi)容涉及用最簡潔的HDL、遵循規(guī)范的設計和編碼原則,最大限度地實現(xiàn)向上兼容。
購買本書得益處:
本書包含三大部分:
基本數(shù)字電路,外設模塊和嵌入式微控制器。針對的讀者群除了正在學習入門級或者高級數(shù)字系統(tǒng)設計課程的學生外,還包括想要學習FPGA和基于HDL開發(fā)的在職工程師。對于書中前兩部分內(nèi)容,需要讀者具有數(shù)字系統(tǒng)的基本知識,而數(shù)字系統(tǒng)通常是電子工程和計算機工程專業(yè)課程中的必修課。對于第三部分的內(nèi)容而言,如果之前學習過匯編語言編程會很有幫助。
本書所采用的工具:
雖然本書的主要目標是教會讀者如何編寫與開發(fā)工具和FPGA器件無關的HDL代碼,但我們必須得選擇一種開發(fā)工具(即軟件包)和一套FPGA開發(fā)板來進行綜合和實現(xiàn)這些示例。本書使用了Xilinx公司的綜合工具和FPGA器件,Xilinx公司是一家在該領域處于領導地位的公司。
軟件:
使用的綜合軟件是Xilinx ISE開發(fā)套件的網(wǎng)絡版。與完全版的套件相比,網(wǎng)絡版除了支持的器件數(shù)量受限外,功能與完全版是類似的。大多數(shù)入門級開發(fā)板都使用便宜的Spartan-3系列FPGA器件。由于網(wǎng)絡版支持Spartan-3器件,因此它符合我們的需求。本書使用的仿真軟件是Mentor Graphics公司的 ModelSim XE III入門版。它是ModelSim的定制版。這兩個軟件包都是免費的,并且能夠從Xilinx網(wǎng)站上下載。
FPGA開發(fā)板:
使用由Digilent Inc公司生產(chǎn)的幾款入門級FPGA開發(fā)板,其中包括Spartan-3 Starter,Nexys-2和Basys等開發(fā)板,它們都包含一個Spartan-3/3E FPGA芯片和相似的外圍電路。書中的設計示例是基于Spartan-3 Starter開發(fā)板(或簡稱為S3板)的,但大多數(shù)示例也能在其他開發(fā)板上直接使用。HDL代碼的適用性總結(jié)如下:
Spartan3 Starter (S3)開發(fā)板。 S3開發(fā)板包含所有的外圍器件,不需要其他的附屬模塊。所有的HDL代碼和相關討論能夠直接應用在這塊開發(fā)板上。
Nexys-2開發(fā)板。 Nexys-2開發(fā)板是一塊比較新的開發(fā)板,包含了一片較大型的FPGA芯片和存儲芯片。外圍器件與S3開發(fā)版相似。與S3開發(fā)板有兩處不同:第一,其VGA接口的\"顏色深度\"由3位擴展到8位。因此第13和14章討論的VGA接口電路的輸出需要根據(jù)情況進行相應的修改。第二,Nexys-2板包含更復雜的外部存儲器。盡管能夠配置為異步SRAM,但其時序特性與S3開發(fā)板上的存儲芯片是不同的,因此第11章描述的存儲控制器HDL代碼便不能直接使用。但同樣的設計準則依然可以應用于新的控制器的構造。
Basys開發(fā)板 Basys開發(fā)板是一個簡易的開發(fā)板。缺少RS-232連接器。為了實現(xiàn)第8章描述UART模塊和串行接口,我們需要Digilent的RS-232轉(zhuǎn)換器外設模塊。Basys開發(fā)板沒有外部存儲器件,因此第11章描述的存儲控制器無法應用。
其他FPGA開發(fā)板 本書描述的大部分外設器件其實都是工業(yè)級標準的器件,并且相應的HDL代碼能夠被用于開發(fā)板上,只要開發(fā)板提供類似的接口和連接器。除了Xilinx特定的部分外,這些代碼也能夠應用于其他廠商設計的基于FPGA器件的開發(fā)板上。
PC的附件:
設計示例包含了用于連接PC外圍設備的接口。鍵盤,鼠標和VGA顯示器是必需的,還需要一條用于連接UART模塊的普通串行數(shù)據(jù)線。這些外設使用廣泛,通?梢栽谝慌_舊的PC上找到。
本書的結(jié)構:
本書分為三個主要部分。第一部分介紹基礎的HDL結(jié)構和對應硬件,并示范如何用這些結(jié)構來搭建基本的數(shù)字電路。本書由六章組成:
第一章介紹了HDL程序的結(jié)構,基礎語法和邏輯操作符。根據(jù)這些語言結(jié)構,可以推導出相應的門級組合電路。
第二章介紹FPGA器件、原型板和開發(fā)流程。借助于Xilinx ISE綜合軟件教程和Mentor Graphics ModelSim仿真軟件教程進行開發(fā)過程的示范。
第三章介紹與HDL語言相關的操作符和算法操作符及其電路的結(jié)構。它們與中規(guī)模元件(如比較器,加法器和多路復用開關等元件)對應。模塊級組合電路就是由這些語言結(jié)構得到的。
第四章介紹存儲元件和構造簡單時序電路的代碼,例如計數(shù)器和移位寄存器,這些電路的狀態(tài)轉(zhuǎn)移表現(xiàn)為簡單的有序模式。
第五章討論有限狀態(tài)機(FSM)的構建,有限狀態(tài)機也是一種時序電路,但它的狀態(tài)轉(zhuǎn)移表現(xiàn)為復雜的非有序模式。
第六章介紹了帶有數(shù)據(jù)路徑的有限狀態(tài)機(FSMD)的構建。FSMD用于實現(xiàn)寄存器傳輸(RT)方法學,通過數(shù)據(jù)在寄存期間的傳輸和操作,描述系統(tǒng)的運行。
第七章介紹關于語言構造和編碼技術方面的若干高級話題,并介紹更加復雜測試平臺的開發(fā)技術。讀者可以跳過該章,不會影響對其他章節(jié)的理解。
第二部分是應用第一部分的技術為原型板設計一系列外圍模塊。每章介紹一個單獨外設的開發(fā)、實現(xiàn)和驗證?梢詫⑦@些模塊組成一個更大的工程。該部分包括七個章節(jié):
第八章介紹了普通的異步收發(fā)送器(UART)的設計,用于提供原型板上的RS-232接口接收和發(fā)送數(shù)據(jù)的串行鏈路。
第九章介紹了鍵盤接口的設計,可以從鍵盤上讀取掃描碼。鍵盤通過開發(fā)板上的PS2接口與其連接。
第十章介紹了鼠標接口的設計,可以從鼠標上獲得點擊和移動信息。鼠標也是通過開發(fā)板上的PS2接口與其連接。
第十一章討論了存儲控制器的實現(xiàn)和時序。該控制器用于對S3板上的兩個靜態(tài)隨機存儲器(SRAM)讀取和寫入數(shù)據(jù)。
第十二章討論了Spartan-3器件中特定元件的推斷和使用。重點是FPGA的內(nèi)部存儲塊。
第十三章介紹了一個視頻控制器的設計和實現(xiàn)。討論的內(nèi)容包括視頻同步信號的產(chǎn)生并展示了比特映射和對象映射圖像界面的構造。顯示器通過開發(fā)板上的VGA接口進行連接。
第十四章繼續(xù)介紹視頻控制器的開發(fā)。討論展示了文字界面和常規(guī)分片映射機制的構建。
第三部分介紹基于FPGA的軟核微控制器,即PicoBlaze,展示了如何將通用處理器和定制電路進行集成。該部分包括四個章節(jié):
第十五章對PicoBlaze的結(jié)構和指令集進行了簡介。
第十六章對基本的匯編語言編程進行了介紹,并提供了一個總的開發(fā)流程。
第十七章討論了PicoBlaze的I/O特性,并展示了如何將其與其他外設通過定制電路連接起來。
第十八章討論了PicoBlaze的中斷性能,并展示了一個定制的中斷處理電路的構建。
除了常規(guī)的章節(jié),附錄部分總結(jié)和列出了所有的代碼模版。
特殊標識xilinx specific 本書中我們使用了兩種特殊的段落標記:一個是為了描述Xilinx-specific(Xilinx公司特有的)特性,另一個是為了描述Verilog-1995的結(jié)構。雖然在本書中描述的例子是基于Xilinx開發(fā)板來實現(xiàn)的,并且代碼也是采用Xilinx ISE軟件進行綜合,我們?nèi)栽O法使HDL代碼不依賴于器件和軟件。本書提到的大多數(shù)內(nèi)容和代碼能夠應用到不同的目標器件,也可以被不同的綜合軟件綜合。然而,一些代碼或器件特性是Xilinx ISE或者Spartan-3FPGA芯片所獨有的。我們用Xilinx specific上標,表示相應的部分或者章節(jié)的內(nèi)容僅是針對Xilinx公司的器件。
同樣,像在這一頁的邊緣,我們用邊緣標記來表明這段的內(nèi)容僅針對Xilinx。這些標記表明代碼或設計不可直接移植,需要針對不同的軟件包或目標板對代碼和設計進行修改。1995年Verilog語言第一次得到批準(被引用作Verilog-1995),并在2001年修訂(被引用作Verilog-2001)。修訂版有很多改進。本書中使用的是Verilog-2001。如果一種語言使用了兩種不同版本進行構建,我們會將其分開,單獨對舊版本進行描述,并在頁邊緣做上標記,用于這種類型的討論。這些內(nèi)容“供參考”,目的是幫助讀者理解舊版本的Verilog代碼。
指導價值:
本書可作為數(shù)字系統(tǒng)概論或者高級工程指導的參考書。在數(shù)字系統(tǒng)概論中,本書提供了課程的試驗部分。第一部分的章節(jié)基本上都遵循了典型的課程順序,可作為常規(guī)課程的參考?梢赃x擇一
1.門級組合電路
1.1引言
1.2簡述
1.3結(jié)構描述
1.4測試平臺
1.5參考書目說明
1.6推薦的實驗
2.FPGA和EDA軟件概述
2.1引言
2.2FPGA
2.3Digilent S3開發(fā)板簡介
2.4開發(fā)流程
2.5Xilinx ISE project navigator簡介
2.6ISE project navigator簡明教程
2.7ModelSim 仿真器簡明教程
2.8參考書目說明
2.9推薦的實驗
3.RTL組合電路
3.1引言
3.2RT級元件
3.3使用并發(fā)賦值語言布線
3.4使用process建模
3.5使用IF和CASE語句布線
3.6constant和generic
3.7設計實例
3.8參考書目說明
3.9推薦的實驗
4.常規(guī)的時序電路
4.1引言
4.2觸發(fā)器和寄存器
4.3簡單的設計實例
4.4時序電路的測試平臺
4.5實例學習
4.6參考書目說明
4.7推薦的實驗
5.FSM
5.1引言
5.2FSM代碼開發(fā)
5.3設計實例
5.4參考書目說明
5.5推薦的實驗
6.FSMD
6.1引言
6.2FSMD代碼開發(fā)
6.3設計實例
6.4參考書目說明
6.5推薦的實驗
7.UART
7.1引言
7.2UART 接收子系統(tǒng)
7.3UART發(fā)送子系統(tǒng)
7.4整體的UART系統(tǒng)
7.5定制一個UART
7.6參考書目說明
7.7推薦的實驗
8.PS2 鍵盤
8.1引言
8.2PS2接收子系統(tǒng)
8.3PS2鍵盤掃描碼
8.4PS2鍵盤接口電路
8.5參考書目說明
8.6推薦的實驗
9. PS2鼠標
10.1引言
10.2PS2 鼠標協(xié)議
10.3PS2發(fā)送子系統(tǒng)
10.4雙向PS2接口
10.5PS2鼠標接口
10.6參考書目說明
10.7推薦的實驗
10. 外部SRAM
10.1引言
10.2IS61LV25616AL SRAM規(guī)范
10.3基本內(nèi)存控制
10.4一個安全的設計
10.5更加有挑戰(zhàn)的設計
10.6參考書目說明
10.7推薦的實驗
11.Xilinx Spartan-3內(nèi)存
11.1引言
11.2Spartan-3器件的嵌入式內(nèi)存
11.3加入內(nèi)存模塊的方法
11.4內(nèi)存接口的HDL模板
11.5參考書目說明
11.6推薦的實驗
12.VGA控制器:圖形
12.1引言
12.2VGA同步化
12.3像素生成電路概述
12.4使用對象映射方案生成圖像
12.5使用bit映射方案生成圖像
12.6參考書目說明
12.7推薦的實驗
13.VGA控制器:文本
13.1引言
13.2文本生成
13.3全屏文本顯示
13.4完整的pong游戲
13.5參考書目說明
13.6推薦的實驗
14.PicoBlaze 概述
14.1引言
14.2定制的軟件和硬件
14.3PicoBlaze概述
14.4開發(fā)流程
14.5指令集
14.6匯編程序指導
14.7參考書目說明
15.PicoBlaze匯編代碼開發(fā)
15.1引言
15.2有用的代碼片斷
15.3子程序開發(fā)
15.4程序開發(fā)
15.5匯編代碼的處理
15.6與PicoBlaze綜合
15.7參考書目說明
15.8推薦的實驗
16.PicoBlaze I/O接口
16.1引言
16.2輸出端口
16.3輸入端口
16.4帶有開關和七段LED顯示接口的平方程序
16.5帶有組合多路開關和UART終端的平方程序
16.6參考書目說明
16.7推薦的實驗
17.PicoBlaze中斷接口
17.1引言
17.2PicoBlaze的中斷控制
17.3外部接口
17.4軟件開發(fā)注意事項
17.5設計實例
17.6參考書目說明
17.7推薦的實驗
附錄A: VHDL模板樣例