SRAM: một bit tự giữ mình như thế nào?
Làm sao một nhóm transistor có thể giữ nguyên 0 hoặc 1 miễn là còn điện?
Ở bài trước, ta thấy transistor có thể được ghép thành những mạch rất nhỏ trên chip.
Nhưng có một vấn đề:
một transistor đứng riêng không nhớ được 0 hay 1.
Tín hiệu vào mất thì trạng thái của nó cũng mất theo.
Vậy làm sao tạo ra một mạch có thể giữ nguyên một bit?
Ý tưởng của SRAM rất thú vị:
Lấy hai mạch đơn giản rồi cho chúng giữ trạng thái của nhau.
Bắt đầu với một cổng đảo
Ta đã gặp cổng NOT, hay cổng đảo.
Nó chỉ làm một việc:
vào 0 → ra 1
vào 1 → ra 0
Ví dụ:
0 ──[ NOT ]──> 1
1 ──[ NOT ]──> 0
Một cổng NOT như vậy chưa phải bộ nhớ.
Nếu đầu vào đổi, đầu ra cũng đổi theo.
đầu vào quyết định đầu ra
Nhưng điều gì xảy ra nếu ta lấy hai cổng NOT và nối chúng vào nhau?
Cho hai cổng giữ nhau
Ta nối như thế này:
┌───────────┐
│ ↓
Q ──────> NOT ──────> Q̄
↑ │
│ │
└────── NOT <───────┘
Đầu ra của cổng này trở thành đầu vào của cổng kia.
Hai cổng tạo thành một vòng kín.
Bây giờ giả sử Q đang là 1.
Cổng bên phải nhận 1:
Q = 1
↓
NOT
↓
Q̄ = 0
Q̄ = 0 lại đi vào cổng còn lại:
Q̄ = 0
↓
NOT
↓
Q = 1
Ta quay trở lại đúng trạng thái ban đầu:
Q = 1
Q̄ = 0
Không có gì buộc nó phải thay đổi.
Hai cổng cứ tiếp tục giữ trạng thái đó.
Nếu bắt đầu ở trạng thái ngược lại:
Q = 0
Q̄ = 1
thì cũng xảy ra điều tương tự:
Q = 0
→ cổng kia tạo Q̄ = 1
→ cổng còn lại lại tạo Q = 0
Mạch cũng tự giữ được trạng thái này.
Vậy vòng mạch có hai trạng thái ổn định:
Q = 0, Q̄ = 1 → lưu bit 0
Q = 1, Q̄ = 0 → lưu bit 1
Đây là phần quan trọng nhất của SRAM:
Q giữ Q̄, còn Q̄ lại giữ Q.
Miễn là còn điện, vòng này không cần ai liên tục nhắc rằng nó đang giữ 0 hay 1.
Thử tự đổi trạng thái của nó
Bấm Ghi 1, rồi Ghi 0, và xem vòng tự giữ trạng thái mới.
Tắt công tắc Nguồn điện trong mô phỏng: hai cổng không còn giữ nhau, bit mất. Bật lại, cell rơi vào 0 hoặc 1 ngẫu nhiên.
Vì vậy SRAM là bộ nhớ mất dữ liệu khi mất điện — hay volatile memory.
Thêm hai cánh cửa
Cell SRAM đã tự giữ được bit. Nhưng muốn dùng nó, mạch bên ngoài phải có cách đọc hoặc ghi vào cell.
Ta không muốn cell lúc nào cũng nối thẳng ra bên ngoài, vì khi đó tín hiệu ngoài có thể tác động vào nó bất cứ lúc nào. Vì vậy SRAM thêm hai transistor làm cửa:
bitline trái ──[ cửa ]── Q
bitline phải ──[ cửa ]── Q̄
Hai cửa này được điều khiển cùng lúc bởi một dây gọi là wordline:
- wordline đóng → hai cửa đóng, cell tự giữ bit bên trong
- wordline mở → hai cửa mở, mạch bên ngoài đọc hoặc ghi được
Mở wordline rồi thử ghi và đọc:
Wordline chỉ mở cửa. Bitline là đường dữ liệu đi vào hoặc đi ra.
Từ một cell đến cả chip
Một chip SRAM có rất nhiều cell xếp thành hàng và cột.
bitline bitline bitline
│ │ │
wordline ── cell cell cell
wordline ── cell cell cell
wordline ── cell cell cell
- wordline chạy theo hàng: mở một wordline là mở cửa cả hàng đó
- bitline chạy theo cột: mỗi cột mang dữ liệu của cell trên hàng đang mở
Chỉ hàng có wordline mở đưa dữ liệu lên bitline. Các hàng khác cửa vẫn đóng.
Vì sao gọi là SRAM 6T?
Một cell SRAM phổ biến dùng 6 transistor cho mỗi bit:
- 4 transistor tạo thành hai cổng NOT giữ nhau, mỗi cổng 2 transistor
- 2 transistor làm cửa nối
QvàQ̄ra hai bitline
4 transistor → giữ bit
2 transistor → mở đường đọc / ghi
= 6 transistor
Muốn xem mạch thật? Xem cell SRAM 6T
NOT ⇄ NOT mô hình đơn giản ở trên
↓ mỗi NOT thật ra là 2 transistor (một P, một N)
2T ⇄ 2T + 2T cửa = 6 transistor
Hai cổng NOT ở trên không biến mất: mỗi cổng là hai transistor (khung xám). Hai transistor cửa chỉ mở khi wordline mở, lúc đó bitline mới ghi vào hoặc đọc ra được.
Vì sao SRAM rất nhanh?
Hãy quay lại trạng thái của cell:
Q = 1
Q̄ = 0
Hai mức này đã được mạch chủ động giữ sẵn.
Khi CPU muốn đọc, nó không phải chờ cell tạo lại dữ liệu từ đầu.
Chỉ cần:
mở cửa
↓
đọc trạng thái
Cell cũng không cần liên tục được nạp lại để tránh mất dữ liệu.
Đó là lý do có chữ Static trong:
Static Random-Access Memory — SRAM
Static ở đây có nghĩa là:
miễn là còn điện, bit có thể giữ nguyên mà không cần refresh định kỳ.
Điều này giúp SRAM có độ trễ rất thấp.
Vì vậy CPU dùng SRAM ở những nơi cần dữ liệu cực nhanh, đặc biệt là cache.
Ví dụ:
CPU
│
├── L1 cache ── SRAM
├── L2 cache ── SRAM
└── L3 cache ── SRAM
Nhưng nếu SRAM nhanh như vậy, tại sao RAM chính của máy tính không dùng SRAM luôn?
Một bit tốn sáu transistor
Đây là điểm yếu lớn nhất.
Một bit:
6 transistor
Một byte có 8 bit:
48 transistor
Một lượng bộ nhớ hàng tỷ bit sẽ cần một số lượng transistor khổng lồ chỉ để lưu dữ liệu.
Cell càng lớn:
cell lớn
↓
ít cell hơn trên một chip
↓
giá mỗi bit cao hơn
SRAM vì vậy phù hợp với bộ nhớ:
- rất nhanh
- nằm gần CPU
- dung lượng tương đối nhỏ
tức là cache.
Còn bộ nhớ chính cần một ưu tiên khác:
không cần nhanh bằng SRAM
nhưng phải chứa được
hàng tỷ bit với chi phí thấp
Muốn làm được điều đó, ta phải giảm mạnh số linh kiện dùng cho mỗi bit.
SRAM cần:
6 transistor
Nhưng có một cách khác chỉ cần:
1 transistor
+
1 tụ điện rất nhỏ
Đó là DRAM.
Và nó dùng một ý tưởng hoàn toàn khác:
Thay vì dùng transistor để liên tục giữ trạng thái, hãy nhốt một chút điện tích và coi điện tích đó là bit.
Một tụ điện nhỏ có thể giữ được 0 hoặc 1 như thế nào?