新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32從Flash中運行程序的時序分析

        STM32從Flash中運行程序的時序分析

        作者: 時間:2016-12-02 來源:網(wǎng)絡 收藏
        都知道STM32的CPU時鐘頻率可以達到72MHz,以后還會更快,但是由于半導體制造工藝的限制,存放程序的Flash存儲器不可能達到這么高的工作頻率,這樣當CPU直接訪問Flash存儲器時必須插入等待周期以得到正確的結果。
        問題是在Flash的速度比CPU慢的情況下,是不是可以簡單地說STM32在執(zhí)行Flash中的程序時每條指令都需要插入等待周期呢?等待周期的插入對程序的執(zhí)行到底有多大的影響?請看下面的分析:
        首先,STM32的內(nèi)部Flash是組織成64位寬度,即每次可以讀出64位;在Flash與CPU的取指隊列之間有兩個緩沖器,用于暫存Flash中取出的指令,見下圖。
        其次,STM32的指令有16位的也有32位的,指令是從圖中綠色的緩沖器取出;當綠色緩沖器變空時,黃色緩沖器中的內(nèi)容會被復制到綠色緩沖器中;這樣取指與讀取Flash互不干擾。
        正因為STM32的指令有不同長度,所以程序執(zhí)行的等待周期與程序的內(nèi)容有關。
        圖一是假定所有指令都是16位的指令:
        1)時刻t0時黃色緩沖器和綠色緩沖器都為空,此時CPU等待3個周期后,到時刻t1時才能讀到指令;
        2)時刻t1時綠色緩沖器被填滿,黃色緩沖器仍為空,F(xiàn)lash控制器繼續(xù)讀取后續(xù)指令;
        3)時刻t2時綠色緩沖器還有兩個字節(jié),黃色緩沖器被填滿;此時因為兩個緩沖器都有數(shù)據(jù),讀取Flash的操作暫停(圖一中的綠色虛線框所示);
        4)當黃色緩沖器變空時,綠色緩沖器被復制到黃色緩沖器,同時恢復讀取Flash的操作;
        5)時刻t3時緩沖器的狀態(tài)又變?yōu)樯鲜龅?)步的狀態(tài)。
        從以上分析可以看出,CPU的指令執(zhí)行是沒有等待周期的。但當執(zhí)行跳轉(zhuǎn)指令時,F(xiàn)lash緩沖器中的內(nèi)容作廢,系統(tǒng)回到了上述第1)步的狀態(tài)。
        圖二是假定每三條指令中有兩條16位的指令和一條32位的指令。這種情況下,如圖所示,CPU的指令執(zhí)行也是沒有等待周期的。
        圖三是假定所有指令都是32位的指令,從圖中可看出,CPU每執(zhí)行兩條指令,要插入一個等待周期。
        上面的分析只是針對每個CPU周期都有取指操作的情況,而實際的操作中情況并沒有這么簡單,因為Cortex-M3的指令不都是單周期指令。
        實際的程序執(zhí)行情況是受很多因素影響的,單純靜態(tài)的分析也是不現(xiàn)實的,因此才會出現(xiàn)這么多評測的標準和數(shù)據(jù)。我們應該以平均的性能指標作為參考的依據(jù),而不是簡單的有沒有或有多少等待周期作為判斷的依據(jù)。


        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 汉中市| 朝阳区| 儋州市| 通榆县| 宁陵县| 土默特右旗| 嘉鱼县| 福建省| 伊春市| 慈溪市| 孟村| 本溪市| 岑溪市| 仁化县| 上虞市| 抚州市| 常德市| 徐闻县| 东丽区| 镇原县| 寻甸| 台江县| 全州县| 青岛市| 广州市| 崇明县| 乡宁县| 武宣县| 德化县| 沙雅县| 中山市| 永济市| 潼关县| 西乌珠穆沁旗| 慈溪市| 灵川县| 新民市| 潜山县| 乐亭县| 长海县| 商水县|