[SRAM-PIM Core Circuit] Low-Power CNN-SRAM (Study Paper)

"CONV-SRAM : An Energy-Efficient SRAM With In-Memory Dot-Product Computation for Low-Power Convolutional Neural Networks"

1. Introduction

현대에는 Edge Device에서 직접 AI/ML(like 음성/안면 인식) 구동(= Edge Computing)
※ Edge Computing : 데이터를 중앙 데이터 센터(Cloud)로 보내지 않고, 데이터가 생성되는 곳에서 직접 처리하는 방식
      (like 스마트폰, IoT 센서, 자율주행차 등)

장점)
① Latency↓ : Edge Device 자체에서 의사 결정
② Bandwidth 효율↑ : 필요 없는 정보는 걸러내고 중요한 정보만 전송하여 "Cloud"로 향하는 통신 트래픽 감소
③ 보안↑ : 민감한 정보를 "Cloud"로 전송 X

단점)
① 배터리 한계로 인해 저전력 설계 필수
② 많은 응용 분야(like 자율주행차)에서 실용성을 확보하기 위해 Edge Device의 의사 결정이 실시간으로 이뤄져야 함

폰 노이만 구조 : Weight와 부분합 데이터의 이동 과정에서 많은 전력 소모
IMC 구조 : 내부 연산 수행으로 데이터 이동 전력 소모↓

이미지 분류, 음성 인식 등을 수행하는 CNN을 BWN 알고리즘, 10T SRAM을 통한 IMC 방식으로 저전력 연산을 하는 것이 목표
※ BWN : 입력 데이터 = Multi-Bit / Weight = 1-bit

2. Concept of SRAM-Embedded Computation

(1) : CNN 연산은 3차원 입력과 Weight의 내적
(2) : 계산하기 쉽도록 3D → 1D 평탄화
(3a) : Binary Weight를 사용, α(k번째 필터의 공통 계수) = 크기 조절을 위한 Scaling Factor
(3b) : α → 정수의 비(M/N)로 근사
(4) : M = 분리하여 Digital 영역에서 한 번에 처리 → 1/N = 평균을 구하는 연산 (Xin = 1-bit 부호를 포함한 7-bit 데이터)
(5) : 전력 소모 감소를 위해 Analog Domain에서 계산(평균 전압을 구하는 회로 동작)

Weight를 Binary로 단순화
→ 입력 데이터를 DAC를 통해 Analog로 변환
→ 전압 x Weight 수행 후, 평균 전압 생성
→ ADC를 통해 Digital로 변환
**HW 용량(N) < 3D 크기 → 여러 번 나누어(Time-Multiplexing) 수행한 후 Digital적으로 합산

3. Overall Architecture

CSRAM은 16개의 Local SRAM Array로 구성되며, 각 Local Array는 16x64개의 10T SRAM Bit-Cell로 구성 (16x16x64=256x64)
각 Bit-Cell 안에 Weight가 저장 (+1 → 0 / -1 → 1)
각 Local Array의 16개 행은 하나의 Analog 평균 계산 회로와 하나의 ADC를 공유
Digital 값인 64개의 입력 데이터 값은 열 방향의 DAC로 입력되어 Analog 전압으로 변환되어 계산
GRBL은 모든 Local Array에 공유되어 모든 Local Array가 같은 64개의 입력 데이터를 계산
∴ CSRAM은 최대 64개의 Convolution 입력을 처리하고, 16개의 Convolution 출력을 병렬로 계산 가능(∵ 16개의 Local Array)

※ 10T SRAM : 일반적인 6T Bit-Cell과 2개의 분리된 읽기 port로 구성
→ 연산/읽기를 수행할 때 저장된 데이터가 흔들리지 않도록 저장 노드와 읽기 라인을 분리(Analog 연산 시 데이터 안정성 보장)

2개의 Convolution Layer와 2개의 FC Layer로 구성된 LeNet-5 CNN을 사용하여 MNIST 실험을 진행
입력 → C1 → S2 → C3 → S4 → F5 → F6 → 출력 (C : Convolution / S : Sub-Sampling / F : Fully Connected)

