在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Cache技術在星辰處理器中的應用

痞子衡嵌入式 ? 來源:安德魯的設計筆記本 ? 2023-08-29 17:28 ? 次閱讀

引言

目前,靈動微控制器產品體系中,適配了MicroPython的,有MM32F3(MM32F3273G9P,Arm Cortex-M3)和MM32F5(MM32F5277E9P,ArmChina STAR-MC1),從官方數據來看,使用星辰處理器(STAR-MC1)的MM32F5對指令的處理效率要高于使用Cortex-M3處理器的MM32F3。如圖x所示。

9dcb042e-464c-11ee-a2ef-92fbcf53809c.png

figure-arm-core-benchmark 圖x 星辰處理器同其他Arm處理器內核對比

然而,同一份MicroPython的啟動過程,在使用同樣主頻(120MHz)的情況下,在MM32F5平臺上運行,總是莫名其妙地慢好多。。。昨天跟同事Hao聊SDK的樣例工程對Cache問題的處理策略時,偶然意識到,早期為MM32F5適配MicroPython的時候沒有考慮過Cache,隨即趕緊翻出來MicroPython的代碼,果然沒開。好吧,更新MicroPython項目下MM32F5平臺的啟動代碼,替換來自于SDK中的system_mm32f5277e.c和system_mm32f5277e.h文件。

/*
*Copyright2022MindMotionMicroelectronicsCo.,Ltd.
*Allrightsreserved.
*
*SPDX-License-Identifier:BSD-3-Clause
*/


#include"hal_device_registers.h"

#ifdefined(__VTOR_PRESENT)&&(__VTOR_PRESENT==1U)
externuint32_t__VECTOR_TABLE;
#endif

voidSystemInit(void)
{

#ifdefined(__FPU_PRESENT)&&(__FPU_PRESENT==1U)
#ifdefined(__FPU_USED)&&(__FPU_USED==1u)
SCB->CPACR|=(SCB_CPACR_CP10_MASK|SCB_CPACR_CP11_MASK);/*setCP10,CP11FullAccess*/
#endif
#endif/*__FPU_PRESENT*/

#ifdefined(__ICACHE_PRESENT)&&(__ICACHE_PRESENT==1U)
#ifndefICACHE_DISABLED
if(SCB->CLIDR&SCB_CLIDR_IC_Msk)
{
SCB_EnableICache();
}
#endif/*DCACHE_DISABLED*/

#endif/*__ICACHE_PRESENT*/
#ifdefined(__DCACHE_PRESENT)&&(__DCACHE_PRESENT==1U)
#ifndefDCACHE_DISABLED
if(SCB->CLIDR&SCB_CLIDR_IC_Msk)
{
SCB_EnableDCache();
}
#endif/*DCACHE_DISABLED*/
#endif/*__DCACHE_PRESENT*/
}

/*EOF.*/

其中,如果沒有調用SCB_EnableICache()和SCB_EnableDCache()函數,默認關閉ICache和DCache,配置宏__ICACHE_PRESENT和__DCACHE_PRESENT來自于MM32F5270的芯片頭文件mm32f5277e.h。

#define__STAR_REV0x0100U/*Corerevisionr1p0*/
#define__SAUREGION_PRESENT0U/*SAUregionspresent*/
#define__MPU_PRESENT1U/*MPUpresent*/
#define__VTOR_PRESENT1U/*VTORpresent*/
#define__NVIC_PRIO_BITS3U/*NumberofBitsusedforPriorityLevels*/
#define__Vendor_SysTickConfig0U/*Setto1ifdifferentSysTickConfigisused*/
#define__FPU_PRESENT1U/*FPUpresent*/
#define__DSP_PRESENT1U/*DSPextensionpresent*/
#define__ICACHE_PRESENT1U/*DefineifanICACHEispresentornot*/
#define__DCACHE_PRESENT1U/*DefineifanDCACHEispresentornot*/

編譯,驗證。找來兩塊之前下載了MicroPython固件的MM32F5開發板,向其中一塊板子下載啟用ICache和DCache之后的新固件。運行程序后,同使用之前版本固件的程序相比,果然有明顯的提升。如圖x所示。

9ddcc740-464c-11ee-a2ef-92fbcf53809c.gif

video-mm32f5-micropython 圖x 啟用Cache前后的MicroPython啟動過程對比實物

圖中板子運行程序啟動MicroPython啟動流程后,執行文件系統中Python源文件,閃爍小燈。圖中下方的板子使用了啟用Cache的程序,明顯先完成MicroPython啟動過程,先開始執行閃爍小燈的程序。

提交更新到代碼倉庫。Bingo!

commit46372ed15d5769b25775a209c56d62c4cfc3ac5d(HEAD->master,origin/master,origin/HEAD)
Author:AndrewSU
Date:WedJun1411062023+0800

updatethestartupcodetoenabletheicacheformm32f5.

-thisfixwouldacceleratethespeedofrunningtheinstruction
sequenceonmm32f5,whichhastheicacheanddcacheintegrated.

Signed-off-by:AndrewSU

啟用Cache后,之前在MM32F5微控制器平臺上運行MicroPython小概率會出現hardfault的問題也得到的緩解,頗有“治好了某人多年老寒腿”的趕腳。^v^。

Cache的工作原理

Cache主要解決高速的CPU訪問低速的存儲器均衡速度差的問題,Cache通過預取數據/命令的機制,低速但整塊地從低速存儲器中取數據塊,然后快速但串行地向CPU送數據流。高速的處理器大多使用哈佛結構,即使用指令總線和數據總線分別取指令和數據,對應有ICache和DCache。

Cache能夠有效工作基于幾個基本前提:

空間局部性:在最近的未來,使用到的信息和當前使用的信息在空間上會是鄰近的。這個因為數據大部分都是連續存儲的。所以主存當中的數據都是成塊傳輸到Cache當中。

時間局部性:在最近的未來,使用到的信息可能是當前正在使用的信息。由于CPU本質上一個死循環,里面還有很多小循環的運行和操作,所以當前使用到的數據很可能會在循環當中,這樣當前的數據有可能會在將來在再被調用一次。

另外,關于Cache還有其余部分需要了解:

Cache與主存的映射方式:解決主存內數據塊和Cache當中數據塊的對應關系。

替換算法:Cache小,主存大。如果Cache中數據存滿了之后,如何操作。

Cache寫策略:如果CPU修改了Cache中的副本,如何確保Cache中的數據和主存中的母本數據保持一致。

關于Cache的工作原理,以及設計機制,可參考計算機專業考研四大專業課之《計算機體系結構》,以及參考文獻中的《一文搞懂Cache基本原理》。

需要關閉DCache的情況

在微控制器系統中,有時會需要直接使用內存里的數據同外設交互,而不進入CPU,例如使用DMA(另一個總線主機AHB Master,但不需要Cache功能)相關,這種場景下,使用Cache的意義就不大了,甚至可能會出現數據不一致的風險,此時,就需要關閉Cache才能讓系統正常工作。具體來說,ICache可以繼續啟用,畢竟指令都是送到CPU中執行,但DCache需要關掉,否則通過CPU寫入到內存的數據未能及時同步物理內存時(基于Cache的寫策略),啟動DMA時搬運的數據不一定是實際需要傳送的數據。另外,所有使用到“內嵌”DMA的外設模塊的工程中,也需要小心謹慎地使用DCache,例如一些USB外設、ENET外設、顯示加速器、以數據塊為操作單元的加速計算模塊等。

關ICache的情況雖然不多,但也存在,例如在涉及IAP應用中,從存放指令的介質中擦除指令、寫入新指令后,再讀指令,實際的新指令可能尚未替換到ICache中存放的舊指令,導致程序執行錯誤。

魚和熊掌都想要

關閉DCache之后,CPU讀數據的速度會明顯慢很多,例如本文一開始展現的情況。怎樣才能提升訪問訪問速度的同時,又能確保數據一致性呢?總不會人為頻繁地開關Cache吧(很多微控制器對啟動Cache的時機也有特別要求,需要在運行應用程序的一開始就要開啟)。這里有兩種可能的思路,供大家參考:

使用內存保護單元MPU

使用內存隔離/同步指令

這兩種方法,分別是在空間上和時間上對數據進行隔離,控制僅在必要的空間上或時間上啟用和關閉Cache。

使用內存保護單元MPU

MPU(Memory Protection Unit)內存保護單元在ARMv7-M架構下被引入。在 ARMv7-M架構下,Cortex-M3和Cortex-M4處理器對 MPU 都是選配的,不是必須的。ARMv8-M架構下繼續沿用了MPU,星辰處理器STAR-MC1就使用了ARMv8-M。

