ARM處理器存儲器及存儲器映射I/O

發(fā)布時間:2024-04-02
arm7tdmi處理器采用馮·諾依曼(von neumann)結(jié)構(gòu),指令和數(shù)據(jù)共用一條32位數(shù)據(jù)總線。只有裝載、保存和交換指令可訪問存儲器中的數(shù)據(jù)。
arm7的規(guī)范僅定義了處理器核與存儲系統(tǒng)之間的信號及時序(局部總線),而現(xiàn)實的芯片一般在外部總線與處理器核的局部總線之間有一個存儲器管理部件將局部總線的信號和時序轉(zhuǎn)換為現(xiàn)實的外部總線信號和時序。因此,外部總線的信號和時序與具體的芯片相關,不是arm7的標準。具體到某個芯片的外部存儲系統(tǒng)的設計需要參考其芯片的數(shù)據(jù)手冊或使用手冊等資料。
arm7tdmi處理器將存儲器看作是一個從0開始的線性遞增的字節(jié)集合:
(1)字節(jié)0到3保存第1個存儲的字
(2)字節(jié)4到7保存第2個存儲的字
(3)字節(jié)8到11保存第3個存儲的字
(4)依此類推
arm7tdmi處理器可以將存儲器中的字以下列格式存儲(詳細說明見“存儲器格式”小節(jié)):
(1)大端格式(big-endian)
(2)小端格式(little-endian)
關于“地址空間”:arm結(jié)構(gòu)使用單個平面的232個8位字節(jié)地址空間。字節(jié)地址按照無符號數(shù)排列,從0到232-1。地址空間可以看作是包含230個32位字 ,或231個16位半字。如果地址向上或向下溢出地址空間,通常會發(fā)生翻轉(zhuǎn)。
注意:如果在取指操作時地址發(fā)生溢出,只要沒有執(zhí)行預取的無效指令,就不會導致異常。
跳轉(zhuǎn)目標的計算方法:(當前指令的地址) + 8 + 偏移量
下一條指令位置的計算方法:(當前指令的地址) + 4
關于“存儲器格式”:地址空間的規(guī)則:
(1)位于地址a的字包含的字節(jié)位于地址a,a+1,a+2和a+3;
(2)位于地址a的半字包含的字節(jié)位于地址a和a+1;
(3)位于地址a+2的半字包含的字節(jié)位于地址a+2和a+3;
(4)位于地址a的字包含的半字位于地址a和a+2;
下面講一下,存儲器系統(tǒng)有兩種映射機制:
(1)小端存儲器系統(tǒng):在小端格式中,高位數(shù)字存放在高位字節(jié)中。因此存儲器系統(tǒng)字節(jié)0連接到數(shù)據(jù)線7~0。
(2)大端存儲器系統(tǒng):在大端格式中,高位數(shù)字存放在低位字節(jié)中。因此存儲器系統(tǒng)字節(jié)0連接到數(shù)據(jù)線31~24。
一個基于arm內(nèi)核的芯片可以只支持大端模式或小端模式,也可以兩者都支持。
在arm指令集中不包含任何直接選擇大小端的指令,但是一個同時支持大小端模式的arm芯片可以通過硬件配置(一般使用芯片的引腳來配置)來匹配存儲器系統(tǒng)所使用的規(guī)則。
注意:如果實際的存儲器格式與芯片的存儲器格式不符時,只有以字為單位的數(shù)據(jù)存取才正確,否則將出現(xiàn)不可預期的結(jié)果。
關于“未對齊的存儲器訪問”:arm結(jié)構(gòu)通常希望所有的存儲器訪問都合理的對齊。具體來說就是字訪問的地址通常是字對齊的,而半字訪問使用的地址是半字對齊的。不按這種方式對齊的存儲器訪問稱為非對齊的存儲器訪問。
(1)將一個非字(半字)對齊的地址寫入arm(thumb)狀態(tài)的r15寄存器,將引起非對齊的指令取指。
(2)在一個非字(半字)對齊的地址讀寫一個字(半字),將引起非對齊的數(shù)據(jù)訪問:
指令的預取和自修改代碼
許多arm實現(xiàn)在前一條指令的執(zhí)行尚未完成時將指令從存儲器中取出。這個動作稱為指令的預取。指令的預取并不是實際執(zhí)行指令。芯片的生產(chǎn)廠商可以自由選擇預取指令的數(shù)目。被預取的指令可能得不到運行,可能的原因是:(1)發(fā)生異常;(2)發(fā)生跳轉(zhuǎn);
當讀取pc時,得到的指令地址比正在執(zhí)行指令的地址落后兩條指令:
(1)對于arm指令,得到的地址是它自身地址+8;
(2)對于thumb指令,得到的地址是它自身地址+4;
雖然生產(chǎn)廠商可以選擇預取指令的數(shù)目,但是仍然可以保證讀取pc所得到地址比它自身地址落后兩條指令。
在預取之前要進行轉(zhuǎn)移預測,例如在執(zhí)行一條分支指令,此時要判斷是預取分支指令之后的指令還是轉(zhuǎn)移目標地址的指令。
關于“預取可能存在的問題”:在存儲器中的指令可能在它被預取之后,被執(zhí)行之前發(fā)生改變。如果發(fā)生這種情況,對存儲器中的指令進行修改一般不能阻止已取指的指令的執(zhí)行。
如果在“sub”指令預取之后,執(zhí)行之前,發(fā)生中斷 ,那么該指令將被丟棄,而不會執(zhí)行。
如果arm處理器或存儲器系統(tǒng)允許保持預取指令的備份并使用這些備份而不是重新預取,那么以后執(zhí)行這段代碼,仍將執(zhí)行“sub”指令。
關于“指令存儲器屏障(imb)”:在許多系統(tǒng)中,幾乎不可能完全避免自修改代碼的使用。例如,任何一個允許將程序裝入存儲器然后執(zhí)行的系統(tǒng)都使用自修改代碼。
因此每個arm芯片都定義了一系列的操作,使自修改代碼序列可以可靠地執(zhí)行。這一串代碼稱為指令存儲器屏障(imb),它通常同時取決于具體的arm芯片的和具體存儲器芯片。
關于“存儲器映射的i/o”:基于arm內(nèi)核的芯片具有許多的外設,這些外設訪問的標準方法是使用存儲器映射的i/o,為外設的每個寄存器都分配一個地址。通常,從這些地址裝載數(shù)據(jù)用于讀入,向這些地址保存數(shù)據(jù)用于輸出。有些地址的裝載和保存用于外設的控制功能,而不是輸入或輸出功能。
注意:存儲器映射的i/o位置的操作不同于正常的存儲器位置的操作。通常,存儲器映射的i/o位置沒有高速緩存和無緩沖區(qū)。
上一個:防爆防腐控制箱高溫天如何護理操作方法分享
下一個:土壤無核密度儀使用說明

鐵皮保溫施工專業(yè)方案
家庭養(yǎng)花除蟲防病,有哪些簡便方法? 盆花土壤中的泥鰍需要清除嗎?
膠帶色漿 調(diào)色設計 水性色漿顏色設計
原位凍干機的日常維護和保養(yǎng)
微信支付怎樣取消(如何取消微信支付功能)
探探資料審核要多久通過(探探資料審核要多久)
濃度顯示固定式氯化氫泄漏報警器/濃度檢測儀/泄漏濃度報警器
電熱恒溫鼓風干燥箱溫度過沖如何解決
天津出口美國清關海運價格(天津美國海運出口)
快遞丟失賠償標準是多少
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos