3dwoo大學簡體電腦書店
嵌入式多核DSP高性能軟件開發
( 簡體 字)
作者:夏際金、趙洪立、李川類別:1. -> 電腦組織與體系結構 -> 單晶片 -> DSP
出版社:清華大學出版社嵌入式多核DSP高性能軟件開發 3dWoo書號: 55513
詢問書籍請說出此書號!
有庫存
NT售價: 640
出版日:1/1/2022
頁數:539
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787302589365 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章TI多核C66xDSP介紹
1.1C6678處理器
1.1.1C6678概覽
1.1.2外圍設備
1.266AK處理器
1.366AK2H14/12/06和C6678各項功能對比
1.4C66x處理器內核
1.5電源休眠控制器
1.5.1C66x內核電源休眠管理介紹
1.5.2電源休眠管理特征
1.6鎖相環及其設置
1.6.1主PLL和PLL控制器
1.6.2DDR3PLL
1.6.3PASSPLL
1.7C6678處理器接口通信相關外圍設備
1.7.1I2C外圍設備
1.7.2SPI外圍設備
1.7.3HyperLink外圍設備
1.7.4UART外圍設備
1.7.5PCIe外圍設備
1.7.6TSIP外圍設備
1.7.7EMIF16外圍設備
1.7.8網絡協處理器和以太網驅動程序
1.7.9串行RapidIO(SRIO)端口
1.7.10通用目的輸入/輸出(GPIO)
1.8定時器
1.9信號量
1.10多核導航器
1.10.1PDSP固件
1.10.2PacketDMA
1.10.3隊列管理器
1.10.4描述符
1.10.5包發送過程概述
1.10.6包接收過程概述
1.10.7映射信息
1.11設計建議
1.11.1初始化
1.11.2接口驅動程序
1.11.3時間戳的獲取
1.11.4EVM板的使用
1.11.5示例程序



第2章C66x多核引導方法
2.1多核引導概述
2.2復位
2.3RBL引導
2.3.1RBL簡介
2.3.2RBL引導過程
2.3.3引導模式分類
2.3.4引導模式設置
2.3.5引導配置格式
2.4EVM板上SPINORFlash引導設計
2.4.1RBL執行過程
2.4.2需要引導的應用程序
2.4.3應用程序中的引導代碼
2.4.4燒寫引導鏡像的生成
2.4.5程序燒寫
2.4.6SPINORFlash二次引導的設計
2.5多核引導和改進
2.6I2C二級引導(IBL和MAD)
2.6.1MAD基礎組件
2.6.2MAD使用模式
2.6.3多核應用程序部署工具包
2.6.4在目標上調試應用程序
2.6.5ImageProcessing示例程序使用MAD工具實現多核加載
2.7設計建議和注意事項

第3章SRIO
3.1SRIO介紹
3.1.1物理層1×/4×LP系列規范
3.1.2SRIO外圍數據流
3.1.3SRIO包
3.2SerDes宏及其配置
3.3DeviceID配置
3.4支持Rx組播和多個DestID
3.4.1離散組播ID支持
3.4.2混雜ID和DestID支持
3.4.3接收模式設置
3.5回環
3.5.1內部數字回環
3.5.2SERDES回環
3.5.3外部線路回環
3.6菊花鏈操作和包轉發
3.6.1包轉發介紹
3.6.2包轉發設置
3.7DirectIO操作
3.7.1LSU模塊介紹
3.7.2定義LSU寄存器組合及中斷狀態方式
3.7.3設置LSU寄存器
3.7.4詳細數據路徑描述
3.7.5Tx操作
3.7.6Rx操作
3.7.7DirectIO操作特殊情況
3.7.8調度
3.7.9錯誤處理
3.7.10DirectIO編程注意事項
3.8消息傳遞
3.8.1Rx操作
3.8.2Tx操作
3.8.3消息PacketDMA設置
3.8.4消息傳送編程示例
3.9維護
3.10門鈴操作
3.11原子操作
3.12擁塞控制
3.13字節存儲順序
3.13.1內存映射寄存器空間的轉換
3.13.2有效負載數據的轉換
3.14中斷操作
3.14.1DirectIO(門鈴)服務中斷
3.14.2消息傳遞服務中斷
3.14.3中斷寄存器
3.14.4中斷處理
3.14.5中斷調步
3.15中斷設置
3.16其他SRIO編程注意事項
3.16.1匹配ACKID
3.16.2軟件復位
3.16.3優化和技巧提示
3.17SRIO_LoopbackDioIsrexampleproject介紹