입·출력 데이터의 bit) 그림 (a)
입·출력 데이터를 8-bit → 4-bit로 변화 시, DAC/ADC Cost↓ (빨간색 그래프)
But, 7-bit 미만에서는 Error Rate가 급격하게 ↑ (파란색 그래프)
∴ DAC/ADC 회로의 목표 bit 폭을 7-bit로 선택
    → 7-bit 중 1-bit는 부호이므로 데이터 크기를 나타내는 것은 6-bit
    → 26 = 64단계이므로 약 15.6mV 단위로 전압을 구분(1V = 반도체 동작 전압, 15.6mV = 1V/64)

평균화 계수 N) 그림 (b)
평균화 계수 N이 클수록 한 번에 처리하는 데이터의 양 증가 = ADC 하나가 처리하는 데이터의 양↑
→ ADC Cost↓ (노란색 그래프)
But, 평균화 계수가 너무 크면 많은 값을 양자화하여 개별 값들이 세밀한 정보가 사라져 정확도↓ (하늘색, 빨간색, 초록색 그래프)
∴ N=64로 설정하면 LeNet-5의 필터 크기는 5x5이므로, 필터 2세트를 처리하고도 여유가 있으며 Error Rate도 허용 범위 이내
(50개를 처리하고 남은 공간은 쓰레기 값이 섞이지 않도록 입력을 0으로 설정 ∵ Weight = +/- 1만 가능)

Local Array당 행의 수)
Local Array당 행의 수가 많을수록 하나의 연산 회로를 더 많은 행들이 공유하게 되어 행 1개당 차지하는 회로 면적↓
Local Array당 행의 수가 많을수록 CLBL
→ 오차가 있어도 Capacitance가 증가하여 출력이 안정적 = 정확도↑
But, 각 Local Array의 크기↑ = 총 Local Array의 개수↓ = 출력 결과의 개수↓ & 높은 Capacitance = 충·방전에 큰 에너지 소모
∴ Tradeoff로 행의 수를 16개로 선택

4. Key Contributions of This Paper

1) Vth Variation에 대해 안정적
SRAM Bit-Cell은 집적도를 높이기 위해 작은 Tr 사용 → 소자가 작을수록 공정 오차 영향 ↑
기존) Cell 전류를 사용하여 Analog 전압 변조 → 그림의 왼쪽에서 볼 수 있듯이 표준 편차가 평균의 30%에 해당하여 정확도↓
      ① AdaBoost 알고리즘을 사용하여 여러 번 연산한 후 합쳐 정확도 향상 → 연산 수 & 전력 소모↑
      ② 칩마다 개별적으로 학습 → 양산 관점에서 비용과 시간↑
제안) 64개의 Digital 입력을 Analog로 바꾸는 Global DAC 사용 & Bit-Cell이 Digital Switch 역할
      ① DAC는 Cell 외부에 있어 Tr를 크게 만들 수 있고 256개의 행이 공유하므로 면적 부담↓
      ② Bit-Cell이 전압을 조절하는 것이 아니라 통과/0V를 결정하는 Digital Switch 역할만 하므로 정밀도 필요 X = 공정 오차 영향 X

2) Dynamic Voltage Range 개선
Analog 연산에서 전압 범위가 넓을수록 Signal Noise Ratio가 좋아져 정확도↑
기존)
① 일반적인 6T SRAM에서 여러 행을 동시에 열면 BL 전압이 의도치 않게 낮아져 데이터가 없어짐
    (데이터가 날아가는 것을 막으려면 BL 전압의 범위를 좁게 제한 → 연산 정확도↓)
② 6T SRAM은 R/W 안정성을 위해 Tr 비율을 맞춰야 함 → 사용 가능한 최소 Tr 크기의 한계 존재
③ 6T SRAM의 낮은 정확도를 보상하기 위해 더 크고 복잡한 AI 모델 필요 → 메모리가 더 많이 필요
제안)
① R/W Port를 분리한 10T SRAM을 사용하여 저장된 데이터 보호 & 각 Bit-Cell은 BL을 공유하지 않고 병렬로 독립적으로 읽힘
    (넓은 전압 범위를 활용 가능 → 연산 정확도↑)
