DAC — SAR + ISPP
Sayıdan voltaja, sonra hücreye — SIDRA programlama zincirinin başlangıcı.
Önkoşul
Bu bölümde öğreneceklerin
- DAC'ın temel rolünü ve SIDRA'da neden 8-bit yeterli olduğunu söyle
- SAR (Successive Approximation Register) DAC mimarisini açıkla
- ISPP algoritmasını adım adım pseudocode olarak yaz
- DAC'ın enerji ve alan bütçesini Y1 için hesapla
- Programlama vs okuma DAC'larının farkını anla
Açılış: Dijital Niyet, Analog Voltaj
SIDRA crossbar analog dünyada çalışır: Ohm yasası, Kirchhoff, voltaj ve akım. Ama yazılım dijital: bit, byte, integer. İkisi arasındaki köprü DAC (Digital-to-Analog Converter).
Y1’de iki DAC kullanımı var:
- Read DAC: inference sırasında her satıra giriş voltajı (8-bit input → 0-0.5 V).
- Programlama DAC: her hücreyi 256 seviyeden birine yazmak için ISPP voltajı (8-bit weight → SET pulse).
Yanlış bir DAC çıkışı tüm MVM’i bozar. Bu bölüm Y1 DAC tasarımı ve ISPP (Incremental Step Pulse Programming) algoritmasını detaylar.
Sezgi: Dijitali Voltaja Çevirme
DAC tek görev: 8-bit sayı (0-255) → analog voltaj (0-V_max).
Basit yaklaşım — bölünmüş referans:
256 farklı voltaj seviyesi sağlamak için:
- Voltaj referans (V_ref = 0.5 V) bir direnç dizisinden geçer.
- 256 seviyede tap (0, V_ref/256, 2V_ref/256, …, V_ref).
- Multiplexer 8-bit input’a göre doğru tap’ı seçer.
Sayılar:
- Adım: V_ref / 256 = 1.95 mV.
- Hassasiyet: ±LSB/2 = ±0.97 mV.
- 8-bit DAC ~256 seviye = SIDRA hücre kuantizasyonuna eş.
Gerçek tasarım — daha karmaşık:
256 direnç + 256:1 MUX → çok büyük alan. Pratik tasarım: kapasitor-tabanlı SAR DAC veya R-2R ladder:
- R-2R ladder: sadece 2 direnç değeri (R, 2R), 16 direnç 8-bit için. Kompakt.
- Kapasitör SAR: 256 birim kapasitör, binary-weighted.
- Hibrit: 6-bit MSB + 2-bit LSB ayrı yapıyla.
SIDRA Y1’de R-2R ladder + buffer kullanılır (alan + güç dengesi).
ISPP nedir?
Hücreyi tam istediğin G değerine programlamak için tek pulse yetmez (gürültü, varyasyon). Iteratif yaklaşım:
- Düşük voltaj pulse uygula.
- Hücreyi oku (G_actual ölç).
- Hata varsa: pulse genişliği veya voltajını artır, tekrar.
- G_target ± tolerans aralığında bittiğinde dur.
5-15 iterasyon → 256 seviye için %1 hassasiyet.
Formalizm: SAR DAC ve ISPP Algoritması
SAR DAC (Successive Approximation Register):
Aslında bir ADC tekniği, ama “ters çevrilmiş” → DAC. 8-bit SAR DAC:
input: 8-bit sayı n (0-255)
V_ref = 0.5 V
output: V_out = (n / 256) × V_refR-2R ladder yapısı:
V_ref
|
R────R────R────R───... (8 R, MSB → LSB)
| | | |
2R 2R 2R 2R
| | | |
b_7 b_6 b_5 ... b_0
↓ ↓ ↓ ↓
←── output (V_out)Her bit (b_i) açık/kapalı: V_ref/2^(i+1) katkısı.
V_out = V_ref × (b_7/2 + b_6/4 + b_5/8 + … + b_0/256).
Pratik enerji:
- Birim direnç: ~10 kΩ.
- DAC akımı: V_ref / R = 50 µA.
- DAC enerjisi/conversion: 50 µA × 0.5 V × 10 ns = 0.25 pJ.
Y1: 256 DAC × 0.25 pJ = 64 pJ per CU MVM. Toplam Y1 1.6M DAC × 50M conv/s × 0.25 pJ = ~20 W. TDP’yi aşar!
Çözüm: DAC sadece aktif satırlarda çalıştırılır (sparsity). Aktivite %30 → 6 W. Hâlâ çok. Daha basit DAC (4-bit + dither) → 0.05 pJ. Y1 hibrit yaklaşım.
ISPP algoritması (pseudocode):
def ispp(cell, target_G, tolerance=1e-6):
pulse_voltage = 1.0 # V (başlangıç)
pulse_width = 10e-9 # 10 ns
max_iterations = 15
for i in range(max_iterations):
# SET pulse uygula
apply_pulse(cell, voltage=pulse_voltage, width=pulse_width)
# Oku
G_actual = read_cell(cell)
error = target_G - G_actual
if abs(error) < tolerance:
return success
if error > 0: # daha fazla SET gerekli
pulse_voltage += 0.05 # küçük artış
pulse_width *= 1.2 # %20 artır
else: # aştık → kısmi RESET
pulse_voltage = -0.5 # negatif (RESET)
pulse_width = 5e-9 # küçük
return failureTipik iterasyon: 5-15. Her iterasyon ~50 ns (pulse + read). Toplam: 250 ns - 750 ns/cell.
Crossbar paralel programlama:
Aynı satırdaki 256 hücre paralel programlanabilir mi? Hayır — aynı WL voltajı tüm hücrelere uygulanır, ama farklı hücreler farklı G_target’a ihtiyaç duyar. Her hücre ayrı ayrı pulse genişliği gerekebilir.
Strateji:
- WL pulse: paralel (256 hücre aynı voltaj).
- BL kontrolü: her hücre için ayrı (her sütun ayrı transistör kapısı).
- Sonuç: 256 hücre aynı anda aynı pulse alır, ama hangi hücrenin “alacağını” BL transistör seçer.
Programlama sırası:
- En düşük G_target hücreden en yüksek G_target’e doğru.
- Her döngüde: pulse → 256 hücre okuma → hata kontrol → tekrar.
Süre: 256 hücre × ~5 iterasyon × 50 ns = 64 µs/satır. Tüm 256 satır × 64 µs = 16 ms/crossbar. Y1 6400 crossbar × 16 ms = 100 sn? Hayır, paralel cluster → ~5-10 saniye. Bir kez yapılır (model yükleme).
DAC hassasiyet ve doğrusallık:
DAC çıkışında iki hata türü:
- Diferansiyel doğrusallık (DNL): ardışık iki seviye arası fark sapması. İdeal: ±0.5 LSB.
- Bütünsel doğrusallık (INL): ideal düz çizgiden sapma. İdeal: ±1 LSB.
SIDRA Y1 DAC tipik:
- DNL: ±0.5 LSB (iyi).
- INL: ±1.5 LSB (orta).
INL kötüleşirse → bazı seviyeler arası fark büyür → MVM doğruluk düşer.
Termal etkiler:
DAC referans voltajı V_ref sıcaklığa duyarlı. Her 1°C → 100 ppm sapma. -25°C ile 85°C arası → 110°C × 100 ppm = %1.1 sapma.
Çözüm: Bandgap voltage reference (V_BG) — sıcaklığa karşı çok stabil (~10 ppm/°C). SIDRA Y1 her cluster’da 4 bandgap referansı.
Programlama vs okuma DAC farkları:
| Özellik | Read DAC | Program DAC |
|---|---|---|
| Voltaj aralığı | 0-0.5 V | -2 V ile +2 V |
| Hassasiyet | 8-bit | 8-bit (ama ISPP iteratif) |
| Hız | 10 ns | 100 ns/pulse |
| Sayı (Y1) | 1.6M (CU başı 256) | Daha az (paylaşılan) |
| Enerji | 0.25 pJ/conv | 5 pJ/pulse |
Programlama DAC’ları daha az çünkü sadece program-time gerekir, paylaşılır. Bir Cluster’da ortak.
ISPP ile %1 doğruluk:
Her hücreden farklı tepki → önce kalibrasyon. ISPP başlamadan:
- Test pulse uygula → R_initial ölç.
- R_initial → Pulse-G eğrisi tahmin (her hücre için ayrı).
- ISPP target’ı bu eğriye göre ayarla.
Sonuç: hücre-hücre varyasyon %5 → ISPP sonrası %1.
Ömür etkisi:
Her ISPP cycle hücre yorgunluğuna katkı. 15 iterasyon = 15 SET. Endurance 10⁶ → ISPP-sonrası ~67K kez yeniden programlanabilir. Inference için fazlasıyla yeter.
Modern alternatifler:
- Closed-loop SET: pulse sürerken in-situ ölç. Daha hızlı ama daha karmaşık.
- Multi-shot programming: birden çok küçük pulse parallel.
- Stochastic programming: rastgele pulse + filter.
SIDRA Y1 klasik ISPP. Y10+ hedefi closed-loop.
Deney: ISPP ile 50 µS Hedef
Bir hücreyi G_target = 50 µS’e programla. Toleransı ±1 µS.
İterasyon 0: G_initial = 5 µS (HRS).
İterasyon 1: Pulse 1.0 V, 10 ns. → G_1 = 28 µS. Hata: -22 µS.
İterasyon 2: Pulse 1.05 V, 12 ns. → G_2 = 41 µS. Hata: -9 µS.
İterasyon 3: Pulse 1.1 V, 14 ns. → G_3 = 49 µS. Hata: -1 µS. Başarılı!
3 iterasyon × 50 ns = 150 ns toplam.
Eğer aştıysak (G_actual = 55):
İterasyon 4: Negatif pulse -0.5 V, 5 ns. → G_4 = 49.5 µS. Başarılı.
Toplam pratik: 3-7 iterasyon, ~150-350 ns.
Tüm crossbar (65K hücre):
- Her hücre 5 iterasyon ortalaması.
- Aynı satır 256 hücre paralel ama her hücre farklı target → BL kontrol ile sıralı.
- 256 satır × 5 iterasyon × 50 ns = 64 µs/satır × 256 = 16 ms/crossbar.
- Y1 paralel 16 cluster → 1 ms/cluster ortalama.
- Toplam Y1 model yükleme: ~640 ms.
Bir kez yapılır (model yüklendikten sonra non-volatile, kalıcı).
Kısa Sınav
Laboratuvar Görevi
SIDRA Y1 DAC enerji bütçesi optimizasyonu.
Y1 DAC:
- 1.6M DAC adet (her CU 256 read DAC).
- Her DAC: 0.25 pJ/conversion.
- Conversion rate: 50M MVM/s.
Toplam DAC enerjisi: 1.6 × 10⁶ × 50 × 10⁶ × 0.25 × 10⁻¹² = 20 W.
TDP 3W’ı aşar! Sorun.
Sorular:
(a) Aktivite faktörü 30% ile DAC enerjisi? (b) DAC bit derinliğini 8 → 4 bit + dither düşürürsek? (c) DAC sayısını yarıya indirirsek (paylaşılan)? Performans etkisi? (d) Y10 hedefi: TDC ile DAC bypass. Toplam tasarruf? (e) Y1 final pratik DAC enerji tahmini?
Çözümler
(a) 20 W × 0.30 = 6 W. Hâlâ TDP’nin 2 katı.
(b) 4-bit DAC: 16 seviye, 0.05 pJ/conv (4× az). 16 seviye INT4 inference için yeterli (modern AI). Toplam: 6 W × 0.20 = 1.2 W. Pratik.
(c) DAC paylaşımı (her 2 satır bir DAC). Yarı sayı = 800K DAC. Enerji: 0.6 W. Ama: aynı anda paralel okunamaz → MVM süresi 2× artar (15 ns → 30 ns). Throughput yarıya iner.
(d) TDC alternatifi (Modül 5.6): zaman alanında okuma → ADC bypass + DAC basitleşir. Tahmin: %50 enerji tasarruf. Y10’da DAC katkısı ~0.3 W.
(e) Y1 final tahmin: 4-bit dither + sparsity + paylaşım ile ~0.8 W DAC payı. TDP içinde. Y10’da ~0.2 W (TDC + 7 nm).
Ders: Analog AI çiplerinde ADC/DAC alan + güç dominant. Y1 tasarımı bu sınırlarla yapılır; Y10+ TDC ile aşılır.
Özet Kart
- DAC: dijital sayı → analog voltaj. Crossbar girişine.
- Y1 DAC: 8-bit, R-2R ladder, 0-0.5 V, 0.25 pJ/conversion.
- ISPP: iteratif programlama. Pulse → ölç → ayarla → tekrar. 5-15 iterasyon, %1 hassasiyet.
- Programlama vs read DAC: voltaj aralığı, sıklık, sayı farklı.
- Y1 model yükleme: ~640 ms. Bir kez, sonra non-volatile.
- Enerji bütçesi: DAC tek başına 20 W (worst case) → optimizasyonla 0.8 W (sparsity + dither).
Vizyon: DAC'ın Ötesi — Sigma-Delta ve Direkt Spike
Geleneksel SAR DAC analog AI çiplerin “dolduran” elemanı. Yeni mimariler:
- Y1 (bugün): R-2R ladder DAC, 8-bit. Standart yaklaşım.
- Y3 (2027): Sigma-Delta DAC — gürültü-formgiving ile etkin 12-bit (alanı düşür).
- Y10 (2029): TDC (Time-to-Digital) okuma → DAC bypass. Voltaj zaman olarak kodlanır.
- Y100 (2031+): Doğrudan spike-encoding. Giriş = spike treni → DAC yok. Bio-uyumlu.
- Y1000 (uzun vade): Optik DAC — fotonik dalga kılavuzunda intensite encoding.
Türkiye için anlam: Karma-sinyal devre tasarımı (DAC, ADC) yarı iletken endüstrisinin “olgun” tarafı. Türkiye’de TÜBİTAK BİLGEM, ASELSAN gibi merkezler bu konuda güçlü. SIDRA bu birikimi nöromorfik AI’ya akıtır.
Beklenmedik: Bütüncül DAC-yok mimarisi. Spike-based encoding ile DAC tamamen ortadan kalkar. SIDRA Y100 bu yöne adım. Saat-driven dijital değil, olay-driven analog hesap.
Daha İleri
- Bir sonraki bölüm: 5.6 — TDC: Zaman-Alanlı Okuma
- Önceki: 5.4 — YILDIRIM Çip Mimarisi
- DAC tasarım klasik: Razavi, Design of Analog CMOS Integrated Circuits, Bölüm 12.
- SAR architecture: Wikipedia “Successive Approximation ADC”.
- ISPP for memristor: Kim et al., Programming algorithms for multilevel-cell phase-change memory, ASP-DAC 2014.
- Sigma-Delta DAC: Schreier & Temes, Understanding Delta-Sigma Data Converters, 2nd ed.