MPU是一個可以編程的設備模塊,可用來定義內存空間的屬性,比如特權指令和非特權指令,以及Cache是否可訪問。ARMv7-M通常支持8個region,每個region 代表一段連續的區域。

關于MPU的用法,可參見參考文獻中的《ARM-MPU內存保護單元詳解》和《Armv8-M Architecture Reference Manual》。

使用內存隔離/同步指令

ARM的指令集中,有內存隔離指令DMB(Data Memory Barrier)、DSB(Data Synchronization Barrier)和ISB(Instruction Synchronization Barrier):

數據存儲器隔離。DMB 指令保證:僅當所有在它前面的存儲器訪問操作都執行完畢后,才提交(commit)在它后面的存儲器訪問操作。

數據同步隔離。比 DMB 嚴格:僅當所有在它前面的存儲器訪問操作都執行完畢后,才執行在它后面的指令(亦即任何指令都要等待存儲器訪問操作——譯者注)。

指令同步隔離。最嚴格:它會清洗流水線,以保證所有它前面的指令都執行完畢之后,才執行它后面的指令。

在一些ARM程序代碼中,會用到__DSB() 指令,特別是在一些中斷處理函數中。例如:

//中斷定時器PIT中斷處理函數
voidPIT_LED_HANDLER(void)
{
/*Clearinterruptflag.*/
PIT_ClearStatusFlags(PIT,kPIT_Chnl_0,kPIT_TimerFlag);
pitIsrFlag=true;
__DSB();
}

程序通過中斷信號進入中斷處理函數時,首先應當清除相應的中斷標志位,但有些CPU的時鐘太快,快于中斷使用的時鐘,就會出現清除中斷標志的動作還未完成,CPU就又一次重新進入同一個中斷處理函數,導致死循環,__DSB() 指令的作用就是避免上述情況的發生。

總結

本文從修復MicroPython啟動程序在MM32F5微控制器上比較慢的問題,體驗了星辰處理器中Cache的作用。簡單介紹了Cache的工作原理和機制,重點介紹了使用Cache可能存在的風險,并進一步探討了如何能用到Cache高速存取的同時避免數據不一致的情況。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7926

    瀏覽量

    153887
  • 處理器
    +關注

    關注

    68

    文章

    19833

    瀏覽量

    233945
  • 中斷
    +關注

    關注

    5

    文章

    904

    瀏覽量

    42585
  • 定時器
    +關注

    關注

    23

    文章

    3297

    瀏覽量

    117461
  • Cache
    +關注

    關注

    0

    文章

    129

    瀏覽量

    28959