② 10T SRAM은 R/W 분리 → 최소 Tr 크기 마음대로 사용 가능

3) 내재된 Capacitor 사용
기존) 연산을 위해 별도의 Capacitor 사용 → 면적↑
제안) 원래 BL이 가지고 있는 Parasitic Capacitor를 그대로 사용 → 면적 유지

4) Multi-Bit 해상도 지원
bit 수가 높을수록(=정밀할수록) AI 모델의 정확도↑
기존) 입력 또는 출력이 1-bit인 단순한 연산만 가능
제안) Multi-Bit 입·출력을 사용하여 정밀한 값을 처리 가능

**위와 같은 장점들 덕분에 여러 CSRAM Array가 병렬로 작동하여 더 큰 NN을 실행할 수 있어 거대한 AI 연산도 수행 가능

5. Circuits for The Three-Phase CONV-SRAM Operation

Phase-1 : DAC
1) 기본 기능 및 목적
Digital 입력 데이터를 Analog 전압으로 변환하여 SRAM의 GRBL과 Local BL에 미리 충전
64개의 DAC가 동시에 작동하며, 변환된 전압은 16개의 Local Array에 공유
→ CNN에서 하나의 입력이 여러 필터(서로 다른 Weight)에 동시에 쓰이는 특성을 HW로 구현

2) 회로 동작 원리 (시간 기반 충전)
정전류원(Cascode pMOS)을 사용해 BL을 충전
Digital 입력 데이터 크기에 비례하여 충전하는 시간을 조절하는 방식(PWM)을 사용 (전류가 일정하므로 충전 시간 ∝ 전압)

3) 2단계 충전 Architecture (Timing 제어 방식)
64단계의 시간을 표현하기 위해 64:1 MUX를 사용하면 면적 증가 → 8:1 MUX 하나만 사용하여 두 번에 나누어 충전
1단계 : 입력의 상의 3-bit를 이용해 대략적인 긴 시간을 충전
2단계 : 입력의 하위 3-bit를 이용해 미세한 시간을 추가 충전

4) 장점
높은 선형성 : 여러 개의 다른 소자를 on/off 하는 기존과 달리, 하나의 Tr 스택으로 시간만 조절하여 충전
→ 전압이 입력값에 정확히 비례
소자 불일치 최소화 : 모든 입력 코드에 대해 같은 소자를 사용하므로 Tr 성능 차이에 따른 오차↓

5) 보정
공정 오차 또는 온도 변화에 대응하기 위해 초기에 한 번 최대 전압 보정을 수행
최대 입력값을 넣었을 때 목표 전압(Vref)에 도달하는지 확인 후, 도달할 때까지 구동 전류를 조금씩 조절하여 정확도를 맞춤

Phase-2 : Multiply & Average
1) 핵심 기능 (MAV : Multiply-and-Average)
Phase-1에서 충전된 Analog 입력 전압과 SRAM Cell에 저장된 1-bit Weight를 곱하고, 해당 결과들의 평균을 구함
16개의 Local Array가 동시에 작동하여 서로 다른 필터 연산을 한 번에 처리

2) 곱셈 구현 원리 (선택적 방전)
① Phase-1에서 이미 Analog 입력 전압으로 충전된 BL
② 저장된 Weight에 따라 BL/BLB 중 하나만 0V로 방전
③ 방전 후 BL/BLB의 전압 차이 = 곱셈의 결과

3) 평균화 및 부호 처리 (전하 공유)
① 곱셈이 끝난 BL들을 수평으로 서로 연결하여 전하를 공유시킴으로써 평균화 진행 → 전압의 평균값 생성
② 입력 데이터의 부호에 따라 Switch를 제어하여, 최종 전압을 양수/음수 레일로 각각 나누어 보내어 부호를 분리
③ 두 레일의 차이가 최종 연산 결과

4) 회로적 장점
Noise : Fully Differential 구조를 사용하여 Switching Noise나 공정 편차와 같은 Noise를 효과적으로 제거
고속 동작 : 위 그림과 같이 BL 방전 시간이 전체 Clock 주기에 비해 매우 짧음 → Tr 성능 편차가 연산 속도에 큰 영향 X

