SRAM工作原理
搞FPGA,SRAM是必過的一關(guān),畢竟芯片最核心的就是運算與存儲,本篇文章屬于轉(zhuǎn)載,詳細介紹了標準工藝下的SRAM工作原理,一般工藝庫或者實例化的SRAM使用的就是這種標準SRAM,有地址譯碼器,地址線,數(shù)據(jù)線,位寬,讀寫使能,總體結(jié)構(gòu)還是非常清晰的。當然了,還有一些定制的SRAM,這種往往設(shè)計就比較靈活了,結(jié)構(gòu)也略微不一樣,用在專用電路里面,比如存內(nèi)計算,憶阻器RRAM啥的,本篇不作為重點。。
一、SRAM概述
? ? ? ?SRAM主要用于二級快速緩存(Level2 C ache)。
它利用晶體管來存儲數(shù)據(jù)。與DRAM相比,SRAM的速度快,但在同樣面積中SRAM的容量要比其它類型的內(nèi)存小。
? ? ? 大部分FPGA器件採用了查找表(Look Up Table,LUT)結(jié)構(gòu)。
查找表的原理類似于ROM,其物理結(jié)構(gòu)是靜態(tài)存儲器(SRAM),
N個輸入項的邏輯函數(shù)能夠由一個2^N位容量的SRAM實現(xiàn),
? ? ? ?函數(shù)值存放在SRAM中,SRAM的地址線起輸入線的作用,地址即輸入變量值,SRAM的輸出為邏輯函數(shù)值。由連線開關(guān)實現(xiàn)與其它功能塊的連接。
二、SRAM基本原理
2.1、SRAM結(jié)構(gòu)圖
SRAM結(jié)構(gòu)圖
- corecells array:存儲單元陣列
- decode:行列地址譯碼器
- Sense Amplifier:靈敏放大器
- conntrol circuit:控制電路
- FFIO:緩沖/驅(qū)動電路
在圖中,A0-Am-1為地址輸入端,CSB. WEB和OEB為控制端,控制讀寫操作,為低電平有效,I/O(0)-I/O(N-1)為數(shù)據(jù)輸入輸出端。存儲陣列中的每個存儲單元都與其他單元在行和列上共享電學連接,當中水平方向的連線稱為“字線”,而垂直方向的數(shù)據(jù)流入和流出存儲單元的連線稱為“位線”。通過輸入的地址可選擇特定的字線和位線。字線和位線的交叉處就是被選中的存儲單元。每個存儲單元都是按這個方案被唯一選中,然后再對其進行讀寫操作。有的存儲器設(shè)計成多位數(shù)據(jù)如4位或8位等同一時候輸入和輸出,這種話,就會同一時候有4個或8個存儲單元按上述方法被選中進行讀寫操作。
2.2、SRAM六管結(jié)構(gòu)電路圖
點此查看電路原理具體解釋
2.3、為什么要將存儲單元陣列排成矩陣形式?
在SRAM 中,排成矩陣形式的存儲單元陣列的周圍是譯碼器和與外部信號的接口電路。存儲單元陣列通常採用正方形或矩陣的形式,以降低整個芯片面積并有利于數(shù)據(jù)的存取。以一個存儲容量為4K位的SRAM為例,共需12條地址線來保證每個存儲單元都能被選中(212 =-4096)。假設(shè)存儲單元陣列被排列成僅僅包括一列的長條形,則須要一個12/4K位的譯碼器。但假設(shè)排列成包括64行和64列的正方形,這時則僅僅需一個6/64位的行譯碼器和一個6/64位的列譯碼器。行、列譯碼器可分別排列在存儲單元陣列的兩邊,64行和64列共同擁有4096個交叉點。每個點就相應(yīng)一個存儲位。
因此,將存儲單元排列成正方形比排列成一列的長條形要大大地降低整個芯片地面積。存儲單元排列成長條形除了形狀神秘和面積大以外,另一個缺點,那就是排在列的上部的存儲單元與數(shù)據(jù)輸入/輸出端的連線就會變得非常長,特別是對于容量比較大得存儲器來說。情況就更為嚴重,而連線的延遲至少是與它的長度成線性關(guān)系。連線越長,線上的延遲就越大。所以就會導致讀寫速度的降低和不同存儲單元連線延遲的不一致性,這些都是在設(shè)計中須要避免的。
三、SRAM的存儲原理
3.1、從RAM的存儲原理講起
? ? ? ? RAM基本的作用就是存儲代碼和數(shù)據(jù)供CPU在須要的時候調(diào)用。可是這些數(shù)據(jù)并非像用袋子盛米那么簡單。更像是 圖書館中用有格子的書架存放書籍一樣。不但要放進去還要可以在須要的時候準確的調(diào)用出來。盡管都是書可是每本書是不同的。
對于RAM等存儲器來說也是一樣的,盡管存儲的都是代表0和1的代碼,可是不同的組合就是不同的數(shù)據(jù)。讓我們又一次回到書和書架上來,假設(shè)有一個書架上有10行和10列格子(每行和每列都有0-9的編號),有100本書要存放在里面,那么我們使用一個行的編號+一個列的編號就能確定某一本書的位置。假設(shè)已知這本書的編號87,那么我們首先鎖定第8行。然后找到第7列就能準確的找到這本書了。
在RAM存儲器中也是利用了相似的原理。
如今讓我們回到RAM存儲器上,對于RAM存儲器而言數(shù)據(jù)總線是用來傳入數(shù)據(jù)或者傳出數(shù)據(jù)的。
由于存儲器中的存儲空間是假設(shè)前面提到的存放圖書的書架一樣通過一定的規(guī)則定義的,所以我們能夠通過這個規(guī)則來把數(shù)據(jù)存放到存儲器上相應(yīng)的位置。而進行這樣的定位的工作就要依靠地址總線來實現(xiàn)了。
對于CPU來說。RAM就象是一條長長的有非常多空格的細線。每一個空格都有一個唯一的地址與之相相應(yīng)。
假設(shè)CPU想要從RAM中調(diào)用數(shù)據(jù),它首先須要給地址總線發(fā)送地址數(shù)據(jù)定位要存取的數(shù)據(jù),然后等待若干個時鐘周期之后,數(shù)據(jù)總線就會把傳輸數(shù)據(jù)給CPU。
以下的示意圖能夠幫助我們非常好的理解這個過程。
上圖中的小圓點代表RAM中的存儲空間,每個都有一個唯一的地址線同它相連。
當?shù)刂方獯a器接收到地址總線送來的地址數(shù)據(jù)之后。它會依據(jù)這個數(shù)據(jù)定位CPU想要調(diào)用的數(shù)據(jù)所在的位置,然后數(shù)據(jù)總線就會把當中的數(shù)據(jù)傳送到CPU。
上面所列舉的樣例中CPU在一行數(shù)據(jù)中每次僅僅是存取一個字節(jié)的數(shù)據(jù)。可是在現(xiàn)實世界中是不同的。通常CPU每次須要調(diào)用32bit或者是64bit的數(shù)據(jù)(這是依據(jù)不同計算機系統(tǒng)的數(shù)據(jù)總線的位寬所決定的)。假設(shè)數(shù)據(jù)總線是64bit的話,CPU就會在一個時間中存取8個字節(jié)的數(shù)據(jù)(想一想,假設(shè)每次還是存取1個字節(jié)的數(shù)據(jù),64bit總線將不會顯示出來不論什么的優(yōu)勢。
)
從“線”到“矩陣”
假設(shè)RAM對于CPU來說不過一條“線”的話。還不能體現(xiàn)實際的執(zhí)行情況。由于假設(shè)實際情況真的是這種話,在實際制造芯片的時候,會有非常多實際的困難。特別是在須要設(shè)計大容量的RAM的時候。
所以。一種更好的可以減少成本的方法是讓存儲信息的“空格”排列為非常多行--每一個“空格”相應(yīng)一個bit存儲的位置。這樣。假設(shè)要存儲1024bits(2^10)數(shù)據(jù),那么你只要使用32x32(2^5*2^5=2^10)的矩陣就行達到這個目的了。非常明顯。一個32x32的矩陣比一個1024bit的行設(shè)備更緊湊。實現(xiàn)起來也更加easy。請看下圖:
知道了RAM的基本結(jié)構(gòu)是什么樣子的。我們就以下談?wù)劗敶鎯ψ止?jié)的過程是如何的:上面的示意圖顯示的也不過最簡單狀態(tài)下的情況,也就是當內(nèi)存條上只唯獨一個RAM芯片的情況。對于X86處理器。它通過地址總線發(fā)出一個具有22位二進制數(shù)字的地址編碼--當中11位是行地址,另外11位是列地址,這是通過RAM地址接口進行分離的。行地址解碼器(row decoder)將會首先確定行地址,然后列地址解碼器(column decoder)將會確定列地址,這樣就能確定唯一的存儲數(shù)據(jù)的位置,然后該數(shù)據(jù)就會通過RAM數(shù)據(jù)接口將數(shù)據(jù)傳到數(shù)據(jù)總線。另外,須要注意的是,RAM內(nèi)部存儲信息的矩陣并非一個正方形的,也就是行和列的數(shù)目不是同樣的--行的數(shù)目比列的數(shù)目少(DRAM)。
3.2、SRAM的存儲原理
以下的示意圖粗略的概括了一個主要的SRAM芯片是怎樣工作的。SRAM是“static RAM(靜態(tài)隨機存儲器)”的簡稱,之所以這樣命名是由于當數(shù)據(jù)被存入當中后不會消失(同DRAM動態(tài)隨機存儲器是不同,DRAM必須在一定的時間內(nèi)不停的刷新才干保持當中存儲的數(shù)據(jù))。
一個SRAM單元通常由4-6僅僅晶體管組成,當這個SRAM單元被賦予0或者1的狀態(tài)之后,它會保持這個狀態(tài)直到下次被賦予新的狀態(tài)或者斷電之后才會更改或者消失。
SRAM的速度相對照較快。并且比較省電。可是存儲1bit的信息須要4-6僅僅晶體管制造成本太高了(DRAM僅僅要1僅僅晶體管就能夠?qū)崿F(xiàn))。
一個SRAM單元——4-6僅僅晶體管——存儲1bit的信息
3.3、RAM芯片和SRAM芯片
RAM芯片:
前面的介紹都相對照較簡單、抽象。以下我們會結(jié)合實際的RAM芯片進行介紹。在談到這個問題的時候。我們會涉及到一個比較重要的技術(shù):封裝。你應(yīng)該聽說過諸如30線SIMMS、72線SIMMS和168線DIMMS或者RIMMs當中的一個或者幾個術(shù)語吧。假設(shè)要解釋這些術(shù)語之間的不同。就應(yīng)該了解RAM的封裝技術(shù)。
SRAM芯片:
早期的SRAM芯片採用了20線雙列直插(DIP:Dual Inline Package)封裝技術(shù),它們之所以具有這么多的針腳,是由于它們必須:每一個地址信號都須要一根信號線;一根數(shù)據(jù)輸入線和一根數(shù)據(jù)輸出線,部分控制線(Write Enable, Chip Select)。
以下的是一個16K x 1-bit SRAM芯片的針腳功能示意圖:
Input:A0-A13是地址輸入信號引腳,CS是芯片選擇引腳。在一個實際的系統(tǒng)中,一定具有非常多片SRAM芯片,所以須要選擇到底從那一片SRAM芯片中寫入或者讀取數(shù)據(jù)。WE是寫入啟用引腳(如上表,在CS、WE上面的線我沒有寫入,表示低電平有效或者是邏輯0時有效):當SRAM得到一個地址之后。它須要知道進行什么操作,到底是寫入還是讀取,WE就是告訴SRAM要寫入數(shù)據(jù)。Vcc是供電引腳。Din是數(shù)據(jù)輸入引腳。Dout是數(shù)據(jù)輸出引腳。GND是接地引腳
Output:Dout引腳
Enable(OE):有的SRAM芯片中也有這個引腳,可是上面的圖中并沒有。
這個引腳同WE引腳的功能是相對的。它是讓SRAM知道要進行讀取操作而不是寫入操作。
3.4、SRAM的讀取與存儲操作流程
從Dout引腳讀取1bit數(shù)據(jù)須要下面的步驟:
1)通過地址總線把要讀取的bit的地址傳送到對應(yīng)的讀取地址引腳(這個時候/WE引腳應(yīng)該沒有激活,所以SRAM知道它不應(yīng)該運行寫入操作)。
2)激活/CS選擇該SRAM芯片。
3)激活/OE引腳讓SRAM知道是讀取操作。
第三步之后,要讀取的數(shù)據(jù)就會從DOut引腳傳輸?shù)綌?shù)據(jù)總線。
怎么過程很的簡單吧?相同。寫入1bit數(shù)據(jù)的過程也是很的簡單的。
從Dout引腳存儲1bit數(shù)據(jù)須要下面的步驟:
1)通過地址總線確定要寫入信息的位置(確定/OE引腳沒有被激活)。
2)通過數(shù)據(jù)總線將要寫入的傳輸數(shù)據(jù)到Dout引腳。
3)激活/CS引腳選擇SRAM芯片。
4)激活/WE引腳通知SRAM知道要進行寫入操作。
經(jīng)過上面的四個步驟之后,須要寫入的數(shù)據(jù)就已經(jīng)放在了須要寫入的地方。
----------------------------------------------我是驕傲的昏割線-----------------------------------------------------
經(jīng)過剛才從棟哥那里的確認,我如今的崗位是純研發(fā)崗,純的哦。純的。啊哈哈哈哈哈哈
要不要這么開森(捂臉跑)
參考:
https://www.cnblogs.com/fhyfhy/p/4528425.html
https://www.cnblogs.com/ant2012/archive/2012/02/21/2360686.html
總結(jié)
- 上一篇: EC11旋转编码器驱动程序
- 下一篇: 网络GIS发展趋势