利用Cortex M7緊密耦合內(nèi)存運(yùn)行快速算法
對(duì)于那些需要低功耗、成本效益和中等性能的嵌入式系統(tǒng)而言,ARM Cortex M系列無(wú)疑是首選的處理器系列。 Cortex M系列中最早得到應(yīng)用的是其光譜中的小部分產(chǎn)品: Cortex M0用于實(shí)現(xiàn)最低的成本,Cortex M0+用于實(shí)現(xiàn)最高 的能效,Cortex M3用于實(shí)現(xiàn)功耗與性能之間的最佳平衡, Cortex M4用于實(shí)現(xiàn)那些需要數(shù)字信號(hào)處理(DSP)功能的應(yīng) 用。
該系列中最高性能的Cortex M7的首批應(yīng)用現(xiàn)已開(kāi)始涌 現(xiàn)。該處理器在保持適度能耗和成本的情況下,能以更快速 度運(yùn)行更加復(fù)雜的算法。Cortex M7 采用65-nm嵌入式閃存工 藝,運(yùn)行頻率為300MHz時(shí)CoreMark分?jǐn)?shù)可達(dá)到1500,而且 其DSP性能是Cortex M4的兩倍。一個(gè)雙精度浮點(diǎn)單元和一個(gè) 雙發(fā)指令流水線進(jìn)一步確立了Cortex M7的高速地位。憑借這些特性,當(dāng)?shù)凸摹⒌统杀緫?yīng)用需要嚴(yán)密的音 視頻算法來(lái)實(shí)現(xiàn)豐富的影音功能時(shí),Cortex M7成為了它們 當(dāng)仁不讓的選擇。 Cor tex M7在無(wú)人機(jī)圖像處理、 語(yǔ)音控 制、物體識(shí)別、復(fù)雜的汽車傳感器融合以及高端物聯(lián)網(wǎng)傳感 領(lǐng)域得到了廣泛應(yīng)用。
1 可快速、確定地執(zhí)行代碼的緊密耦合內(nèi)存
為了實(shí)現(xiàn)實(shí)時(shí)響應(yīng)和無(wú)縫的音視頻性能,F(xiàn)IR、FFT、 Biquad等算法經(jīng)常需要盡可能快速、確定地運(yùn)行。為了滿足 系統(tǒng)的性能和時(shí)延目標(biāo),這些算法應(yīng)以全時(shí)鐘頻率運(yùn)行,不 受緩存未命中、中斷、上下文交換以及其它有損時(shí)間確定性 的執(zhí)行意外阻礙。
這意味著您不能在標(biāo)準(zhǔn)內(nèi)存之外運(yùn)行這些代碼,也不 能依賴標(biāo)準(zhǔn)內(nèi)存來(lái)存儲(chǔ)正在處理的數(shù)據(jù)。閃存等典型內(nèi)存的 速度太慢,跟不上Cortex M7內(nèi)核的腳步,而且它們需要緩 存,所以,當(dāng)發(fā)生緩存未命中時(shí)會(huì)導(dǎo)致較長(zhǎng)的時(shí)延。因此, Cor tex M7架構(gòu)提供了一種方法, 使用“ 緊密耦合內(nèi)存”(TCM)來(lái)繞開(kāi)標(biāo)準(zhǔn)的執(zhí)行機(jī)制。A R M 的 內(nèi) 核 提 供 T C M 接 口 , 用 于 實(shí) 現(xiàn) 以 處 理 器 全速 運(yùn) 行 的 單 周 期 隨 機(jī) TC M 存 取 。 一 個(gè) 6 4 位 指 令 內(nèi) 存 端 口(ITCM)支持雙發(fā)處理器架構(gòu),兩個(gè)數(shù)據(jù)端口(DTCM) 能夠?qū)崿F(xiàn)兩個(gè)并行的32位數(shù)據(jù)存取。但該架構(gòu)沒(méi)有指定應(yīng) 提供內(nèi)存的類型以及大小。這些決定留由那些在微控制器(MCU)中實(shí)現(xiàn)Cortex M7內(nèi)核的設(shè)計(jì)人員作出,目的是鼓 勵(lì)創(chuàng)新和差異化設(shè)計(jì)。
因此,我們可以將嵌入式閃存連接至TCM接口。但閃 存不能以處理器全速運(yùn)行,因此需要緩存,從而給TCM旨 在提供的確定性帶來(lái)了威脅。DRAM中的代碼映射在理論上 可行,但成本過(guò)高。速度達(dá)到能夠?qū)崿F(xiàn)無(wú)緩存、直接存取的 唯一內(nèi)存類型就是SRAM。
SRAM具備眾多優(yōu)勢(shì):可以將一個(gè)SRAM模組直接連接 到TCM接口;SRAM技術(shù)便于實(shí)現(xiàn)片上嵌入;SRAM支持處 理器全速隨機(jī)存取。SRAM的唯一缺點(diǎn)是位成本較高,高于 閃存和DR AM。因此,重要的是要保持有限的TCM大小, 即使是65nm或40nm的工藝也能以適當(dāng)?shù)某杀緦?shí)現(xiàn)充足的 SRAM容量。
TC M 可 從 多 個(gè) 來(lái) 源 加 載 , 而 這 些 來(lái) 源 在 架 構(gòu) 中 也 未 明確指出。因此,各種MCU可能在內(nèi)存加載方式上存在差 異,必定包含的是一個(gè)直接內(nèi)存存取(DMA)引擎,而至 于是一個(gè)單一的DMA,還是來(lái)自視頻或USB等不同數(shù)據(jù)流的 多 個(gè) 加 載 數(shù) 據(jù) 之
一 , 這 個(gè) 由 M CU
設(shè)計(jì)人員決定。
在 T C M 之 外 執(zhí) 行 的 代 碼 由 系 統(tǒng) 編 程 人 員 確 定 。 在 準(zhǔn) 備 一 個(gè) 軟 件 構(gòu) 建 時(shí) , 編 程 人 員 需 要 確 定 應(yīng) 用 在 T C M 上的 代 碼 段 和 數(shù)
圖1 TCM接口提供一個(gè)單一的64位指令端口和兩個(gè)32位數(shù)據(jù)端口
圖2 將SRAM應(yīng)用到內(nèi)存條時(shí),多個(gè)DMA突發(fā)傳送會(huì)同時(shí)引發(fā)微量時(shí)延
圖3 Atmel SAM S70/E70系列可使用TCM或系統(tǒng)SRAM的SRAM提 高靈活性和利用率
據(jù)塊。通常是將Pragmas嵌入到軟件中,或者應(yīng)用鏈接器設(shè) 置,以便讓該構(gòu)建能夠合理地放置代碼和內(nèi)存。
2 用于更高速SRAM存取的多個(gè)端口
雖然TCM可提供一個(gè)用于快速、緊密運(yùn)行重要程序的 直接機(jī)制,但我們經(jīng)常需要將一定容量的系統(tǒng)SRAM配置為 通用高速內(nèi)存,供處理器和外設(shè)通過(guò)DMA使用。雖然這種 內(nèi)存在邏輯上與TCM分離,但一個(gè)SRAM模組也能共享TCM 和通用功能,而且還能讓設(shè)計(jì)人員為每種應(yīng)用情況對(duì)TCM 和系統(tǒng)SRAM之間的分離作出調(diào)整。
通用系統(tǒng)SRAM中實(shí)現(xiàn)的外設(shè)數(shù)據(jù)緩沖區(qū)通常由DMA傳 送且通過(guò)系統(tǒng)外設(shè)加載。但是,從眾多來(lái)源加載的能力會(huì)引 發(fā)多個(gè)DMA試圖同時(shí)存取內(nèi)存,從而導(dǎo)致不必要的時(shí)延和 沖突的可能性。
在一個(gè)典型的例子中,有三個(gè)不同的實(shí)體對(duì)SR AM的 DMA存取進(jìn)行相互競(jìng)爭(zhēng):處理器(64位存取,而在本例中 要求是128位存?。┖蛢蓚€(gè)分離的外設(shè)DMA請(qǐng)求(DMA0和 DMA1,均為32位存?。W屛覀兗僭O(shè)處理器的優(yōu)先級(jí)高于 DMA,而DMA0的優(yōu)先級(jí)高于DMA1。
圖2 顯示了這個(gè)例子。左側(cè)顯示了一個(gè)64位寬式單條內(nèi) 存的性能,右側(cè)顯示了由4個(gè)32位內(nèi)存條組成的同一個(gè)內(nèi)存 中處理相同事務(wù)。
使 用 單 條 內(nèi) 存 時(shí) , 處 理 器 可 以 在 兩 個(gè) 周 期 內(nèi) 完 成 存 取, 然后, DM A0突發(fā)在下一個(gè)周期啟動(dòng)。 DM A1會(huì)被鎖 定,直至DMA0完成。任何優(yōu)先級(jí)更高的處理器請(qǐng)求都會(huì)中 斷DMA加載,從而進(jìn)一步增加時(shí)延。如圖2所示,周期5中 的一個(gè)取指令給兩個(gè)DMA操作增加了一個(gè)周期時(shí)延。
為了提高操作效率,可以使用配有交錯(cuò)地址的多個(gè)內(nèi) 存條組成一個(gè)內(nèi)存,每個(gè)內(nèi)存條可以被單獨(dú)存取。在這種方 法中,DMA0會(huì)在處理器存取完第一個(gè)內(nèi)存條時(shí)啟動(dòng),而在 同時(shí),處理器會(huì)存取高優(yōu)先級(jí)的內(nèi)存條。DMA1不再需要等待整個(gè)DMA0傳送結(jié)束,它可以在DMA0存取完第一個(gè)內(nèi)存 條之后的一個(gè)周期中啟動(dòng)。
由于具備更高的優(yōu)先級(jí),處理器看不出這兩種方案在 時(shí)延上的差別。但DMA0的時(shí)延從2個(gè)周期縮短為1個(gè)周期, DMA1的時(shí)延從7個(gè)周期縮短為2個(gè)。DMA操作期間的一個(gè)取 指令甚至可能會(huì)與DMA操作同時(shí)發(fā)生,從而導(dǎo)致無(wú)附加時(shí) 延。更低的時(shí)延不僅提高了性能,同時(shí)也意味著您可以縮小 外設(shè)FIFO。
有了這些可行且有用的內(nèi)存方案,MCU設(shè)計(jì)人員將能 設(shè)想如何讓閃存、系統(tǒng)SRAM和TCM配合工作。它們是相互 獨(dú)立嗎?占用類似的容量嗎?芯片上還是芯片外?不同的考 量將催生出差異化的Cortex M7。
3 一個(gè)具體的Cortex M7 TCM實(shí)例
Cortex M7 MCU的一個(gè)實(shí)例在Atmel的SAM S70、SAM E70和SAM V70/1系列中實(shí)現(xiàn)。它擁有一個(gè)由4個(gè)內(nèi)存條組 成的SR AM,可被用作通用SR AM(Atmel將其稱為“系統(tǒng) SRAM”)和TCM。在被配置為TCM的部分中,指令能夠以
300 MHz的內(nèi)核全速運(yùn)行確定性的單周期存取,無(wú)取指令或 緩存時(shí)延。與此類似, TCM中的數(shù)據(jù)也可以實(shí)現(xiàn)無(wú)緩存時(shí) 延存取。
指令TCM(ITCM)和數(shù)據(jù)TCM(DTCM)大小必須類 似,每個(gè)可以是32K、64K或128K字節(jié)。尺寸是不能輕易更 改的構(gòu)建時(shí)設(shè)置。
整 個(gè) S R A M 模 組 最 大 可 為 3 8 4 K 字 節(jié) , 這 意 味 著 系 統(tǒng) SR AM和TCM可以同時(shí)使用。配置為TCM的內(nèi)存容量將占 用系統(tǒng)SRAM的容量。例如,如果ITCM被配置為128 KB, D T C M 也 被 配 置 為 1 2 8 K B , 那 么 系 統(tǒng)SR A M的容量將降至128 KB。 系統(tǒng)SR A M能夠以最高150 MHz的速度運(yùn)行,即一半的處理器速度,而且它由四個(gè)內(nèi)存條組成,可降低DMA時(shí) 延。既可固定也可循環(huán)設(shè)置的DMA存取優(yōu)先級(jí)與系統(tǒng)SRAM 相同,因?yàn)樗鼈冡槍?duì)的是內(nèi)部總線矩陣。
一個(gè)寄存器位可激活或取消激活TCM,因此,存取目 標(biāo)將取決于TCM激活。設(shè)備總是在ITCM取消激活時(shí)被引 導(dǎo),以便讓代碼能夠從引導(dǎo)內(nèi)存加載。引導(dǎo)完成后,需要時(shí) 可以激活TCM。
ITCM地址空間與引導(dǎo)內(nèi)存疊加。如果取消激活TCM, 指令存取將前往引導(dǎo)內(nèi)存。如果激活TCM,TCM地址空間 中的存取將在TCM中進(jìn)行,TCM空間以外的存取將在閃存 中進(jìn)行??梢允褂肕PU保護(hù)各個(gè)空間,以確保不會(huì)發(fā)生對(duì)錯(cuò)誤
內(nèi)存的無(wú)意存取。4 Cortex M7是下一波ARM內(nèi)核
Cortex M7正在興起,運(yùn)行更加高級(jí)的算法,同時(shí)依然 保持適度的功耗和成本。緊密耦合內(nèi)存是Cortex M7的一大 特性,能夠以處理器全速確定地執(zhí)行緊密的代碼。
如 何 在M CU 上 是 實(shí) 現(xiàn) 這 種 性 能 將 取 決 于 設(shè) 計(jì) 人 員 將 Cortex M7集成到MCU中時(shí)的系統(tǒng)選擇。我們可以將SRAM 配置為TCM來(lái)實(shí)現(xiàn)最高的速度。這個(gè)SR AM可以與一個(gè)更 為通用的系統(tǒng)SR AM共享, 而且通過(guò)使用多個(gè)內(nèi)存條組成 SRAM,可以將時(shí)延降至最低。
這些架構(gòu)特性雖然簡(jiǎn)單,但卻能夠顯著提升性能,實(shí)
現(xiàn)個(gè)人、工業(yè)和汽車設(shè)備所需的嵌入式功能。
評(píng)論