SDRAM有一個同步接口,在響應控制輸入前會等待一個時鐘信號,這樣就能和計算機的系統總線同步。時鐘被用來驅動一個有限狀態機,對進入的指令進行管線(Pipeline)操做。這使得
SDRAM與沒有同步接口的異步DRAM相比,能夠有一個更復雜的操做模式。下面宇芯電子介紹關於靜態SDRAM和動態SDRAM的區別。
靜態記憶
假設咱們要將16Mb存儲器鏈接到FPGA。
16Mb表示內存可容納1600萬位(準確地說是16777216位)。如今,不多對比特進行單獨尋址,而是一般以8或16的數據包(咱們稱其爲字)進行尋址。所以,若是咱們的16Mb存儲器被組織爲16位的1M字,則須要20位地址總線和16位數據總線,以及一些可寫和可讀信號。
實際的存儲器也將具備CS(片選),若是存儲器是同步的,則爲時鐘(爲清晰起見,在圖片中將其省略)。
如今,若是該內存是一個Blockram(在FPGA內部),它將看起來有所不一樣(假設存在如此大的16Mb Blockram ...典型的Blockram要小得多)。
如您所見,它仍然是一塊內存,可是有兩條地址總線。那是由於現代FPGA中的Blockram是雙端口的……這意味着兩個代理能夠同時訪問存儲器。一般,一個代理寫入內存,而另外一個則讀取。所以,每一個代理的內存都有獨立的地址和數據總線。上面的圖片在頂部顯示了第一個(寫)代理,在底部顯示了第二個(讀)代理。更高級的Blockram容許每一個代理讀取和寫入,可是上面顯示的體系結構是最經常使用的。一樣,blockram一般也被同步使用,所以每一個代理都必須提供一個時鐘(未在圖片中顯示)。
到目前爲止,所顯示的內存是靜態的,這意味着僅經過對其施加電源便可保存其內容。另外,靜態存儲器能夠看做是一個長字形的線性數組(您只需提供一個地址便可訪問匹配的數據...無需複雜)。須要權衡的是每比特成本要比...高得多。
動態記憶
咱們將使用SDRAM,它是動態內存(SDRAM中的「 D」)。在動態內存中,內存不被視爲單詞的長線性數組,而是被組織爲單詞的矩陣(行/列)。
上圖顯示行的12位和列的8位,如前所述總共有20個地址位...很容易。
有一種複雜性:爲了提升性能,將內存分紅相等的塊(稱爲「存儲體」)。那是由於某些動態內存操做速度很慢,所以擁有存儲體能夠在等待另外一個存儲體的同時使用它。
所以,若是咱們的16Mb SDRAM有2個存儲區,則每一個存儲區擁有8Mb。
訪問SDRAM時,FPGA必須選擇存儲體(1位),行(如今只有11位)和列(8位),總共須要20位。但這是一個兩步過程:首先是行+庫,而後是列:
•FPGA選擇一個存儲區並激活其行之一。而後它等待幾個時鐘(等待行準備就緒)。
•如今,該行處於活動狀態,FPGA只需提供列地址便可訪問(讀取和/或寫入)該行中所需的任何數據。
•FPGA處理完該行後,必須先關閉該行,而後再打開新行。
爲了得到最佳性能,用戶(= FPGA)但願避免過多地打開和關閉行,而是在關閉行以前儘量多地完成工做,並在不一樣存儲體中進行交錯操做,以避免浪費時鐘週期。大多數SDRAM實際上有4或8個存儲體,每一個存儲體都是獨立的,所以能夠激活本身的行。