題:
為什麼微控制器的RAM這麼少?
Grady Player
2014-10-16 00:50:32 UTC
view on stackexchange narkive permalink

也許這更多是一個感知問題,但是在過去的20年中,微控制器似乎在飛躍發展,幾乎在所有方面,更高的時鐘速度,更多的外設,更容易的調試,32位內核等...

看到RAM以10的KB(16 / 32KB)仍然很常見。

看來這可能不是成本問題,大小直接。 RAM控制器超過某個閾值是否會帶來複雜性問題?

還是僅僅是通常不需要它?

在流行的互聯網供應商處尋找零件矩陣,我看到一個256KB的 Cortex M4不到8美元,然後再花幾美元就可以找到更多沒有ROM的東西,但是看起來很稀疏...

我並不需要具有MB易失性存儲的微控制器,但似乎有人可以...

也許還有更多的技術原因,但在我看來,這可能是市場問題。當您擁有使用微控制器的應用程序時,便會使用微控制器;當您需要更多功能時,通常會轉向更完整的嵌入式系統。
10s的kB。好大我用於原型製作的微控制器具有68個**字節**的RAM:http://en.wikipedia.org/wiki/PIC16x84
我曾經在帶有2KB RAM的Arduino上用86B編寫了3D軟件光柵化器。這讓我很沮喪,因為如果我只有10KB或50KB,我本可以真正開始在內存中擬合真實模型並做一些有趣的事情。¶當時我確實有同樣的問題,我不認為當前的答案解決得足夠好。是的,SRAM很昂貴,但是CPU用SRAM製造了_megabytes的高速緩存,但是它們仍然很便宜。感覺就像是me腳的藉口。
-1
“好像有人可能會”是這裡的陷阱,大多數人不是。您並不是要在該芯片上流式傳輸Netflix,而64K通常足以滿足您使用**微型控制器所需的一切。如果您想走得更高,請拿一個完整的小玩意兒,例如樹莓。
@GraphicsResearch:一旦您開始進行3D渲染之類的工作,則由於您所說的確切問題:內存,像AVR這樣的CPU不會削減它。那時,您應該切換到ARM之類的工具。
@markrages:廣泛可用?這取決於您的定義。在這裡,可以在您走進的任何電子產品商店購買PIC16F84。而類似ARM的產品則需要從供應商處訂購或獲取供應合同。此外,如果您決定與供應商聯繫並且不需要很多引腳(SIM卡),則16F84存在一種極其便宜的形式。它們比普通的16F84便宜。大部分衛星解碼器SIM卡是16F84
在MPU的早期,一個半不現實的說法是“如果不能在1K中做到這一點,就不能做到”。直到Microchess以1K的速度運行之前,我一直對此表示懷疑。誰需要更多?
-1
@DmitryGrigoryev Arduino Nano [價格為22美元](https://store.arduino.cc/usa/arduino-nano),最高可搭載2KiB SRAM。Raspberry Pi 3 [價格$ 35](https://www.newark.com/raspberry-pi/raspberrypi3-modb-1gb/sbc-raspberry-pi-3-mod-b-1gb-ram/dp/77Y6520),並具有> 2MiB的SRAM。這比線性縮放好644⨯。關鍵是,內存並不能完全說明處理器的成本縮放比例,也無法說明為什麼微控制器的內存通常保持在10-100K範圍內。
八 答案:
alex.forencich
2014-10-16 01:24:42 UTC
view on stackexchange narkive permalink

有很多原因。

首先,內存佔用了大量的矽片區域。這意味著增加RAM的數量將直接增加芯片的矽面積,從而增加成本。更大的矽面積對價格產生“雙重打擊”:更大的芯片意味著每個晶圓的芯片數量減少,尤其是在邊緣附近;更大的芯片意味著每個芯片更容易出現缺陷。

第二個是流程問題。 RAM陣列應該以不同於邏輯的不同方式進行優化,並且不可能通過不同的過程發送同一芯片的不同部分-整個芯片必須以相同的過程製造。有些半導體公司或多或少致力於生產DRAM。不使用CPU或其他邏輯,僅使用DRAM。 DRAM需要面積有效的電容器和極低洩漏的晶體管。製作電容器需要特殊處理。製造低洩漏的晶體管會導致晶體管變慢,這對於DRAM讀出電子設備來說是一個很好的權衡,但是對於構建高性能邏輯來說卻不是那麼好。在微控制器芯片上生產DRAM意味著您需要以某種方式權衡工藝優化。大型RAM陣列也很可能僅由於其面積大,產量下降和成本增加而出現故障。測試大型RAM陣列也很耗時,因此包含大型陣列將增加測試成本。此外,與更專業的微控制器相比,規模經濟進一步降低了獨立RAM芯片的成本。

功耗是另一個原因。許多嵌入式應用受功率限制,因此,許多微控制器被構建為可以置於非常低功耗的睡眠狀態。為了實現極低的功耗睡眠,使用SRAM的原因在於它能夠以極低的功耗保持其內容。電池供電的SRAM可以保持狀態,即使是3V鈕扣電池也可以使用多年。另一方面,DRAM不能保持其狀態超過一秒鐘的時間。電容器是如此之小,以至於少數電子會隧穿並進入基板,或者通過單元晶體管洩漏。為了解決這個問題,必須連續讀出並回寫DRAM。結果,在空閒狀態下,DRAM比SRAM消耗更多的功率。

在另一方面,SRAM位單元比DRAM位單元大得多,因此,如果需要大量內存,DRAM通常是更好的選擇。這就是為什麼使用少量SRAM(kB至MB)作為片上高速緩存存儲器以及大量的片外DRAM(MB至GB)的原因。

已經有一些非常酷的設計技術用於以低成本增加嵌入式系統中可用的RAM數量。其中一些是多芯片封裝,其中包含用於處理器和RAM的獨立管芯。其他解決方案包括在CPU封裝的頂部生產焊盤,以便將RAM芯片堆疊在頂部。該解決方案非常聰明,因為可以根據所需的內存量將不同的RAM芯片焊接到CPU頂部,而無需其他板級路由(內存總線非常寬,佔用了大量的板面積)。請注意,這些系統通常不被視為微控制器。

許多非常小的嵌入式系統無論如何都不需要太多的RAM。如果需要大量RAM,則可能需要使用具有外部DRAM而不是板載SRAM的高端處理器。

我已經看到了實際的帶腳的RAM IC,並將所有東西粘貼/放置在處理器(它們是BGA封裝)的頂部,並佈線到其中!我們為板空間做的事情!正如俄羅斯人使用其TRIZ設計方法所指出的那樣,如果您用完X和Y空間,請轉到Z :)
+1對於SRAM和DRAM之間的重要區別。SRAM不僅速度更快,而且能源效率更高,尤其是在空閒時,但正如您注意到的那樣,它的成本要高得多,並且需要更多的空間。
我認為SRAM不是最昂貴的RAM。觸發器和多路復用器的組合可以用作隨機存取存儲器,它將提供比SRAM更好的性能,但矽片成本要高得多。這樣的存儲器通常不會超過大約32個字,但是可以以SRAM無法實現的方式容納同時進行的讀寫。
的確,寄存器文件和完整觸發器比SRAM貴,但它們不用於通用系統存儲器。
@alex.forencich:不是用於通用內存,但是考慮到Scenix微控制器可以以非常短的流水線執行100MIPS的PIC指令集,如果這些芯片中的所有(小)RAM都實現了,我不會感到驚訝拖鞋。
我已經看到在具有160kB SRAM和沒有外部DRAM的MCU上可以正常工作的HTTP服務器。它無法處理許多並行連接,但可以正常工作。
KyranF
2014-10-16 01:08:33 UTC
view on stackexchange narkive permalink

