日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

基于ARM Cortex-M的SoC存储体系结构和实战

發布時間:2023/11/28 生活经验 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于ARM Cortex-M的SoC存储体系结构和实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于ARM Cortex-M的SoC存儲體系結構和實戰

System on Chip Architecture Tutorial Memory Architecture for ARM Cortex-M based SoC-Aviral Mittal

Memory Architecture for Cortex-M bases System on Chip.

一旦你完成了處理器的選擇(即在ARM Cortex-M家族中),內存架構可能是SoC架構的第二個最重要的方面。內存結構取決于處理器的選擇。

例如,如果選擇Cortex-M7,則處理器中內置指令緩存和數據緩存作為選項,因此內存系統可能沒有任何緩存。

Cortex-M7還具有緊密耦合存儲器(TCMs),它提供非常快速的代碼執行(來自指令TCMs)和非常快速的數據訪問(來自數據TCMs)。

NVM Memory choice for code storage.

現在,由于這項技術是關于無主機SoC的,即一個自給自足的SoC,并且是系統的主要SoC,它應該有非易失性存儲器(NVM)用于代碼存儲,而不像“托管”SoC,它通常從“主機”接收其代碼,并且代碼最終在SoC的RAM中。

Flash or R-RAM as NVM for code storage.

一個流行的選擇是NAND Flash。對于28nm以上的幾何圖形,您也可以使用e-Flash,即嵌入式Flash,即集成在SoC中的閃存,但對于28nm以下的幾何圖形,由于技術限制,e-Flash通常不可用,因此您可能需要選擇外部Flash設備,通常通過SPI接口、四SPI接口(QSPI)或八進制SPI接口。(OSPI)。但是,如果您想讓NVM在SoC上實現更精細的幾何結構,可以選擇R-RAM(電阻RAM)或M-RAM(磁RAM)。然而,您必須記住,R-RAM是一個昂貴的事情,可以大大增加SoC的成本。

ROM for code storage

你可以用ROM,它比Flash或者R-RAM速度快,成本低,功耗低,但是ROM的問題是,它不是很靈活。它不能被覆蓋,所以如果你想在后期更新你的系統,ROM不會讓它發生。然而,ROM是最“安全”的內存,一般不需要驗證或解密等。因此,如果您的系統足夠穩定,如果您的代碼在系統生命周期內不需要更新,ROM是一種方法。有時,在開發過程中,SoC可能有flash或R-RAM,SoCs的初始版本用flash/R-RAM發布,并且隨著代碼的成熟,flash/R-RAM被ROM取代。

OnChip R-RAM Vs Flash:

重要的是要考慮到Flash中的代碼存儲通常是在nandflash中,因為它提供隨機訪問,而不像NOR Flash那樣隨機訪問是不可能的。

從上表中可以很明顯地看出,R-RAM在大多數情況下都是勝出的,因此如果成本允許,并且您的SoC需要更多的性能來降低功耗,R-RAM將是NVM的選擇。

然而,R-R a M是一項非常新的技術,并且目前非常昂貴,因此,大多數使用ARM Cortex-M類處理器的soc仍然具有e-Flash或片外Flash。

注:需要注意的是,R-RAM不能替代片上RAM。它仍然有有限的寫入周期~10000,因此不能像在SoC上使用普通RAM那樣使用。

從安全角度看片內與片外NVM:

片上NVM可以被認為是更安全的,因為您不需要“認證”NVM,因為它是片上的。然而,片外NVM至少在每次系統啟動時都需要“身份驗證”,以確保片外設備是真正的設備。

XIP vs No XIP.

在考慮NVM時,如果它是Flash或R-RAM(而不是ROM,ROM通常總是XIP),您可能還需要考慮是否需要XIP。XIP執行到位。你可以在這里找到更多關于XIP的信息。
如果您的系統沒有高性能要求,XIP可能是一個非常好的建議。它非常經濟有效,因為它比片上RAM便宜得多,而且您的代碼直接從這個內存執行。即使NVM是片外閃存,使用cache存儲器也可以縮小性能差距,為各種應用提供足夠的性能。

然而,從片外閃存使用XIP的缺點是高功耗。在片外XIP過程中,您將消耗比將代碼一次復制到片上RAM并從片上RAM執行多得多的能量。因此,這些是作為SoC架構師必須做出的權衡。成本/功率/性能。沒有對錯之路。這取決于你的SoC的用例是什么。

然后不使用XIP意味著代碼需要從NVM復制到RAM,這意味著需要更多的內存來存儲代碼,因為有代碼復制。但是在這些情況下,代碼在NVM中被壓縮,然后解壓縮到RAM中,這樣可以節省一些內存,但是沒有XIP意味著比XIP更多的系統內存。

The Security Aspect of XIP vs no XIP

從安全的角度來看,XIP將需要所謂的內聯解密,因為代碼在執行時將被解密,因為代碼通常將從NVM中的隨機位置獲取。但是,如果沒有XIP,則解密方法將是“塊”解密,即在將整個圖像復制到系統RAM時對其進行一次解密。

Execute In Place (XIP)

當嵌入式系統在沒有電源的情況下啟動時,它將執行的第一個代碼必須來自非易失性存儲器源,例如Flash或ROM。

通常應該有一個“bootloader”程序,它將盡可能少地啟動和運行系統。

