CV-GEMV · RESEARCH RTL

W4A8 투영을 위한 상주형 행렬-벡터 IP.

CV-GEMV는 상주한 INT4 가중치와 INT8 활성화 벡터로 명령 하나에 배치 1 행렬-벡터 곱을 한 번 계산합니다. 연구용 RTL입니다. 두 시뮬레이터에서 독립 모델과 대조해 검증했고, 아직 양산 릴리스가 아니며 칩으로 만든 적이 없습니다.

RESEARCH RTL

RTL은 서면 평가 계약으로 제공합니다. 인터페이스 계약, 사이클 모델, 측정한 검증 결과는 이 페이지에 공개합니다. 릴리스된 공개 IP는 CV-X1 Pro L8입니다.

연산 계약

group[r,g]  = Σ (signed4(w[r,k]) − signed4(zp[r,g])) × signed8(x[k])   # k in group g, 32 columns
row[r]      = Σ int64(group[r,g]) × uint8(scale[r,g])
output[r]   = clamp(row[r], −2147483648, 2147483647)                  # once, after the whole row

스케일은 0..255 정수이며 부동소수점 지수가 아닙니다. 포화는 모든 그룹을 더한 뒤 행마다 한 번 합니다. CV-X1 Pro는 타일마다 포화하므로 두 IP의 수치는 서로 바꿔 쓸 수 없습니다. 지원하는 모든 크기에서 그룹·곱·누산 범위는 RTL의 18·26·64비트 레지스터에 들어갑니다.

구성

매개변수허용 범위참고
ROWS1..4096, P로 나누어떨어짐기본 크기 256, 다른 크기는 검증 보고서에
COLS32..65536, 32의 배수기본 크기 4096, 다른 크기는 검증 보고서에
P1..ROWS, ROWS의 약수행 엔진 수, 엔진마다 곱셈 레인 8개

타일·그룹·주소 폭 매개변수는 이 세 값으로 정해집니다. 허용 범위 안의 값이라고 해서 검증된 것은 아니며, 검증한 구성은 검증 보고서에 적혀 있습니다.

인터페이스

  • 명령: 상승 에지에서 start_valid && start_ready일 때 받습니다. 한 번에 하나만 받고, start_valid를 유지하면 코어가 대기 상태로 돌아올 때 다음 명령을 시작합니다. 숨은 명령 큐는 없습니다.
  • 메모리: 시작 전에 참조 메모리의 쓰기 포트로 가중치·메타데이터·활성화의 모든 위치를 채우고, done 전에는 쓰지 않습니다. 리셋은 저장소를 지우거나 초기화하지 않습니다.
  • 읽기: mem_ren은 동기 읽기 한 번을 요청합니다. 데이터는 그 에지 뒤에 나오고 다음 에지에서 쓰입니다. 대기 입력이 없으므로 지연이 더 긴 메모리는 어댑터와 재검증이 필요합니다.
  • 워드: 가중치 P × 32비트(행마다 부호 있는 니블 8개), 활성화는 모든 행 엔진이 함께 쓰는 부호 있는 바이트 8개, 메타데이터 P × 12비트(스케일 [7:0], 부호 있는 영점 [11:8]). 행 우선 뱅크 배치: 가중치 주소 = row_block × (COLS/8) + tile, 메타데이터 주소 = row_block × (COLS/32) + group.
  • 출력: 부호 있는 32비트 행 P개를 out_row, out_last와 함께 한 번에 내보내며, out_ready가 낮은 동안 그대로 유지합니다. done은 마지막 블록을 받을 때 한 번 뜹니다. 넓은 ready/valid 연구용 인터페이스이며 AXI 규격 버스가 아닙니다.
  • 리셋: 액티브 로우. 작업을 멈추고 valid·제어기·누산기 상태를 지웁니다. 통합할 때는 해제를 동기화하세요.
  • 상주형 장치 래퍼: 코어, 입력 메모리, ROWS × 32비트 결과 메모리를 잇습니다. 명령이 도는 동안 설정 쓰기는 막히고, 끝나면 결과를 동기 읽기로 읽습니다.

사이클 모델

out_ready를 계속 높게 두면, 조밀한 명령은 받은 순간부터 마지막 출력 블록이 처음 유효해질 때까지 다음 사이클이 걸립니다.