內存可能會佔用最大的矽空間,並且使用非常快的RAM易失性-並不斷使用電源來保持其狀態。除非您需要大量RAM,否則它對於許多其他應用程序沒有用。如果嵌入式系統設計人員需要更多的RAM,則只需獲得一個外部RAM芯片,並使用微控制器通常具有的即插即用內存擴展的外圍存儲器接口即可。這就是我認為微控制器通常仍具有合理的板載RAM的原因,因為合理的應用程序代碼和用例場景通常不需要太多。

當您開始使用大型架構時,由於需要在操作系統上完全運行,因此RAM變得非常重要,但是這已經超出了微控制器的領域,進入了嵌入式計算機中,就像這些天在Beaglebone和Raspberri Pi板上看到的那樣。即使在此階段,處理器也是如此復雜且功能如此豐富,以至於它們沒有足夠的空間容納執行任務所需的RAM量,因此,運行它們幾乎需要外部存儲器。

編輯:

作為個人軼事,我最近製作了一個小型自主機器人控制板,旨在將其用於低分辨率計算機視覺,例如運動檢測,對象跟踪和跟踪。我選擇了一個低引腳數的ARM Cortex M3來完成此任務,在查看Atmel選擇的SAM3系列處理器時,我的確選擇了我能找到的最大RAM-因為在這種情況下,我不想購買外部RAM IC由於電路板空間的原因,並且不希望PCB上具有高速RAM存儲器總線的複雜性。在這種情況下,對於我的特定應用程序,如果可能的話,我非常希望可以選擇多100 KB的RAM。我最終只擁有48KB SRAM,但進一步的設計將獲得更高的引腳數封裝,並利用並行數據捕獲外設將8位攝像機像素數據直接路由到外部RAM芯片中。