Phase-3 : ADC
1) ADC Architecture (직렬 적분형 ADC)
일반적인 고속 ADC(Flash, SAR 등)는 면적이 크거나 전력을 많이 소모하여 메모리 내부에 수없이 복제하기 어려움
위 그림과 같이 Deep Learning 연산 결과는 대부분 '0' 근처의 작은 값을 가짐
→ 값이 작으면 변환 시간이 짧게 걸린다는 점을 이용해, 구조가 간단하고 전력을 적게 쓰는 직렬 적분형 ADC 사용

2) 회로 동작 원리 (전하 공유 및 Counting)
전하 공유 적분기(CSH Integrator), 감지 증폭기(SA), Logic Block으로 구성
① 두 입력 전압을 비교하여 어느 쪽이 큰지 판별
② 더 낮은 쪽 전압을 기준 BL을 이용해 조금씩 전압을 올림 (기준 BL은 실제 BL과 동일한 특성을 갖도록 설계하여 공정 오차↓)
③ 낮은 전압이 높은 전압을 넘어설 때까지 몇 번 단계를 거쳤는지 Count → Count 값이 곧 Digital 결과

3) 2 Cycle Offset Cancellation
회로 공정상 발생하는 Offset 전압이 결과의 정확도를 떨어뜨림 → 연산을 2번 나누어 수행하여 오차를 수학적으로 상쇄
① 첫 번째 Cycle : 정상 입력으로 측정 → (신호 - 오차) 측정
② 두 번째 Cycle : 입력을 뒤집어서(Flipping MUX) 측정 → (-신호 - 오차) 측정 = (신호 + 오차)
③ 두 결과를 더하면 (신) x 2 → 오차 성분 사라짐

6. Measured Results

주변 회로를 포함한 Bit-Cell Array : CSRAM 면적의 73.1%
GBLDAC : CSRAM 면적의 8.2%
Local MAV 회로 : CSRAM 면적의 8.6%
CSHADC : CSRAM 면적의 7.3%
Global Timing 회로 : 나머지 면적

Circuit Characterizations
  1) GBL DAC : Global Bitline DAC
▶ 해상도
입력 Digital Code에 따른 Analog 출력 전압의 변화를 표현
6-bit GBL DAC로 설계했으나, 실제 측정 시 Noise, 공정 오차 등으로 인해 정확하게 구분 가능한 성능은 5-bit 수준
∴ 마지막 1-bit의 정밀도를 신뢰할 수 없으므로, "0"으로 설정하여 5-bit처럼 사용

▶ 선형성
DNL < 1 LSB로 우수한 선형성 = 출력이 매우 균일하고 정확

▶ 동작 조건
DAC 내부의 pMOS를 포화영역에서 동작시키기 위해 공급 전압을 1.2V로 설정
최대 입력 코드(Xin = 31)일 때 출력이 1V가 되도록 초기 보정 수행

▶ 측정의 한계
전압을 읽는 감지 증폭기가 nMOS 입력 방식을 사용하여 낮은 전압(약 0.5V 이하)은 정확히 측정 불가

  2) CSH ADC : 전하 공유 ADC
▶ 균일성
ADC가 Tr이 아닌 Capacitor의 비율을 이용해 동작하기 때문에 선형성이 좋고 출력 값의 편차 낮음

▶ 에너지 효율
입·출력 값의 크기에 비례하여 에너지가 선형적으로 증가 (적분형 ADC의 특징)

▶ 동작 환경
250MHz 속도로 동작하며, Noise 감소를 위해 메모리 Array 전압은 0.8V로 낮추어 운용

  3) Offset Cancellation
감지 증폭기가 가진 고유의 오차를 제거 → ADC 출력의 Variation을 줄여 계산 정확도 향상

Test Case : MNIST Data Set
  1) Setup & Mapping

▶ 하이브리드 처리
연산량이 가장 많은 Convolution Layer와 FC Layer는 CSRAM 칩에서 수행
비교적 간단한 활성화 함수나 Pooling은 SW(Digital 영역)에서 처리

