儲存器加速模組MAM

2021-05-17 14:10:48 字數 2803 閱讀 2008

儲存器加速模組mam

mam的任務就是在一條指令被需要時立刻將下條指令提供給cpu。通常,程式和資料儲存器的寬度設計成與處理器字的寬度相同,arm7系列核心為32位。但為了降低成本,系統經常使用16位寬的儲存器和外部儲存器,從而造成器件效能的下降。提高系統速度的最好方法就是將flash儲存器加寬到128位。這樣,每訪問一次儲存器就可以提取4條32位的arm指令或8條16位的thumb指令。然而,cpu仍然必須等到儲存器訪問結束後才能提取第一條指令,再無延時地處理緊跟其後的3條(arm指令)或7條(thumb)指令。

為了消除延時,flash儲存器分成兩組,每組的寬度為128位。當128位被讀出並快取到乙個flash組時,之前快取在另乙個flash組的指令被執行。由於每個flash組一次能儲存幾條指令,兩個flash組的指令被需要之間存在幾個處理器週期的時間。mam就利用這段時間來將當前未使用的flash組中的128位資料重灌到緩衝區(預取指緩衝區)。當從較慢的flash儲存器中讀取指令時,可以通過這種方法來增加幾個等待週期,而不會影響指令的執行時間。

這種簡單的預取指方法(見圖2)很有用,它使得cpu的執行速度是普通flash最高速度的4倍(只要程式流程中沒有跳轉指令)。分支、子程式呼叫和中斷有時會中斷執行指令行。這時,隨著極短的跳轉的出現,相關組的預取指緩衝區的內容無效。

程式分支

當目標位址到達第二個組的底部時,已經啟動了重灌。如果在下個週期內將完成相應flash組的讀操作,則可以立刻訪問第二個flash組的預取指緩衝區。反之必須增加乙個或幾個等待週期,直到完成flash的讀操作。

如果程式跳轉出預取指緩衝區的範圍,cpu停下來執行等待週期,直到資料從「正確」的目標位址複製到緩衝區。只有在這種情況下,相對較長的訪問時間生效。然後,下條指令從緩衝區中全速讀出,直到下條指令再次碰到中斷。

程式也可以往回跳轉。程式的迴圈就是這種情況。通過重複讀取flash中的指令可防止迴圈執行速度的減慢,每個儲存器組還另外有乙個緩衝區,它存放著執行的最後一條指令。這些分支跟蹤緩衝區的寬度也為128位。當乙個預取指緩衝區的指令被執行時,另乙個組的預取指緩衝區已從flash儲存器中裝載了新的指令。這時迴圈指令要執行舊的程式**,但這些**已經不在另乙個預取指緩衝區中了。但是,舊的程式**在覆蓋之前已被複製到相應的分支跟蹤緩衝區,此時恰好可以為程式提供下一條指令(迴圈)。

資料區flash儲存器不僅儲存程式**,還可存放不修改或很少修改的資料。這些資料報括常數、**或文字串。為了存放這類資料,還開闢了乙個專門的資料鎖存區,這片區域是儲存器組的公共部分。當要訪問某個位址單元的資料,但資料並不在資料鎖存區內時,就觸發從flash並行讀出下面的4個32位的字。因為只有在每訪問完第4個字才能觸發一次新的讀操作,所以加速了連續訪問的速度。但是,如果位址是隨機的,則所需資料通常不在資料鎖存區內,不能達到加速訪問的目的。

實際flash訪問的時間

使用了mam後,arm核心不是從flash中直接讀出指令或資料,而是分別從預取指和分支跟蹤緩衝區或資料鎖存區中讀取指令和資料。將flash內容裝載到緩衝區暫存器的操作與系統時鐘同步。時鐘頻率為20mhz時,資料可從flash中讀出,無需延時。如果系統時鐘頻率太高,則必須插入等待週期。訪問flash時使用者可插入的總週期數為1~7個。時鐘頻率為20mhz時只需要1個週期。時鐘頻率為40mhz時必須使用2個週期(即要增加1個等待週期)。當時鐘頻率增加到60mhz時,這也是規定的最高時鐘頻率,需要3個等待週期。

mam的使用