第4章C66x存儲器組織
4.1C66x存儲控制器
4.1.1L1P存儲控制器
4.1.2L1D存儲控制器
4.1.3L2存儲控制器
4.1.4外部存儲控制器
4.1.5擴展存儲控制器
4.2多核共享存儲控制器
4.2.1概覽
4.2.2C66x內核從接口
4.2.3系統從接口
4.2.4系統主接口
4.2.5外部存儲器主接口
4.2.6MSMC存儲器
4.3擴展存儲控制器XMC
4.3.1存儲器映射寄存器概要
4.3.2XMC存儲器保護和地址擴展
4.3.3存儲器保護和地址擴展過程
4.3.4地址擴展
4.3.5XMC存儲器保護結構支持
4.3.6預取緩沖
4.4存儲器保護架構
4.4.1存儲器保護的目的
4.4.2特權級別
4.4.3存儲器保護架構
4.5帶寬管理
4.5.1介紹
4.5.2帶寬管理架構
4.5.3帶寬管理寄存器
4.6設計建議
4.6.1合理規劃使用存儲器
4.6.2存儲器設置成不被Cache緩存和預取

第5章Cache緩存和數據一致性
5.1為什么使用Cache
5.2C64x和C66xDSP之間的Cache區別
5.3Cache存儲器結構概覽
5.4Cache基礎知識
5.4.1直接映射Cache——L1PCache
5.4.2Cache缺失的類型
5.4.3組相聯Cache
5.4.4二級Cache
5.5L1PCache
5.5.1L1P存儲器和Cache
5.5.2L1PCache結構
5.5.3L1P凍結模式
5.5.4程序啟動的一致性操作
5.6L1DCache
5.6.1L1D存儲器和Cache
5.6.2L1DCache結構
5.6.3L1D凍結模式
5.6.4程序發起的Cache一致性操作
5.7L2Cache
5.7.1L2存儲器和Cache
5.7.2L2Cache結構
5.7.3L2凍結模式
5.7.4程序發起的Cache一致性操作
5.7.5Cache能力控制
5.8使用Cache
5.8.1配置L1Cache
5.8.2配置L2Cache
5.9數據一致性
5.9.1Snoop一致性協議
5.9.2在外部存儲器和Cache之間維持一致性
5.9.3對L2Cache一致性操作使用指導
5.9.4對L1Cache一致性操作使用指導
5.10片上Debug支持
5.11在運行中改變Cache配置
5.11.1禁用外部存儲器Cache功能
5.11.2在運行中改變Cache尺寸
5.12優化Cache性能
5.12.1Cache性能特征
5.12.2阻塞情況
5.12.3優化技術概覽
5.12.4應用級優化
5.12.5過程級優化
5.12.6C66xDSPCache一致性操作小結
5.13設計建議
5.13.1消除虛假地址
5.13.2數據一致性問題

第6章DMA傳輸
6.1IDMA
6.1.1IDMA結構
6.1.2IDMA通道0
6.1.3IDMA通道1
6.2EDMA3控制器
6.2.1EDMA3控制器介紹
6.2.2EDMA3器件特定的信息
6.2.3EDMA3通道控制器配置
6.2.4EDMA3傳輸控制器配置
6.2.5EDMA3通道同步事件
6.2.6EDMA3通道控制器
6.2.7EDMA3傳輸控制器
6.3EDMA3傳輸類型
6.3.1A同步傳輸
6.3.2AB同步傳輸
6.4參數RAM
6.4.1PaRAM參數集
6.4.2Dummy與Null傳輸比較
6.4.3參數集更新
6.4.4連接傳輸
6.4.5常數地址模式傳輸/對齊問題
6.4.6單元大小
6.5發起一個DMA傳輸
6.5.1DMA通道
6.5.2QDMA通道
6.5.3完成一個DMA傳輸
6.5.4EDMA3中斷
6.6提升DMA性能的幾點建議
6.6.1盡量用較大的ACNT
6.6.2線性傳輸
6.6.3地址對齊
6.6.4恰當使用多個CC和TC傳輸

