日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
TI C66x多核DSP高級(jí)軟件開發(fā)技術(shù)圖書
人氣:86

TI C66x多核DSP高級(jí)軟件開發(fā)技術(shù)

前言C66x是TI(Texas Instruments)公司推出的新一代處理器內(nèi)核,包含定點(diǎn)和浮點(diǎn)計(jì)算能力,C66x包含 90個(gè)新指令用于提升浮點(diǎn)和矢量運(yùn)算。TMS320C6678是基于C66x內(nèi)核的8核處理器,66AK2Hx是基于ARM CortexA15和C66...

內(nèi)容簡(jiǎn)介

本書系統(tǒng)介紹了C66x多核軟件開發(fā)的知識(shí),并基于C6678的設(shè)計(jì)實(shí)例介紹了相關(guān)設(shè)計(jì)經(jīng)驗(yàn)。系統(tǒng)介紹了C66x DSP器件的基礎(chǔ)概念和多核軟件設(shè)計(jì)的基礎(chǔ)知識(shí),引領(lǐng)讀者循序漸進(jìn)地掌握多核軟件設(shè)計(jì)技術(shù)。對(duì)于傳統(tǒng)DSP開發(fā)人員比較陌生的一些概念,如Cache、預(yù)取、數(shù)據(jù)一致性、數(shù)據(jù)依賴、死鎖等,進(jìn)行了重點(diǎn)描述。系統(tǒng)介紹了C66x多核器件的存儲(chǔ)器、DMA傳輸、中斷等內(nèi)容,并結(jié)合工作實(shí)際,介紹了多核軟件優(yōu)化、多核并行設(shè)計(jì)及任務(wù)級(jí)優(yōu)化經(jīng)驗(yàn)。后,以多普勒成像的設(shè)計(jì)實(shí)例描述了如何實(shí)現(xiàn)并行設(shè)計(jì)。 全書共11章,內(nèi)容包括C66x DSP的基本組成,如存儲(chǔ)器組織、DMA傳輸、中斷和異常、Cache緩存和數(shù)據(jù)一致性等,并包含CCS軟件開發(fā)環(huán)境、SYS/BIOS實(shí)時(shí)操作系統(tǒng)、多核并行設(shè)計(jì)、軟件設(shè)計(jì)優(yōu)化等相關(guān)知識(shí)。 本書的特點(diǎn)是由淺入深、概念齊全、實(shí)踐性強(qiáng)、指導(dǎo)性強(qiáng)。本書結(jié)合了多年多核軟件開發(fā)的實(shí)際經(jīng)驗(yàn),對(duì)多核設(shè)計(jì)中常見的問題進(jìn)行了詳細(xì)的描述; 從基本概念出發(fā),層層推進(jìn),介紹了多核并行、數(shù)據(jù)傳輸與處理并行和多層次并行設(shè)計(jì)的經(jīng)驗(yàn)。 對(duì)于從事C66x多核軟件開發(fā)的設(shè)計(jì)師,本書具有很強(qiáng)的指導(dǎo)意義,本書還適合作為高校計(jì)算機(jī)、數(shù)據(jù)處理、信號(hào)處理、通信等相關(guān)專業(yè)的本科和研究生教材。

編輯推薦

1.本書由淺入深、概念齊全、實(shí)踐性強(qiáng)、指導(dǎo)性強(qiáng),結(jié)合了多年多核軟件開發(fā)的實(shí)際經(jīng)驗(yàn),對(duì)多核設(shè)計(jì)中常見的問題進(jìn)行了詳細(xì)的描述。 2.本書從基本概念出發(fā),層層推進(jìn),介紹了多核并行、數(shù)據(jù)傳輸與處理并行和多層次并行設(shè)計(jì)的經(jīng)驗(yàn),是多核DSP并行軟件開發(fā)者必備的參考書。

目錄

目錄

第1章TI多核C66x DSP介紹

1.1C6678處理器

1.1.1C6678概覽

1.1.2外圍設(shè)備

1.266AK處理器

1.366AK2H14/12/06和C6678各項(xiàng)功能對(duì)比

1.4C66x處理器內(nèi)核

1.5電源休眠控制器

1.5.1C66x內(nèi)核電源休眠管理介紹

1.5.2電源休眠管理特征

1.6鎖相環(huán)及其設(shè)置

1.6.1主PLL和PLL控制器

1.6.2DDR3 PLL

1.6.3PASS PLL

1.7C6678處理器接口通信相關(guān)外圍設(shè)備

1.7.1I2C外圍設(shè)備

1.7.2SPI 外圍設(shè)備

1.7.3HyperLink 外圍設(shè)備

1.7.4UART 外圍設(shè)備

1.7.5PCIE 外圍設(shè)備

1.7.6TSIP 外圍設(shè)備

1.7.7包加速器

1.7.8EMIF16外圍設(shè)備

1.7.9安全加速器

1.7.10Gigabit Ethernet開關(guān)子系統(tǒng)

1.7.11管理數(shù)據(jù)輸入輸出

1.7.12串行RapidIO端口

1.7.13通用目的輸入輸出

1.8定時(shí)器

1.9信號(hào)量

1.10多核導(dǎo)航器

1.11設(shè)計(jì)建議

1.11.1初始化

1.11.2接口驅(qū)動(dòng)程序

1.11.3時(shí)間戳的獲取

1.11.4EVM板的使用

第2章C66x存儲(chǔ)器組織

2.1C66x存儲(chǔ)控制器

2.1.1L1P存儲(chǔ)控制器

2.1.2L1D存儲(chǔ)控制器

2.1.3L2存儲(chǔ)控制器

2.1.4外部存儲(chǔ)控制器

2.1.5擴(kuò)展存儲(chǔ)控制器

2.2多核共享存儲(chǔ)控制器

2.2.1概覽

2.2.2C66x內(nèi)核從接口

2.2.3系統(tǒng)從接口

2.2.4系統(tǒng)主接口

2.2.5外部存儲(chǔ)器主接口

2.2.6MSMC存儲(chǔ)器

2.3擴(kuò)展存儲(chǔ)控制器XMC

2.3.1存儲(chǔ)器映射寄存器概要