好點,我什至沒有考慮功耗...
“而RAM易失,但使用起來非常快,不斷使用電源來保持其狀態”。不更改狀態時,包括SRAM在內的CMOS邏輯僅消耗極少的功率。請注意,即使處於極低功耗的掉電模式下,大多數微控制器仍保留其RAM內容。
@ChrisStratton:我已經看到了一些來自不同製造商的微控制器,這些微控制器具有關閉*部分* RAM的模式以節省功率,儘管有些討厭的是我所看到的不允許RAM上電。無需系統重置。不確定後一個限制的目的是什麼;如果在某些操作期間我需要大量的RAM來臨時存儲,但不是這樣,我不明白為什麼我不應該在需要時打開電源,而在不需要時關閉電源,但是我沒有看到特徵。
tcrosley
2014-10-16 02:25:31 UTC
view on stackexchange narkive permalink

除了其他答案中提到的優勝之處外,限制RAM的另一個原因是微控制器的體系結構。例如,以Microchip PIC10LF320為例,它只有448個字節的程序(閃存)存儲器和64個字節的RAM。但是,大批量購買可能只花費25英鎊(或更少)。 PIC10指令字的大小有限(12位),使其只能直接尋址128字節的RAM。

我確信那裡還有其他微控制器只有8位地址總線,它們存儲在256字節的RAM中。

但是大多數中端微控制器(甚至具有8位數據路徑的那些微控制器)都具有16位地址總線。這些芯片的主要架構考慮因素是該芯片是使用 Harvard還是 Von Neumann架構。

大多數微控制器使用Harvard架構,該架構具有單獨的16-程序存儲器,RAM和存儲器映射的I / O地址的位地址空間。因此,對於這些,16位地址總線可以訪問多達64K(65,536)字節的RAM。該體系結構仍然存在64K的限制,如果要超過該限制,則必須使用某種分頁。使用分頁程序空間而不是RAM空間更為常見。

使用馮·諾依曼體系結構的微控制器(例如Freescale HCS08系列)在程序存儲器,RAM和內存映射的I / O。為了擁有合理的程序空間,這會將RAM的數量通常限制為4K或8K。同樣,可以使用分頁來增加可用程序或RAM空間。

不過,您必須記住,PIC內核代碼完全無效,以至於它會消耗很多額外的閃存。它不需要大量RAM的原因之一是因為它對例如調用堆棧深度有嚴格的限制。
@Lundin同意,您必須非常仔細地用彙編語言對原始PIC10和PIC12進行編程。現在,較新的PIC12F和PIC16F器件具有16級硬件堆棧和14條新指令。有些只是為C添加的,因此它們的可用性更高。
@Lundin:我認為12位和14位指令長度的PIC芯片在代碼密度方面相當不錯。PIC18F是在使用HiTech編譯器時,由於通常需要過多的存儲體切換,因此代碼密度確實趨於下降。
Randy
2014-10-16 03:33:26 UTC
view on stackexchange narkive permalink

我已經在微控制器和小型系統上工作了很長時間,我想指出的是,通常只需要很少的RAM。請記住,即使MCU可以完成很多工作,但如今的趨勢是使用比以往更多的MCU,並使用更多的MCU在更大的系統中分配許多任務。這與以下事實結合在一起:與在Windows中進行編程所需的development腫的開發系統不同,MCU開發通常使用經過很好優化的編譯器,大多數情況下使用非常高效的C和C ++源代碼,有時甚至根本沒有OS開銷。儘管您幾乎不需要編寫Windows程序即可在任何設備上顯示名稱,而不會佔用至少數百KB的操作系統資源,但通常可以在LCD顯示器上以MCU少於256字節的方式完成此操作,包括庫和低字節。級別的BIOS支持!

