存儲器及存儲器陣列


存儲器陣列(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):用於執行邏輯的存儲陣列,存儲器陣列可以根據位存儲的值,實現組合邏輯功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM