-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

基于Nios II的嵌入式SoPC系統設計與Verilog開發實例

( 簡體 字)
作者:金明錄 門宏志類別:1. -> 電子工程 -> Verilog
譯者:
出版社:電子工業出版社基于Nios II的嵌入式SoPC系統設計與Verilog開發實例 3dWoo書號: 41588
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:5/1/2015
頁數:664
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121257735
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯 者 序
嵌入式系統是一個面向應用、技術密集、資金密集、高度分散、不可壟斷的產業,隨著各個領域應用需求越來越多樣化,嵌入式設計技術和芯片技術也經歷著一次又一次的革新。隨著嵌入式處理器、專用數字器件和DSP算法以IP核的形式嵌入到FPGA中,以單片FPGA完成以往整個嵌入式系統數字部分的設計已經越來越普及,這就是所謂的可編程片上系統(System on a Programmable Chip,SoPC)設計。可以說SoPC是一種特殊的嵌入式系統:首先它是片上系統(SoC),即由單個芯片完成整個系統的主要邏輯功能;其次,它是可編程系統,具有靈活的設計方式,可裁減、可擴充、可升級,并具備軟硬件在系統可編程的功能。隨著可編程邏輯器件的發展和普及,嵌入式SoPC設計已經滲透到軍事、網絡通信、工業控制和消費電子等領域的每個角落,作為一名電子工程師,如果缺乏這方面的知識,很難想象其“生存”空間。
這些年,國內外高校積極把SoPC設計技術引入到課程中,相繼出版了不少這方面的教材和專著,其中Pong P. Chu博士的Embedded SoPC Design with Nios II Processor and Verilog Examples一書,以特有的魅力在本科生和研究生的數字系統和嵌入式系統設計課程中作為教材而被廣泛采用。
然而真正掌握嵌入式SoPC設計卻不是一件輕而易舉的事情,而是一個漫長而曲折的學習旅程,Pong P. Chu博士正是為了給出這一正確的學習路徑,并幫助讀者通過簡單的幾步就能充分開發利用這一新方法的潛能而撰寫了本書。
Altera公司持續推出了高性價比的可編程邏輯器件,在嵌入式產品設計中能夠實現更多的功能并發揮著越來越重要的作用,在國內與100多所高校合作的EDA/SoPC聯合實驗室構筑了良好的設計和開發平臺,建立了良好的實驗教學和研究環境。Nios II是Altera公司專門為SoPC設計的一種軟核CPU,它的可配置特性給嵌入式系統設計帶來了很大的靈活性,可以說它為嵌入式系統的設計提供了一種全新的思路。
本書利用Altera FPGA開發板(DE1、DE2)和Nios II軟核處理器,采用“做中學”的教學模式,通過基于Nios II軟核處理器和Verilog的嵌入式SoPC設計例子,說明了軟硬件設計和開發過程。難能可貴的是,這些例子都有很強的實際工程項目背景,都能在開發板上實現和驗證。
本書的寫作思路清晰,內容完備,自始至終強調硬件設計和集成,主要內容可以分為逐步遞進的四個部分:
第1部分介紹了硬件描述語言和自定義硬件的綜合;
第2部分介紹了Nios II處理器,并回顧了嵌入式軟件開發流程;
第3部分說明了幾個復雜的I/O外設的設計和軟硬件開發,包括PS2鍵盤和鼠標、圖形視頻控制器、音頻編解碼器及SD卡;
第4部分給出了集成硬件加速器的幾個案列分析,包括自定義GCD電路、Mandelbrot集合分形電路和基于DDFS的音頻合成器。
本書引入的概念非常清晰,并且巧妙地利用前面的設計,通過處理器的C語言代碼和Verilog硬件加速器的協同設計,幫助讀者對Nios II嵌入式開發有更為全面系統的理解。書中使用和注冊第三方IP核的一些實例,也給出了在IP核世界中有趣的生存之道。此外,對FPGA市場和可用IP核的概述以及對多處理器片上系統的點評也十分精彩,即使沒有Verilog基礎,讀者也可以很好地完成從基本的Verilog編程到Nios II的學習。
作為建議,利用本書的擴展補充部分學習實時操作系統(RTOS)是十分有益的。這意味著要使用以太網和TCP/IP堆棧,這樣可以縱觀一個較為完整的嵌入式開發過程。
本書由大連理工大學電信學部的金明錄教授和門宏志博士翻譯。Altera公司中國區大學計劃經理陳衛中先生在選題之初給與了積極的支持,在此表示感謝。另外,感謝電子工業出版社的張小樂、馬嵐等編輯在組織出版和編輯工作中所給予的支持。
限于譯者水平,書中難免有錯誤與不妥之處,敬請廣大讀者批評指正。

譯 者
2015年2月

