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비트 레지스터에 들어갑니다.
구성
| 매개변수 | 허용 범위 | 참고 |
|---|---|---|
| ROWS | 1..4096, P로 나누어떨어짐 | 기본 크기 256, 다른 크기는 검증 보고서에 |
| COLS | 32..65536, 32의 배수 | 기본 크기 4096, 다른 크기는 검증 보고서에 |
| P | 1..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 + 1cycle_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·ASAP7 | r14 | 도달 | 확인 |
| 제조 가능한 오픈 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 평가
문의 양식으로 행렬 크기, 메모리 예산, 대상 공정을 알려 주세요. 평가는 서면 계약과 고객 구성에 맞춘 검증 계획으로 시작합니다. 라이선스를 참고하세요.
