存儲器陣列(memory array)
存儲:數字系統需要存儲器(memory)來存儲電路使用過的數據和生成的數據,使用觸發器組成的寄存器是一種存儲少量數據的存儲器;此外還有可以有效存儲大量數據的存儲器陣列。
存儲器概述
組成:圖5-38是存儲器陣列的通用電路符號。存儲器由一個二維存儲器單元陣列構成。存儲器可以讀取或者寫入內容到陣列的一行,每行數據稱 為一個字(word)。對於一個N位地址和M位數據的存儲器陣列,包含了2N個M位字。
陣列的行與列:為陣列的深度(depth),行由地址(address)指定;列數為寬度(width),讀出或寫入的值為數據(data)。陣列的大小是depth×width。
樣例:圖5-40為一個1024字×32位的存儲器陣列,地址數為10,字為32位,陣列大小為32Kb。
位單元(bit cell)
作用:存儲器陣列由位單元的陣列組成。每個為單元存儲一位數據,並通過一條字線(wordline)和一條位線(bitline)與外部相連。
讀位單元:位線初始化為浮空(Z),字線打開為高,允許存儲的值驅動位線為0或1;
寫位單元:位線被強制驅動為期望的值,並將對應的字線打開為高,將位線連接至存儲位,將期望值寫入存儲位。
存儲器結構
讀存儲器:一條字線設為高電平,位單元的相應行驅動位線為高電平或低電平。
寫存儲器:將位線驅動值高電平或者低電平,然后將字線允許為高電平,允許位線的值存儲到位單元的相應行中。
存儲器端口
所有存儲器都有一個或多個端口(port),每一個端口提供對一個存儲器地址的讀/寫訪問。多端口存儲器可以同時訪問多個地址。
存儲器類型
存儲器陣列通過容量(深度×寬度)、端口的數目和類型來表示。所有的存儲器陣列都已以位單元的陣列來存儲數據。但是如何存儲上存在區別。
歷史上,ROM是只能讀的,但是現在既可以讀也可以寫,
ROM和RAM都是隨機訪問的,訪問任何數據字的延遲都相等;與順序訪問存儲器(磁帶)相對。
當前二者唯一的區別是:RAM是易失型,關掉電源時會丟失數據;ROM是非易失型,沒有電源也能無期限的保存數據。
區別:現代ROM不再只讀,也可以寫入。不同點在於ROM的寫入時間更長,但是是非易失的。
動態隨機訪問存儲器(DRAM):
存儲方式:以電容充放電來存儲位。位值存儲在電容中,nMOS作為開關。字線作為MOS的開關
更新操作:讀操作時會破壞存儲在電容中的位值,所以在每次讀后需要重寫數據;即使DRAM沒有被讀,電容的電壓也會泄露,所以其內容需要在幾毫秒內刷新。
靜態隨機訪問存儲器(SRAM)
存儲方式:數據存儲在交叉耦合反相器中,當字線有效時,兩個MOS管都打開,數據值從位線上傳入/傳出。
更新存儲:由於存在交叉耦合的反相器,如果噪聲減弱存儲位的值,則交叉耦合反相器將恢復存儲值。
存儲器面積、延遲對比
觸發器、SRAM和DRAM都是易失的存儲器,但是存在不同的面積和延遲特性。
DRAM延遲比SRAM更長,因為其位線不是由晶體管驅動,而是電容,而電容將值移動到位線的速度較慢。
DRAM的吞吐量通常也比SRAM低,因為其必須周期性的在讀取后刷新。
當前已有多種不同新的DRAM技術:
同步DRAM(SDRAM),使用一個時鍾使存儲器訪問流水性化;
雙倍速率SDRAM(DDR),同時使用時鍾的上升沿和下降沿來存取數據,以獲得雙倍的吞吐率。
存儲器的延遲和吞吐量也與存儲器的大小有關,在其他條件相同時,大容量存儲器一般比小容量存儲器更慢。
寄存器文件(register file)
作用:數字系統常用一組寄存器來存儲臨時變量,這組寄存器稱為寄存器文件。
組成:通常由小型多端口SRAM陣列組成,比觸發器陣列更加緊湊。
下圖為一個32×32位的三端口寄存器文件,有兩個讀端口和一個寫端口組成,能同時讀兩個寄存器,寫一個寄存器。
`timescale 1ns / 1ps module ram_dual_port #(parameter N=6, M=32)( inout [M-1:0] data_io, input [N-1:0] addr, input wr, rd, input clk, rst ); reg [M-1:0] ram[2**N-1:0]; reg data; integer i; always@(posedge clk) begin if(!rst) begin for(i=0; i<2**N-1; i=i+1) ram[i] <= 32'b0; end else if(wr) begin ram[addr] <= data_io; end else if(rd) begin data <= ram[addr]; end else data <= 32'bz; end assign data_io = rd ? data : 32'bz; endmodule
只讀存儲器(ROM)
注意:ROM的位單元時組合電路,在電源關閉的情況下沒有可以“忘記”的狀態。
存儲方式:以是否存在晶體管作為是否存儲一位。在讀過程中,位線被拉高,如果存在MOS,則位線被拉低,不存在MOS則保持高。
點表示法:在字線和位線交叉點表示為1。
使用存儲器陣列的邏輯
查找表(LookUp Table):用於執行邏輯的存儲陣列,存儲器陣列可以根據位存儲的值,實現組合邏輯功能。