可以肯定的是,還有其他人指出的成本和空間問題。但是這裡的歷史是,如今,新手認為很少的RAM確實比以往任何時候都多了很多,而且MCU需要與之交互的組件和設備一直在變得越來越智能。老實說,最近我在許多MCU應用程序中最大的使用RAM是用於中斷驅動的通信緩衝區,以將MCU釋放給其他任務,而不必擔心丟失數據。但是,不管您相信與否,對於普通的邏輯和計算功能,MCU與其有限的內置RAM和閃存資源都可以很好地匹配,並且您實際上只需很少的錢就能完成 lot

請記住,曾有一段時間,著名的視頻遊戲帶有粗糙的圖形,但是複雜的遊戲邏輯(例如“ PAC Man”和“ Space Invaders”)通常是在8K ROMS內完成的,而這些機器上的遊戲機幾乎沒有8或16 KB的RAM!

SD卡呢?SDHC卡是否不需要256或512字節的緩衝區(不再生產標準/舊SD卡)?
Atari 2600視頻計算機系統的Pac Man版本是4K ROM,VCS本身俱有128字節的RAM。但是,與當時的家用計算機相比,許多街機都具有相當不錯的ROM和RAM。我認為Defender例如具有32K或ROM和64K的RAM,儘管從CPU的角度來看32K的RAM是“只寫的”(處理器會將數據放置在那裡,顯示硬件會將其輸出到監視器)。
@PeterMortensen許多SD卡都有某種集成的CPU來管理閃存。一些卡具有完整的32位ARM內核,可能已連接16或32K RAM。
@alex.forencich:是的,但是與舊卡相比,用於操作SDHC SD卡的SPI接口在主機側(嵌入式系統/微控制器)是否不需要緩衝區?也就是說,對於較新的(SDHC)卡,不再可以使用位尋址?還是僅取決於文件系統(仍然可以使用位尋址)?較新的卡是否不需要塊傳輸(因此需要256或512字節的緩衝區)?
是的,我記得是512B。您可能只編寫了效率低下的SD卡驅動程序,以丟棄前X個字節的數據->無需“大”緩衝區。
vsz
2015-01-04 21:46:25 UTC
view on stackexchange narkive permalink

除了在成本和製造方面的優缺點之外,對片上RAM的需求很少。

我經常使用具有數十kB(16kB,32kB)閃存的微控制器。以及kB範圍(1kB,2kB)的RAM。我經常會用光閃存,而幾乎不會用完RAM。在我的大多數項目中,我都非常接近閃存限制,但通常只需要少於20%的RAM。

大多數非常小的微控制器都有兩種不同的作用:

  • 調節和控制:他們必須控制一台機器。即使在復雜的控制器算法(可能佔用數十kB的代碼空間)的情況下,也只需要很少的RAM。您處於物理過程的控制之下,並且具有包含一些物理單元的變量,並且可能包含一些作為循環計數器的變量。不需要更多。

  • 數據處理:在極少數情況下,您需要同時存儲大量數據,可以使用外部RAM。幾乎所有現代微控制器都對此提供原生支持。如果您需要一個使用大量內存的簡單程序,則使用小型微控制器和外部RAM而不是高級微控制器將既便宜又小。沒有人生產具有很少端口,小閃存和大RAM的控制器,因為對它們的需求很少。

jose.angel.jimenez
2014-10-28 16:40:58 UTC
view on stackexchange narkive permalink

所有上述原因當然在技術上都是有效和準確的。但是,不要忘記電子產品是業務,而MCU是電子產品行業中競爭最激烈的利基市場之一。

我敢說鏈接價格標籤的實際原因MCU相對於嵌入式SRAM數量的增加主要是市場原因,而不是成本原因:

  • 在大多數設計中,最大可達到的時鐘頻率不是限制因素。而是,可用SRAM的數量為。不要誤會我的意思,CPU頻率非常重要,但是,在某個MCU系列細分市場中,通常不會基於最大CPU頻率以不同的價格提供不同的設備型號。另外,閃存程序存儲是另一個關鍵限制因素,但是,我不會過多地關注閃存(該問題專門針對SRAM)。

  • 可用的SRAM與您可以嵌入到MCU中的複雜程度直接相關,無論是與第三方庫還是與您自己推出的代碼。因此,根據您的MCU價格進行細分是一個“自然”的指標。對於技術客戶來說可以理解的是,能夠執行更複雜任務(更多SRAM,更多閃存)的MCU的成本更高。價格在這裡反映了MCU的潛在價值(交付能力)。閃存的存儲量通常與SRAM成正比。

  • 相反,如果您佔據台式機和移動CPU市場,您通常無法採購特定的閃存。具有許多不同SRAM大小的MCU / CPU。相反,定價模式通常建立在MCU / CPU的執行/性能能力之上:頻率,內核數,電源效率...