mam的作用可通過不同的頻率基準測試出來。mam的作用取決於系統時鐘的大小。因為時鐘頻率為20mhz時在1個週期內就可將flash的內容讀出,因此此時執行的**是來自ram還是flash以及是否使用了mam都沒有任何的不同(圖3)。時鐘頻率越高,ram的訪問時間越短,arm核心可繼續工作在最高效能。當直接執行flash中的**時,時鐘頻率提高到大於20mhz都不會產生明顯的影響。只有儲存器的訪問時間增加了,效能才受到影響。但是使能mam能顯著提高器件的效能,使arm核心能以最快的速度執行。與理想情況相比較,只有丟失了指令或資料才會造成時間之間的延遲。

一方面,mam的使用可以顯著增強高時鐘頻率下的特性,另一方面,也可看到由於flash和緩衝區訪問時間的不同帶來的影響。為了滿足不同的要求,mam的使用可選擇三種不同的等級:

1. 不使用mam

直接對flash進行訪問;插入預先選好的等待週期。這時,處理器的動作是可預知的,但是如果時鐘頻率太高,效能會受到影響。

2. mam部分使能

從預取指緩衝區中連續取指,但是即使最短的分支也會啟動對flash的直接訪問。為了使得操作可知,所需的資料都存放在flash而非資料鎖存區中。

3. mam完全使能

所有訪問都是對預取指或分支跟蹤緩衝區或資料鎖存區執行的操作。如果相關的資料未存放在以上的緩衝區內,將直接訪問flash。在高時鐘頻率下,操作很難預知。

flash程式設計

mam不影響flash的程式設計。當擦除或擦除乙個flash扇區時,資料分配到任何兩個儲存器區中的任何乙個對使用者是完全透明的。boot block存放著程式和必要的程式設計演算法。這些程式也可被使用者程式呼叫來使能在應用中程式設計。引導裝載程式支援器件的序列程式設計。

復位後,控制權自動轉移給引導裝載程式。引導裝載程式先檢查flash中是否包含有效的使用者程式。flash是否包含有效的使用者程式取決於異常向量表(圖4)的內容。arm異常向量表含有乙個保留位址0x14。如果該位址包含剩餘向量校驗和的2的補碼,則所有向量的和等於0。只有滿足這個準則,引導裝載程式才將控制權傳遞給flash向量表中的復位向量。

為了防止在程式設計完乙個flash扇區後以前的資料從mam緩衝區暫存器中被讀出,在程式設計週期開始時便將所有預取指和分支跟蹤緩衝區以及資料鎖存區遮蔽。程式設計後,直接將flash中的所有資料讀出,直到緩衝區用於再次存放有效資訊。

由於程式設計過程中不能對flash進行訪問,因此arm核心一直處於等待狀態,如果看門狗功能使能,使用者必須確保等待時間不能超過預先設定的看門狗週期。

python加速模組 numba

numba的使用比較簡單,它不需要更換python的直譯器,只需要將numba的裝飾器寫在python方法上,當這個帶有numba裝飾器的方法被呼叫時,就會被just in time即時編譯為機器 然後執行。使用numba之前,我們需要安裝這個庫 trusted host mirrors.aliyu...

軟體定義快閃儲存器 加速快閃儲存器規模化應用

在過去幾年中,我們見證了消費者對於快閃儲存器的無限渴求,同時快閃儲存器也迅速創造了10億美元的產業。從統計資料看,包括iphone 平板電腦 超極本等在內的消費電子裝置所用的快閃儲存器銷售額佔據了整個快閃儲存器市場的85 企業級快閃儲存器則佔15 快閃儲存器技術有望成為資料中心領域新的明星。更高密度...

軟體定義快閃儲存器 加速快閃儲存器規模化應用

在過去幾年中,我們見證了消費者對於快閃儲存器的無限渴求,同時快閃儲存器也迅速創造了10億美元的產業。從統計資料看,包括iphone 平板電腦 超極本等在內的消費電子裝置所用的快閃儲存器銷售額佔據了整個快閃儲存器市場的85 企業級快閃儲存器則佔15 快閃儲存器技術有望成為資料中心領域新的明星。更高密度...