▶ 병렬 처리
16개의 Local Array를 활용하여 16개의 필터를 동시에 계산
한 Clock Cycle당 50 x 16 x 2 = 1,600회의 연산을 동시에 처리

  2) Accuracy
▶ 최고 정확도
BN(Batch Normalization)을 적용한 모델에서 98.3%의 정확도 달성
BN은 데이터 분포를 0 중심으로 맞추고 범위를 제한해주어, 6-bit 양자화 환경에서도 정보 손실을 최소화

▶ 저전압 동작
전압을 낮춘 상태(1V → 0.8V)에서도 98.1%의 정확도를 유지

  3) Energy Efficiency
▶ 최대 효율
Array 활용도가 높은 F5 Layer(BN 적용 시)에서 40.3TOPS/W의 연산이라는 높은 효율 기록
Array를 꽉 채워 쓸수록 연산당 에너지 소모가 줄어들어 효율 증가

▶ 데이터 Sparsity 활용
입력 데이터와 출력 데이터에 '0'이 많아 DAC가 전압을 변환하고 전송하는 에너지를 아낄 수 있어 전체 전력 소모 감소

7. Conclusion

Binary Weight를 사용하여 CNN 모델 연산을 SRAM 내부에서 수행
Variation-Tolerant : 공정 오차로 인한 결과 오류 가능성↓
Multi-Bit 해상도 : Weight는 Binary지만, 입·출력 값은 Multi-Bit로 처리하여 정확도↑
위의 핵심 기술로 IoE/IoT 기기에서 "Always-On"과 같은 저전력 ML Application에 활용 가능

한계점)
① 입·출력 bit 수가 7-bit로 제한적
② Binary Weight CNN에 특화되어 정밀한 Weight가 필요한 model에는 그대로 적용하기 어려울 수 있음
③ 용량 제한으로 인한 반복 연산(필터 크기가 큰 경우, 한 번에 모든 Weight를 저장할 수 없어 데이터를 나누어 여러 번 처리)
④ 작은 필터에서 효율 저하(ex. 5x5 필터 & N = 64 → 필터 2세트 계산 후 14개 Bit-Cell 낭비)
⑤ Analog 연산의 본질적 한계인 공정 오차와 Noise
⑥ ADC Offset
⑦ 낮은 동작 주파수

8. Thinking

Mapping
C1 Layer)
필터 : 5x5x1
Mapping : 6개의 필터가 있으므로, 6개의 Local Array만 사용
배치 : 한 행에 필터 하나(25-bit)가 충분히 들어가므로 1행, 25열만 사용
연산량 : 25(input) x 6(filter) x 2(ops/MAV) = 300 ops/cycle

C3 Layer)
필터 : 5x5x6 (C1의 출력이 6개였으므로 깊이가 6)
Mapping : 총 16개의 필터가 있므로, 16개의 Local Array 모두 사용
배치 : 64-bit 행 하나에 2개 Channel을 넣을 수 있으며, 총 6개의 Channel을 저장해야 하므로 3개의 행 필요 → 3행, 50열 사용
연산량 : 50(input) x 16(filter) x 2(ops/MAV) = 1600 ops/cycle

F5 Layer)
필터 : 5x5x16 (=120)
한계 : HW는 Local Array가 16개뿐인데 필터가 120개이므로, 한 번에 처리 불가
해결 : 15개의 Local Array 사용 x 8번 반복
배치 : 8행, 50열 사용
연산량 : 50(input) x 15(filter) x 2(ops/MAV) = 1500 ops/cycle → 8번 반복

F6 Layer)
필터 : 1x1x120 (0~9 숫자 분류를 위한 Layer)
Mapping : 10개의 출력을 위해 10개의 Local Array 사용
배치 : 필터 크기가 1x1로 매우 작아, 한 행에 30개의 Channel을 집어넣어 처리 효율 향상
연산량 : 30(input) x 10(0~9) x 2(ops/MAV) = 600 ops/cycle

9. Reference

"CONV-SRAM : An Energy-Efficient SRAM With In-Memory Dot-Product Computation for Low-Power Convolutional Neural Networks"

댓글

이 블로그의 인기 게시물

[Mini-NPU RTL] NN Reference Model

[Mini-NPU RTL] TPU (Study Paper)