第7章中斷和異常
7.1C6678處理器中斷簡介
7.2芯片中斷控制器
7.3C66x內核中斷控制器概述
7.3.1特征
7.3.2功能塊圖
7.4中斷控制器結構
7.4.1事件寄存器
7.4.2事件合并器
7.4.3中斷選擇器
7.4.4異常合并器
7.5C66x內核事件
7.6中斷控制器與DSP交互
7.6.1DSP中斷控制器接口
7.6.2DSP服務中斷事件
7.7C6678中斷的設計
7.7.1不經過CIC的中斷事件
7.7.2經過CIC的中斷
7.7.3中斷掛接
7.7.4多個事件映射同一中斷的掛接
7.8中斷設計建議
7.8.1不要過多使用中斷或中斷嵌套
7.8.2中斷服務程序中代碼不宜過長
7.8.3中斷服務程序改變的全局變量要加上volatile標志

第8章如何使用CCS
8.1常用界面
8.1.1ProjectExplorer
8.1.2程序窗口
8.1.3目標配置窗口
8.1.4Debug窗口
8.1.5Memory窗口
8.1.6Expressions窗口
8.1.7Breakpoints窗口
8.1.8Problems窗口
8.1.9Console窗口
8.2新建工程
8.3新建一個目標配置文件
8.3.1新建ccxml文件
8.3.2設置仿真器
8.3.3添加器件
8.4常用操作
8.4.1Launch
8.4.2Group
8.4.3Connect
8.4.4加載程序
8.4.5設置斷點調試程序
8.4.6復位
8.5常見問題
8.5.1頭文件找不到
8.5.2EVM板未初始化,調試找不到DDR3
8.5.3選中不了仿真器
8.5.4加斷點調試錯誤
8.5.5域選擇不正確
8.5.6仿真器連接中斷電
8.6設置字體和代碼風格
8.6.1修改字體
8.6.2代碼風格設置
8.7MCSDK
8.7.1MCSDK架構
8.7.2MCSDK特點
8.8TI函數庫調用
8.8.1格式選擇
8.8.2庫的調用
8.8.3庫的使用
8.9理解CMD文件
8.9.1CMD文件簡介
8.9.2MEMORY命令
8.9.3SECTIONS命令

第9章SYS/BIOS實時操作系統
9.1什么是SYS/BIOS
9.1.1SYS/BIOS的優勢
9.1.2SYS/BIOS和XDCTOOL的關系
9.2SYS/BIOS包
9.3SYS/BIOS中使用C++
9.3.1存儲器管理
9.3.2NameMangling
9.3.3從配置調用對象方法
9.3.4類構造器和析構器
9.4SYS/BIOS配置和編譯
9.4.1在工程中添加SYS/BIOS支持
9.4.2創建一個獨立的配置工程
9.4.3配置SYS/BIOS應用
9.4.4用XGCONF打開一個配置文件
9.4.5用XGCONF執行任務
9.4.6保存配置
9.4.7關于XCONFG視圖
9.4.8使用可用產品視圖
9.4.9使用概要視圖
9.4.10使用屬性視圖
9.4.11使用問題視圖
9.4.12找到并修正錯誤
9.5編譯一個SYS/BIOS應用
9.5.1了解編譯流程
9.5.2編譯和連接優化
9.6線程模塊
9.6.1SYS/BIOS啟動順序
9.6.2線程模塊的概覽
9.6.3線程類型
9.6.4線程優先級
9.6.5讓步和搶占
9.6.6鉤子
9.7硬件中斷
9.7.1創建中斷
9.7.2硬件中斷嵌套和系統堆棧大小
9.7.3硬件鉤子
9.8軟件中斷
9.8.1創建軟件中斷對象
9.8.2設置軟件中斷優先級
9.8.3軟件中斷優先級和系統堆棧大小
9.8.4軟件中斷執行
9.8.5優點和折中
9.8.6軟件中斷函數同步
9.8.7軟件鉤子
9.9任務
9.9.1創建任務
9.9.2任務執行狀態和調度
9.9.3任務堆棧
9.9.4測試堆棧溢出
9.9.5任務鉤子
9.9.6空閑循環
9.10SYS/BIOS同步模塊
9.10.1信號量
9.10.2事件模塊
9.10.3門模塊
9.10.4郵箱
9.10.5隊列
9.11定時服務
9.12Memory
9.12.1新建一個Platform
9.12.2棧
9.12.3Cache配置
9.12.4CacheRuntimeAPI
9.12.5動態存儲器分配
9.12.6Heap的實施
9.13硬件抽象層
9.14典型設計實例和建議
9.14.1典型設計
9.14.2設計建議
9.14.3RTA分析
9.14.4SYS/BIOSSemaphore與Semaphore2