當系統啟動時,它沒有可用的ram,因此沒有可用的堆棧,因此沒有可用的內存來存儲程序變量。因此,處理器運行的第一個代碼必須完全使用處理器寄存器。處理器執行的第一個代碼也從它所在的位置執行。也就是說,它是“就地執行”(XIP)。它不能試圖修改程序本身的任何內容,因為這段代碼可能在ROM中,并且代碼不能自我修改。

由于上述考慮,處理器通電后執行的第一個程序通常用匯編語言編寫,因為c程序的執行幾乎總是需要在讀/寫存儲器(RAM)中設置一個“堆棧”來存儲變量,并且在啟動或通電時RAM可能不可用。

引導加載程序要做的一件事是使系統RAM可用。然后,它可以將代碼從flash重新定位到這個ram中,然后跳到ram來執行這個復制或重新定位的代碼。

是的,對于所有的XIP代碼,load region=execution region,也就是說,XIP代碼存儲在根區域中。記住“根區域”的定義是加載地址為=執行地址的區域。

Other applications of XIP:

除了引導加載程序代碼之外,XIP在嵌入式世界中也越來越流行,它可以直接從Flash中執行引導代碼以外的程序。NOR flash可以像NAND那樣隨機訪問,因此NOR flash顯然是這樣的XIP存儲和就地執行代碼的選擇。這有助于節省片上ram區域,而這反過來又可以節省成本。當然,執行速度會比RAM執行慢,但是對于許多嵌入式應用程序來說,它帶來了成本優勢,并提供了足夠的性能。

Load Region Vs Execute Region:

在典型的嵌入式系統中,當系統斷電時,所有的程序和數據都存儲在非易失性存儲器中。然而,當系統通電時,一些數據或代碼可以在執行前(如果是代碼)或在使用前(如果是數據)移動到系統SRAM(volatile mem)中。

當用戶編譯并“鏈接”程序時,會生成該程序的“圖像”。這是系統可以執行的二進制可執行文件。

二進制“image”通常分為“Read Only”段(包含代碼和只讀數據)和“Read Write”段(包含可以初始化或零初始化甚至未初始化的數據)。

通常“只讀”段甚至可以放入ROM(與flash相反),并且不需要從內存中的位置移動。它是“從它所在的地方執行”即它是在適當的地方執行的。

而“讀寫”段必須在執行開始前移入系統的讀/寫存儲器,例如SRAM。

因此,對于代碼的某些部分,系統關機時該部分所在的內存位置與系統開機時相同。

但是

對于代碼的某些部分,當系統處于關機狀態時,該部分所在的內存位置與開機時該部分移動到的內存位置不同。

那么誰來移動代碼呢?

鏈接器將把代碼添加到處理器將要執行的程序中,并移動代碼中需要在通電時移動到系統SRAM中的那些部分。

現在,這些代碼段在“加載”時有不同的地址,這是在NVM中,而在“執行”時,通常是在SRAM中的某個地方。

因此,程序映像可以有“加載區域=執行區域”的部分,并且這部分代碼是“就地執行”XIP。

對于代碼的某些其他部分,“加載區域不等于執行區域”,并且這部分代碼沒有在適當的位置執行。

Example:

用戶有它的應用程序代碼,他編譯并鏈接它以生成名為’圖像.bin’. '圖像.bin’是14246字節。

這意味著系統必須至少有該數量的NVM可供用戶在系統中匹配其二進制圖像。

然后,系統將具有一些SRAM(比如16KB,在本例中相當慷慨),這是在0x2000_0000和0x2000_3FFF位置。

現在是圖像文件的永久地址’圖像.bin’將在NVM中,并將占用系統中的內存地址0x0000_0000到0x0000_37A6。

因此,整個二進制文件的加載地址是從0x0000_0000到0x0000_37A6。這可以是一個NVM(閃存),甚至可以是ROM。

但在執行之前,作為最低要求

應設置堆棧內存。

r/w數據(如變量)必須移動到r/w存儲器

系統的R/W內存(假設系統中總共有16KB的SRAM可用)位于內存映射中的其他位置,并假設它是從0x2000_0000到0x2000_3FFF(16KB)。

因此image.bin’將被移動到位于0x2000_和0x2000_3FFF之間的內存位置。堆棧指針將被設置為為為“stack”保留一些內存,這些內存也將位于0x2000_0000和0x2000_3FFF之間。

因此,對于圖像.bin’文件,加載地址=執行地址,并且它保持永久性,并且在0x0000_0000和0x0000_37A6之間。這也是XIP,在圖像.bin’.

鑒于圖像.bin’文件,加載地址在0x00000x000037A6之間,執行地址在0x20000x20003FFF之間。i、 e.對于這些部分,加載地址不等于它們的執行地址。

Let us take another example where the Load address is not the same as execution address:

用戶有一個用C編寫的關鍵函數。包含此函數的圖像文件放在NVM中。但是,用戶希望將此函數移到離處理器非常近的SRAM中,以便快速執行。

現在這個函數有兩個內存地址。

  1. 加載地址:當系統關機時,該函數在NVM內存中的位置

2.執行地址:當系統啟動并運行時,函數在SRAM內存中的位置。

同樣,對于這個函數,加載地址與其執行地址不同。

因此,此代碼將不是XIP(就地執行)。

Conclusion:

二進制圖像中的某些代碼可以從內存中的位置執行。此代碼永遠不會“移動”到內存的另一個區域,并且具有永久地址。當執行此代碼時,它是從它所在的位置執行的,這稱為就地執行(XIP)。

總結

以上是生活随笔為你收集整理的基于ARM Cortex-M的SoC存储体系结构和实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。