我認為這可能是正確的,但是有證據嗎?像划痕一樣將芯片a出售為芯片b?
嗯...有趣的想法。我沒有這種做法的證據。但是,它帶來了有關基礎製造成本的有趣問題。如果將更大的SRAM大小的芯片刮擦到較小的SRAM大小,浪費矽芯片(晶圓)的空間會更昂貴嗎?還是與製造一個設備而不是兩個設備相關的增加的製造和庫存成本?恐怕整個電子行業對公開討論其成本非常挑剔。我們可能永遠不會知道。
舉個例子,MT6250是一種多芯片芯片,用於單芯片功能手機,體積不到2美元,比MCU複雜得多,並帶有8MB SRAM芯片。SRAM豐富的MCU技術。
這將很好地回答“為什麼MCU的價格標籤與嵌入式SRAM的數量有關?”。但這似乎無法回答原始問題。為什麼有這麼少的微控制器能夠以*任何*價格提供超過512 KB的片上SRAM?當專用SRAM芯片製造商似乎認為降低的存貨成本使其僅值得生產2乘冪大小的專用SRAM芯片時,為什麼有這麼多微控制器具有“怪異”的非2冪大小的SRAM?
Frank
2014-10-16 18:39:10 UTC
view on stackexchange narkive permalink

因此,首先您必須考慮16 KB或32 KB是巨大的內存,並且當今出售的大多數微控制器都沒有這麼大的RAM。

許多微控制器程序需要10或50字節的記憶。甚至更複雜的東西大多需要數百個字節。第二,請注意,如果您談論的是微控制器RAM,那麼您將談論0級/ 1級緩存。如果您認為Intel Haswell僅具有“ 64 KB”一級緩存,那麼您將重新考慮微控制器的RAM大小。

第三,您可以將任意數量的外部RAM附加到微控制器,尤其是更多

個人而言,我正在開發許多微控制器應用程序,而我從來不需要1 KB的內存,甚至不需要更多的內存。我也從未使用過外部RAM。

如果我們使用ROM(今天的閃存),情況會有所不同,因為您的程序和數據都在ROM中。確實有很多應用程序,因為您有許多數據,因此您需要在外部微控制器上附加外部ROM。

對於此應用程序,您可能需要1 KB RAM。這足以勝任這項工作。但是,您可以為更大的緩衝區使用更多的RAM,以加快USB到Flash的寫入速度。

您現在看到的區別是:典型的PC將所有程序和數據保存在RAM中。因此,它需要大量的RAM。對於微控制器,這些全部在Flash / ROM中。

您低估了許多應用程序中的RAM使用率。不會很大,但可能取決於實例,大約是10到100。MP3播放器必須執行數字信號處理。
我想知道你們兩個為什麼都這麼說。哪種C命令需要RAM。與其說“這些應用程序需要更多的RAM”,不如說“這些操作需要更多的RAM,因為...”
jawo
2014-10-16 17:49:15 UTC
view on stackexchange narkive permalink

在設計MCU時,您必鬚麵對在PC上並不重要的條件。

  1. 耐久性

    要選擇組件,您無需不一定需要選擇性能最好的和/或性能最高的部件,但已證明在使用數年後仍可正常運行的部件將可用數年,並且可以24/7的年限運行。由於這種情況,如果控制器在市場上已經銷售了好幾年,並且表現良好,那麼與今天的PC標準相比,它似乎具有較差的RAM。但是無論如何,它做得很好,如果工程狀況良好的話,也無需更換。

  2. Space

    微處理器單元實際上是微米。您必須將所需的空間減少到最小。當然,您可以在擁有10年曆史的64 KB芯片的相同空間中獲得256 MB的內存。這就是第一點。

  3. 價格

    不僅是購買價格,而且還是功耗。如果您的競爭對手只需要25W的功率,您就不想設計一個可以控制入門系統的MCU,該系統需要1000W的功率,當然,在相同質量的情況下購買價格更便宜總是更好。

  4. ol>
那是一個真正的大功率微處理器!
我猜測一個1kW的MCU不會保持很長時間的固態。
在當今的PC設計中,這三點都是“極其重要的”。
@KyranF:是的,將兩個數字都除以100。但是,如果有的話,他低估了電池應用的高性能處理器和低功耗微控制器之間的相對功率差異。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...