第10章多核并行設計
10.1并行粒度和并行級別
10.2并行方式
10.3任務類型
10.3.1相同任務的多個副本
10.3.2多個獨立任務
10.3.3單個任務拆分成多個子任務
10.3.4多個松散耦合任務
10.3.5耦合度高的任務
10.4依賴關系
10.4.1數據依賴
10.4.2存儲器依賴
10.5死鎖和活鎖
10.5.1死鎖
10.5.2活鎖
10.6同步
10.6.1SYS/BIOS同步模塊
10.6.2采用控制信號實現多核對等同步
10.7forkjoin
10.8OpenMP并行設計
10.9任務級優化設計
10.9.1一種典型的任務處理流程
10.9.2優化設計實例

第11章軟件優化設計
11.1for循環優化
11.1.1移出能在循環外完成的計算
11.1.2循環體內的大運算換成小運算
11.1.3多重循環
11.1.4for循環中有判斷
11.2多核for循環并行任務優化
11.2.1資源占用小的for循環
11.2.2資源占用大的for循環
11.3if聲明優化
11.3.1if轉換
11.3.2消除if聲明
11.3.3相同代碼合并減少if聲明
11.3.4減少嵌套的if
11.3.5優化條件表達式
11.3.6優化稀疏矩陣
11.4軟件流水
11.5正確使用編譯指示和關鍵字
11.5.1restrict關鍵字
11.5.2_nassert關鍵字
11.5.3interrupt中斷關鍵字
11.5.4near和far關鍵字
11.5.5const關鍵字
11.5.6UNROLL編譯指示
11.5.7MUST_ITERATE編譯指示
11.5.8CODE_SECTION編譯指示
11.5.9DATA_SECTION編譯指示
11.5.10SET_CODE_SECTION和SET_DATA_SECTION編譯指示
11.5.11DATA_ALIGN編譯指示
11.5.12STRUCT_ALIGN
11.6采用內建函數
11.6.1數據移動和打包函數
11.6.2使用除法指令
11.6.3使用C66x定點指令實現復數矩陣操作和向量操作
11.6.4浮點和矢量運算
11.7選定正確的優化級別
11.8軟件優化小結

第12章距離多普勒成像設計實例
12.1背景介紹
12.2距離多普勒成像算法
12.3數據組織形式
12.4算法的并行化設計
12.5forkjoin的設計
12.6脈沖壓縮的設計
12.6.1IFFT轉為FFT
12.6.2無緩存的大點數FFT、IFFT設計
12.6.3有數據緩沖多核大點數FFT、IFFT設計
12.6.4資源使用情況
12.6.5復數相乘
12.6.6脈沖壓縮的偽碼實現
12.7其他階段任務分解
12.8實驗結果分析

第13章展望
13.1異構多核SoC處理器
13.1.1異構多核DSP
13.1.2異構多核FPGA
13.2嵌入式軟件設計思考
13.2.1掌握系統架構
13.2.2做好軟件模塊化設計
13.2.3片上系統架構設計的挑戰
13.2.4自動化并行設計

附錄A

附錄B

附錄C

附錄D

附錄E

參考文獻
本書系統介紹了C66x多核軟件開發的知識,并基于C6678的設計實例介紹了相關設計經驗。系統介紹了C66x DSP器件的基礎概念和多核軟件設計的基礎知識,引領讀者循序漸進地掌握多核軟件設計技術。對于傳統DSP開發人員比較陌生的一些概念,如Cache、預取、數據一致性、數據依賴、死鎖等,進行了重點描述。系統介紹了C66x多核器件的存儲器、DMA傳輸、中斷等內容,并結合工作實際,介紹了多核軟件優化、多核并行設計及任務級優化經驗。最后,以多普勒成像的設計實例描述了如何實現并行設計。
全書共13章,內容包括C66x DSP的基本組成,如存儲器組織、DMA傳輸、中斷和異常、Cache緩存和數據一致性等,并包含CCS軟件開發環境、SYS/BIOS實時操作系統、多核并行設計、軟件設計優化等相關知識。
本書的特點是由淺入深、概念齊全、實踐性強、指導性強。本書結合了多年多核軟件開發的實際經驗,對多核設計中常見的問題進行了詳細的描述; 從基本概念出發,層層推進,介紹了多核并行、數據傳輸與處理并行和多層次并行設計的經驗。
對于從事C66x多核軟件開發的設計師,本書具有很強的指導意義,本書還適合作為高校計算機、數據處理、信號處理、通信等相關專業的本科生和研究生教材。
C66x是TI(Texas Instruments)公司推出的新一代處理器內核,包含定點和浮點計算能力,C66x包含 90個新指令用于提升浮點和矢量運算。TMS320C6678是基于C66x內核的8核處理器,66AK2Hx是基于ARM CortexA15和C66x內核的異構多核處理器。基于C66x內核的DSP處理器已經成為主流的高性能DSP。
多核DSP的軟件開發技術對DSP嵌入式軟件開發人員具有一定的挑戰性。多核任務劃分、并行處理設計、同步設計以及Cache一致性等問題是多核并行設計的關鍵,良好的并行設計才能發揮C66x處理器的優勢。
通過多年的研究并結合工程設計實踐,總結了C66x多核DSP并行開發技術經驗和設計中一些經常遇到的問題。本書以C6678為例系統介紹了C66x多核DSP、數據一致性、CCS使用、SYS/BIOS實時操作系統、多核并行設計和優化等設計方法,用一個設計實例完整地描述了從任務并行設計到具體實現的過程。

