技術(shù)
導(dǎo)讀:物聯(lián)網(wǎng)的快速發(fā)展超出了幾乎所有人的想像,每天都有成千上萬的設(shè)備入網(wǎng)。
物聯(lián)網(wǎng)的快速發(fā)展超出了幾乎所有人的想像,每天都有成千上萬的設(shè)備入網(wǎng)。面對(duì)如此龐大的市場(chǎng)需求,傳統(tǒng)技術(shù)早已不堪重負(fù),而對(duì)新一代的數(shù)字信號(hào)處理提出了高運(yùn)算能力和低功耗等更多要求。(本文的觀點(diǎn)是,搭載RTOS的新一代混合型DSP技術(shù),是物聯(lián)網(wǎng)的最佳選擇)
隨著新市場(chǎng)及其對(duì)新技術(shù)需求的快速增長(zhǎng),一些技術(shù)的利用率越來越高。數(shù)字信號(hào)處理(DSP)就是這樣一種技術(shù),其形式可以是芯片,也可以作為系統(tǒng)級(jí)芯片(SoC)的IP核。雖然DSP已經(jīng)存在很長(zhǎng)時(shí)間了,但新一代DSP所支持的功能,對(duì)于滿足某些特定市場(chǎng)需求來說非常重要,比如IoT(物聯(lián)網(wǎng))。鑒于許多物聯(lián)網(wǎng)設(shè)備的固有性質(zhì),通常都會(huì)使用實(shí)時(shí)操作系統(tǒng)(RTOS)。
OriLeibovich,CEVA嵌入式開發(fā)高級(jí)經(jīng)理
DSP技術(shù)演進(jìn)
DSP被用來轉(zhuǎn)換和處理現(xiàn)實(shí)世界中的模擬信號(hào),這種處理操作是通過復(fù)雜的信號(hào)處理算法來完成的。作為上世紀(jì)80年代就出現(xiàn)的技術(shù),DSP在硬件功能和軟件開發(fā)工具以及基礎(chǔ)設(shè)施方面,已取得很大發(fā)展。早年的算法是用匯編語言編程到DSP上的。隨著DSP市場(chǎng)的擴(kuò)大以及算法變得越來越復(fù)雜,其架構(gòu)也在不斷發(fā)展,并促進(jìn)了高級(jí)語言編譯器的開發(fā)。
帶嵌入式DSP內(nèi)核的芯片,一般都集成有片內(nèi)存儲(chǔ)器,其大小通常足以容納執(zhí)行專用任務(wù)所需的整套程序。新一代DSP應(yīng)用范圍涵蓋了音頻/語音處理、圖像處理、電信信號(hào)處理、傳感器數(shù)據(jù)處理和系統(tǒng)控制等。而如今的物聯(lián)網(wǎng)市場(chǎng),則幾乎覆蓋了之前眾多用例的各種組合。行業(yè)分析公司Markets and Markets預(yù)計(jì),到2027年,全球物聯(lián)網(wǎng)技術(shù)市場(chǎng)規(guī)模將增長(zhǎng)到5664億美元。面對(duì)如此龐大的物聯(lián)網(wǎng)市場(chǎng),新一代的DSP技術(shù)至關(guān)重要。
為什么DSP非常適合物聯(lián)網(wǎng)設(shè)備?
物聯(lián)網(wǎng)通過使用不同類型的傳感器收集數(shù)據(jù),實(shí)現(xiàn)現(xiàn)實(shí)世界中萬物間的通信和連接。DSP對(duì)來自傳感器的連續(xù)變化信號(hào)進(jìn)行分析和處理。如今,已出現(xiàn)傳感器hub DSP(如CEVA-SensPro2),就是用來處理和融合多個(gè)傳感器信息的,并用于上下文感知的神經(jīng)網(wǎng)絡(luò)推理。DSP設(shè)計(jì)用于分析和處理音視頻、溫度、壓力或濕度等現(xiàn)實(shí)世界中的各類信號(hào),其任務(wù)涉及精確和準(zhǔn)確的實(shí)時(shí)重復(fù)數(shù)字計(jì)算。隨著物聯(lián)網(wǎng)市場(chǎng)的增長(zhǎng),越來越多的傳感器得到部署,收集到的所有數(shù)據(jù)都需要得到高效的實(shí)時(shí)處理。如今越來越清晰的跡象表明,數(shù)據(jù)處理需要在物聯(lián)網(wǎng)設(shè)備上直接進(jìn)行,而不是將其發(fā)送到云端進(jìn)行處理。
目前正在發(fā)生的另一個(gè)事關(guān)物聯(lián)網(wǎng)設(shè)備的趨勢(shì)是,越來越多地使用基于人工智能(AI)的算法完成數(shù)據(jù)的本地化處理。人工智能算法基于神經(jīng)網(wǎng)絡(luò)模型,需要高水平的并行能力才能有效執(zhí)行。并行計(jì)算能力是DSP優(yōu)于通用中央處理器(CPU)的一個(gè)關(guān)鍵優(yōu)勢(shì)。為了滿足這一要求,現(xiàn)代DSP架構(gòu)傾向于使用寬向量和單指令多數(shù)據(jù)(SIMD)功能。
簡(jiǎn)而言之,基于DSP的強(qiáng)大解決方案,可以同時(shí)滿足現(xiàn)代物聯(lián)網(wǎng)設(shè)備的高性能計(jì)算和低功耗需求。
為什么DSP與RTOS很匹配?
正如DSP是一種專用處理器一樣,RTOS也是一種專用操作系統(tǒng)。DSP致力于極其快速和可靠地處理現(xiàn)實(shí)世界的數(shù)據(jù),而RTOS則致力于可靠地滿足響應(yīng)/反應(yīng)時(shí)間方面的特定時(shí)序要求。DSP與通用CPU相比更緊湊,RTOS與常規(guī)操作系統(tǒng)相比也是如此。這些特性完全符合物聯(lián)網(wǎng)設(shè)備的需求,因而使得DSP和RTOS成為物聯(lián)網(wǎng)應(yīng)用的理想之選。
從歷史上看,嵌入式設(shè)備一般會(huì)利用一個(gè)專門用途、通常為8位或16位的微控制器,可以在沒有RTOS的情況下工作。但如今的物聯(lián)網(wǎng)設(shè)備更加復(fù)雜,需要一個(gè)32位CPU與帶有RTOS的DSP相結(jié)合,來管理控制功能,并運(yùn)行復(fù)雜的信號(hào)處理。
但問題是,新一代DSP是否足以同時(shí)完成物聯(lián)網(wǎng)設(shè)備的信號(hào)處理和控制功能?答案是肯定的。一種能夠提供面向DSP功能和面向控制器功能的混合DSP架構(gòu),正在迅速被物聯(lián)網(wǎng)和其他嵌入式設(shè)備所采用。這種混合DSP具有支持超低指令字(VLIW)架構(gòu)實(shí)現(xiàn)、單指令多數(shù)據(jù)(SIMD)操作、單精度浮點(diǎn)運(yùn)算、緊湊的代碼規(guī)模、全RTOS、超快速上下文切換、動(dòng)態(tài)分支預(yù)測(cè)等特點(diǎn),從而設(shè)備上不再需要額外的處理器來運(yùn)行RTOS。
面向DSP的RTOS
基于DSP的RTOS旨在充分利用DSP的高性能特性。它是一個(gè)先占式、基于優(yōu)先級(jí)的多任務(wù)操作系統(tǒng),可提供非常低的中斷延遲。這類RTOS附帶驅(qū)動(dòng)程序、應(yīng)用程序編程接口(API)、以及為DSP芯片定制的DSP功能運(yùn)行芯片支持庫(CSL)。所有片上外設(shè)都可以被控制,比如高速緩存、直接內(nèi)存訪問(DMA)、定時(shí)器、中斷單元等。因此,物聯(lián)網(wǎng)應(yīng)用程序開發(fā)人員能夠輕松地配置RTOS,從而高效處理資源請(qǐng)求和管理系統(tǒng)。
面向物聯(lián)網(wǎng)的RTOS:RT-Thread
RT-Thread是一款專為物聯(lián)網(wǎng)設(shè)備優(yōu)化的開源RTOS,資源占用率極低、可靠性高、可擴(kuò)展性強(qiáng)。RT-Thread得到物聯(lián)網(wǎng)設(shè)備所需豐富的中間件、硬件以及軟件生態(tài)系統(tǒng)的廣泛支持。
RT-Thread支持GCC、Keil、IAR等所有主流編譯工具,支持POSIX、CMSIS、C++應(yīng)用環(huán)境、以及Micropython、Javascript等多種標(biāo)準(zhǔn)接口。
RT-Thread還為所有主流CPU和DSP架構(gòu)提供強(qiáng)大的支持。通過RTOS消息傳遞線程間的通信和同步、信號(hào)旗語等業(yè)務(wù)可得到始終如一的高效處理。
目前,RT-Thread有兩個(gè)版本。一個(gè)是用于資源豐富的物聯(lián)網(wǎng)設(shè)備的標(biāo)準(zhǔn)版,而另一個(gè)則為Nano版,用于資源受限的系統(tǒng)。
DSP與RT-Thread的完美結(jié)合
某些DSP(如CEVA DSP)架構(gòu)設(shè)計(jì),原生就支持RTOS功能和超快速上下文切換,因此使用CEVA DSP和RT-Thread RTOS實(shí)現(xiàn)的物聯(lián)網(wǎng)設(shè)備,可以不中斷RTOS,同時(shí)處理不同資源之間的多種通信任務(wù)。例如,多核通信接口(MCCI)機(jī)制支持內(nèi)核之間的命令通信和消息傳遞。內(nèi)核之間的通信是通過使用AXI從端口直接訪問專用命令寄存器來實(shí)現(xiàn)的。DSP有專門的控制和指令,可以通過MCCI跟蹤通信的狀態(tài)。
多核通信接口架構(gòu)。(來源:CEVA)
通過使用均為32位的MCCI_NUM專用命令寄存器來執(zhí)行內(nèi)核之間的消息傳遞。32位COM_REGx寄存器由外部?jī)?nèi)核通過AXI從端口寫入,內(nèi)核只能讀取。對(duì)于128位AXI總線,命令生成內(nèi)核可以同時(shí)寫入的寄存器多達(dá)四個(gè),而對(duì)于256位AXI總線,該數(shù)目則增至八個(gè)。
當(dāng)生成命令的內(nèi)核將命令輸出到COM_REGx時(shí),尋址寄存器將會(huì)被更新,COM_STS寄存器中的相關(guān)狀態(tài)位也會(huì)被更新。此外,中斷(MES_INT)將被確認(rèn)以通知接收內(nèi)核。
當(dāng)接收內(nèi)核讀取其中一個(gè)COM_REGx寄存器后,會(huì)向發(fā)起方發(fā)送一個(gè)讀取指示信號(hào)。讀取指示信號(hào)由接收內(nèi)核使用專用的RD_IND(讀取指示)MCCI_NUM位總線接口發(fā)送。RD_IND總線的每一位分別表示來自其中一個(gè)COM_REGx寄存器的讀取操作。利用IO接口,接收內(nèi)核一次只能讀取一個(gè)COM_REGx寄存器。這樣不僅使不同內(nèi)核間同步變得更簡(jiǎn)單,而且使同一內(nèi)核中不同任務(wù)間的同步也變得更為容易。