|
-- 會員 / 註冊 --
|
|
|
|
基于Nios II的嵌入式SoPC系統設計與Verilog開發實例 ( 簡體 字) |
作者:金明錄 門宏志 | 類別:1. -> 電子工程 -> 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 |
序: |
|