JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

SRAM 六電晶體位元細胞:會記憶的兩個反相器

在第一階,你把 SRAM 陣列看成一張由[[ic-wordline|字元線]]定址、靠[[ic-bitline|位元線]]讀出的細胞網格。現在我們把鏡頭推進到一個交叉點,發現一件近乎魔法的事:六顆[[transistor|電晶體]]死死咬住一個 1 或 0,拒絕遺忘——不需時脈、不需更新,只靠兩個彼此凝視的反相器。我們會逐步追蹤一個位元如何被保存、字元線如何撬開細胞,以及為何要讓它「讀而不翻、想寫就翻」會是整個晶片設計裡最精細的尺寸難題之一。

兩個反相器的對視較量

想像兩個人面對面,各自對對方低語:「不管你剛說什麼,我都說相反的。」第一個說「高」,第二個答「低」,這又繞回去再次確認「高」。這段對話自洽、永不停止。這條無盡、自我強化的迴路,正是交叉耦合反相器對所做的事——也是每一個 SRAM 位元細胞的核心。

CMOS 反相器其實就是兩顆 MOSFET:當輸入為低時,PMOS 上拉把輸出接到 VDD;當輸入為高時,NMOS 下拉把輸出接到地。把反相器 A 的輸出接到 B 的輸入、B 的輸出再接回 A 的輸入,你就得到一個有兩個穩態的鎖存器(latch)。要嘛 A 的輸出為高、B 的為低,要嘛反過來。沒有第三種選項,而且關鍵在於——中間任何狀態都不穩定。

          VDD                 VDD
           |                   |
         [ PL ]              [ PR ]      <- PMOS pull-ups
           |                   |
    Q ----+----.         .----+---- QB
          |     \       /     |
          |      `-----'      |        <- cross-coupling wires
          |     .'     `.     |
         [ NL ]            [ NR ]      <- NMOS pull-downs
           |                   |
          GND                 GND

   Q  holds the bit (say '1' = high)
   QB holds its complement ('0' = low)
儲存核心:兩個 CMOS 反相器,各自的輸出餵給對方的輸入。Q 與 QB 永遠互補。

加上兩道門:存取電晶體與字元線

一個沒人能對話的鎖存器毫無用處。為了讀寫細胞,我們再加兩顆 NMOS 電晶體——也就是存取電晶體(access transistor)——每個儲存節點各接一顆。它們的閘極綁在一起接到字元線(WL)。另一端則接到一對垂直走線,也就是位元線 BL 與 BLB。兩個反相器(四顆電晶體)加上兩顆存取電晶體共六顆——所以叫 6T

                 WL (wordline)
   ________________|________________
   |                                |
  [AL]  access                   [AR]  access
   |     transistor                |    transistor
   |                                |
   Q  o----[ inverter pair ]----o  QB
   |                                |
   |                                |
  BL                              BLB
 (bitline)                      (bitline-bar)

  WL = 0  -> AL, AR OFF -> cell isolated, holds its bit (HOLD)
  WL = 1  -> AL, AR ON  -> Q/QB connected to BL/BLB (ACCESS)
完整的 6T 細胞。字元線同時控制兩顆存取電晶體;位元線則是進出細胞的共用高速公路。

這裡有一個優雅的分工。當字元線時,存取電晶體關閉,細胞與外界隔絕,反相器迴路安靜地保存它的位元。這是「保持」(hold)狀態——細胞 99.99% 的時間都待在這裡。當字元線轉為時,兩道門同時打開,儲存節點便暴露在位元線上。此時——且僅在此時——外界才能讀出裡面的值,或強行寫入新值。

讀取卻不破壞它

讀取 SRAM 細胞是一個精細的動作,因為「觀看」這個行為本身可能改變你所看的對象。流程如下。首先,兩條位元線都預充電(precharge)到 VDD 後讓它們浮接——把它們想成兩個裝到滿的水桶。接著字元線升起,打開存取電晶體。在細胞存 0 的那一側,位元線現在有一條經由存取電晶體與下拉 NMOS 通往地的放電路徑。那條位元線會慢慢下垂,另一條則維持高位。感測放大器(第五階的主題)偵測這微小的電壓差——通常只有 50–100 mV——並把它放大成乾淨的邏輯位準。

但危險就在這裡。存 0 那一側的位元線剛被預充電到 VDD。當字元線打開時,那條高位的位元線會試圖經由存取電晶體把內部的 0 節點往上拉。若內部節點升得太高——超過了對面反相器的切換臨界——細胞就會翻轉,你便剛好摧毀了你正想讀取的那個位元。這叫做讀取擾動(read disturb),避免它正是這顆細胞最核心的平衡課題。

防禦之道就是尺寸。我們把下拉 NMOS 做得比存取電晶體更強,這樣在讀取時它能贏得這場拔河,把內部的 0 節點牢牢壓在接近地的位置。下拉強度對存取強度的比值稱為細胞比(cell ratio,或 β 比)。典型值約在 1.5–2.5。細胞比愈大,讀取愈安全——但細胞也愈大、愈慢。

READ of a cell holding Q=1, QB=0

  Step 0  Precharge:  BL = VDD,  BLB = VDD   (both high)
  Step 1  WL -> 1:    access transistors ON

          BL  side (Q=1):  no discharge path -> BL stays ~VDD
          BLB side (QB=0): path to GND -> BLB droops

  Step 2  Sense:  V(BL) - V(BLB)  ~  +60 mV   -> read '1'

  DANGER on the QB side:
          BLB(=VDD) pushes charge onto QB(=0) node
          If QB climbs past V_trip of the left inverter -> FLIP!

  Guard:  make pull-down NMOS stronger than access NMOS
          cell ratio  CR = (W/L)_pulldown / (W/L)_access  >= ~1.5