2.3.2XMC 存儲(chǔ)器保護(hù)和地址擴(kuò)展

2.3.3存儲(chǔ)器保護(hù)和地址擴(kuò)展過程

2.3.4地址擴(kuò)展

2.3.5XMC存儲(chǔ)器保護(hù)結(jié)構(gòu)支持

2.3.6預(yù)取緩沖

2.4存儲(chǔ)器保護(hù)架構(gòu)

2.4.1存儲(chǔ)器保護(hù)的目的

2.4.2特權(quán)級(jí)別

2.4.3存儲(chǔ)器保護(hù)架構(gòu)

2.5帶寬管理

2.5.1介紹

2.5.2帶寬管理架構(gòu)

2.5.3帶寬管理寄存器

2.6設(shè)計(jì)建議

2.6.1合理規(guī)劃使用存儲(chǔ)器

2.6.2存儲(chǔ)器設(shè)置成不被Cache緩存和預(yù)取

第3章Cache緩存和數(shù)據(jù)一致性

3.1為什么使用Cache

3.2C64x和C66x DSP之間的Cache區(qū)別

3.3Cache 存儲(chǔ)器結(jié)構(gòu)概覽

3.4Cache基礎(chǔ)知識(shí)

3.4.1直接映射Cache——L1P Cache

3.4.2Cache缺失的類型

3.4.3組相聯(lián) Cache

3.4.4二級(jí)Cache

3.5L1P Cache

3.5.1L1P存儲(chǔ)器和Cache

3.5.2L1P Cache結(jié)構(gòu)

3.5.3L1P凍結(jié)模式

3.5.4程序啟動(dòng)的一致性操作

3.6L1D Cache

3.6.1L1D存儲(chǔ)器和Cache

3.6.2L1D Cache結(jié)構(gòu)

3.6.3L1D 凍結(jié)模式

3.6.4程序發(fā)起的Cache一致性操作

3.7L2 Cache

3.7.1L2存儲(chǔ)器和Cache

3.7.2L2 Cache結(jié)構(gòu)

3.7.3L2 凍結(jié)模式

3.7.4程序發(fā)起的Cache一致性操作

3.7.5Cache能力控制

3.8使用Cache

3.8.1配置L1 Cache

3.8.2配置L2 Cache

3.9數(shù)據(jù)一致性

3.9.1Snoop 一致性協(xié)議

3.9.2在外部存儲(chǔ)器和Cache之間維持一致性

3.9.3對(duì)L2 Cache一致性操作使用指導(dǎo)

3.9.4對(duì)L1 Cache一致性操作使用指導(dǎo)

3.10片上Debug支持

3.11在運(yùn)行中改變Cache配置

3.11.1禁用外部存儲(chǔ)器Cache功能

3.11.2在運(yùn)行中改變 Cache尺寸

3.12優(yōu)化Cache性能

3.12.1Cache 性能特征

3.12.2阻塞情況

3.12.3優(yōu)化技術(shù)概覽

3.12.4應(yīng)用級(jí)優(yōu)化

3.12.5過程級(jí)優(yōu)化

3.12.6C66x DSP Cache一致性操作小結(jié)

3.13設(shè)計(jì)建議

3.13.1消除虛假地址

3.13.2數(shù)據(jù)一致性問題

第4章DMA傳輸

4.1IDMA

4.1.1IDMA 結(jié)構(gòu)

4.1.2IDMA通道 0

4.1.3IDMA 通道1

4.2EDMA3 控制器

4.2.1EDMA3 控制器介紹

4.2.2EDMA3 器件特定的信息

4.2.3EDMA3 通道控制器配置

4.2.4EDMA3 傳輸控制器配置

4.2.5EDMA3 通道同步事件

4.2.6EDMA3 通道控制器

4.2.7EDMA3 傳輸控制器

4.3EDMA3傳輸類型

4.3.1A同步傳輸

4.3.2AB同步傳輸

4.4參數(shù)RAM

4.4.1PaRAM參數(shù)集

4.4.2Dummy 與Null傳輸比較

4.4.3參數(shù)集更新

4.4.4連接傳輸

4.4.5常數(shù)地址模式傳輸/對(duì)齊問題

4.4.6單元大小

4.5發(fā)起一個(gè) DMA傳輸

4.5.1DMA 通道

4.5.2QDMA 通道

4.5.3完成一個(gè)DMA傳輸

4.6提升DMA性能的幾點(diǎn)建議

4.6.1盡量用較大的ACNT

4.6.2線性傳輸

4.6.3地址對(duì)齊

4.6.4恰當(dāng)使用多個(gè)CC和TC傳輸

第5章中斷和異常

5.1C6678處理器中斷簡(jiǎn)介

5.2芯片中斷控制器

5.3C66x 內(nèi)核中斷控制器概述

5.3.1特征

5.3.2功能塊圖

5.4中斷控制器結(jié)構(gòu)

5.4.1事件寄存器

5.4.2事件合并器

5.4.3中斷選擇器

5.4.4異常合并器

5.5C66x 內(nèi)核事件

5.6中斷控制器與DSP交互

5.6.1DSP 中斷控制器接口

5.6.2DSP 服務(wù)中斷事件

5.7中斷設(shè)計(jì)建議

5.7.1不要過多使用中斷或中斷嵌套

5.7.2中斷服務(wù)程序中代碼不宜過長(zhǎng)

5.7.3中斷服務(wù)程序改變的全局變量要加上volatile標(biāo)志

第6章如何使用CCS

6.1常用界面

6.1.1Project Explorer

6.1.2程序窗口

6.1.3目標(biāo)配置窗口

6.1.4Debug 窗口

6.1.5Memory 窗口

6.1.6Expressions窗口

6.1.7Breakpoints窗口

6.1.8Problems窗口

6.1.9Console窗口

6.2新建工程

6.3新建一個(gè)目標(biāo)配置文件

6.3.1新建ccxml文件

6.3.2設(shè)置仿真器

6.3.3添加器件

6.4常用操作

6.4.1Launch

6.4.2Group

6.4.3Connect

6.4.4加載程序

6.4.5設(shè)置斷點(diǎn)調(diào)試程序

6.4.6復(fù)位

6.5常見問題

