一、SRAM概述
SRAM主要用於二級快速緩存(Level2 C ache)。
它利用晶體管來存儲數據。與DRAM相比,SRAM的速度快,但在同樣面積中SRAM的容量要比其它類型的內存小。
大部分FPGA器件採用了查找表(Look Up Table,LUT)結構。
查找表的原理類似於ROM,其物理結構是靜態存儲器(SRAM),
N個輸入項的邏輯函數能夠由一個2^N位容量的SRAM實現,
函數值存放在SRAM中,SRAM的地址線起輸入線的作用,地址即輸入變量值,SRAM的輸出為邏輯函數值。由連線開關實現與其它功能塊的連接。
二、SRAM基本原理
2.1、SRAM結構圖

- corecells array:存儲單元陣列
- decode:行列地址譯碼器
- Sense Amplifier:靈敏放大器
- conntrol circuit:控制電路
- FFIO:緩沖/驅動電路
在圖中,A0-Am-1為地址輸入端,CSB. WEB和OEB為控制端,控制讀寫操作,為低電平有效,I/O(0)-I/O(N-1)為數據輸入輸出端。存儲陣列中的每個存儲單元都與其他單元在行和列上共享電學連接,當中水平方向的連線稱為“字線”,而垂直方向的數據流入和流出存儲單元的連線稱為“位線”。通過輸入的地址可選擇特定的字線和位線。字線和位線的交叉處就是被選中的存儲單元。每個存儲單元都是按這個方案被唯一選中,然后再對其進行讀寫操作。有的存儲器設計成多位數據如4位或8位等同一時候輸入和輸出,這種話,就會同一時候有4個或8個存儲單元按上述方法被選中進行讀寫操作。
2.2、SRAM六管結構電路圖

點此查看電路原理具體解釋
2.3、為什么要將存儲單元陣列排成矩陣形式?
因此,將存儲單元排列成正方形比排列成一列的長條形要大大地降低整個芯片地面積。存儲單元排列成長條形除了形狀神秘和面積大以外,另一個缺點,那就是排在列的上部的存儲單元與數據輸入/輸出端的連線就會變得非常長,特別是對於容量比較大得存儲器來說。情況就更為嚴重,而連線的延遲至少是與它的長度成線性關系。連線越長,線上的延遲就越大。所以就會導致讀寫速度的降低和不同存儲單元連線延遲的不一致性,這些都是在設計中須要避免的。
三、SRAM的存儲原理
3.1、從RAM的存儲原理講起
RAM基本的作用就是存儲代碼和數據供CPU在須要的時候調用。可是這些數據並非像用袋子盛米那么簡單。更像是 圖書館中用有格子的書架存放書籍一樣。不但要放進去還要可以在須要的時候准確的調用出來。盡管都是書可是每本書是不同的。
對於RAM等存儲器來說也是一樣的,盡管存儲的都是代表0和1的代碼,可是不同的組合就是不同的數據。讓我們又一次回到書和書架上來,假設有一個書架上有10行和10列格子(每行和每列都有0-9的編號),有100本書要存放在里面,那么我們使用一個行的編號+一個列的編號就能確定某一本書的位置。假設已知這本書的編號87,那么我們首先鎖定第8行。然后找到第7列就能准確的找到這本書了。
在RAM存儲器中也是利用了相似的原理。
如今讓我們回到RAM存儲器上,對於RAM存儲器而言數據總線是用來傳入數據或者傳出數據的。
由於存儲器中的存儲空間是假設前面提到的存放圖書的書架一樣通過一定的規則定義的,所以我們能夠通過這個規則來把數據存放到存儲器上相應的位置。而進行這樣的定位的工作就要依靠地址總線來實現了。
對於CPU來說。RAM就象是一條長長的有非常多空格的細線。每一個空格都有一個唯一的地址與之相相應。
假設CPU想要從RAM中調用數據,它首先須要給地址總線發送地址數據定位要存取的數據,然后等待若干個時鍾周期之后,數據總線就會把傳輸數據給CPU。
以下的示意圖能夠幫助我們非常好的理解這個過程。
上圖中的小圓點代表RAM中的存儲空間,每個都有一個唯一的地址線同它相連。
當地址解碼器接收到地址總線送來的地址數據之后。它會依據這個數據定位CPU想要調用的數據所在的位置,然后數據總線就會把當中的數據傳送到CPU。
上面所列舉的樣例中CPU在一行數據中每次僅僅是存取一個字節的數據。可是在現實世界中是不同的。通常CPU每次須要調用32bit或者是64bit的數據(這是依據不同計算機系統的數據總線的位寬所決定的)。假設數據總線是64bit的話,CPU就會在一個時間中存取8個字節的數據(想一想,假設每次還是存取1個字節的數據,64bit總線將不會顯示出來不論什么的優勢。
)
從“線”到“矩陣”
假設RAM對於CPU來說不過一條“線”的話。還不能體現實際的執行情況。由於假設實際情況真的是這種話,在實際制造芯片的時候,會有非常多實際的困難。特別是在須要設計大容量的RAM的時候。
所以。一種更好的可以減少成本的方法是讓存儲信息的“空格”排列為非常多行--每一個“空格”相應一個bit存儲的位置。這樣。假設要存儲1024bits(2^10)數據,那么你只要使用32x32(2^5*2^5=2^10)的矩陣就行達到這個目的了。非常明顯。一個32x32的矩陣比一個1024bit的行設備更緊湊。實現起來也更加easy。請看下圖:

