[SRAM-PIM Core Circuit] C3SRAM (Study Paper)
"C3SRAM : An In-Memory-Computing SRAM Macro Based on Robust Capacitive Coupling Computing Mechanism"
1. Introduction
현대에는 Edge Device에서 직접 AI(DCNN) 구동(= Edge Computing), but, Edge Device는 배터리나 성능의 한계 존재
→ 전력 소모가 적고 메모리를 덜 차지하는 가벼운 알고리즘과, 이 알고리즘을 빠르게 실행시켜 줄 전용 반도체 칩 개발이 중요
In-Memory Computing 방식으로 DCNN 연산을 가속하고 전력 소모를 낮출 수 있지만, Analog 혼성 신호 연산의 비이상적 특성(공정 미세 오차, 온도 변화, Noise 등)으로 인한 정확도 감소
→ HW적으로 Noise에 강한 회로 설계, SW적으로 약간의 오차가 있어도 정답을 잘 맞히는 알고리즘 필요
→ C3SRAM(Capacitive-Coupling Computing) 제안
※ DCNN : 이미지 처리에 특화되어 이미지 인식 등에 주로 쓰이는 인공지능 모델, MAC(곱셈-누적) 연산
※ Edge Computing : 데이터를 중앙 데이터 센터(Cloud)로 보내지 않고, 데이터가 생성되는 곳에서 직접 처리하는 방식
(like 스마트폰, IoT 센서, 자율주행차 등)
2. IMC Overview & Related Works
Multi-Bit Weights in IMC
· SRAM(휘발성) 소자 사용(ex. Twin-8T) : 다수의 Cell 사용
SRAM은 0/1 밖에 저장 못함 → MSB의 Tr 크기를 키워 다른 전류 양을 BL에 흘려보내 Multi-Bit 가중치 연산
→ 다수의 Cell 사용으로 면적 증가
· PCM/RRAM(비휘발성) 소자 사용 : 하나의 Cell 사용
전압을 변화시켜 Cell 하나에 저항을 나눠서 저장하여 Multi-Bit 가중치 연산
→ 공정 차이 등으로 인한 Variation과 전압에 따른 전류 변화의 Non-Linearity로 인한 오차 존재
Binary Weights in IMC
· BWN : 입력값은 Multi-bit, 가중치는 1-bit로 제한
· BNN : 입력값과 가중치 모두 1-bit로 제한 → XNOR 연산으로 표현 가능 (+1 x +1 = +1 / +1 x -1 = -1)
→ Stochatic Computing / Weight Duplication을 통해 가중치를 +/- 1이 아닌 확률적으로 표현하여 정확도 향상
※ Stochastic Computing : 시간의 흐름 속에서 1이 나오는 빈도로 값을 표현 (ex. 1 1 0 1 → 0.7)
※ Weight Duplication : 하나의 가중치를 표현하기 위해 1-bit 메모리 Cell을 병렬 연결 후 평균 계산, 평균값은 1-bit X
(ex. +1 +1 -1 +1 = 2 → 2/4 = 0.5) → Cell이 많아지면 더 정확한 가중치 사용 가능
Multi-Bit Activations in IMC (입력 데이터인 활성화 값을 입력하는 방법)
· Digital Domain : Multi-Bit 활성화 값을 1-bit씩 나눠서 계산 (Bit-Serial)
→ 정확하지만 느리고 전력 소모가 크다.
· Analog Domain : DAC를 통해 Analog 물리량으로 변환하여 계산
1) 활성화 값이 클수록 WL의 전압을 세게 걸어 입력값 표현 (ex. Twin-8T)
→ 전압을 너무 잘게 나누면(= 해상도를 높이면) 단계마다 구분이 어려워 오류가 발생하므로 해상도가 낮다.
2) 활성화 값을 PWM(Pulse Width Modulation)을 통해 시간으로 바꿔 활성화 값이 클수록 전류를 길게 흘려보냄
→ Digital 입력값에 정확히 비례하지 않는 비선형성 존재
→ Capacitor 전압이 변해도 전류를 일정하게 유지하기 위해서는 면적이 커지는 한계 존재
Compute in Current/Charge Domain (연산 방법)
· 전류 연산 방식 : 여러 Cell에 흐르는 전류를 BL에서 합치는 방식
1) 저항성 전압 분배(like XNOR-SRAM_3진 연산) : 여러 Bit-Cell이 하나의 BL에 연결되어 저항성 전압 분배기를 형성
→ 연산의 결과는 Tr 저항의 비율에 의해 결정되며 Pull-Up과 Pull-Down에 의한 전류가 평형을 이루는 전압
→ Tr은 완벽한 선형 저항 X ∴ 0/1 판별 구간에서 전압 변화가 급격해져, Digital적인 판단이 명확
→ VDD에서 GND로 전류가 직접 흐르는 경로가 생겨 전력 소모가 큰 Crowbar Current와 공정 오차에 의한 Variation 문제
2) 전류 합산·방전(like Linear Classify in Standard 6T SRAM) : BL에 흐르는 전류 합산하여 최종 결과 판단
→ Bit-Cell Replica와 Offset Current Source 등 보정을 위한 추가적인 회로로 면적 증가 문제
· 전하 연산 방식 : 전하 보존 법칙을 이용한 방식
1) 전하 공유 : 각 Bit-Cell은 Bit 곱셈 결과에 따라 충·방전 되는 개별 Capacitor 보유
→ 연산 결과를 전압이 아닌 Capacitor에 담긴 전하량으로 저장
→ 충전된 Capacitor들을 하나의 BL에 병렬로 연결하면 전하 공유로 인해 전하가 재분배되며 평균 전압이 형성되는 Analog 덧셈
→ Multi-bit 입력값이 PWM 기반 DAC에서 생성되어 공유되는 전하 자체가 전류 연산 결과, 즉, 비선형성과 보정 필요성 존재
2) Capacitive Coupling(This Work = C3SRAM) : Capacitor를 직렬로 배치해 전하를 섞지 않고 전압 변화를 유도하여 bMAC 계산
→ 전력 소모 개선과 선형성을 통한 정확도 향상
3. Architecture & Operation
Memory Array Operation
2T1C : 곱셈 연산 수행 → 연산기에 의해 면적 증가(Capacitor가 상당한 면적 차지)
MOMCAP : 금속 배선층을 이용해 만들어 Tr 위에 쌓을 수 있어 추가 면적 필요 X, but 용량이 너무 작음
MOSCAP : 단위 면적당 용량이 커서 신호 크기 확보를 위해 사용 (곱셈 결과에 따라 Capacitor를 통해 전하를 밀어내거나 당겨온다.)
R/W Address Decoder : WL을 켜서, 상단의 R/W BL Control이 BL/BLB를 통해 Weight를 넣음
WL : 메모리 R/W 할 때 한 줄씩 선택하는 신호
MWL/MWLB : Binary 입력 데이터가 들어옴
MBL : 모인 Analog 전압값을 읽어 ADC에서 Digital로 변환
input(+1) x weight(+1) = T7을 통해 VDR
input(+1) x weight(-1) = 0V
input(-1) x weight(+1) = 0V
input(-1) x weight(-1) = T8을 통해 VDR
→ input +/- 1에 따라 MWL/MWLB 선택, input 0 = 아무 변화 X
→ 입력데이터는 Ternary(삼진) 데이터이지만 연산 관점에서 시스템은 0을 제외한 유효연산이 Binary이므로 이진 연산기
→ 입력데이터는 Ternary(삼진) 데이터이지만 연산 관점에서 시스템은 0을 제외한 유효연산이 Binary이므로 이진 연산기
공정 오차로 인한 Vth 때문에 충전되는 전압이 넓은 범위에서 나타나 정확한 곱셈이 불가
Gate(Weight)와 입력이 1V인 경우, 처음 Capcitor는 0부터 1 - Vth까지 찬다. 이때, VGS = 1 - (1 - Vth) < Vth
파란 그래프)
입력이 0.8V & Low Vth인 경우, 1 - Vth여도 입력 V와 같아지고 VGS > Vth
→ 입력 전압 0.8V가 손실 없이 100% Capacitor로 전달
∴ VCore보다 낮은 VDR 사용과 Low Vth 사용으로 Vth 강하로 인한 오차를 줄여 선형성을 확보
BL 중간 전압 = 0.5 x VDR
bMAC 연산 결과는 보통 0(0.4V) 근처에 몰려있음
→ bMAC 출력이 0일 때 해당하는 전압인 Vrst를 bMAC 출력이 0일 때 해당하는 전압 근처로 설정(0.4V)
→ 연산 결과가 나왔을 때 전압이 크게 움직일 필요가 없어 전력 소모를 줄임
MWL/MWLB도 Vrst로 리셋되어 Capacitor의 양쪽 전하를 완전히 비움(왼쪽 아래 그림처럼 동일한 전압으로 리셋되어 병렬 배치)
2단계) 연산이 시작되는 단계
256개의 입력 활성화가 256개의 MWL/MWLB에 병렬로 인가
입력 +1 : MWL = Vrst → VDR(0.8V) / MWLB = Vrst → Vss(0V)
입력 -1 : MWL = Vrst → Vss(0V) / MWLB = Vrst → VDR(0.8V)
입력 0 : MWL = Vrst → Vrst / MWLB = Vrst → Vrst
Capacitor의 전압이 천천히 증가(2단계의 연두색 그래프)하는 이유 : nMOS 사용
nMOS의 Drain은 VDD, Source는 Vout(Capacitor 전압)에 연결
→ Vout이 상승할수록 Source 전압이 올라가 VGS값이 줄어들어 전류량이 감소하게 되고 이는 충전 속도에 영향
pMOS는 반대로 0V로 낮출 때 속도가 저하되고, 면적이 커지는 문제도 있다.
(3) : MBL에 형성되는 전압 (총 전하량 / 모든 Capacitance의 합)
왼쪽 그림을 통해 MOSCAP의 용량은 전압과 온도에 따라 용량이 변지만 오른쪽 그림에서 볼 수 있듯이 실제 연산 결과는 Linear하게 출력돼 큰 영향을 주지 않는 것을 확인할 수 있다.
ADC Operation
각 Column의 bMAC 출력을 11단계 Flash ADC를 통해 Digital화 한 후, 활성화 함수를 통과
각 ADC는 11단계를 구분하기 위해 10개의 Double-Sampling-Based Self-Calibrating Single-Ended Comparator로 구성
① MBL 전압이 Comparator의 입력 Capacitor에 연결 → 위쪽 Switch가 닫혀 Vx, Vy가 전선으로 직접 연결
(Memory Array Operation에서 연산이 시작되는 2단계와 동시에 시작)
② Inverter를 High-Gain 영역으로 위치시켜, 작은 전압 변화에도 출력이 민감하게 반응하도록 함
(Capacitor에는 VMBL - Vtrip만큼의 전압 차이가 저장, Inverter는 Vtrip으로 Bias)
③ 3단계에서는 Capacitor의 입력 노드가 Vref로 전환 → 위쪽 Switch가 열려, Vx, Vy가 Inverter에 의해 반전
④ VMBL과 Vref 사이의 전압 차이가 Capacitor의 충·방전을 유발 (Inverter Gate의 전압 = Vtrip + Vref - VMBL)
VMBL > Vref → Inverter 입력 < Vtrip → 출력 = High | VMBL < Vref → Inverter 입력 > Vtrip → 출력 = Low
※ Flash ADC : 입력 신호를 여러 기준 전압과 동시에 비교하여 즉시 Digital 값을 내놓는 가장 빠른 방식의 ADC
※ Self-Calibrating : Inverter를 증폭기로 쓰면 공정 편차 때문에 Vtrip이 제각각이므로 이를 스스로 보정하여 오차를 없애는 기술
※ Single-Ended : 차동 입력이 아닌 단일 입력과 기준 전압을 비교하는 구조로, 회로가 간단
Signal Switching Order
전압 초기화 단계인 1단계는 메모리에서 수행되고, ADC 평가 단계인 3단계는 ADC에서 수행되므로 동시에 수행 가능
→ 연산 오차가 발생하지 않도록 신호 순서의 정확성을 보장하기 위해 최소한의 지연 소자를 갖춘 타이밍 제어 회로 구현
→ 연산 오차가 발생하지 않도록 신호 순서의 정확성을 보장하기 위해 최소한의 지연 소자를 갖춘 타이밍 제어 회로 구현
▶ 1/3단계 → 2단계
① rst1 = Low (Vref 연결 해제)
Vref가 Floating 될 예정인 MBL Node에 전하를 주입하는 것을 막음
② rstb = High (Inverter 피드백 형성)
MBL을 연결하기 전에 Inverter의 Negative 피드백을 먼저 On
③ rst0 = High (MBL을 ADC에 연결)
MBL이 Vrst 전압으로 단단히 고정되어 있는 안전한 상태일 때 ADC 입력 Capacitor와 연결하여 Capacitor의 전하 차이 역류 방지
④ rst = Low (MBL Reset 해제 및 Floating 시작)
모든 준비가 끝난 후 Off시켜 MBL을 Floating 상태로 만들어야 WL의 Coupling 전류를 온전히 받을 수 있음
▶ 2단계 → 1/3단계
① rst0 = Low (MBL과 ADC의 연결 해제)
입력 단의 전압 변화가 역으로 MBL에 전류를 유도하는 것을 막음
+ MBL에 저장된 연산 결과가 Reset되어 날아가는 것을 방지
+ Switch를 끌 때 발생하는 Inverter 입력단 교란을 피할 수 있음
② rst = High (MBL Reset 시작) + rstb = Low (피드백 차단)
MBL 연결이 안전하게 끊어진 상태이므로 배열 Reset과 피드백 차단을 동시에 진행
③ rst1 = High (Vref 다시 연결)
마지막에 Vref를 연결하여 전하 차이가 피드백 경로를 통해 방전되는 것을 막고 정상적인 증폭 단계로 넘어감
4. Algorithm-Hardware Specification
Activation Bit Precision
→ Multi-Bit는 시간차를 두고 bit를 하나씩 입력하는 Bit-Serial 방식 사용
Multi-Bit 입력으로 학습한 BWN 모델)
DAC로 인해 복잡도가 증가하고 Noise 발생
세분화 되어 있어 약간의 전압 오차만 발생해도 계산 결과가 바뀜
1-bit 입력으로 학습한 BNN 모델)
값이 극단적이라 Noise 영향↓
→ BNN 추론 정확도 > BWN 추론 정확도
→ C3SRAM은 BNN 가속을 목표로 함
Partial Convolution Quantization Levels
전체 해상도는 0~256의 입력을 정확하게 표현해야 하므로 8-bit가 필요하지만, 8-bit ADC는 면적↑, 전력 소모↑, Latency↑
(모두 +1이면 256 / +1 x 128, -1 x 128이면 0 → 256이 나올 확률은 지극히 낮으므로 8-bit로 간주)
∴ 추론 정확도를 유지할 수 있는 선에서 bit 수를 줄여 적절한 ADC 해상도를 찾기 위한 실험 (MNIST, CIFAR-10)
※ CIFAR-10 : Color로 된 실제 사물/동물 사진 사용
→ 6개의 Convolution Layer : 이미지에서 특징(선, 모양 등)을 추출하는 단계
→ 3개의 Fully Connected : 추출된 특징을 바탕으로 판단하는 단계
640mV의 FSR(전체 전압 범위)일 때 30mV에 해당하는 Vref 간격에서 Saturation
→ ADC가 8-bit가 아닌 5-bit만 있어도 충분하다는 것을 알아냄
→ 0 근처의 데이터만 잘 읽으면 됨
오른쪽 그림은 실제로 출력되는 결과값에 해당하는 전압을 보여준다.
오른쪽 그림은 실제로 출력되는 결과값에 해당하는 전압을 보여준다.
→ +128에 해당하는 전압(약 0.55V)과 -128에 해당하는 전압(약 0.23V)의 전압 범위를 30mV 간격으로 나누면 11단계 사용
→ ADC를 4-bit만 사용하여 11단계 커버 가능
5. Measurement & Analyses
Energy & Throughput
전력 최적화를 위해 Core = 1V, WL Driver = 0.8V , ADC = 0.6V를 사용
면적 : 270μm x 300μm = 0.81mm²
GOPS : 2(ops) x 256(input) x 64(output) ÷ 20ns(1/50MHz) = 1638G ops/sec
※ ops : MAC 연산은 곱하기와 더하기로 총 2번의 Operation
*연산 밀도 : 1638 GOPS ÷ 0.81mm² = 20.2TOPS/mm²
*Efficiency : 1638 GOPS ÷ (49pJ ÷ 20ns)
가운데 그림은 전력 소비 구성을 측정한 결과이다.
· MWL/Cap Power : 실제 Analog 연산이 일어나는 Capacitor 충·방전 및 Line 구동
· ADC Power : Analog 결과를 Digital로 변환하는 ADC
· Peripheral Power : 제어 Logic 및 결과 합산
오른쪽 그림은 칩에서 차지하는 면적을 보여주며 메모리 Cell을 제외하고 ADC가 상당한 면적을 차지하는 것을 알 수 있다.
Transfer Function
bMAC값과 MBL에 걸리는 Analog 전압 사이의 관계인 Transfer Function이 Linear 해야 ADC가 데이터를 정확하게 읽을 수 있다.
Transfer Function을 구하는 방법은 다음과 같다.
모든 가중치를 0으로 설정하여 고정시킨 후, 원하는 bMAC 출력값이 나오도록 입력 데이터를 인가하여 MBL에 확정적인 전압 출력
→ 정밀한 전압을 측정하기 위해 하나의 Comparator만 사용
→ 나머지 Comparator들의 기준 전압을 공급 전압보다 높게 설정하여 켜지지 않도록 함
→ Vref를 sweep하여 Comparator의 출력 결과값이 Flip되는 지점의 전압을 찾는다.※ Sweep : 낮은 전압부터 연속적으로 변경
위 그림은 Flash ADC에서 병렬로 연결된 다른 Comparator의 Capacitor와 MBL 금속 배선 자체가 가지는 Capacitor로 인해 실제 FSR(전압 변동폭)이 줄었지만 선형적인 것을 보여주므로 ADC가 데이터를 정확하게 읽을 수 있음을 의미한다.
Variability Measurement
이상적인 Comparator는 입력 차이가 0V일 때 출력이 바뀌어야 하지만, 공정 오차로 인해 약간의 전압차이가 있어야 바뀐다. 이 값이 클수록 ADC의 정확도가 떨어진다.
Offset 발생 원인
1) 전하 누설 : ADC도중, 입력 Capacitor의 연결을 끊고 기준 전압으로 연결을 바꾸는 Capacitor Input Switching 순간 많이 발생
2) Noise
3) 공정 오차로 인한 소자 불일치 : Input Switching 후, 신호를 증폭하는 Inverter들끼리 서로 다른 Vth로 인한 발생
전하 누설이나 Noise가 VMBL과 Vref 차이보다 크면, Comparator 출력이 손상될 수 있다.
오른쪽 그림은 ADC 전압을 바꿀 때 생기는 전력-전압 Tradeoff를 보여준다.
ADC 전압이 낮을수록 Gain↑ & Inverter1이 Long Channel을 사용할수록 Gain↑
→ ADC를 고속·고전압으로 설계할 필요 X
→ bMAC값 범위인 -120~+120에서 공정 오차로 인한 VMBL 값은 0.91~1.77mV로 매우 작다. (그림은 ADC Offset 포함)
(c) 전체 오차
앞서 설명한 오차 + Unary-to-Binary 변환 과정에서 발생하는 Bubble Error(제안한 칩에는 Bubble Error 정정 회로 X)
Evaluation on Neural Network Tasks
3x3x256 : 3x3 필터가 있고 필터 1개 당 256개의 값 존재
→ (1x1x256)x9 : (bMAC 결과가 ADC를 통해 Digital로 변환)x9를 더해서 1개의 출력값 생성
6. Conclusion
IMC는 병렬 처리가 가능하여 연산이 빠르고, Analog를 통한 연산과 데이터 이동 불필요로 인해 전력 소모가 낮다.
But, Analog는 공정 오차와 Noise에 취약하여 연산 결과 오류를 유발할 수 있다.
C3SRAM은 다음과 같은 특징으로 효율이 높고 계산의 정확도가 높다.
1) 입력 데이터와 가중치를 1-bit로 사용하여 Noise에 강함(Multi-Bit 입력은 Bit-Serial 방식)
2) 변동성이 큰 Tr 대신 변동성이 작은 Capacitor 사용으로 공정 오차 줄임
3) LVT Tr 소자 사용과 구동 전압을 Core 전압 보다 낮춰 Capacitor에 충전되는 전압 오차를 줄임
4) Flash ADC를 사용하여 면적과 전력 소모를 줄이고 저해상도로도 높은 정확도를 유지
5) Module 방식으로 대규모 신경망을 Mapping할 수 있도록 확장 가능
6) 8T1C 구조로 면적 증가
7) Binary 연산에 특화되어 Multi-Bit 입력 데이터 처리 시 Cycle 반복으로 인한 시간 지연과 Energy 소모 증가
7. Thinking
Standard 6T SRAM을 사용하는 In-Memory Computation 방식과 무엇이 다를까?
Standard 6T SRAM IMC : 여러 개의 WL을 동시에 켜서 메모리 Cell에 저장된 데이터(0/1)에 따라 BL으로 흐르는 전류의 총합을 측정해 MAC 연산 결과를 알아낸다. (Transistor를 저항처럼 써서 전류를 합산)
C3SRAM IMC : 전류를 흘려보내지 않고, 메모리 Cell에 연결된 Capacitor들을 통해 전하를 공유하거나 재분배한다.
→ 전하량 보존 법칙에 의해 전압이 변하고, 이 전압의 변화량을 읽어서 계산한다.
Standard 6T SRAM IMC처럼 전류가 계속 흐르는 것이 아니라 전압이 바뀔 때만 에너지를 쓰므로 전력 효율이 전력 효율이 좋다.
Capacitor는 Transistor보다 훨씬 선형적이여서 비이상성 자체가 전류 방식 보다 적다.
Flash ADC 동작 원리 [전압 비교(Comparation) → Digital 변환(Thermometer-to-Binary) → 최종 합산(Accumulation)]
Example) 입력 전압 100mV
1) 30mV 비교기 : 1 / 60mV 비교기 : 1 / 90mV 비교기 : 1 / 120mV 비교기 : 0 / …
2) '1'의 개수는 3개 → 0011
3) 각 열의 4-bit Digital 값들이 Digital Peripheral(주변 회로)로 보내져서 최종적으로 모두 합산
Flash ADC를 사용하는 이유
C3SRAM은 BNN 가속기이며, 신경망 연산 특성상 결과값이 아주 정밀할 필요 X
→ 해상도가 낮아도 되니, 무조건 빠르고, 작게 만들어야 함
→ 결과값이 11단계가 아니고, 많은 단계가 나와야 하는 고정밀 연산의 경우 Flash ADC는 감당 불가
256x256 정사각형 행렬이 아닌 이유
→ 256개의 정보가 64개의 특징 값으로 압축 또는 변형(신경망 층 사이에서 차원을 바꿈)
→ 정사각형 행렬이면 256개의 ADC를 추가해야 함 (비효율적)
꼭 Long-Channel Inverter를 사용해야 할까?
1) Cascode : 0.6V 전압이라 Tr를 2~3 개 쌓을 전압 여유가 X
2) Differential Amplifier : Long-Channel Inverter보다 더 큰 면적 증가
3) Multi-Stage : Delay도 길어지고, 피드백 Loop 구성 시 위험이 있어 보상 Capacitor 필요로 면적 증가
※ Multi-Stage : Inveter 여러 개를 직렬로 연결하여 Gain을 곱함
∴ 0.6V의 낮은 전압에서 SRAM Cell 안에 들어갈 만큼 단순한 회로로 충분한 Gain을 확보 → Long-Channel Inverter가 가장 효율적
Pixel 크기
스마트폰 사진 : 약 4032x3024 / FHD : 1920x1080 / 4K : 3840x2160
→ Down-Sizing & Tiling(Splitting)으로 처리
8. Reference
"C3SRAM : An In-Memory-Computing SRAM Macro Based on Robust Capacitive Coupling Computing Mechanism"
댓글
댓글 쓰기