6.5.1頭文件找不到

6.5.2EVM板未初始化,調(diào)試找不到DDR3

6.5.3選中不了仿真器

6.5.4加斷點(diǎn)調(diào)試錯(cuò)誤

6.5.5域選擇不正確

6.5.6仿真器連接中斷電

6.6設(shè)置字體和代碼風(fēng)格

6.6.1修改字體

6.6.2代碼風(fēng)格設(shè)置

6.7MCSDK

6.7.1MCSDK架構(gòu)

6.7.2MCSDK 特點(diǎn)

6.8TI函數(shù)庫(kù)調(diào)用

6.8.1格式選擇

6.8.2庫(kù)的調(diào)用

6.8.3庫(kù)的使用

6.9理解CMD文件

6.9.1CMD文件簡(jiǎn)介

6.9.2MEMORY命令

6.9.3SECTIONS命令

第7章SYS/BIOS實(shí)時(shí)操作系統(tǒng)

7.1什么是SYS/BIOS

7.1.1SYS/BIOS的優(yōu)勢(shì)

7.1.2SYS/BIOS和XDC TOOL的關(guān)系

7.2SYS/BIOS包

7.3SYS/BIOS中使用C

7.3.1存儲(chǔ)器管理

7.3.2Name Mangling

7.3.3從配置調(diào)用對(duì)象方法

7.3.4類構(gòu)造器和析構(gòu)器

7.4SYS/BIOS配置和編譯

7.4.1在工程中添加SYS/BIOS支持

7.4.2創(chuàng)建一個(gè)獨(dú)立的配置工程

7.4.3配置SYS/BIOS 應(yīng)用

7.4.4用XGCONF打開一個(gè)配置文件

7.4.5用XGCONF執(zhí)行任務(wù)

7.4.6保存配置

7.4.7關(guān)于XCONFG視圖

7.4.8使用可用產(chǎn)品視圖

7.4.9使用概要視圖

7.4.10使用屬性視圖

7.4.11使用問題視圖

7.4.12找到并修正錯(cuò)誤

7.5編譯一個(gè)SYS/BIOS應(yīng)用

7.5.1了解編譯流程

7.5.2編譯和連接優(yōu)化

7.6線程模塊

7.6.1SYS/BIOS 啟動(dòng)順序

7.6.2線程模塊的概覽

7.6.3線程類型

7.6.4線程優(yōu)先級(jí)

7.6.5讓步和搶占

7.6.6鉤子

7.7硬件中斷

7.7.1創(chuàng)建中斷

7.7.2硬件中斷嵌套和系統(tǒng)堆棧大小

7.7.3硬件鉤子

7.8軟件中斷

7.8.1創(chuàng)建軟件中斷對(duì)象

7.8.2設(shè)置軟件中斷優(yōu)先級(jí)

7.8.3軟件中斷優(yōu)先級(jí)和系統(tǒng)堆棧大小

7.8.4軟件中斷執(zhí)行

7.8.5優(yōu)點(diǎn)和折中

7.8.6軟件中斷函數(shù)同步

7.8.7軟件鉤子

7.9任務(wù)

7.9.1創(chuàng)建任務(wù)

7.9.2任務(wù)執(zhí)行狀態(tài)和調(diào)度

7.9.3任務(wù)堆棧

7.9.4測(cè)試堆棧溢出

7.9.5任務(wù)鉤子

7.9.6空閑循環(huán)

7.10SYS/BIOS同步模塊

7.10.1信號(hào)量

7.10.2事件模塊

7.10.3門模塊

7.10.4郵箱

7.10.5隊(duì)列

7.11定時(shí)服務(wù)

7.12Memory

7.12.1新建一個(gè)Platform

7.12.2棧

7.12.3Cache配置

7.12.4Cache Runtime API

7.12.5動(dòng)態(tài)存儲(chǔ)器分配

7.12.6Heap的實(shí)施

7.13硬件抽象層

7.14典型設(shè)計(jì)實(shí)例和建議

7.14.1典型設(shè)計(jì)

7.14.2設(shè)計(jì)建議

第8章多核并行設(shè)計(jì)

8.1并行粒度和并行級(jí)別

8.2并行方式

8.3任務(wù)類型

8.3.1相同任務(wù)的多個(gè)副本

8.3.2多個(gè)獨(dú)立任務(wù)

8.3.3單個(gè)任務(wù)拆分成多個(gè)子任務(wù)

8.3.4多個(gè)松散耦合任務(wù)

8.3.5耦合度高的任務(wù)

8.4依賴關(guān)系

8.4.1數(shù)據(jù)依賴

8.4.2存儲(chǔ)器依賴

8.5死鎖和活鎖

8.5.1死鎖

8.5.2活鎖

8.6同步

在線預(yù)覽

第3章Cache緩存和數(shù)據(jù)一致性