慢動作重播一次讀取:0 側位元線下垂以傳遞位元,而細胞比則阻止內部節點被往上拖而翻轉。

寫入:刻意逼它翻轉

寫入是讀取的鏡像,並揭示了一種美妙的張力。讀取時我們奮力阻止細胞翻轉;寫入時我們希望它翻轉——但只翻我們選中的那一顆,且每次都可靠地翻。我們要如何壓倒一個正主動保持其值的鎖存器?答案是巧妙施加的蠻力。

要把 0 寫入一個目前存著 1(Q=1, QB=0)的細胞,寫入驅動器把 BL 位元線狠狠拉到地,同時讓 BLB 維持高位。字元線打開,現在 BL 奮力把內部 Q 節點(停在 VDD)往下拉。存取電晶體能傳遞強 0,因此它能把 Q 拉下——前提是存取電晶體比那顆試圖把 Q 撐在高位的 PMOS 上拉更強。一旦 Q 跌破右側反相器的切換點,再生迴路便接手,把細胞猛地推進新狀態,自行完成翻轉。

這帶出第二條尺寸規則。要讓寫入成功,存取電晶體必須能壓倒 PMOS 上拉。所以我們把上拉做得。上拉強度對存取強度的比值就是上拉比(pull-up ratio,PR),我們希望它——通常 0.5 或更小。上拉之所以做弱,也正是為何那些存取電晶體不必做得很大:它們只需贏過一顆刻意做弱的 PMOS。

實例演練:對同一顆細胞讀與寫

讓我們用一顆細胞、連續兩個動作把這份停戰協議講具體。假設細胞存著 Q=1, QB=0。我們先讀它,再把 0 寫進去,看看同一顆存取電晶體如何必須表現出不同行為——輸掉一場拔河、又贏下另一場。

  1. 讀取。 預充電 BL=BLB=VDD,拉高 WL。在 QB=0 那一側,存取電晶體與下拉 NMOS 在高位位元線與地之間形成分壓。下拉(細胞比約 2)是較強的元件,所以 QB 節點只微微上抬一點點——遠在切換點之下。細胞存活;BLB 下垂,感測放大器讀出「1」。
  2. 為何沒翻。 當細胞比 CR ≈ 2,分壓把內部 0 節點維持在大約 VDD/(1+CR) ≈ 0.33·VDD。對 1.0 V 供電而言約 0.33 V,安穩地落在反相器約 0.5 V 切換點之下。還有餘裕。
  3. 寫入 0。 現在寫入驅動器把 BL 一路拉到 0 V(BLB 維持高位)。拉高 WL。這次 Q 側的存取電晶體把內部 Q 節點(在 VDD)連到一條接地的位元線。
  4. 翻轉。 Q 現在透過存取 NMOS 被往下拉,對抗 PMOS 上拉。因為上拉比 PR ≈ 0.5,存取電晶體獲勝:Q 跌破切換點,左側反相器開始把 QB 推高,QB 回饋並關掉撐住 Q 的 PMOS——迴路再生,細胞安定在 Q=0, QB=1。
  5. 同一顆電晶體,兩種角色。 讀取時它輸了(被保持得比下拉弱 → 細胞比)。寫入時它贏了(被保持得比上拉強 → 上拉比)。這兩件事能同時成立,唯獨因為下拉強、且上拉弱。
Numbers for a ~1.0 V cell (illustrative)

  Devices (W/L, relative strength):
    pull-down NMOS   strong   (ratio 2)
    access  NMOS     medium   (ratio 1)   <- pivot device
    pull-up  PMOS    weak     (ratio 0.5)

  Cell ratio   CR = pulldown/access = 2.0   -> read-safe
  Pull-up ratio PR = pullup/access  = 0.5   -> write-able

  READ  : internal 0-node rises to ~VDD/(1+CR) = 0.33 V  < V_trip (~0.5 V)  OK, no flip
  WRITE0: access (str 1) vs pull-up (str 0.5) -> access wins -> Q dragged to 0  FLIP

  Squeeze:  CR large (read) AND PR small (write)
            => pull-down >> access >> pull-up
一顆細胞,兩個動作。細胞比保證讀取翻不動它;上拉比保證寫入翻得動它。

為何是六顆?最小抉擇的經濟學

你也許會問,為何不像 DRAM 那樣每個位元只用一顆電晶體。答案是速度、簡潔與矽面積之間的取捨。DRAM 把位元存成微小電容上的電荷——一顆電晶體、一顆電容——所以密度高得多。但那電荷會漏,因此 DRAM 必須每秒更新數千次,而且較慢。SRAM 的六顆電晶體要付出面積,卻買來珍貴的東西:一個不需更新、能自我保持的位元,能在不到一奈秒內被讀寫,並且用的是與周圍處理器完全相同的 CMOS 邏輯——所以它能愉快地住在晶片

這就是為何 SRAM 是晶片上的主力:它構成緊貼 CPU 執行單元、僅幾奈米之遙的快取,構成暫存器檔案,構成路由器內的查找表。一顆現代處理器可能把一半的晶粒面積花在 SRAM 上。每顆細胞都以一種超級優化、近乎打破規則的形狀(所謂「薄細胞」thin cell)佈局,晶圓廠一個製程節點接一個節點地打磨它——因為對一個要複製十億次的結構省下幾個百分點,值得投入巨大的工程心力。