知道了RAM的基本結構是什么樣子的。我們就以下談談當存儲字節的過程是如何的:上面的示意圖顯示的也不過最簡單狀態下的情況,也就是當內存條上只唯獨一個RAM芯片的情況。對於X86處理器。它通過地址總線發出一個具有22位二進制數字的地址編碼--當中11位是行地址,另外11位是列地址,這是通過RAM地址接口進行分離的。行地址解碼器(row decoder)將會首先確定行地址,然后列地址解碼器(column decoder)將會確定列地址,這樣就能確定唯一的存儲數據的位置,然后該數據就會通過RAM數據接口將數據傳到數據總線。另外,須要注意的是,RAM內部存儲信息的矩陣並非一個正方形的,也就是行和列的數目不是同樣的--行的數目比列的數目少(DRAM)。
3.2、SRAM的存儲原理
以下的示意圖粗略的概括了一個主要的SRAM芯片是怎樣工作的。SRAM是“static RAM(靜態隨機存儲器)”的簡稱,之所以這樣命名是由於當數據被存入當中后不會消失(同DRAM動態隨機存儲器是不同,DRAM必須在一定的時間內不停的刷新才干保持當中存儲的數據)。
一個SRAM單元通常由4-6僅僅晶體管組成,當這個SRAM單元被賦予0或者1的狀態之后,它會保持這個狀態直到下次被賦予新的狀態或者斷電之后才會更改或者消失。
SRAM的速度相對照較快。並且比較省電。可是存儲1bit的信息須要4-6僅僅晶體管制造成本太高了(DRAM僅僅要1僅僅晶體管就能夠實現)。
一個SRAM單元——4-6僅僅晶體管——存儲1bit的信息

3.3、RAM芯片和SRAM芯片
RAM芯片:
前面的介紹都相對照較簡單、抽象。以下我們會結合實際的RAM芯片進行介紹。在談到這個問題的時候。我們會涉及到一個比較重要的技術:封裝。你應該聽說過諸如30線SIMMS、72線SIMMS和168線DIMMS或者RIMMs當中的一個或者幾個術語吧。假設要解釋這些術語之間的不同。就應該了解RAM的封裝技術。
SRAM芯片:
早期的SRAM芯片採用了20線雙列直插(DIP:Dual Inline Package)封裝技術,它們之所以具有這么多的針腳,是由於它們必須:每一個地址信號都須要一根信號線;一根數據輸入線和一根數據輸出線,部分控制線(Write Enable, Chip Select)。
以下的是一個16K x 1-bit SRAM芯片的針腳功能示意圖:

Input:A0-A13是地址輸入信號引腳,CS是芯片選擇引腳。在一個實際的系統中,一定具有非常多片SRAM芯片,所以須要選擇到底從那一片SRAM芯片中寫入或者讀取數據。WE是寫入啟用引腳(如上表,在CS、WE上面的線我沒有寫入,表示低電平有效或者是邏輯0時有效):當SRAM得到一個地址之后。它須要知道進行什么操作,到底是寫入還是讀取,WE就是告訴SRAM要寫入數據。Vcc是供電引腳。Din是數據輸入引腳。Dout是數據輸出引腳。GND是接地引腳
Output:Dout引腳
Enable(OE):有的SRAM芯片中也有這個引腳,可是上面的圖中並沒有。
這個引腳同WE引腳的功能是相對的。它是讓SRAM知道要進行讀取操作而不是寫入操作。
3.4、SRAM的讀取與存儲操作流程
從Dout引腳讀取1bit數據須要下面的步驟:
1)通過地址總線把要讀取的bit的地址傳送到對應的讀取地址引腳(這個時候/WE引腳應該沒有激活,所以SRAM知道它不應該運行寫入操作)。
2)激活/CS選擇該SRAM芯片。
3)激活/OE引腳讓SRAM知道是讀取操作。
第三步之后,要讀取的數據就會從DOut引腳傳輸到數據總線。
怎么過程很的簡單吧?相同。寫入1bit數據的過程也是很的簡單的。
從Dout引腳存儲1bit數據須要下面的步驟:
1)通過地址總線確定要寫入信息的位置(確定/OE引腳沒有被激活)。
2)通過數據總線將要寫入的傳輸數據到Dout引腳。
3)激活/CS引腳選擇SRAM芯片。
4)激活/WE引腳通知SRAM知道要進行寫入操作。
經過上面的四個步驟之后,須要寫入的數據就已經放在了須要寫入的地方。
----------------------------------------------我是驕傲的昏割線-----------------------------------------------------
經過剛才從棟哥那里的確認,我如今的崗位是純研發崗,純的哦。純的。啊哈哈哈哈哈哈
要不要這么開森(捂臉跑)