與其他處理器一樣,基于C66x內(nèi)核的處理器也存在內(nèi)核處理能力與存儲(chǔ)器容量不匹配的問題。越靠近內(nèi)核,存儲(chǔ)器的通信帶寬要求越高,但容量也就越小; 越遠(yuǎn)離內(nèi)核,處理器容量越大,但帶寬也就越小。C66x處理器內(nèi)核使用寄存器,其用到的存儲(chǔ)器從內(nèi)到外依次是L1(L1P和L1D)、L2 SRAM、MSM SRAM(L3)、DDR3。如前所述,L1和L2位于C66x內(nèi)核中,L3位于處理器中(C66x內(nèi)核外面),DDR3位于處理器外。為了緩解處理器內(nèi)核和外部存儲(chǔ)器的矛盾,采用了Cache機(jī)制來(lái)實(shí)現(xiàn)外部數(shù)據(jù)在靠近處理器內(nèi)核的存儲(chǔ)器中保留一份拷貝,處理器內(nèi)核經(jīng)常與該數(shù)據(jù)拷貝交互數(shù)據(jù),而不是直接和外部存儲(chǔ)器交互數(shù)據(jù)。本章首先介紹了為什么使用Cache、Cache存儲(chǔ)器結(jié)構(gòu)概覽、Cache基礎(chǔ)知識(shí),然后對(duì)C66x的各個(gè)Cache進(jìn)行了詳細(xì)介紹,并介紹了使用Cache、數(shù)據(jù)一致性、片上Debug支持和運(yùn)行中改變Cache配置等內(nèi)容,介紹了如何優(yōu)化Cache性能和一些設(shè)計(jì)建議。3.1為什么使用Cache從DSP應(yīng)用的角度,擁有一個(gè)大容量、快速的片上存儲(chǔ)器是非常重要的。然而,處理器性能的提升比存儲(chǔ)器發(fā)展的步伐更快,導(dǎo)致在內(nèi)核與存儲(chǔ)器速度間出現(xiàn)了一個(gè)性能缺口。越靠近內(nèi)核內(nèi)存速度越快,但容量也就越小。Cache的機(jī)制是基于位置原理設(shè)計(jì)的,在講述Cache機(jī)制前先介紹一下位置原理。所謂位置原理,即假設(shè)如果一個(gè)存儲(chǔ)器位置被引用,則其相同或相鄰位置非常可能會(huì)很快又被引用。在一段時(shí)間內(nèi)訪問存儲(chǔ)器的位置被指為時(shí)間位置,涉及相鄰存儲(chǔ)器的位置被指為空間位置。通過利用存儲(chǔ)器訪問位置原理,Cache緩存減少平均存儲(chǔ)器訪問時(shí)間。基于位置原理,在一小段時(shí)間內(nèi),通常一個(gè)程序從相同或相鄰存儲(chǔ)器位置重用數(shù)據(jù)。如果數(shù)據(jù)從一個(gè)慢速存儲(chǔ)器映射到一個(gè)快速Cache存儲(chǔ)器,在另一組數(shù)據(jù)替代前,盡可能經(jīng)常訪問Cache中的數(shù)據(jù)以提高數(shù)據(jù)訪問效率。3.2C64x和C66x DSP之間的Cache區(qū)別對(duì)于使用過C64x內(nèi)核的程序員來(lái)說(shuō),C66x內(nèi)核Cache的概念與C64x內(nèi)核中的相似,但也有很大不同。本節(jié)介紹C66x內(nèi)核與C64x內(nèi)核之間的Cache區(qū)別,主要有以下幾點(diǎn)。1. 存儲(chǔ)器尺寸和類型對(duì)于C66x器件,每個(gè)L1D和L1P在Cache之外實(shí)現(xiàn)SRAM。Cache的尺寸是用戶配置的,可以被設(shè)置成4KB、8KB、16KB或32KB。可用的SRAM數(shù)量是器件相關(guān)的,并在器件特性數(shù)據(jù)手冊(cè)中明確。而對(duì)于C64x器件,Cache被設(shè)計(jì)成尺寸為固定的16KB。C66x器件相對(duì)于C64x器件,L2的尺寸增加了。2. 寫緩沖對(duì)于C66x器件,寫緩沖的寬度增加到128位; 對(duì)于C64x器件,寬度是64位。3. Cache能力對(duì)于C66x器件,外部存儲(chǔ)地址的Cache能力設(shè)置(通過MAR位)只影響L1D和L2 Cache緩存; 也就是說(shuō),到外部存儲(chǔ)器地址的程序取指令(program fetch)總是被Cache緩存進(jìn)來(lái)。不管Cache能力設(shè)置狀況。這和C64x器件上的情況不一樣,在C64x器件上Cache能力設(shè)置影響所有Cache,即L1P、L1D和L2。對(duì)于C66x器件,外部存儲(chǔ)地址的Cache能力控制覆蓋整個(gè)外部地址空間。對(duì)于C64x器件,外部存儲(chǔ)地址的Cache能力控制只覆蓋地址空間的一個(gè)子集。4. Snooping協(xié)議在C66x器件上的Snooping Cache一致性協(xié)議直接發(fā)送數(shù)據(jù)到L1D Cache和DMA。C64x器件通過invalid和writeback Cache Line來(lái)維持一致性。由于減少了由invalidate導(dǎo)致的Cache缺失開支,C66x Snooping機(jī)制更加有效。與C64x器件一樣,Snoop協(xié)議在C66x器件中不維護(hù)L1P Cache和L2 SRAM之間的一致性,程序員負(fù)責(zé)維護(hù)其一致性。5. Cache一致性操作對(duì)于C66x器件,L2 Cache一致性操作總是操作在L1P和L1D,即使L2 Cache功能被禁用。這與C64x器件情況不同,其需要明確調(diào)用L1一致性操作。C66x器件支持一整套的區(qū)域和全局(Range and Global)L1D Cache一致性操作,而C64x器件只支持L1D區(qū)域invalidate和writebackinvalidate操作。在Cache尺寸上有改變,C66x器件在初始設(shè)置一個(gè)新尺寸前,自動(dòng)writebackinvalidate Cache。而C64x器件需要執(zhí)行一個(gè)完整的writebackinvalidate程序(雖然這些是被一部分CSL函數(shù)處理的)。對(duì)于C66x器件,L2 Cache不包括L1D和L1P,兩者不相關(guān)。這意味著一個(gè)行從L2驅(qū)逐(evict),不會(huì)導(dǎo)致相應(yīng)的行在L1P和L1D被驅(qū)逐。不相關(guān)的優(yōu)勢(shì)在于: 由于程序取指令導(dǎo)致的L2中的行分配不會(huì)從L1D Cache驅(qū)逐數(shù)據(jù); 由于數(shù)據(jù)訪問導(dǎo)致L2中的行分配不會(huì)從L1P驅(qū)逐程序代碼,這減少Cache緩存缺失的數(shù)量。以下介紹C66x Cache存儲(chǔ)器結(jié)構(gòu)概覽、Cache基礎(chǔ)知識(shí)并詳細(xì)介紹各級(jí)Cache。3.3Cache存儲(chǔ)器結(jié)構(gòu)概覽C66x DSP存儲(chǔ)器由內(nèi)部?jī)杉?jí)基于Cache的存儲(chǔ)器和外部存儲(chǔ)器組成。L1P和L1D都可以被配置成SRAM和Cache,Cache較大可以達(dá)到32KB。所有Cache和數(shù)據(jù)路徑自動(dòng)被Cache控制器管理,如圖3.1所示。1級(jí)存儲(chǔ)器通過核訪問,不需要阻塞。2級(jí)存儲(chǔ)器可以被配置,并可被分成L2 SRAM和Cache。外部存儲(chǔ)器可以為幾MB大小。

圖3.1C66x DSP Cache概覽

C6678器件上電配置如下: 復(fù)位后L1P被配置為全為Cache,大小為32KB。復(fù)位后L1D被配置為全為Cache,大小為32KB。復(fù)位后L2全是SRAM,Cache的容量可以被配置為32KB、64KB、128KB、256KB或全為Cache。訪問時(shí)間取決于接口和使用的存儲(chǔ)器技術(shù)。3.4Cache基礎(chǔ)知識(shí)通常, Cache可以分為直接映射Cache(directmapped Caches)和組相聯(lián)Cache (setassociative Caches)兩種類型。本節(jié)介紹Cache的一些基本知識(shí)。為了較好理解Cache機(jī)制,首先介紹幾個(gè)Cache的基本概念。(1) Cache Line(Cache行): Cache處理的最小單位。Cache Line的尺寸要比內(nèi)存存取的數(shù)據(jù)尺寸要大,一個(gè)行的大小為一個(gè)行尺寸(Line Size)。例如,C66x內(nèi)核可以訪問單個(gè)字節(jié),而L1P Cache行尺寸為32B,L1D Cache行尺寸為64B,L2 Cache行尺寸為128B。但是,如果發(fā)生一次讀失效,則Cache會(huì)將整條Cache Line的數(shù)據(jù)讀入。(2) Line Frame(行幀): Cache中用于存儲(chǔ)Cache Line的位置,包含被Cache的數(shù)據(jù)(1行)、一個(gè)關(guān)聯(lián)的Tag地址和這一行的狀態(tài)信息。這一行的狀態(tài)信息包括是否Valid(有效)、Dirty(臟)和LRU狀態(tài)。(3) Set(集): Line Frame的一個(gè)集合。直接映射的Cache中一個(gè)Set包含一個(gè)Line Frame,n路組相聯(lián)的Cache每個(gè)Set包含n個(gè)Line Frame。(4) Tag(標(biāo)簽): Cache中被Cache的物理地址的高位作為一個(gè)Tag存儲(chǔ)在Line Frame中,在決定Cache是否命中的時(shí)候,Cache控制器會(huì)查詢Tag。(5) Valid(有效): 當(dāng)Cache中的一個(gè)Line Frame保存了從下一級(jí)存儲(chǔ)器取的數(shù)據(jù),那么這個(gè)Line Frame的狀態(tài)就是Valid的,否則,這個(gè)Line Frame的狀態(tài)就是無(wú)效的(Valid = 0)。(6) Invalidate(失效): 是將Cache中標(biāo)記為Valid的Line Frame狀態(tài)標(biāo)記為無(wú)效的過程,受影響的Cache Line內(nèi)容被廢棄。為了維持?jǐn)?shù)據(jù)一致性,與writeback組合成writebackinvalidate,先將標(biāo)記為Dirty的行寫回到保存有這個(gè)地址的下一級(jí)存儲(chǔ)器,再標(biāo)記該行為無(wú)效狀態(tài)。(7) Dirty(臟)和Clean(干凈): 當(dāng)一個(gè)Cache Line是Valid并包含更新后的數(shù)據(jù),但還未更新到下一層更低的內(nèi)存,則在Line Frame的Dirty位標(biāo)志該Cache Line為臟的。一個(gè)Valid的Cache Line與下一層更低的內(nèi)存一致,則Line Frame的Dirty位標(biāo)志該Cache Line是Clean的(Dirty = 0)。(8) Hit(命中)和Miss(缺失): 當(dāng)請(qǐng)求的內(nèi)存地址的數(shù)據(jù)在Cache中,那么Tag匹配并且相應(yīng)的Valid有效,則稱為Hit,數(shù)據(jù)直接從Cache中取給DSP。相反,如果請(qǐng)求的內(nèi)存地址的數(shù)據(jù)不在Cache中,Tag不匹配或相應(yīng)的Valid無(wú)效,則稱為Miss。(9) Victim Buffer(Victim緩沖): Cache中的一條Cache Line為新的Line騰出空間的過程稱為驅(qū)逐(Evict),被驅(qū)逐的Cache Line被稱為Victim(Line)。當(dāng)Victim Line是Dirty的時(shí),為了保持?jǐn)?shù)據(jù)一致性,數(shù)據(jù)必須寫回到下一級(jí)存儲(chǔ)器中。Victim Buffer保存Vitim直到它們被寫回到下一級(jí)存儲(chǔ)器中。(10) Miss Pipelining(缺失流水): 對(duì)連續(xù)的缺失進(jìn)行流水操作,提高對(duì)缺失處理的效率,降低阻塞(Stall)周期。(11) Touch: 對(duì)一個(gè)給定地址的存儲(chǔ)器操作,被稱為Touch那個(gè)地址。Touch也可以指的是讀數(shù)組元素或存儲(chǔ)器地址的其他范圍,目的是分配它們到一個(gè)特定級(jí)別Cache中。一個(gè)內(nèi)核中心循環(huán)用作Touch一個(gè)范圍的內(nèi)存,是為了分配它到Cache中,經(jīng)常被稱為一個(gè)Touch循環(huán)。Touch一個(gè)數(shù)組是軟件控制預(yù)取數(shù)據(jù)的一種形式。3.4.1直接映射Cache——L1P Cache直接映射Cache的工作原理可以參照C66x L1P Cache。任何時(shí)候內(nèi)核訪問L2 SRAM或外部空間中的指令,指令都被調(diào)入L1P Cache。1. 讀缺失如果一個(gè)程序從地址0020h取出,假設(shè)那個(gè)Cache是無(wú)效的,意味著Cache中沒有Cache Line包含該數(shù)據(jù)的緩存,這就是一個(gè)讀缺失。一個(gè)行幀的有效狀態(tài)被Valid (V)位指示: Valid位為0表示相應(yīng)的Cache Line是無(wú)效的,也就是說(shuō),不包含被Cache緩存的數(shù)據(jù)。當(dāng)核請(qǐng)求讀地址0020h, Cache控制器把這個(gè)地址分為三塊(Tag、Set和Offset),如圖3.2所示。

圖3.2地址分塊

Set部分(bits 13~5)指示地址映射到哪一個(gè)Set (如果是直接映射Cache,一個(gè)Set等于一個(gè)行幀)。對(duì)于地址0020h,Set部分檢測(cè)為1。然后控制器檢測(cè)Tag (bits 31~14)和Valid位。由于我們假設(shè)Valid位為0,控制器寄存器是一個(gè)缺失,也就是說(shuō)被請(qǐng)求的地址沒有包含在Cache中。一個(gè)缺失也意味著: 為了容納請(qǐng)求地址的行,一個(gè)行幀會(huì)被分配。然后控制器從存儲(chǔ)器取行(0020h~0039h),并存數(shù)據(jù)到行幀1。地址的Tag部分存儲(chǔ)在Tag RAM中,Valid位變成1用以指示該Set包含有效數(shù)據(jù)。取出的數(shù)據(jù)同時(shí)也發(fā)送給核,訪問結(jié)束。一個(gè)地址的Tag部分之所以必須被存儲(chǔ),這是因?yàn)楫?dāng)?shù)刂?020h再次被訪問時(shí)會(huì)更清楚該地址已經(jīng)被Cache緩存。2. 讀命中Cache控制器把地址分割為三個(gè)部分: Tag、Set和Offset,如圖3.2所示。Set部分決定地址映射到哪一個(gè)Set; 存儲(chǔ)的Tag部分用于與請(qǐng)求的地址Tag部分比較。這個(gè)比較是必要的,因?yàn)榇鎯?chǔ)器中多個(gè)行映射同一Set,通過Tag可以判斷出請(qǐng)求的地址是否映射到Cache中。如果訪問地址4020h也映射到同一個(gè)Set,Tag部分會(huì)不同,因而訪問會(huì)是一個(gè)缺失。如果地址0020h被訪問,Tag比較為真且Valid位為1,那么控制器寄存器為一個(gè)命中,并發(fā)送Cache Line中的數(shù)據(jù)到核,該訪問結(jié)束。3.4.2Cache缺失的類型在組相聯(lián)被討論之前,好理解不同類型的Cache缺失。Cache較大的目的是減少平均存儲(chǔ)器訪問時(shí)間。從存儲(chǔ)器到Cache取一個(gè)行幀的數(shù)據(jù),對(duì)于每個(gè)缺失,都會(huì)有損失。因而,對(duì)于最常使用的Cache Line,在被其他行替換前,要盡可能多地重復(fù)使用。這樣一來(lái),初始損失影響最小且平均存儲(chǔ)器訪問時(shí)間變得最短。Cache使用相同行幀來(lái)存儲(chǔ)沖突的Cache Line,替換一個(gè)行幀將導(dǎo)致從Cache中驅(qū)逐另一個(gè)行幀。如果后續(xù)驅(qū)逐的行幀又被訪問,那么訪問會(huì)缺失且這個(gè)行幀必須再次從低速存儲(chǔ)器取出。因而,只要一個(gè)行幀還會(huì)被使用,應(yīng)避免它被驅(qū)逐。1. 沖突和容量缺失一個(gè)Set對(duì)應(yīng)的數(shù)據(jù)已經(jīng)被Cache緩沖,隨后同一個(gè)Set的其他存儲(chǔ)器位置被訪問,就會(huì)由于沖突導(dǎo)致驅(qū)逐,這個(gè)類型的缺失被稱為沖突缺失。一個(gè)沖突缺失的產(chǎn)生是因?yàn)橐粋€(gè)Cache Line在它被使用前因?yàn)闆_突被驅(qū)逐,更深層次的原因可能是因?yàn)镃ache容量被耗盡,從而導(dǎo)致沖突發(fā)生。如果Cache容量被耗盡,當(dāng)缺失發(fā)生時(shí),Cache中的所有行幀被分配,這就是一個(gè)容量缺失。如果一個(gè)數(shù)據(jù)組超過重用Cache容量,容量缺失發(fā)生。當(dāng)容量耗盡,新行訪問從數(shù)組開始逐步替代舊行。確認(rèn)一個(gè)缺失的原因有助于選擇相應(yīng)措施避免缺失。沖突缺失意味著數(shù)據(jù)訪問合乎Cache大小,但是Cache Line因?yàn)闆_突被驅(qū)逐。在這種情況下,我們可能需要改變存儲(chǔ)器布局,以便數(shù)據(jù)訪問被分配到存儲(chǔ)器中Cache沒有沖突的地址中。或者,從硬件設(shè)計(jì)上,我們可以創(chuàng)建多個(gè)Set保持兩個(gè)或更多行。因而,存儲(chǔ)器的兩個(gè)行映射到相同Set可以都被保持在Cache中,相互不驅(qū)逐。這就是組相聯(lián)的Cache。為了避免容量缺失,需要減少一次操作數(shù)據(jù)的數(shù)量。2. 強(qiáng)制性缺失第三類缺失是強(qiáng)制性缺失或首次引用缺失。當(dāng)數(shù)據(jù)及時(shí)次傳入,在Cache中沒有該數(shù)據(jù)的緩存,因而肯定發(fā)生該類型Cache缺失。與其他兩種缺失不同,這種缺失不刻意避免,因而是強(qiáng)制的。3.4.3組相聯(lián)Cache組相聯(lián)Cache具有多路Cache以減少?zèng)_突缺失的可能性。C66x L1D Cache是一個(gè)2路組相聯(lián)的Cache,具有4KB、8KB、16KB或32KB容量,并且Cache行尺寸為64字節(jié)。L1D Cache的特點(diǎn)在表3.1中描述。表3.2提供了L1D缺失阻塞特征。

表3.1L1D Cache特點(diǎn)

特征C66x DSPC64x DSP組織2路組相聯(lián)2路組相聯(lián)協(xié)議讀分配Read Allocate, Writeback讀分配Read Allocate, Writeback內(nèi)核訪問時(shí)間1周期1周期容量4KB、8KB、16KB或32KB16KB行尺寸64字節(jié)64字節(jié)替換策略最近經(jīng)常使用(LRU)最近最少使用(LRU)寫緩沖4 × 128位4 × 64位外部存儲(chǔ)器容量可配置可配置

