多核片上系统(SoC)架构的嵌入式DSP软件设计
多核片上系統(tǒng)(SoC)架構(gòu)的嵌入式DSP軟件設(shè)計(jì)
Multicore a System-on-a-Chip (SoC) Architecture
SoCs的軟件開發(fā)涉及到基于最強(qiáng)大的計(jì)算模型在各種處理單元之間劃分應(yīng)用程序。這可能需要大量的試用anderror來建立正確的分區(qū)。在高層次上,SoCpartitioning算法如下:
將狀態(tài)機(jī)軟件(那些提供應(yīng)用程序控制、排序、用戶界面控制、事件驅(qū)動(dòng)軟件等的算法)放在一個(gè)RISCprocessor上,如ARM。
將信號(hào)處理軟件放在DSP上,利用DSP為信號(hào)處理功能提供的特定于應(yīng)用程序的體系結(jié)構(gòu)。
在硬件加速器中放置高速率、計(jì)算密集型算法(如果它們存在并且是根據(jù)考慮的特定算法定制的)。
例如,考慮下面圖1所示的軟件分區(qū)。這個(gè)soc模型包含一個(gè)通用處理器(GPP)、一個(gè)DSP和硬件加速。GPP包含一個(gè)芯片支持庫(kù),它是一組低層外圍API,提供對(duì)設(shè)備外圍設(shè)備的有效訪問、一個(gè)通用操作系統(tǒng)、一個(gè)算法層和一組API for、application和userinterface層。
該DSP包含一個(gè)類似的芯片支持庫(kù)、以aDSP為中心的內(nèi)核、一組特定于DSP的算法以及與高級(jí)應(yīng)用軟件的接口。硬件加速器包含一組供程序員訪問的api和映射到加速的一些非常具體的算法。
應(yīng)用程序程序員負(fù)責(zé)整個(gè)系統(tǒng)的劃分,并將算法映射到相應(yīng)的處理元素。一些供應(yīng)商可能會(huì)為這些處理元素中的一個(gè)或多個(gè)提供“黑盒”解決方案,包括DSP和硬件加速器。
這為應(yīng)用程序開發(fā)人員提供了另一個(gè)抽象級(jí)別,他們不需要知道一些底層算法的細(xì)節(jié)。其他系統(tǒng)開發(fā)人員可能希望訪問這些低級(jí)算法,因此這些系統(tǒng)的編程模型通常具有靈活性,這取決于所需的定制和裁剪量。
Figure1. Software Architecture for SoC
SoC中的通信主要是通過軟件來建立的。例如,通過將DSP數(shù)據(jù)空間中的存儲(chǔ)器定義為寄存器來實(shí)現(xiàn)圖1中的DSP和arm之間的通信接口。
ARM通過主機(jī)接口獲得對(duì)這些寄存器的讀/寫訪問。兩個(gè)處理器可以異步地向?qū)Ψ桨l(fā)出命令,沒有人能控制對(duì)方。命令序列是純順序的;除非DSPhas發(fā)送“命令完成”確認(rèn),否則ARM不能發(fā)出新命令。
ARM與DSP之間有兩個(gè)寄存器對(duì)建立雙向異步通信,一個(gè)寄存器對(duì)用于向ARM發(fā)送命令,另一個(gè)寄存器對(duì)用于向DSP發(fā)送命令。每個(gè)寄存器對(duì)有:
命令寄存器,用于將命令傳遞給rm或DSP;
命令完成寄存器,用于返回命令的執(zhí)行狀態(tài);
每個(gè)命令最多可傳遞30字的命令參數(shù);
此外,每個(gè)命令執(zhí)行最多可以返回30個(gè)單詞的commandreturnparameters。
ARM-to-DSP命令序列如下:
ARM將命令寫入命令寄存器
ARM將參數(shù)數(shù)寫入數(shù)字寄存器
ARM將命令參數(shù)寫入命令參數(shù)空間
ARM向DSP發(fā)出不可屏蔽的中斷
DSP讀取命令
DSP讀取命令參數(shù)
數(shù)字信號(hào)處理器執(zhí)行命令
DSP清除命令寄存器
DSP將結(jié)果參數(shù)寫入結(jié)果參數(shù)空間
DSP寫入“命令完成”寄存器
DSP向ARM發(fā)出提示中斷
從DSP到ARM的命令序列如下:
DSP將命令寫入命令寄存器
數(shù)字信號(hào)處理器將參數(shù)的個(gè)數(shù)寫入數(shù)字寄存器
DSP將命令參數(shù)寫入命令參數(shù)空間
DSP向DSP發(fā)出提示中斷
ARM讀取命令
ARM讀取命令參數(shù)
ARM執(zhí)行DSP命令
ARM清除命令寄存器
ARM將結(jié)果參數(shù)寫入結(jié)果參數(shù)空間
ARM寫入“命令完成”寄存器
ARM向DSP發(fā)送INT0中斷
ARM和DSP之間的通信通常使用一組通信api來完成。下面是通用處理器(在這種情況下是ARM)和DSP之間的一組通信api的示例:
#define ARM_DSP_COMM_AREA_START_ADDR 0x80
Start DSP address for ARM-DSP.
#define ARM_DSP_COMM_AREA_END_ADDR 0xFF
End DSP address for ARM-DSP.
#define ARM_DSP_DSPCR (ARM_DSP_COMM_AREA_START_ADDR)
ARM to DSP, parameters and command
from ARM.
#define ARM_DSP_DSPCCR (ARM_DSP_COMM_AREA_START_ADDR+32)
ARM to DSP, return values and
completion code from DSP.
#define ARM_DSP_ARMCR (ARM_DSP_COMM_AREA_START_ADDR+64)
DSP to ARM, parameters and command
from DSP.
#define ARM_DSP_ARMCCR (ARM_DSP_COMM_AREA_START_ADDR+96)
DSP to ARM, return values and
completion code from ARM.
#define DSP_CMD_MASK (Uint16)0x0FFF
Command mask for DSP.
#define DSP_CMD_COMPLETE (Uint16)0x4000
ARM-DSP command complete, from DSP.
#define DSP_CMD_OK (Uint16)0x0000
ARM-DSP valid command.
#define DSP_CMD_INVALID_CMD (Uint16)0x1000
ARM-DSP invalid command.
#define DSP_CMD_INVALID_PARAM (Uint16)0x2000
ARM-DSP invalid parameters.
Functions
STATUS ARMDSP_sendDspCmd (Uint16 cmd, Uint16 *cmdParams, Uint16 nParams)
Send command, parameters from ARM to
DSP.
STATUS ARMDSP_getDspReply (Uint16 *status, Uint16 *retParams, Uint16 nParams)
Get command execution status, return
parameters sent by DSP to ARM.
STATUS ARMDSP_getArmCmd (Uint16 *cmd, Uint16 *cmdParams, Uint16 nParams)
Get command, parameters sent by DSP
to ARM.
STATUS ARMDSP_sendArmReply (Uint16 status, Uint16 *retParams, Uint16 nParams)
end command execution status, return
parameters from ARM to DSP.
STATUS ARMDSP_clearReg ()
Clear ARM-DSP communication area.
SoC系統(tǒng)啟動(dòng)順序
通常,DSP的引導(dǎo)映像是ARM引導(dǎo)映像的一部分。對(duì)于需要執(zhí)行的不同任務(wù),DSP可能有許多不同的引導(dǎo)映像。該序列從ARM下載與DSP要執(zhí)行的特定任務(wù)相關(guān)的圖像開始。arm復(fù)位,然后DSP(通過一個(gè)控制寄存器)然后帶來復(fù)位的DSPout。
在這個(gè)階段,DSP開始在一個(gè)特定的位置執(zhí)行,通常在ROM中。這個(gè)地址的ROM代碼初始化DSP內(nèi)部寄存器并將DSP放入idlemode中。此時(shí),ARM使用主機(jī)端口接口下載DSP代碼。
在完成下載DSP圖像之后,ARM可以向DSP發(fā)送一個(gè)中斷,DSP將其從空閑模式喚醒,矢量到開始位置,并開始運(yùn)行ARM加載的應(yīng)用程序代碼。DSP啟動(dòng)順序如下:
ARM重置DSP,然后將其從重置中取出。
數(shù)字信號(hào)處理器(DSP)退出復(fù)位,并用startaddress加載其程序計(jì)數(shù)器(PC)寄存器。
這個(gè)位置的ROM代碼將DSP分支到一個(gè)初始化routineaddress。
初始化一個(gè)DSP狀態(tài)寄存器,將矢量表移動(dòng)到指定的位置,除專用的不可屏蔽中斷外,所有中斷都被禁用,并且DSP被設(shè)置為模式。
當(dāng)DSP處于其模式時(shí),ARM用DSP代碼/數(shù)據(jù)加載DSP程序/數(shù)據(jù)存儲(chǔ)器。
當(dāng)ARM完成下載DSP代碼時(shí),它通過斷言一個(gè)中斷信號(hào)從該模式喚醒DSP。
然后,DSP分支到新的interruptvector表所在的起始地址。ARM應(yīng)該至少在開始代碼中加載了abranch。
SoC的工具支持
SoC工具環(huán)境還包含監(jiān)視每個(gè)處理元素的詳細(xì)狀態(tài)的支持。如下圖3所示,anSoc中處理元素的詳細(xì)狀態(tài)報(bào)告和控制允許開發(fā)人員查看系統(tǒng)的執(zhí)行概要。
此外,由于功率敏感的SoC設(shè)備可能會(huì)在應(yīng)用程序執(zhí)行時(shí)關(guān)閉部分或全部設(shè)備,因此了解應(yīng)用程序的功率分布也很有用。這也可以通過適當(dāng)?shù)姆治龉ぞ叩玫健?/p>
一般來說,SoC和異構(gòu)處理器需要更復(fù)雜的工具支持。一個(gè)SoC可以包含幾個(gè)可編程的可調(diào)試處理元素,這些處理元素需要支持代碼生成、調(diào)試訪問和可見性以及實(shí)時(shí)數(shù)據(jù)分析的工具。A這方面的一般模型如下圖2所示。一個(gè)SoC處理器將有幾個(gè)處理元件,如ARM和DSP。
這些處理元素中的每一個(gè)都需要一個(gè)開發(fā)環(huán)境,其中包括提取、處理和顯示調(diào)試和檢測(cè)數(shù)據(jù)流的機(jī)制、調(diào)用和插入內(nèi)存的機(jī)制以及控制可編程元素執(zhí)行的機(jī)制,以及生成、鏈接和構(gòu)建可編程元素可執(zhí)行映像的工具。
Figure2. An SoC tools environment
SoC工具環(huán)境還包含監(jiān)視每個(gè)處理元素的詳細(xì)狀態(tài)的支持。如下圖3所示,anSoc中處理元素的詳細(xì)狀態(tài)報(bào)告和控制允許開發(fā)人員查看系統(tǒng)的執(zhí)行概要。
此外,由于功率敏感的SoC設(shè)備可能會(huì)在應(yīng)用程序執(zhí)行時(shí)關(guān)閉部分或全部設(shè)備,因此了解應(yīng)用程序的功率分布也很有用。這也可以通過適當(dāng)?shù)姆治龉ぞ叩玫健?br />
Figure3. Tools support provide visibility into the status of each of theSoC processing elements
SoC的視頻處理實(shí)例
視頻處理是需要片上系統(tǒng)解決方案的商業(yè)應(yīng)用的一個(gè)很好的例子。視頻處理應(yīng)用程序是計(jì)算密集型的,需要大量的MIPS來維持這些應(yīng)用程序所需的數(shù)據(jù)吞吐量。這些應(yīng)用程序中的一些非常復(fù)雜的算法包括:
“圖像管道處理和視頻穩(wěn)定
“壓縮和減壓
“顏色轉(zhuǎn)換
“水印和各種形式的加密
Figure4. A SoC designed for video and image processing using a RISC device(ARM926) and a DSP
要執(zhí)行每秒30幀的MPEG-4算法,根據(jù)視頻的分辨率可以達(dá)到2500 MIPS。
音頻通道處理沒有要求那么高,但是仍然需要足夠的整體MIPS來執(zhí)行音頻壓縮和解壓縮、均衡和采樣率轉(zhuǎn)換。
隨著這些應(yīng)用變得更加復(fù)雜和要求更高(例如,新的壓縮技術(shù)仍在開發(fā)中),這些SoC將不僅需要支持一個(gè)壓縮標(biāo)準(zhǔn),還需要支持幾個(gè)不同的壓縮標(biāo)準(zhǔn)。用于視頻應(yīng)用的soc包括用于提高性能的專用指令集加速器。soc編程模型和外圍混合允許靈活地有效地支持這些標(biāo)準(zhǔn)的幾種格式。
例如,上面圖4中的DM320 SoC處理器有一個(gè)專用于視頻處理的片上Simd引擎(稱為iMX)。該硬件加速器可以執(zhí)行常見的視頻處理算法(離散余弦變換(DCT)、IDCT、運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)相關(guān)等)
VLCD(可變長(zhǎng)度編碼/解碼)處理器用于支持可變長(zhǎng)度編碼和解碼以及JPEG、H.263、MPEG-1/2/4視頻壓縮標(biāo)準(zhǔn)的量化。
如圖4所示,SoC解決方案包含適當(dāng)?shù)募铀贆C(jī)制、專用指令集、硬件協(xié)處理器等,它們提供了DSP應(yīng)用中重要算法的高效執(zhí)行。我們討論了視頻處理的一個(gè)例子,但是您會(huì)發(fā)現(xiàn)支持其他應(yīng)用程序(如無線基站和蜂窩手機(jī))的機(jī)制是相同的。
總結(jié)
以上是生活随笔為你收集整理的多核片上系统(SoC)架构的嵌入式DSP软件设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工业4.0是个白日梦吗?
- 下一篇: Battery electric veh