cycles = (ROWS / P) × (COLS / 8 + 7) − 1
resident result (device wrapper) = cycles + 1

cycle_count는 그 시점에 멈추며 적재 시간은 넣지 않습니다. read_count는 메모리 읽기 횟수, stall_count는 out_valid && !out_ready인 사이클 수입니다. 카운터는 명령을 받을 때마다 0이 됩니다. 사이클 수는 나노초 측정값이 아닙니다. 시간으로 바꾸려면 실제 메모리와 함께 타이밍을 맞춘 클록이 필요합니다.

측정 결과

검사결과
코어 대 독립 파이썬 정수 모델Icarus Verilog 13.0과 Verilator 5.052에서 시험 136개, 출력 행 120,700개 대조, 불일치 0건. 실제 메모리 쓰기, 연속 명령, 리셋, 무작위 출력 정지, 극단 부호, 포화와 상쇄를 포함합니다.
상주형 장치 래퍼, 두 시뮬레이터메모리 적재, 설정·시작 중재, 실행 중 쓰기 거부, 연속 상주 연산 두 번, 결과 읽기, 리셋: 통과. 128 × 512, P = 8: 상주 1,136사이클, 256 × 4096, P = 256: 상주 519사이클로 사이클 모델과 같습니다.
형식 안전 증명(Yosys BMC + 귀납)ROWS = 2, COLS = 32, P = 1, 임의의 메모리 값과 수신 ready: 출력 유지, 행 순서, 범위, 리셋 복구 통과. 모든 매개변수에 대한 연산 증명이 아니며, ready가 계속 낮을 때의 진행 증명도 아닙니다.

기본 크기 256 × 4096을 행 블록 하나(P = 256)로 돌리면 사이클 모델은 코어 518사이클, 상주 결과 519사이클입니다. RTL을 시뮬레이션한 사이클이며 실리콘에서 잰 시간이 아닙니다.

CV-GEMV 코어의 공개 PDK 레이아웃 결과는 물리 구현 페이지에 있습니다.

같은 조건 비교

다시 돌릴 수 있는 공개 설계와 같은 흐름·같은 공정·실제 모델 데이터로 비교하며, 통과선은 결과 전에 정하고 판정은 코드가 냅니다.

판정리비전코드 판정교차 검토(8차, 2026-11-08)
Nangate45·ASAP7r14도달확인
제조 가능한 오픈 PDK 세 곳r14도달 못 함 (열린 관문: G3 gf180)확인

지표, 모든 줄, 원본 파일: 같은 조건 비교.

리비전

위 연산 계약과 인터페이스는 모든 리비전에서 같습니다. 비교 페이지에서 잰 구현 리비전은 코어 안의 회로만 바꾸며, 리비전마다 블록 단위로 첫 리비전과 결과가 같은지 확인합니다. 어느 리비전을 전달하는지는 평가 계약에 적습니다.

저장소와 구현 범위

256 × 4096에서 필요한 저장소는 577,536바이트입니다. 가중치 524,288바이트, 압축한 메타데이터 49,152바이트, 활성화 4,096바이트입니다. 코어는 사이클마다 가중치 P × 32비트와 활성화 64비트를, 그룹 경계마다 메타데이터 P × 12비트를 읽습니다. 물리 성능을 말하려면 먼저 이 대역폭을 만들어야 합니다.

함께 드리는 메모리는 두 시뮬레이터에서 쓰는 합성 가능한 RTL 배열입니다. 연산부만 합성할 때는 빠집니다. 파운드리 SRAM 매크로, SRAM 타이밍·면적·전력, 클록 트리, 패드, 실리콘 측정은 이 릴리스에 없습니다.

주장하지 않는 것

  • 모델 전체의 정확도나 처리량.
  • CV-X1 Pro의 타일별 포화와 수치가 그대로 맞는다는 것.
  • 물리 메모리 타이밍, 또는 나노초 단위 지연.
  • 양산 준비 완료. 연구용 RTL입니다.

CV-GEMV 평가

문의 양식으로 행렬 크기, 메모리 예산, 대상 공정을 알려 주세요. 평가는 서면 계약과 고객 구성에 맞춘 검증 계획으로 시작합니다. 라이선스를 참고하세요.