前 言
一個SoC(片上系統)是將處理器、存儲器模塊、I/O外設以及自定義硬件加速器集成在一起的單一集成電路。隨著FPGA(現場可編程門陣列)容量的不斷增加,這種設計方法可以在一個FPGA芯片中實現,一般稱為SoPC(可編程片上系統)。在傳統的嵌入式系統中,硬件由固定規格的處理器和現成的外設構成,而軟件則是由用戶編程實現所需功能。基于SoPC的設計提供了一種新的選擇。由于FPGA器件的可編程性,定制的硬件也可以合并到嵌入式系統中。可以裁剪處理器,只選擇需要的I/O外設,創建定制的I/O接口,為計算密集型任務開發專用的硬件加速器。
當前HDL(硬件描述語言)綜合與FPGA器件的發展,以及軟核處理器的可用性使得設計者可以快速開發并仿真用戶的硬件和軟件,在原型設備上實現整個系統,驗證物理實現的運行操作。現在可以使用PC和便宜的FPGA原型開發板構造復雜的嵌入式系統。本書采用“做中學”的方法,通過一系列實例說明軟、硬件的設計和開發過程。為此本書采用的是Altera的FPGA開發板和它的Nios II軟核處理器。
本書分為四個主要部分。第一部分涵蓋了HDL和用戶硬件的綜合。第二部分綜述了嵌入式軟件開發的概況,重點是底層I/O的訪問和驅動。第三部分闡述了幾個復雜I/O外設的軟、硬件設計與開發,包括PS2鍵盤和鼠標、圖形視頻控制器、音頻編解碼器及SD(安全數碼)卡。第四部分介紹了幾個硬件加速器的集成實例研究,包括自定義 GCD(最大公約數)電路、Mandelbrot集合分形電路和基于DDFS(直接數字頻率合成)方法的音頻合成器。所有的軟硬件實例都是可綜合和可編譯的,也可以在開發板上進行物理測試。
本書重點和讀者對象
重點 嵌入式系統受到廣泛研究,有很多書介紹這個主題,涵蓋的內容主要集中在軟件開發上,而且通常都是針對某一特定的處理器。SoPC平臺新的“硬件可編程性”為嵌入式系統開發提供了新的選擇。本書主要以這個方面和相關的設計主題為重點,包括基于軟核處理器和IP(知識產權)核的系統設計、軟硬件的劃分與整合及自定義I/O外設與硬件加速器的開發。
讀者和預備知識 本書面對的讀者是學習高級數字設計、嵌入式系統或者軟硬件協同設計課程的學生,也包括想要學習基于FPGA、HDL和SoPC開發的實踐工程師。讀者需要具備數字系統的基本知識,學習過電子工程或計算機工程專業的必修課程,以及掌握C語言的實用知識。盡管計算機結構、微處理器和操作系統的知識不是必需的,但掌握這些內容是很有用的。
學習環境
FPGA開發板 本書準備使用Altera的DE1板(也叫做Cyclone II FPGA入門開發套件)和DE2板。所有的HDL代碼和C代碼以及相關的討論內容都可以直接用于這兩個板子。本書中討論的大部分外設都滿足通用的工業標準,并且只要開發板上含有Altera公司的FPGA芯片、合適的模擬接口電路和連接器,相應的代碼就可以使用。
PC配件 設計例子包含一些PC外設的接口設備。需要PS2鍵盤、PS2鼠標、VGA兼容顯示器、耳機或揚聲器及SD卡作為I/O外設。這些配件容易得到,可以從原有的PC上獲得。
軟件 基于Nios II的系統需要一些Altera軟件包:Quartus II網頁版用于綜合HDL語言,SOPC Builder用于配置和創建基于Nios II的系統,Nios EDS(嵌入式設計套件)是集成的軟件開發平臺;ModelSim-Altera入門版用于執行HDL語言仿真。這些軟件開發包都可以從Altera的網站上下載。
代碼和教程 本書的HDL代碼和C語言代碼可以從本書輔助專用網站下載。代碼和教程是使用Altera的Quartus II網頁版V10 sp1和Altera 的Nios II EDS V10 sp1開發和測試的。軟件包可以在有管理權限的Windows 7的32位操作系統下運行。由于版本和操作系統的不同,進程中可能出現微小差別。
本書的結構
本書包括四個部分和一個序言部分。首先縱觀全局:
第1章概述嵌入式系統,并介紹SoPC的概念和開發流程。
第1部分介紹基本的HDL結構和綜合過程,闡述自定義數字電路構建。這一部分包含七章:
第2章介紹HDL程序的架構、HDL語言的基本語法和邏輯運算符。給出基于這些語言結構的門級組合電路的描述。
第3章概述FPGA器件、開發板和開發流程。通過Altera公司的Quartus II綜合軟件教程闡述開發的步驟。
第4章介紹HDL的關系和算術運算符,以及程序結構。它們對應著中規模器件,例如比較器、加法器和多路轉換器。這些語言結構用于構建模塊級組合電路。
第5章介紹存儲單元的描述和常規時序電路的構建,如計數器和移位寄存器,在這些電路中狀態轉移顯示出一種固定模式,同時本章討論了Altera 的Cyclone II器件內部存儲模塊的使用和語言描述。
第6章討論一個有限狀態機(FSM)的構建,它是一種時序電路,其狀態轉移沒有簡單的固定模式。
第7章介紹含數據通路的有限狀態機(FSMD)的構建。FSMD用于實現寄存器傳輸(RT),在這種方法中,通過寄存器間數據的傳輸和管理來描述系統操作。
第8章討論幾個與語言結構和編碼技術相關的高級主題,并介紹更復雜的測試平臺的開發。即使不學習這一章的內容,也不會影響下面章節的學習。
第2部分介紹基于Nios II的系統的構建以及嵌入式軟件的開發。用一個簡單的flashing-LED設計實例闡述了相關的主要概念,這一部分包括五章:
第9章概述Nios II軟核處理器,詳細討論了它的關鍵組件。
第10章介紹基于Nios II的系統的構建和訪問底層I/O外設的基本代碼編寫技巧。Altera的SOPC Builder 和Nios II EDS教程分別說明了其軟硬件設計。
第11章討論SOPC Builder中幾個IP核(即預先設計好的I/O外設)的結構和使用,包含了ad hoc I/O驅動軟件程序的開發。
第12章概述Altera HAL(硬件抽象層)運行環境,并介紹它的使用方法。
第13章討論中斷結構,包括Nios II中斷控制器的使用和軟中斷服務程序開發。
第3部分應用第一部分和第二部分的技術,在開發板上設計一排外設模塊。每個模塊都包含自定義硬件和基本的軟驅動。這些被看作是基本的IP核,可以嵌入到一個更大的設計項目中。第三部分包含七章:
第14章介紹使用PIO IP核作為I/O接口。這個方案可以應用于簡單的I/O外設,可以避免創建新SoPC組件的開銷。
第15章概述Altera的Avalon接口,其作用相當于Nios II處理器的總線結構,用于連接存儲器以及I/O模塊,并闡述了創建用戶自定義IP核的步驟。
第16章介紹外部SRAM(靜態RAM)、SDRAM(同步動態RAM)器件的接口與基本測試方法和步驟。
第17章介紹PS2接口的設計。PS2接口的硬件部分包括PS2控制器,用于產生和處理PS2時鐘和數據信號。軟件部分由兩套驅動組成:一個用于PS2鍵盤,從鍵盤上讀取和解碼掃描碼;一個用于PS2鼠標,獲取和處理來自于鼠標的點擊和移動信息。
第18章介紹圖形視頻控制器的設計與實現。硬件部分包括視頻同步信號的產生和構建,以及基于SRAM的自定義視頻存儲模塊接口。軟件部分包括很多基本驅動程序,有用于繪制像素的基本驅動程序,還有用于顯示與處理位圖圖片和文本的驅動程序等。
第19章討論音頻編解碼芯片接口的設計。硬件部分包括用于編解碼配置的I2C總線控制器和用于傳輸和接收數字化的音頻數據流的串行總線控制器。軟件部分包括設置編解碼參數的程序和產生并記錄音頻數據的程序。
第20章介紹SD卡接口設計。硬件部分是利用SPI總線控制器完成的,軟件部分則包括卡初始化程序和基本的文件讀寫操作程序。
第4部分給出了硬件加速器的三個實例,利用自定義的硬件執行計算密集型任務。這部分包含三章:
第21章介紹基于二進制歐幾里得算法的自定義GCD(最大公約數)加速器的設計。將它的性能與軟件實現方法的性能做了比較。
第22章介紹Mandelbrot集合分形加速器的集成與構造,這種加速器可以選擇這個集合的任何部分,并在VGA屏幕上顯示。
第23章討論直接數字頻率合成與調制電路的實現。這一電路用于包絡可調的音頻合成器。
輔助專用網站
本書輔助專用網站(http: //academic.csuohio.edu/chu_p/rtl)提供了附加信息,包括:
勘誤表;
代碼清單和相關文件;
Altera軟件鏈接;
相關參考材料的鏈接;
附加的設計思想。
勘誤表 這是一本獨自創作的書,這意味著作者編著了本書各個方面的內容,包括注釋、表格、代碼清單、索引和格式。因為錯誤常常發生,所以本書輔助專用網站上提供了一個不斷更新的勘誤表和上傳錯誤的地方。

P. P. Chu
美國俄亥俄州克利夫蘭市
2012年1月
內容簡介:

本書利用Altera FPGA開發板和Nios II軟核處理器,揭示了基于FPGA的嵌入式系統特有的硬件可編程性,采用“做中學”的模式,介紹了基于Verilog的嵌入式SoPC設計的基本概念和技術。本書通過許多實例說明軟、硬件的設計和開發過程,并給出了完整的代碼和豐富的實驗題目。

目錄:

第1章 嵌入式系統概述 1
1.1 引言 1
1.1.1 嵌入式系統定義 1
1.1.2 示例系統 1
1.2 系統設計需求 2
1.3 嵌入式SoPC系統 3
1.4 本書結構 6
1.5 文獻注釋 6

第1部分 基本數字電路開發

第2章 門級組合電路 8
2.1 引言 8
2.2 總則 8
2.3 基本詞法元素和數據類型 9
2.4 數據類型 10
2.4.1 四值系統 10
2.4.2 數據類型組 10
2.4.3 數字的表示方法 11
2.4.4 運算符 12
2.5 程序框架 12
2.5.1 端口聲明 12
2.5.2 程序主體 13
2.5.3 信號聲明 13
2.5.4 另一個實例 14
2.6 結構描述 14
2.7 測試平臺 17
2.8 文獻注釋 19
2.9 推薦實驗 19
2.9.1 門級greater-than電路代碼 19
2.9.2 門級二進制譯碼器代碼 19
第3章 FPGA和EDA軟件概述 20
3.1 FPGA 20
3.1.1 通用FPGA器件概述 20
3.1.2 Altera Cyclone II系列器件
概述 21
3.2 Altera DE1和DE2開發板概述 23
3.3 開發流程 25
3.4 Quartus II概述 26
3.5 Quartus II簡易教程 27
3.5.1 創建設計工程 29
3.5.2 建立測試平臺進行RTL仿真 33
3.5.3 編譯工程 33
3.5.4 時序分析 34
3.5.5 編程FPGA器件 34
3.6 ModelSim HDL仿真器的簡易
教程 36
3.7 文獻注釋 39
3.8 推薦實驗 40
3.8.1 門級greater-than電路 40
3.8.2 門級二進制譯碼器 40
第4章 RTL組合電路 41
4.1 運算符 41
4.1.1 算術運算符 42
4.1.2 移位運算符 42
4.1.3 關系運算符和等式運算符 43
4.1.4 位運算符、縮減運算符和
邏輯運算符 43
4.1.5 拼接運算符和復制運算符 44
4.1.6 條件運算符 44
4.1.7 運算符優先級 45
4.1.8 表達式位長調整 45
4.1.9 z和x的綜合 46
4.2 組合邏輯電路的always語句塊 47
4.2.1 基本語法和行為 48
4.2.2 進程賦值語句 48
4.2.3 變量數據類型 49
4.2.4 簡單實例 49
4.3 if語句 50
4.3.1 語法 50
4.3.2 實例 51
4.4 case語句 52
4.4.1 語法 52
4.4.2 實例 53
4.4.3 casez和casex語句 54
4.4.4 全case語句和并行case語句 55
4.5 條件控制結構的路由結構 56
4.5.1 優先級路由網絡 56
4.5.2 多路選擇網絡 57
4.6 always塊的一般編碼原則 58
4.6.1 組合邏輯電路代碼的常見
錯誤 58
4.6.2 指南 61
4.7 參數和常數 61
4.7.1 常數 61
4.7.2 參數 62
4.7.3 Verilog-1995中參數的使用 64
4.8 設計實例 65
4.8.1 十六進制數的七段LED
譯碼器 65
4.8.2 符號幅值加法器 67
4.8.3 桶形移位器 68
4.8.4 簡易浮點數加法器 70
4.9 文獻注釋 73
4.10 推薦實驗 73
4.10.1 多功能桶形移位器 73
4.10.2 雙優先級編碼器 74
4.10.3 BCD碼增量器 74
4.10.4 浮點數greater-than電路 74
4.10.5 浮點數和有符號整數間的
轉換電路 74
4.10.6 加強的浮點數加法器 75
第5章 常規時序電路 76
5.1 引言 76
5.1.1 D觸發器和寄存器 76
5.1.2 同步系統 77
5.1.3 代碼開發 77
5.2 觸發器和寄存器的HDL代碼 77
5.2.1 D觸發器 78
5.2.2 寄存器 80
5.2.3 寄存器文件 81
5.2.4 SRAM 83
5.3 簡單的設計實例 84
5.3.1 移位寄存器 84
5.3.2 二進制計數器及其變形 86
5.4 時序電路的測試平臺 89
5.5 時序分析 92
5.5.1 時序參數 92
5.5.2 Quartus II中的時序考慮 93
5.6 案例研究 94
5.6.1 秒表 94
5.6.2 FIFO 緩存器 98
5.7 Cyclone II器件的嵌入式存儲器
模塊 102
5.7.1 DE1開發板上的存儲器
選項概述 102
5.7.2 嵌入式M4K模塊概述 102
5.7.3 添加嵌入式存儲器模塊的
方法 103
5.7.4 導出同步單口RAM的HDL
模塊 105
5.7.5 導出同步簡單雙口RAM的
HDL模塊 106
5.7.6 導出同步真雙口RAM的
HDL模塊 108
5.7.7 導出同步ROM的HDL
模塊 109
5.7.8 指定RAM初始值的HDL
模塊 110
5.7.9 FIFO緩存器的再仿真 112
5.8 文獻注釋 113
5.9 推薦實驗 113
5.9.1 可編程方波發生器 113
5.9.2 脈寬調制電路 113
5.9.3 旋轉方塊電路 113
5.9.4 心跳電路 114
5.9.5 旋轉的LED標語電路 114
5.9.6 增強型秒表 114
5.9.7 數據寬度可變的FIFO 114
5.9.8 堆棧 115
5.9.9 基于ROM的符號幅值加
法器 115
5.9.10 基于ROM的溫度轉換 115
第6章 FSM 116
6.1 簡介 116
6.1.1 Mealy和Moore輸出 116
6.1.2 FSM的表示方法 116
6.2 FSM代碼開發 118
6.3 設計實例 120
6.3.1 上升沿檢測器 120
6.3.2 去抖電路 125
6.3.3 測試電路 128
6.4 文獻注釋 130
6.5 推薦實驗 130
6.5.1 雙邊沿檢測器 130
6.5.2 另一種去抖電路 130
6.5.3 停車場占用情況計數器 131
第7章 FSMD 132
7.1 引言 132
7.1.1 單一RT操作 132
7.1.2 ASMD圖 133
7.1.3 含寄存器的選擇框 134
7.2 FSMD代碼開發 135
7.2.1 基于RT方法的去抖電路 135
7.2.2 含顯示描述數據通路組件
的代碼 136
7.2.3 含隱式描述數據通路組件
的代碼 139
7.2.4 比較 141
7.3 設計實例 142
7.3.1 斐波那契數電路 142
7.3.2 除法電路 145
7.3.3 二進制—BCD碼轉換電路 148
7.3.4 周期計數器 151
7.3.5 精確的低頻計數器 154
7.4 文獻注釋 157
7.5 推薦實驗 157
7.5.1 另一種去抖電路 157
7.5.2 BCD—二進制碼轉換電路 158
7.5.3 含BCD I/O的斐波那契數
生成電路:設計方法1 158
7.5.4 含BCD I/O的斐波那契數
生成電路:設計方法2 158
7.5.5 自動進位制的低頻計數器 158
7.5.6 反應計時器 159
7.5.7 Babbage差分機模擬電路 160
第8章 Verilog精選主題 161
8.1 阻塞賦值語句和非阻塞賦值
語句 161
8.1.1 概述 161
8.1.2 組合電路 163
8.1.3 存儲器單元 164
8.1.4 混合阻塞和非阻塞兩種賦值
語句的時序電路 165
8.2 時序電路的另一種編碼方式 167
8.2.1 二進制計數器 167
8.2.2 FSM 170
8.2.3 FSMD 171
8.2.4 總結 173
8.3 有符號數據類型的使用 173
8.3.1 概述 173
8.3.2 Verilog-1995中的有符號數 174
8.3.3 Verilog-2001中的有符號數 175
8.4 綜合中函數的使用 175
8.4.1 概述 175
8.4.2 例子 176
8.5 附加的測試平臺開發結構 178
8.5.1 always塊和initial塊 178
8.5.2 進程語句 178
8.5.3 時序控制 180
8.5.4 延時控制 180
8.5.5 事件控制 181
8.5.6 wait語句 181
8.5.7 timescale指令 181
8.5.8 系統函數和系統任務 182
8.5.9 用戶自定義的函數和任務 186
8.5.10 完備的測試平臺的實例 187
8.6 文獻注釋 193
8.7 推薦實驗 193
8.7.1 使用阻塞賦值語句和非阻
塞賦值語句的移位寄存器 193
8.7.2 BCD計數器的另一種編碼
風格 194
8.7.3 FIFO緩存器的另一種編碼
方式 194
8.7.4 斐波那契數生成電路的另一
種編碼方式 194
8.7.5 雙模式比較器 194
8.7.6 增強型二進制計數器的
監測器 194
8.7.7 FIFO緩存器的測試平臺 194

第2部分 基本Nios II軟件開發

第9章 Nios II處理器概述 196
9.1 引言 196
9.2 寄存器文件和ALU 198
9.2.1 寄存器文件 198
9.2.2 ALU 198
9.3 存儲器和I/O結構 198
9.3.1 Nios II的存儲器接口 198
9.3.2 存儲器層次結構概述 198
9.3.3 虛擬存儲器 199
9.3.4 存儲器保護 199
9.3.5 高速緩沖存儲器 199
9.3.6 緊密耦合存儲器 200
9.3.7 I/O結構 200
9.3.8 互連結構 200
9.4 異常和中斷處理 201
9.5 JTAG調試模塊 201
9.6 文獻注釋 201
9.7 推薦實驗 201
9.7.1 Nios II和MIPS的比較 201
第10章 Nios II系統的引用和底層
訪問 202
10.1 開發流程的再介紹 202
10.1.1 硬件開發 202
10.1.2 軟件開發 202
10.1.3 閃爍LED系統 204
10.2 Nios II硬件生成教程 204
10.2.1 在Quartus II中創建一個
硬件工程 204
10.2.2 創建Nios II系統,生成
HDL代碼 204
10.2.3 創建頂層HDL文件用于
實例化Nios II系統 209
10.2.4 編譯和下載程序 210
10.3 Nios II SBT GUI教程 210
10.3.1 創建BSP庫 210
10.3.2 使用BSP編輯器配置BSP 211
10.3.3 創建用戶應用目錄并添加
應用程序文件 212
10.3.4 生成和運行軟件 212
10.3.5 檢查代碼大小 213
10.4 針對軟硬件一致性的系統
id核 213
10.5 底層I/O直接訪問 214
10.5.1 C語言指針的復習 215
10.5.2 I/O寄存器的C指針 215
10.6 魯棒的底層I/O訪問 216
10.6.1 system.h 216
10.6.2 alt_types.h 217
10.6.3 io.h 217
10.7 一些關于底層I/O操作的C語
言技巧 218
10.7.1 位處理 218
10.7.2 打包和拆包 219
10.8 軟件開發 219
10.8.1 基本的嵌入式程序框架 219
10.8.2 主程序和任務程序 220
10.9 文獻注釋 221
10.10 推薦實驗 221
10.10.1 追趕LED電路 221
10.10.2 碰撞LED電路 222
10.10.3 脈寬調制電路 222
10.10.4 旋轉方塊電路 222
10.10.5 心跳電路 222
10.11 完整程序清單 222
第11章 預先設計的Nios II I/O外設 224
11.1 概述 224
11.2 PIO核 224
11.2.1 配置 225
11.2.2 寄存器映射 227
11.2.3 用戶可見寄存器 227
11.3 JTAG UART 核 228
11.3.1 配置 228
11.3.2 寄存器映射 229
11.4 內部定時器核 229
11.4.1 配置 229
11.4.2 寄存器映射 230
11.5 增強型閃爍LED Nios II系統 231
11.5.1 SOPC設計 232
11.5.2 頂層HDL文件 235
11.6 增強型閃爍LED系統軟件
開發 236
11.6.1 設備驅動介紹 236
11.6.2 增強型閃爍LED系統程序
結構 236
11.6.3 主程序 237
11.6.4 函數命名習慣 237
11.7 設備驅動程序 238
11.7.1 PIO外設驅動 238
11.7.2 JATA UART 240
11.7.3 定時器 241
11.8 任務程序 242
11.8.1 函數flashsys_init_v1( ) 242
11.8.2 函數sw_get_command_v1( ) 242
11.8.3 函數jtaguart_disp_msg_v1( ) 243
11.8.4 函數sseg_disp_msg_v1( ) 243
11.8.5 函數led_flash_v1( ) 244
11.9 軟件構建和測試 245
11.10 文獻注釋 245
11.11 推薦實驗 245
11.11.1 閃爍LED系統的
“Uptime”特性 245
11.11.2 不同定時器模式的計數 246
11.11.3 JTAG UART輸入 246
11.11.4 增強型沖撞LED電路 246
11.11.5 旋轉LED標語電路 246
11.11.6 改進的秒表 246
11.11.7 停車場占用情況計數器 246
11.11.8 帶按鈕開關控制的反應
時間定時器 247
11.11.9 帶鍵盤控制的反應時間
定時器 247
11.11.10 串行端口通信 247
11.12 完整程序清單 247
第12章 預先設計的Nios II I/O驅動和
HAL API 256
12.1 HAL概述 256
12.1.1 桌面式嵌入式系統和
準系統嵌入式系統 256
12.1.2 HAL范式 257
12.1.3 設備類別 258
12.1.4 遵從HAL的設備驅動 258
12.1.5 _regs.h文件 259
12.1.6 基于HAL的初始化序列 260
12.2 BSP 260
12.2.1 概述 260
12.2.2 BSP文件結構 261
12.2.3 BSP配置 262
12.3 基于HAL的閃爍LED程序 263
12.3.1 使用通用I/O設備的
函數 264
12.3.2 使用非通用I/O設備的
函數 266
12.3.3 初始化程序和主程序 266
12.3.4 軟件構建和測試 267
12.4 設備驅動程序考慮 268
12.4.1 I/O訪問法 268
12.4.2 比較 269
12.4.3 本書中的驅動程序 271
12.5 文獻注釋 271
12.6 推薦實驗 271
12.6.1 閃爍LED系統的
“Uptime”特性 271
12.6.2 改進的碰撞LED電路 271
12.6.3 停車場使用情況計數器 271
12.6.4 帶鍵盤控制的反應定時器 271
12.6.5 數字鬧鐘 271
12.7 完整程序清單 272
第13章 中斷及中斷服務程序 275
13.1 HAL框架中的中斷處理 275
13.1.1 概述 275
13.1.2 Nios II處理器的中斷
控制器 276
13.1.3 頂層異常處理程序 276
13.1.4 中斷服務程序 277
13.2 基于中斷的閃爍LED程序 277
13.2.1 定時器核的中斷 278
13.2.2 定時器核的驅動 278
13.2.3 中斷服務程序(版本1) 279
13.2.4 中斷服務程序(版本2) 281
13.3 中斷和調度 282
13.3.1 調度 282
13.3.2 性能 283
13.4 文獻注釋 284
13.5 推薦實驗 285
13.5.1 含按鈕開關ISR程序的
閃爍LED系統 285
13.5.2 ISR驅動的閃爍LED
系統 285
13.5.3 閃爍LED系統中的
“Uptime”特性 285
13.5.4 帶鍵盤控制的反應時間
定時器 285
13.5.5 數字鬧鐘 285
13.6 完整程序清單 285

第3部分 用戶I/O外設開發

第14章 帶PIO核的用戶I/O外設 292
14.1 引言 292
14.2 集成除法電路到Nios II
系統 292
14.2.1 PIO模塊 292
14.2.2 集成 293
14.3 測試 293
14.4 推薦實驗 296
14.4.1 除法核的ISR 296
14.4.2 8位數據的除法核 296
14.4.3 64位數據的除法核 296
14.4.4 斐波那契數電路 297
14.4.5 周期計數器 297
第15章 Avalon互連與SOPC組件 298
15.1 引言 298
15.2 Avalon MM接口 300
15.2.1 Avalon MM從設備接口
信號 300
15.2.2 Avalon MM從設備接口
性質 301
15.2.3 Avalon MM從設備時序 301
15.3 Avalon接口的系統互連結構 304
15.4 SOPC I/O組件封裝電路 305
15.4.1 接口I/O緩存器 306
15.4.2 內存對齊 308
15.4.3 Avalon MM主設備的
輸出譯碼 308
15.4.4 Avalon MM主設備的
輸入多路選擇 310
15.4.5 實際考慮 311
15.5 SOPC組件構建指南 311
15.5.1 Avalon接口 312
15.5.2 寄存器映射 312
15.5.3 封裝的除法電路 313
15.5.4 SOPC組件創建 315
15.5.5 SOPC組件實例化 320
15.6 測試 320
15.7 文獻注釋 323
15.8 推薦實驗 323
15.8.1 除法核的ISR 323
15.8.2 除法核的另一種緩存
方案 323
15.8.3 8位數據的除法核 323
15.8.4 64位數據的除法核 323
15.8.5 斐波那契數電路 323
15.8.6 周期計數器 323
第16章 SRAM和SDRAM控制器 324
16.1 DE1開發板存儲器資源 324
16.2 時序和時鐘管理的概述 324
16.2.1 時鐘分配網絡 324
16.2.2 片外訪問的時序問題 325
16.2.3 PLL 326
16.3 SRAM概述 327
16.3.1 SRAM單元 327
16.3.2 基本結構 327
16.3.3 時序 328
16.3.4 IS61LV25616AL SRAM
芯片 329
16.4 SRAM控制器IP核 330
16.4.1 Avalon接口 331
16.4.2 控制器電路 332
16.4.3 SOPC組件的創建 333
16.5 DRAM概述 334
16.5.1 DRAM單元 334
16.5.2 基本的DRAM結構 335
16.5.3 DRAM時序 336
16.6 SDRAM概述 337
16.6.1 基本的SDRAM結構 337
16.6.2 SDRAM時序 338
16.6.3 ICSI IS42S16400 SDRAM
芯片 340
16.7 SDRAM控制器和PLL 340
16.7.1 基本的SDRAM控制器 340
16.7.2 SDRAM控制器IP核 341
16.7.3 SOPC PLL IP核 342
16.8 測試系統 344
16.8.1 測試硬件配置 344
16.8.2 測試軟件 346
16.9 文獻注釋 349
16.10 推薦實驗 349
16.10.1 沒有I/O寄存器的
SRAM控制器 349
16.10.2 SRAM控制器速度測試 349
16.10.3 帶Avalon MM三態接
口的SRAM控制器 349
16.10.4 SDRAM控制器時鐘
偏斜測試 349
16.10.5 存儲器性能比較 350
16.10.6 鎖存器的影響 350
16.10.7 從零構建SDRAM
控制器 350
16.11 完整程序清單 350
第17章 PS2鍵盤和鼠標 352
17.1 引言 352
17.2 PS2接收子系統 352
17.2.1 PS2設備到主機的通信
協議 352
17.2.2 設計和代碼 353
17.3 PS2傳送子系統 356
17.3.1 主機到PS2設備的通信
協議 356
17.3.2 設計和代碼 357
17.4 完整的PS2系統 361
17.5 PS2控制器IP核開發 363
17.5.1 Avalon接口 363
17.5.2 寄存器映射 363
17.5.3 封裝的PS2系統 364
17.5.4 SOPC組件創建 365
17.6 PS2驅動 365
17.6.1 寄存器映射 366
17.6.2 寫操作程序 366
17.6.3 讀操作程序 366
17.7 鍵盤驅動 367
17.7.1 掃描碼概述 367
17.7.2 與主機的交互 368
17.7.3 驅動程序 369
17.8 鼠標驅動 373
17.8.1 PS2鼠標協議概述 373
17.8.2 與主機的交互 373
17.8.3 驅動程序 374
17.9 測試 376
17.10 書中用戶IP核的使用 379
17.10.1 文件組織結構 379
17.10.2 SOPC庫集成 379
17.10.3 綜合的Nios II測試系統 380
17.11 文獻注釋 385
17.12 推薦實驗 385
17.12.1 帶看門狗定時器的PS2
接收子系統 385
17.12.2 軟件接收FIFO 385
17.12.3 軟件PS2控制器 385
17.12.4 鍵盤控制的LED閃爍
電路 385
17.12.5 增強型鍵盤驅動程序I 386
17.12.6 增強型鍵盤驅動程序II 386
17.12.7 遙控模式鼠標驅動 386
17.12.8 滾輪鼠標驅動 386
17.13 完整程序清單 386
第18章 VGA控制器 399
18.1 引言 399
18.1.1 CRT顯示器的基本操作 399
18.1.2 DE1板上的VGA端口 400
18.1.3 視頻控制器 400
18.2 VGA同步 402
18.2.1 水平同步 402
18.2.2 垂直同步 403
18.2.3 VGA同步信號時序計算 403
18.2.4 HDL實現 404
18.3 基于SRAM的視頻RAM
控制器 406
18.3.1 視頻存儲器概述 406
18.3.2 DE1開發板的存儲器
問題 407
18.3.3 Ad Hoc SRAM控制器 407
18.3.4 HDL代碼 411
18.4 調色板電路 414
18.5 視頻控制器IP核的開發 415
18.5.1 完整的視頻控制器 415
18.5.2 Avalon 接口 416
18.5.3 寄存器映射 416
18.5.4 封裝的視頻控制器 416
18.5.5 SOPC組件創建 418
18.6 視頻驅動 418
18.6.1 視頻內存訪問程序 418
18.6.2 幾何模型程序 419
18.6.3 位圖處理函數 421
18.6.4 位映射文本程序 423
18.7 鼠標處理程序 426
18.8 測試程序 427
18.8.1 圖形繪制程序 429
18.8.2 通用繪圖程序 430
18.8.3 豎條交換程序 432
18.8.4 鼠標演示程序 433
18.8.5 位映射文本程序 434
18.9 位圖文件處理 434
18.9.1 BMP格式概述 435
18.9.2 BMP文件的生成 435
18.9.3 基于子畫面的設計 436
18.9.4 BMP文件訪問 437
18.9.5 基于主機的文件系統 437
18.9.6 位圖文件獲取程序 437
18.10 文獻注釋 441
18.11 推薦實驗 442
18.11.1 基于PLL的VGA控
制器 442
18.11.2 使用16位內存配置的
VGA控制器 442
18.11.3 三位色彩深度的VGA
控制器 442
18.11.4 一位顏色深度的VGA
控制器 442
18.11.5 帶雙緩存的VGA控
制器 442
18.11.6 分辨率為320 × 240的
VGA控制器 442
18.11.7 含垂直模式操作的VGA
控制器 442
18.11.8 幾何模型函數 442
18.11.9 位圖處理函數 443
18.11.10 模擬“神奇畫板”玩具 443
18.11.11 調色板查找表電路 443
18.11.12 虛擬LED閃爍系統
控制板 443
18.11.13 虛擬模擬掛鐘 443
18.12 推薦工程 443
18.12.1 可配置的VGA控制器 443
18.12.2 使用系統SDRAM的
VGA控制器 444
18.12.3 繪圖程序 444
18.12.4 視頻游戲 444
18.13 完整程序清單 444
第19章 音頻編解碼控制器 469
19.1 引言 469
19.1.1 編解碼器概述 469
19.1.2 WM8731芯片簡介 469
19.1.3 WM8731芯片寄存器 470
19.2 I2C控制器 473
19.2.1 I2C接口概述 473
19.2.2 HDL實現 474
19.3 編解碼器數據訪問控制器 481
19.3.1 數字音頻接口概述 481
19.3.2 HDL實現 481
19.4 音頻編解碼控制器IP核
開發 484
19.4.1 完整的音頻編解碼控
制器 484
19.4.2 Avalon接口 486
19.4.3 寄存器映射 486
19.4.4 封裝的音頻編解碼控
制器 487
19.4.5 SOPC組件創建 489
19.5 編解碼驅動 489
19.5.1 I2C命令程序 490
19.5.2 數據源選擇程序 490
19.5.3 芯片初始化程序 491
19.5.4 音頻數據訪問程序 491
19.6 測試程序 492
19.7 音頻文件處理 496
19.7.1 WAV格式概述 496
19.7.2 音頻格式轉換程序 497
19.7.3 音頻數據讀取程序 497
19.8 文獻注釋 499
19.9 推薦實驗 500
19.9.1 軟件I2C控制器 500
19.9.2 使用主設備時鐘模式設計
硬件數據訪問控制器 500
19.9.3 使用從設備時鐘模式的
軟件數據訪問控制器 500
19.9.4 使用主設備時鐘模式的
軟件數據訪問控制器 500
19.9.5 可配置的數據訪問控
制器 500
19.9.6 語音錄音機 500
19.9.7 實時正弦波發生器 501
19.9.8 實時音頻波形顯示 501
19.9.9 回音效果 501
19.10 推薦工程 501
19.10.1 完整的I2C控制器 501
19.10.2 數字均衡器 501
19.10.3 數字音頻示波器 502
19.11 完整程序清單 502
第20章 SD卡控制器 514
20.1 SD卡概述 514
20.2 SPI控制器 514
20.2.1 SPI接口概述 514
20.2.2 HDL實現 515
20.3 SPI控制器IP核開發 518
20.3.1 Avalon接口 518
20.3.2 寄存器映射 518
20.3.3 封裝的SPI控制器 519
20.3.4 SOPC組件創建 520
20.4 SD卡協議 520
20.4.1 SD卡的命令和響應格式 520
20.4.2 初始化和辨識過程 522
20.4.3 數據讀和寫過程 523
20.5 SPI與SD卡驅動程序 524
20.5.1 SPI驅動程序 524
20.5.2 SD卡驅動程序 525
20.6 文件訪問 531
20.6.1 FAT16結構概述 531
20.6.2 只讀FAT16文件訪問
驅動程序 535
20.7 測試程序 543
20.8 SD卡的數據傳輸性能 547
20.9 文獻注釋 548
20.10 推薦實驗 548
20.10.1 SD卡的數據傳輸性能
測試 548
20.10.2 魯棒性強的SD卡驅動
程序 548
20.10.3 SD卡存取的專用處
理器 548
20.10.4 基于硬件的SD卡的讀寫
操作 548
20.10.5 SD卡信息讀取 549
20.10.6 MMC卡支持 549
20.10.7 多扇區讀寫操作 549
20.10.8 帶CRC校驗的SD卡
驅動程序 549
20.10.9 數字音樂播放器 549
20.10.10 數字相框 549
20.10.11 附加的FAT功能 549
20.11 推薦工程 550
20.11.1 HAL API文件訪問集成 549
20.12 完整程序清單 550

第4部分 硬件加速器實例研究

第21章 GCD加速器 572
21.1 引言 572
21.2 軟件實現 573
21.3 硬件實現 573
21.3.1 ASMD圖 573
21.3.2 HDL實現 574
21.4 時間測量 576
21.4.1 HAL時間戳驅動 576
21.4.2 定制的硬件計數器 577
21.5 GCD加速器IP核開發 577
21.5.1 Avalon接口 577
21.5.2 寄存器映射 577
21.5.3 封裝的GCD加速器 578
21.6 測試程序 580
21.6.1 GCD程序 580
21.6.2 主程序 581
21.7 性能比較 582
21.8 文獻注釋 583
21.9 推薦實驗 583
21.9.1 使用其他處理器配置
的性能 583
21.9.2 最小規模的GCD加速器 583
21.9.3 帶后補零電路的GCD
加速器 583
21.9.4 64位數據的GCD加
速器 583
21.9.5 128位數據的GCD加
速器 583
21.9.6 歐拉算法的GCD 583
21.10 完整程序清單 583
第22章 Mandelbrot集合分形加速器 587
22.1 引言 587
22.1.1 Mandelbrot集合的概述 587
22.1.2 Mandelbrot集合點的
確定 588
22.1.3 配色方案 589
22.1.4 分形圖像的生成 589
22.2 定點運算 590
22.3 函數calc_frac_point( )的軟件
實現 591
22.4 函數calc_frac_point( )的硬件
實現 592
22.4.1 ASMD圖 592
22.4.2 HDL實現 592
22.5 Mandelbrot集合分形加速器
IP核開發 594
22.5.1 Avalon接口 594
22.5.2 寄存器映射 595
22.5.3 封裝的Mandelbrot集合
分形加速器 595
22.6 測試程序 596
22.6.1 分形圖形用戶接口 596
22.6.2 分形硬件加速器引擎控制
程序 598
22.6.3 分形繪圖程序 598
22.6.4 文本區顯示程序 599
22.6.5 鼠標處理程序 601
22.6.6 主程序 603
22.7 討論 603
22.8 文獻注釋 604
22.9 推薦實驗 604
22.9.1 含一個乘法器的硬件
加速器 604
22.9.2 逃逸條件修改的硬件
加速器 604
22.9.3 使用Q4.12格式的硬件
加速器 604
22.9.4 多個分形引擎的硬件
加速器 604
22.9.5 “Burning-ship”分形 605
22.9.6 改進的測試程序 605
22.10 推薦工程 605
22.10.1 浮點硬件加速器 605
22.10.2 通用畫分形圖平臺 605
22.11 完整程序清單 605
第23章 直接數字頻率合成 616
23.1 引言 616
23.2 設計和實現 616
23.2.1 數字波形的直接合成 616
23.2.2 未調制的模擬波形的直接
合成 617
23.2.3 調制的模擬波形的直接
合成 618
23.2.4 HDL實現 618
23.3 DDFS IP核開發 621
23.3.1 Avalon接口 621
23.3.2 寄存器映射 621
23.3.3 封裝的DDFS電路 622
23.3.4 編解碼器的DAC集成 623
23.4 DDFS驅動 623
23.4.1 配置程序 624
23.4.2 初始化程序 625
23.5 測試 625
23.5.1 音符的概括和合成 625
23.5.2 測試程序 626
23.6 文獻注釋 630
23.7 推薦實驗 630
23.7.1 正交相位載波生成 630
23.7.2 縮減的相位—幅度查找表 631
23.7.3 合成音樂播放器 631
23.7.4 鍵盤鋼琴 631
23.7.5 鍵盤記錄儀 631
23.7.6 硬件包絡發生器 631
23.7.7 諧波疊加合成器 631
23.7.8 采樣合成器 631
23.8 推薦工程 632
23.8.1 聲音發生器 632
23.8.2 函數發生器 632
23.8.3 完整的電子合成器 632
23.9 完整程序清單 632
參考文獻 640
序: