針對當前應用的複雜性,soc晶元更好能能滿足應用和**的需求,整合眾多介面,
用arm做為應用處理器進行多樣化的應用開發和使用者介面和介面,利用dsp進行演算法加速,特別是**的編譯碼演算法加速,既能夠保持演算法的靈活性,又能提供強大的處理能力。
傳統的晶元,基本是乙個處理器核心,或者是通用處理器如arm,或者是dsp。對於控制和使用者介面,一般用通用處理器實現,演算法處理或者**處理則依賴於dsp或者硬體晶元,很多系統都是雙晶元的架構。開發模式也比較單純,比如arm晶元,有arm的的**工具,基於os之上進行應用開發;dsp有dsp的開發工具,如ti的ccs以及510、560的**器,可以進行演算法的移植、優化、跟蹤、除錯等。這時,所需要的經驗也比較單一。
基於arm+dsp的雙核架構,很多任務程師不知道如何入手進行開發,提出了很多的疑問,比如對arm工程師,很困惑的是如何使用dsp的資源?如何進行資料的互動?如何保持雙核之間的同步?對dsp工程師,則問到如何進行arm除錯?如何啟動dsp?如果進行**加速,如何操作外設獲取或傳送資料等。基於不同的開發經驗和基礎,arm工程師和dsp工程師會從完全不同的角度來看soc的晶元,以至於拿到soc的晶元根本不知道如何入手,這裡就本人的經驗與大家分享一下。
首先arm+dsp的晶元,他是乙個雙核的,對應arm和dsp分別是不同的指令集和編譯器,可以把soc的晶元看成是兩個單晶元的合成,需要兩套不同的開發工具,ccs3.3可以進行晶元級的除錯和**,但是對應arm和dsp需要選擇不同的平台。一般來說,arm上面跑作業系統,比如linux,wince等,在arm上的開發,除了bootloader以外,基本都是基於os的開發,比如驅動,核心裁減,以及上層應用等,需要的除錯和**主要靠log或者os提供的偵錯程式,如kgdb,platform builder等。基於dsp核的開發和傳統單核dsp一樣,需要用ccs+**器來進行開發除錯。
其次,對於晶元的外設介面,arm核和dsp核都可以訪問,典型的情況是arm控制所有的外設,通過os上的驅動去控制和管理,這部分和傳統的arm晶元類似;dsp主要是進行演算法加速,只是和memory打交道,為了保持晶元的資源管理的一致性,盡量避免由dsp去訪問外設。當然,根據具體的應用需求,dsp也是可以控制外設介面進行資料的收發,這時,需要做好系統的管理,避免雙核操作的衝突。
最後,關於晶元的通訊和同步,這個是困擾很多任務程師的問題,為了便於客戶的開發和使用,ti提供了dsplink,codec engine的dvsdk開發套件,基於dvsdk可以很方便的進行arm+dsp的應用開發,下面對dvsdk的軟體架構,各個軟體模組的功能等做簡要介紹。
dvsdk是多個軟體模組的整合,包括純dsp端的軟體模組,arm的軟體模組和雙核互動的軟體模組。dvsdk的軟體包都是基於實時軟體模組(real-time-software-component:rtsc)的,還需要安裝rtsc的工具xdc,xdc是ti開源的乙個工具,可以支援跨平台的開發,能夠最大程度的**重用;如果需要進行純arm的開發,還需要arm的編譯工具以及linux核心或者wince的bsp;如果需要進行dsp的演算法開發或者dsp端開執行**生成,還需要安裝dsp的編譯器cgtools和dsp/bios;為了便於配置生成dsp端的可執行**,通過嚮導生成codec的rtsc包和可執行**,還可以選裝ceutils和cg_xml。
dvsdk的核心是codec engine,所有的其他軟體模組基本都是圍繞codec engine的。codec engine是連線arm和dsp的橋梁,是介於應用層(arm側的應用程式)和訊號處理層(dsp側的演算法)之間的軟體模組,在編譯dsp端可執行**和arm端應用程式時,都需要codec engine的支援。
codec engine主要有兩部分:
arm端應用適配層,提供了精簡的api和對應的庫給應用層使用。
dsp的演算法呼叫層,提供了dsp演算法的介面封裝規範,是的所有的演算法通過簡單的配置就可以編譯到dsp的可執行程式中。
關於codec engine的介紹,可以參考《幫您快速入門codec engine》。
codec engine底層arm和dsp的通訊是建立在dsp/bioslink之上的,dsp/bios link真正實現arm和dsp互動的軟體模組。由於dsp/bios link是跨平台的,也是有arm部分和dsp部分組成,其中在arm端,包括基於os的驅動和**用呼叫的庫檔案,dsp端,必須要用dsp/bios,dsp的可執行**需要包含dsp/bios link的庫檔案。dsp/bios
link常用的主要有如下幾部分的軟體模組:
msgq相關,arm和dsp的通訊是基於msgq的,msgq有輪詢等待的方式或者中斷的方式,msg是基於共享記憶體池的方式。codecengine通過msgq互動一些關鍵資料,比如控制,和一些大塊資料的位址指標等。大量的資料互動需要通過cmem實現。
在arm端,配合codec engine使用的軟體模組有linuxutils或者winceutils,包含cmem,sdma等
cmem是用來在os之外分配連續物理記憶體空間,進行實體地址到虛位址,以及虛位址到實體地址空間轉化的。為了避免資料的多次複製,需要開闢一塊arm和dsp共享的資料空間,arm和dsp都可以直接訪問,這部分空間需要通過cmem管理。對arm來說,cmem是os上的乙個驅動程式,需要通過ioctl來實現記憶體分配或者位址空間轉化。由於dsp可以訪問任何實體地址空間,通過arm傳給dsp的指標必須是實體地址。
如果只是呼叫現成的或者第三方的演算法庫,可以只了解arm端的軟體模組,codecengine或者dmai已經提供了豐富的應用介面,dsp可以認為是個單純的**加速器,把arm+dsp的晶元當作asic一樣使用。如果要充分發揮dsp的效能,就需要對dsp進行開發了。codec engine對dsp的演算法只是規範了介面,以便於和codec engine一起生成dsp的可執行程式。
開發dsp演算法的工程師,和傳統的單核的dsp開發模式類似,只需要操作dsp核,基於ccs進行演算法開發,最後封裝成xdm的介面就可以了。具體如何進行dsp的打包,如何生成dsp的可執行程式,在後續的文章繼續討論。
雙核處理器ARM DSP如何實現協同工作
傳統的晶元,基本是乙個處理器核心,或者是通用處理器如arm,或者是dsp。對於控制和使用者介面,一般用通用處理器實現,演算法處理或者 處理則依賴於dsp或者硬體晶元,很多系統都是雙晶元的架構。開發模式也比較單純,比如arm晶元,有arm的的 工具,基於os之上進行應用開發 dsp有dsp的開發工具,...
TI雙核處理器ARM DSP如何實現協同工作
基於arm dsp的雙核架構,很多任務程師不知道如何入手進行開發,提出了很多的疑問,比如對arm工程師,很困惑的是如何使用dsp的資源?如何進行資料的互動?如何保持雙核之間的同步?對dsp工程師,則問到如何進行arm除錯?如何啟動dsp?如果進行 加速,如何操作外設獲取或傳送資料等。基於不同的開發經...
CPU 什麼是雙核處理器
雙核處理器 dual core processor 雙核處理器是指在乙個處理器上整合兩個運算核心,從而提高計算能力。雙核 的概念最早是由ibm hp sun等支援risc架構的高階伺服器廠商提出的,主要運用於伺服器上。而台式電腦上的應用則是在intel和amd的推廣下,才得以普及。目前intel推出...