表3.2L1D缺失阻塞特征

參數(shù)L2類型0 WaitState, 2×128bit Banks1 WaitState, 4×128bit Banks

L2 SRAML2 CacheL2 SRAML2 Cache

單個(gè)讀缺失10.512.512.514.52并行讀缺失(流水)10.5 412.5 812.5 414.5 8M連續(xù)的讀缺失(流水)10.5 3×(M-1)12.5 7×(M-1)12.5 3×(M-1)14.5 7×(M-1)M連續(xù)的并行讀缺失(流水)10.5 4×(M/2-1) 3×M/212.5 8×(M/2-1) 7×M/212.5 4×(M-1)14.5 8×(M/2-1) 7×M/2在讀缺失時(shí)Victim緩沖清空破壞缺失流水較大11個(gè)周期阻塞破壞缺失流水較大11個(gè)周期阻塞破壞缺失流水較大10個(gè)周期阻塞破壞缺失流水較大10個(gè)周期阻塞

寫緩沖流出速度2周期/條目6周期/條目2周期/條目6周期/條目

與直接映射Cache相比,2路組相聯(lián)Cache的每個(gè)Set由兩個(gè)行幀組成: 一個(gè)行幀在路0; 另一個(gè)行幀在路1。存儲(chǔ)器中的一條Cache Line仍然映射一個(gè)Set,不過現(xiàn)在可以存入兩個(gè)行幀中的任一條。從這個(gè)意義上講,一個(gè)直接映射的Cache也可以被看成一個(gè)1路Cache。組相聯(lián)的Cache架構(gòu)如圖3.3所示。與直接映射類似,除了兩個(gè)Tag比較不一樣(組相聯(lián)的Cache中多路都進(jìn)行Tag比較),Cache命中和缺失的機(jī)理相似。

圖3.3組相聯(lián)Cache架構(gòu)

1. 讀缺失如果兩路都為讀缺失,數(shù)據(jù)首先從存儲(chǔ)器被取出。LRU(Least Recently Used)位決定Cache行幀被分配在哪一路中。每個(gè)Set有一個(gè)LRU位,可以被認(rèn)為是一個(gè)開關(guān)。如果LRU位是0,行幀在路0被分配; 如果LRU位是1,行幀在路1被分配。任何時(shí)候只要存在一個(gè)到該行幀的訪問,LRU的狀態(tài)位就被改變。當(dāng)一路被訪問,LRU位總是切換到相反的路,為的是保護(hù)最近使用的行幀不被驅(qū)逐。基于位置原理,最近最少使用原則(LRU)被用來(lái)在同一Set里選擇一個(gè)行幀作為被驅(qū)逐的行,用于保存新的Cache數(shù)據(jù)。2. 寫缺失L1D是一個(gè)讀分配的Cache,意味著在讀缺失時(shí)一個(gè)行幀被分配到Cache。在一個(gè)寫缺失時(shí),數(shù)據(jù)通過一個(gè)寫緩沖被寫到更低級(jí)存儲(chǔ)器,不會(huì)因此而產(chǎn)生新的L1D Cache關(guān)系。寫緩沖有4個(gè)條目(entry),在C66x器件中每個(gè)entry是128位寬。3. 讀命中如果在路0有一個(gè)讀命中,該行幀的數(shù)據(jù)在路0被訪問; 如果在路1有一個(gè)讀命中,該行幀的數(shù)據(jù)在路1被訪問。4. 寫命中在一個(gè)寫命中活動(dòng)中,數(shù)據(jù)被寫到Cache,但是不是立即傳遞到更低的存儲(chǔ)器。這種類型的Cache被稱為寫回writeback Cache,因?yàn)閿?shù)據(jù)被一個(gè)內(nèi)核的寫訪問修改并且在之后被寫回到存儲(chǔ)器。為了寫回被修改的數(shù)據(jù),哪一行被核寫回必須清楚。為了實(shí)現(xiàn)這個(gè)目的,每條Cache Line具有一個(gè)Dirty位和它相關(guān)。最初,Dirty位是0。只要核寫到一個(gè)被Cache的行,相應(yīng)的Dirty位被設(shè)置。因?yàn)樽x缺失沖突,當(dāng)Dirty的行需要被驅(qū)逐,它會(huì)被寫回到存儲(chǔ)器。如果那一行沒有被修改(Clean Line),它的內(nèi)容被丟棄。例如,假設(shè)行在Set 0,路0被內(nèi)核寫,LRU位指示在下一個(gè)缺失時(shí)路0將會(huì)被替換; 如果內(nèi)核當(dāng)前產(chǎn)生一個(gè)到存儲(chǔ)器位置映射到Set 0的地址的讀訪問,當(dāng)前的Dirty行首先寫回到存儲(chǔ)器,隨后新數(shù)據(jù)被存儲(chǔ)到這個(gè)行幀。一個(gè)寫回可能被程序發(fā)起,通過發(fā)送一個(gè)寫回命令到Cache控制器。3.4.4二級(jí)Cache如果在存儲(chǔ)器尺寸和訪問時(shí)間上,Cache和主存儲(chǔ)器之間有較大差別,二級(jí)Cache被引進(jìn)用于減少更多存儲(chǔ)器訪問數(shù)量。二級(jí)Cache基本操作方式與1級(jí)Cache相同; 然而, 2級(jí)Cache在容量上更大。1級(jí)和2級(jí)Cache相互作用如下: 一個(gè)地址在L1缺失就傳給L2處理; L2使用相同的Valid位和Tag比較來(lái)決定被請(qǐng)求的地址是否在L2 Cache。L1命中直接從L1 Cache得到服務(wù),并不需要牽涉L2 Cache。與L1P和L1D一樣,L2存儲(chǔ)空間可以被分成一個(gè)可尋址的內(nèi)部存儲(chǔ)器(L2 SRAM)和一個(gè)Cache (L2 Cache)部分。與L1 Cache只有讀分配(read allocate)不一樣,L2 Cache是讀分配和寫分配(write allocate)的Cache。L2 Cache只被用來(lái)Cache緩存外部存儲(chǔ)器地址,然而,L1P和L1D被用于Cache緩存L2存儲(chǔ)器和外部存儲(chǔ)器地址。L2 Cache特征概述如表3.3所示。