原文標題:Cache技術在星辰處理器中的應用

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Arm中國自主研發堅挺,星辰處理器正式商用!

    電子發燒友網報道 (文/黃晶晶) 前段時間處于風口浪尖的Arm事件似乎已逐漸平息,外界對Arm中國始終懷著一份神秘感。就在最近,Arm中國召開的星辰處理器分享會上,Arm中國CEO吳雄昂特別在線做了
    的頭像 發表于 07-15 09:27 ?8833次閱讀

    處理器在讀內存的過程,CPU核、cache、MMU如何協同工作?

    處理器中斷處理的過程是怎樣的?處理器在讀內存的過程,CPU核、cache、MMU如何協同工作?
    發表于 10-18 08:57

    ARM處理器使用虛擬地址來提供cache index和cache tag

    早期的ARM處理器使用虛擬地址(virtual addresses)來提供cache index和cache tag。VIVT優點這樣做的好處是處理器內核可以使用虛擬地址進行
    發表于 06-20 15:22

    星辰處理器是什么樣的內核?相較于Arm Cortex-M系列內核又有什么差別

    比提高內核性能本身還要來得明顯。而提升存儲訪問效率的方法往往有兩個:層次化設計(Memory Hierarchy)層次化設計的核心是緩存(Cache)。嵌入式系統處理器運行速度遠
    發表于 09-06 15:03

    ARM處理器的邏輯cache和物理cache是什么

    ARM處理器的邏輯cache和物理cache是什么?有沒有哪位大神可以幫忙解決一下這個問題
    發表于 11-03 15:25

    ARM應用處理器Cache level進化歷史闡述

    level之間的關系設計, 如何更高效的做推測性的cache prefetch。另外隨著多核技術的發展,如何更有能效(比如大小核)的,高效的實現cache一致性也是重要的技術。以下闡
    發表于 12-14 16:17

    異構多處理器系統Cache一致性解決方案

    SoC技術的發展使多個異構的處理器集成到一個芯片成為可能,這種結構已成為提高微處理器性能的重要途徑。與傳統的多處理器系統一樣,Cache一致
    發表于 09-26 15:02 ?11次下載

    CacheTag電路的設計

    摘要:SoC系統,片上緩存(Cache)的采用是解決片上處理器和片外存儲之間速度差異的重要方法,C
    發表于 05-08 09:26 ?11次下載

    處理器中非阻塞cache技術的研究

    現代高速處理器的設計對于cache技術的研究已經成為了提高處理器性能的關鍵技術,本文針對
    發表于 12-28 09:54 ?8次下載

    安謀中國“星辰處理器正式商用

    據安謀中國產品研發副總裁劉澍介紹,“星辰處理器是安謀中國IoT應用處理器的產品系列,名稱寓意“成為中國冉冉升起的啟明星,為產業帶來更多賦能”。
    發表于 07-09 14:30 ?1443次閱讀

    基于CACHE高速緩沖存儲技術嵌入式系統的應用

    (2)在有DMA控制的系統和多處理器系統,有多個部件可以訪問主存?這時,可能其中有些部件是直接訪問主存,也可能每個DMA部件和處理器配置一個CA
    的頭像 發表于 10-04 16:55 ?2280次閱讀
    基于<b class='flag-5'>CACHE</b>高速緩沖存儲<b class='flag-5'>器</b><b class='flag-5'>技術</b><b class='flag-5'>在</b>嵌入式系統<b class='flag-5'>中</b>的應用

    星辰處理器是什么樣的內核?

    如果用一句話介紹“星辰處理器,那就是:安謀科技設計的一款基于 Armv8-M 架構的嵌入式處理器。這里,安謀科技是中國最大的芯片設計 IP 開發與服務供應商,而靈動微電子則是從安謀科技獲得了該
    的頭像 發表于 06-08 09:11 ?4834次閱讀

    星辰”STAR-MC2:車規級高性能嵌入式處理器

    星辰”STAR-MC2處理器的研發過程,安謀科技和Arm在產品規格定義、開發流程、微架構創新、生態擴展等領域展開了緊密合作,使“星辰
    的頭像 發表于 07-08 09:31 ?1628次閱讀

    小編科普一下超標量處理器Cache

    L1 Cache和L2 Cache通常和處理器一塊實現的。SoC,主存和
    的頭像 發表于 01-08 10:56 ?1236次閱讀

    Cache技術星辰處理器的應用

    STAR-MC1),從官方數據來看,使用星辰處理器(STAR-MC1)的MM32F5對指令的處理效率要高于使用Cortex-M3處理器的MM32F3。如圖x所示。
    發表于 07-21 15:08 ?621次閱讀
    <b class='flag-5'>Cache</b><b class='flag-5'>技術</b><b class='flag-5'>在</b><b class='flag-5'>星辰</b><b class='flag-5'>處理器</b><b class='flag-5'>中</b>的應用
    主站蜘蛛池模板: 亚洲国产色图 | 高颜值大长腿美女啪啪 | 欧美大胆一级视频 | 人人搞人人爽 | 天天天天天天干 | 男人都懂的网址在线看片 | 啪啪网免费 | 国模视频在线 | vip免费观看 | 97人人在线视频 | 婷婷综合色 | 轻点灬大ji巴太粗太长了h | 久久国产成人午夜aⅴ影院 久久国产福利 | 一本大道一卡二卡 | 婷婷六月激情在线综合激情 | 最色成人网| 国产精品久久久久久久久免费hd | 国产v精品成人免费视频400条 | 亚洲福利片 | 国产区一区二区三 | 天天操天天干天天做 | 亚洲狠狠色丁香婷婷综合 | 激情三级视频 | 男女交性视频免费播放 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片鸭王 | аⅴ天堂中文在线网 | 婷婷综合五月 | 80s国产成年女人毛片 | 国产ar高清视频+视频 | 国产大片91精品免费观看不卡 | 黄色一级a毛片 | 天天插天天 | 色爽女视频 | 乱色伦肉小说 | 另类五月 | 黄色大片毛片 | 天天躁夜夜躁狠狠躁2021 | 中文字幕在线播放一区 | 特级毛片aaaaaa蜜桃 | 国产色秀视频 | 中文天堂最新版资源新版天堂资源 |