在C66x多核軟件設計中,程序員的軟件設計思想、設計方法需要調整和提高。本書從程序員的工作需要和高校學生的學習需要出發,結合實際工作,詳細敘述了多核軟件開發技術。初學者可以循序漸進地建立基于C66x多核并行開發的概念,并積累優化設計的經驗,提高設計水平,從初學就設計出高性能的并行代碼。
各章的內容要點如下:
第1章主要介紹了C66x處理器,并以C6678為例介紹了處理器概況、處理器內核、外圍設備、多核導航器等模塊。
第2章詳細介紹了C66x多核引導(Boot)的方法。以C6678為例介紹了RBL(ROM Boot Loader)引導過程、在EVM板上實現SPI Flash引導的實例及多核引導的改進方法。
第3章詳細介紹了SRIO接口,包括SRIO、SerDes宏、DeviceID配置、組播和多個DestID支持、包轉發、DirectIO操作、消息傳遞、Doorbell、中斷操作等相關知識,并介紹了其他SRIO編程注意事項。
第4章主要介紹了C6678存儲控制器、多核共享存儲控制器、外部存儲控制器EMC、擴展存儲控制器XMC、存儲器保護架構、帶寬管理等存儲器相關內容。
第5章主要介紹了Cache基礎知識,C66x的各級Cache、Cache的使用、數據一致性等內容。
第6章主要介紹了IDMA、EDMA使用的一些知識。
第7章介紹了C66x中斷控制器、內核事件以及中斷控制器與DSP交互的相關知識。
第8章介紹了如何使用CCS進行相關的操作和配置。
第9章介紹了SYS/BIOS實時操作系統,并給出了相關設計例程。
第10章介紹了多核并行設計的相關問題,如并行粒度、并行方式、依賴關系、死鎖活鎖、同步等問題,并介紹了任務級優化設計的例子。
第11章介紹了軟件優化技術,如for循環優化、軟件流水、編譯指示和關鍵字的使用、內建函數的使用等。
第12章介紹了一個多核軟件設計的實例。
第13章介紹了多核發展的趨勢及一些思考。
附錄中列出了常用的存儲器地址映射、MAR寄存器地址對照表、C6678 EDMACC事件列表
、C6678內核System Event事件輸入列表和C6678 System Interrupt事件輸入列表。

本書中關于TI C66x多核DSP的相關資料來源于
德州儀器(Texas Instruments,TI)相關網站,如
德州儀器官網、德州儀器在線技術支持社區等,相關資料的最新版本可以從中查詢。

劉晶參與本書的修訂工作,為本書的出版做出了重要貢獻。參與本書審校的有牛蕾、習建博、鄧慶勇、郭琦、白曉慧、張玉營、潘勇先、朱鵬等,方志紅、梁之勇、宋皓、顧慶遠等在多核開發技術方面做出了很大貢獻。
感謝夏靖涵在本書出版過程中給予的鼓勵和支持。感謝家人一直以來的支持和付出。
為本書的形成及多核C66x DSP開發技術做出貢獻的人還有很多,在這里一并致謝!

多核開發技術發展迅速,基于C66x的多核開發技術難點較多,由于作者水平有限,書中難免有疏漏之處,歡迎讀者指正。

本書提供“C66x多核Boot方法”等內容和代碼,以及本書配套教學課件作為附加資源,讀者可從清華大學出版社網站下載。
作者
2021年6月于合肥
pagetop