表3.3L2 Cache特征

特征C66x DSPC64x DSP

組織方式4路組相聯(lián)4路組相聯(lián)協(xié)議讀分配和寫分配讀分配和寫分配寫回寫回容量32KB、64KB、128KB或256KB32KB、64KB、128KB或256KB行尺寸128B128B替換策略最近使用(LRU)最近最少使用(LRU)外部存儲(chǔ)器容量可配置可配置

1. 讀缺失和讀命中考慮一個(gè)內(nèi)核讀請(qǐng)求的場(chǎng)景,即訪問可被Cache緩存的外部存儲(chǔ)器地址,而Cache在L1缺失(可能是L1P或L1D)。如果地址也在L2 Cache缺失,相應(yīng)的行會(huì)引入L2 Cache。LRU位決定了哪路行幀被分配到其中。如果行幀包含Dirty數(shù)據(jù),在新行被取出前,首先會(huì)寫回到外部存儲(chǔ)器(如果這一行的數(shù)據(jù)也包含在L1D,在L2 Cache Line被發(fā)送給外部存儲(chǔ)器前,首先會(huì)寫回到L2。為保持Cache一致性,這個(gè)操作是需要的)。近期分配的一行形成一個(gè)L1 Line并包含請(qǐng)求的地址,然后傳送給L1。L1在其Cache存儲(chǔ)器中存儲(chǔ)該行,并發(fā)送請(qǐng)求的數(shù)據(jù)到內(nèi)核。如果在L1中新行替換一個(gè)Dirty行,它的內(nèi)容首先寫回到L2。如果地址是一個(gè)L2命中,相應(yīng)的行直接從L2傳到L1 Cache。2. 寫缺失和寫命中如果一個(gè)核寫請(qǐng)求到一個(gè)外部存儲(chǔ)器地址在L1D中缺失,它將被通過寫緩沖傳送給L2。如果對(duì)于這個(gè)地址L2檢測(cè)到一個(gè)缺失,相應(yīng)的L2 Cache Line被從外部存儲(chǔ)器取出,被用內(nèi)核寫操作修改并被存入分配的行幀中。LRU位決定哪路行幀用于分配給新數(shù)據(jù)。如果行幀包含Dirty數(shù)據(jù),它會(huì)在新行取出前首先被寫回到外部存儲(chǔ)器。注意新行沒有存儲(chǔ)進(jìn)L1D,因?yàn)樗皇且粋€(gè)readallocate Cache。如果地址是一個(gè)L2命中,相應(yīng)的L2 Cache Line直接更新為核寫的數(shù)據(jù)。3. 外部存儲(chǔ)地址Cache能力L2 SRAM地址總是Cache緩存進(jìn)L1P和L1D,然而,默認(rèn)狀態(tài)下,外部存儲(chǔ)地址在L1D和L2 Cache中,被分配為不可Cache緩存的。因此,Cache能力必須首先被用戶明確使能。注意L1P Cache是不被配置影響的,并且總是Cache緩存外部存儲(chǔ)器地址。如果地址是不可Cache緩存的,任何存儲(chǔ)器訪問(數(shù)據(jù)訪問或程序取)無(wú)須分配行到L1D或L2 Cache。3.5L1P CacheC66x內(nèi)核中L1P與L1D上電后默認(rèn)全為Cache,與L1D Cache不同的是L1P Cache為直接映射Cache。本節(jié)描述L1P Cache的相關(guān)知識(shí)。3.5.1L1P存儲(chǔ)器和CacheL1P存儲(chǔ)器和Cache的目的就是較大化程序執(zhí)行效率。L1P Cache的可配置性為系統(tǒng)設(shè)計(jì)提供了靈活性。L1P Cache的特點(diǎn)為: L1P Cache可配置成0KB、4KB、8KB和32KB,存儲(chǔ)器保護(hù)可配置,Cache塊和全局一致性操作可配置。L1P存儲(chǔ)器支持較大128KB的RAM空間(具體參見器件配置情況)。L1P存儲(chǔ)器不能被同一個(gè)核內(nèi)的L1D、L1P和L2 Cache緩存。L1P只能被EDMA和IDMA寫,不能被DSP存儲(chǔ)寫入。L1P可以被EDMA、IDMA和DSP訪問讀取。L1P存儲(chǔ)器較大的等待狀態(tài)為3周期,等待周期不能被軟件配置,這是由具體器件決定的。L1P存儲(chǔ)器等待狀態(tài)通常為0個(gè)周期。為了在一個(gè)較高的時(shí)鐘頻率取程序代碼并維持一個(gè)較大的系統(tǒng)空間,L1P Cache是很有必要的,并可以把部分或全部的L1P都作為Cache。從L1P存儲(chǔ)器地址映射的最頂端開始,采用自頂向下的順序,L1P把存儲(chǔ)器轉(zhuǎn)換為Cache。較高地址的L1P存儲(chǔ)器首先被Cache緩存。用戶可以通過寄存器控制L1P Cache的操作。表3.4列出了這些寄存器概要。

表3.4L1P Cache寄存器概要

地址縮略詞寄存器描述

0184 0020hL1PCFGL1程序配置寄存器0184 0024hL1PCCL1程序Cache控制寄存器0184 4020hL1PIBARL1程序無(wú)效基址寄存器0184 4024hL1PIWCL1程序無(wú)效計(jì)數(shù)(字)寄存器0184 5028hL1PINVL1程序無(wú)效寄存器

3.5.2L1P Cache結(jié)構(gòu)L1P Cache是直接映射的Cache,意味著系統(tǒng)中每個(gè)物理存儲(chǔ)位置都在Cache中有一個(gè)可能歸屬的位置。當(dāng)DSP想取一段代碼,DSP首先要檢

網(wǎng)友評(píng)論(不代表本站觀點(diǎn))

免責(zé)聲明

更多出版社