한눈에 보기
| IP | 구분 | 래퍼 | 인터페이스 | 시뮬레이션 실행 | 남은 린트 경고 | 구조 CDC/RDC |
|---|---|---|---|---|---|---|
| CV-X1 Pro | 출시 제품군 | cv_x1_pro_axi, Verilog-2005, 공개 | AXI4-Lite 슬레이브, AXI4-Stream 슬레이브, AXI4-Stream 마스터 | 6 / 6 PASS | 0 | PASS |
| CV-GEMV | 연구용 RTL, 평가 계약으로 제공 | cv_gemv_axi, SystemVerilog, 평가 라이선스 | AXI4-Lite 슬레이브, AXI4-Stream 슬레이브, AXI4-Stream 마스터, irq | 16 / 16 PASS | 0 | PASS |
두 컴포넌트의 IP-XACT(IEEE 1685-2014) 스키마 검증: PASS (기록). 전체 약속은 통합 안내서(영어)에 있고, 아래 모든 내용은 근거 파일로 연결됩니다.
버스 인터페이스
| IP | 인터페이스 | 역할 | IP-XACT 버스 형식 | 신호 (폭은 IP-XACT 컴포넌트 기준) |
|---|---|---|---|---|
| CV-X1 Pro | s_axil | 슬레이브 | amba.com:AMBA4:AXI4-Lite:r0p0 | awaddr[11:0], awprot[2:0], awvalid, awready, wdata[31:0], wstrb[3:0], wvalid, wready, bresp[1:0], bvalid, bready, araddr[11:0], arprot[2:0], arvalid, arready, rdata[31:0], rresp[1:0], rvalid, rready |
| CV-X1 Pro | s_axis | 슬레이브 | amba.com:AMBA4:AXI4Stream:r0p0 | tvalid, tready, tdata[63:0], tuser[19:0], tlast |
| CV-X1 Pro | m_axis | 마스터 | amba.com:AMBA4:AXI4Stream:r0p0 | tvalid, tready, tdata[31:0], tuser[1:0], tlast |
| CV-GEMV | s_axil | 슬레이브 | amba.com:AMBA4:AXI4-Lite:r0p0 | awaddr[11:0], awprot[2:0], awvalid, awready, wdata[31:0], wstrb[3:0], wvalid, wready, bresp[1:0], bvalid, bready, araddr[11:0], arprot[2:0], arvalid, arready, rdata[31:0], rresp[1:0], rvalid, rready |
| CV-GEMV | s_axis | 슬레이브 | amba.com:AMBA4:AXI4Stream:r0p0 | tvalid, tready, tdata[31:0], tdest[1:0], tlast |
| CV-GEMV | m_axis | 마스터 | amba.com:AMBA4:AXI4Stream:r0p0 | tvalid, tready, tdata[31:0], tlast |
| CV-GEMV | irq | 출력 | — | 레벨 인터럽트, 레지스터 출력: irq = |(INT_STATUS & INT_ENABLE) |
근거: CV-X1 Pro IP-XACT · CV-GEMV IP-XACT.
AXI4-Lite (32비트 데이터, 12비트 바이트 주소). 두 래퍼의 규칙은 같습니다.
- 32비트 레지스터를 바이트 주소로 접근합니다. 주소 [1:0] 비트와
AWPROT/ARPROT는 무시합니다. - AW와 W는 따로, 어느 순서로든, 같은 사이클에도 받습니다.
BVALID/RVALID는BREADY/RREADY가 올 때까지 값을 바꾸지 않고 유지합니다. - 없는 주소: 읽으면 0과 SLVERR, 쓰면 무시하고 SLVERR와
ERR.ADDR_ERR. - 읽기 전용 레지스터에 쓰기: 무시, SLVERR,
ERR.ADDR_ERR. - 읽기에는 부작용이 없습니다. 오류·인터럽트 표시는 남아 있다가 1을 써서 지웁니다(W1C).
- 전체 규칙 원문: CV-X1 Pro 레지스터 맵의 접근 규칙.
시뮬레이션 실측: 쓰기는 AW·W 핸드셰이크 중 늦은 쪽에서 최소 2사이클 뒤, 읽기는 AR에서 최소 1사이클 뒤 응답합니다. AW 핸드셰이크끼리, AR 핸드셰이크끼리는 최소 2사이클 간격입니다. CV-X1 Pro는 동시에 최대 쓰기 2건, 읽기 1건을 받아 두었습니다.
AXI4-Stream. CV-X1 Pro: 받은 타일마다 결과 하나를 순서대로 냅니다. TSTRB, TKEEP, TID, TDEST는 쓰지 않습니다(모든 바이트가 유효). CV-GEMV 적재 포트: TDEST로 가중치·메타데이터·질의 메모리를 고르고 TLAST로 묶음을 끝냅니다. 명령이 실행 중이거나 START가 대기 중이면 s_axis_tready를 0으로 두므로, 적재가 실행 중인 명령을 바꾸지 않습니다. CV-GEMV 결과 포트: 한 박자에 부호 있는 포화 행 하나, 마지막 행에 TLAST. 필드 배치는 통합 안내서 4절에 있습니다.
클록과 리셋
| IP | 클록 도메인 | 플립플롭 | 래치 | 비동기 리셋 있음 | 리셋 없음 | 데이터 입력에 aresetn이 닿는 플롭 | 입력 → 출력 조합 경로 | SDC 클록 주기 |
|---|---|---|---|---|---|---|---|---|
| CV-X1 Pro | 1 | 2,712 | 0 | 2,712 | 0 | 0 | 없음 | 4.000 ns |
| CV-GEMV | 1 | 4,265 | 0 | 1,737 | 2,528 | 3,891 | s_axis_tready ← aresetn | 4.000 ns |
- 클록은
aclk하나, 상승 에지입니다. 모든 플립플롭이 이 클록을 직접 받습니다. 나눈 클록, 게이트한 클록, 래치는 없습니다. - 리셋은
aresetn하나, 0일 때 리셋, 비동기로 걸립니다. 풀 때는aclk에 맞춰 동기로 풀어야 합니다. 통합하는 쪽 설계에 리셋 동기화기를 두십시오. 비동기 해제는 지원하지 않으며, SDC는 리셋이 걸리는 경로만 타이밍에서 뺍니다. - CV-X1 Pro: 리셋은 가중치 메모리, FIFO, 파이프라인, 누산기, 카운터를 모두 지웁니다. 모든 플립플롭에 비동기 리셋이 있고, 어떤 출력도 입력에서 조합 경로로 이어지지 않습니다.
- CV-GEMV: 리셋은 실행 중인 명령을 멈추고 제어 상태를 지우지만, 가중치·메타데이터·질의·결과 메모리는 지우지 않습니다. 리셋 뒤 결과는 무효입니다(
STATUS.RESULT_VALID = 0). 장치가aresetn을 동기 조건으로도 쓰기 때문에 리셋이 데이터 입력 3,891곳에 닿고,s_axis_tready는aresetn에 조합으로 연결됩니다. 해제 시점이 데이터 입력처럼 셋업·홀드를 지켜야 합니다.
보고서: CV-X1 Pro CDC/RDC (플롭별 JSON) · CV-GEMV, 메모리 블랙박스 · CV-GEMV, 메모리를 플립플롭으로 · 제약 CV-X1 Pro SDC, CV-GEMV SDC.
레지스터 맵
| 오프셋 | 이름 | 접근 | 리셋 값 | 필드 |
|---|---|---|---|---|
0x000 | ID | RO | 0x43565831 | ID |
0x004 | VERSION | RO | 0x00010000 | MAJOR, MINOR, PATCH |
0x008 | CAPS | RO | 0x13410408 | LANES, BANKS, ROWS_PER_BANK, FIFO_DEPTH, PIPE_STAGES, SAT_MODE, WEIGHT_READBACK |
0x00C | CTRL | RW | 0x00000002 | STREAM_EN, WGUARD |
0x010 | STATUS | RO | 0x00000400 | INFLIGHT, FIFO_COUNT, BUSY, SAT_OVF, CORE_S_TREADY, M_TVALID |
0x014 | ERR | W1C | 0x00000000 | WGUARD_REJECT, WSTRB_REJECT, ADDR_ERR |
0x018 | PERF_MAC_TILES | RO | 0x00000000 | COUNT |
0x01C | PERF_STALL_CYCLES | RO | 0x00000000 | COUNT |
0x020 | PERF_BANK_CONFLICTS | RO | 0x00000000 | COUNT |
0x100 + 4·i, i < 64 | WEIGHT | WO | 0x00000000 | KV0, KV1, KV2, KV3, KV4, KV5, KV6, KV7 |
필드 비트와 설명이 있는 전체 맵(영어): Markdown · JSON ↓ · IP-XACT 메모리 맵.
| 오프셋 | 이름 | 접근 | 리셋 값 | 필드 |
|---|---|---|---|---|
0x000 | ID | RO | 0x4356474D | ID |
0x004 | VERSION | RO | 0x00010000 | MAJOR, MINOR, PATCH |
0x008 | PARAM_ROWS | RO | ROWS | ROWS |
0x00C | PARAM_COLS | RO | COLS | COLS |
0x010 | PARAM_CFG | RO | (RESULT_STREAM << 17) | P | P, RESULT_STREAM |
0x014 | PARAM_BEATS | RO | (2 << 16) | (((P * 12 + 31) / 32) << 8) | P | WEIGHT_BEATS, META_BEATS, QUERY_BEATS |
0x018 | W_DEPTH | RO | (ROWS / P) * (COLS / 8) | DEPTH |
0x01C | M_DEPTH | RO | (ROWS / P) * (COLS / 32) | DEPTH |
0x020 | Q_DEPTH | RO | COLS / 8 | DEPTH |
0x024 | R_BLOCKS | RO | ROWS / P | BLOCKS |
0x040 | CTRL | WO | 0x00000000 | START, RSTREAM |
0x044 | STATUS | RO | 0x00000001 | CFG_READY, BUSY, RESULT_VALID, ERROR, START_PENDING, LOAD_ACTIVE, WINDOW_VALID, RSTREAM_ACTIVE, LOAD_DEST, IRQ |
0x048 | ERR | W1C | 0x00000000 | PARTIAL_WORD, OVERRUN, BAD_DEST, DEST_MISMATCH, START_REJECT, RESULT_REJECT, ADDR_ERR |
0x04C | INT_STATUS | W1C | 0x00000000 | DONE, RSTREAM_DONE |
0x050 | INT_ENABLE | RW | 0x00000000 | DONE, RSTREAM_DONE |
0x054 | CYCLES | RO | 0x00000000 | CYCLES |
0x05C | LOAD_WORDS | RO | 0x00000000 | COUNT |
0x060 | W_BASE | RW | 0x00000000 | BASE |
0x064 | M_BASE | RW | 0x00000000 | BASE |
0x068 | Q_BASE | RW | 0x00000000 | BASE |
0x06C | LOAD_PTR | RO | 0x00000000 | PTR |
0x070 | RESULT_SEL | RW | 0x00000000 | BLOCK |
0x100 + 4·i, i < P | RESULT_DATA | RO | 0x00000000 | ROW |
필드 비트와 설명이 있는 전체 맵(영어): Markdown · JSON ↓ · IP-XACT 메모리 맵.
파라미터와 시뮬레이션한 범위
| 파라미터 | 기본값 | 허용 값 | 시뮬레이션한 값 |
|---|---|---|---|
LANES | 8 | 8 (고정) | 8 |
BANKS x ROWS_PER_BANK | 4 x 16 | 4 x 16 (고정) | 4 x 16 |
FIFO_DEPTH | 4 | 4 (고정) | 4 |
AXI4-Lite ADDR/DATA width | 12 / 32 | 12 / 32 (고정) | 12 / 32 |
s_axis TDATA/TUSER width | 64 / 20 | 64 / 20 (고정) | 64 / 20 |
m_axis TDATA/TUSER width | 32 / 2 | 32 / 2 (고정) | 32 / 2 |
| 파라미터 | 기본값 | 허용 값 | 시뮬레이션한 값 |
|---|---|---|---|
ROWS | 32 | 1..4096, ROWS % P == 0 | 32, 64, 896 |
COLS | 128 | 32..65536, multiple of 32 | 128, 256, 4864 |
P | 8 | 1..min(ROWS, 960), ROWS % P == 0, address pointer width <= 24 bits | 8 |
RESULT_STREAM | 1 | 0 or 1 | 1 |
| CV-GEMV 구성 | 시뮬레이터 | 실행한 핸드셰이크 시드 |
|---|---|---|
| ROWS 32 × COLS 128, P 8 | Icarus Verilog, Verilator | 1 (Icarus Verilog), 2 (Icarus Verilog), 3 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator) |
| ROWS 64 × COLS 256, P 8 | Icarus Verilog, Verilator | 1 (Icarus Verilog), 2 (Icarus Verilog), 3 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator) |
| ROWS 896 × COLS 4,864, P 8 | Icarus Verilog, Verilator | 1 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator) |
CV-X1 Pro에는 HDL 파라미터가 없습니다. 구성이 고정돼 있고, 납품하는 그대로 시뮬레이션했습니다. CV-GEMV는 허용 범위 안의 값이라고 해서 검증된 것은 아닙니다. 위 표의 구성만 시뮬레이션했고, 모두 P = 8, RESULT_STREAM = 1입니다. 파생 파라미터(타일·그룹 수, 주소 폭, 메모리 깊이, 박자 수)는 덮어쓰지 마십시오. PARAM_CFG 16번 비트로 읽히는 구현 파라미터 하나는 평가 라이선스용 파라미터 표와 레지스터 맵에, 그 파라미터로 시뮬레이션한 구성과 함께 적혀 있습니다.
검증한 것
| 구성 | 시뮬레이터 | 시드 (기록) | 결과 | 모델과 비교한 것 | 비교한 레지스터 읽기 | 비교한 쓰기 응답 |
|---|---|---|---|---|---|---|
| CV-X1 Pro | Icarus Verilog | 1 2 3 | PASS | 스트림 결과 25,786개 | 3,179 | 3,336 |
| CV-X1 Pro | Verilator | 1 2 3 | PASS | 스트림 결과 25,786개 | 3,179 | 3,336 |
| CV-GEMV 32 × 128, P 8 | Icarus Verilog | 1 2 3 | PASS | 명령 15개(사이클 수 일치 15); 행 480개는 AXI4-Lite로, 576개는 AXI4-Stream으로 | 1,071 | 354 |
| CV-GEMV 32 × 128, P 8 | Verilator | 1 2 3 | PASS | 명령 15개(사이클 수 일치 15); 행 480개는 AXI4-Lite로, 576개는 AXI4-Stream으로 | 1,071 | 354 |
| CV-GEMV 64 × 256, P 8 | Icarus Verilog | 1 2 3 | PASS | 명령 15개(사이클 수 일치 15); 행 960개는 AXI4-Lite로, 1,152개는 AXI4-Stream으로 | 1,611 | 414 |
| CV-GEMV 64 × 256, P 8 | Verilator | 1 2 3 | PASS | 명령 15개(사이클 수 일치 15); 행 960개는 AXI4-Lite로, 1,152개는 AXI4-Stream으로 | 1,611 | 414 |
| CV-GEMV 896 × 4,864, P 8 | Icarus Verilog | 1 | PASS | 명령 5개(사이클 수 일치 5); 행 4,480개는 AXI4-Lite로, 5,376개는 AXI4-Stream으로 | 5,188 | 657 |
| CV-GEMV 896 × 4,864, P 8 | Verilator | 1 2 3 | PASS | 명령 15개(사이클 수 일치 15); 행 13,440개는 AXI4-Lite로, 16,128개는 AXI4-Stream으로 | 15,564 | 1,971 |
시뮬레이터: Icarus Verilog, Verilator 5.052. 핸드셰이크 시드 1, 2, 3. 두 시뮬레이터로 모두 돌린 시드·구성 10쌍에서 두 기록은 같은 수와 결과를 냈습니다. 모든 결과는 따로 만든 Python 모델과 비교했고, AXI4-Lite 결과 창과 결과 스트림 양쪽으로 확인했습니다. 테스트벤치는 AW 먼저, W 먼저, 같은 사이클, 연속 요청, 무작위 VALID/READY 지연, 쓰는 중 읽기, 모든 주소 종류의 OKAY·SLVERR, 쓰기 스트로브, W1C 표시, 모든 레지스터의 리셋 값, 트래픽 도중 리셋을 넣어 봅니다. 요약: CV-X1 Pro JSON ↓ · CV-GEMV JSON ↓ · 전체 결과 JSON ↓. 공개한 CV-GEMV 기록은 명령별 사이클 값을 가렸고, 가리지 않은 기록은 평가 라이선스로 제공합니다.
| 항목 (사이클, 시뮬레이션 실측) | CV-X1 Pro | CV-GEMV |
|---|---|---|
| 스트림 입력에서 결과까지 (핸드셰이크 기준) | 최소 4, 최대 108 (무작위 역압 포함) | — |
| 처리량 (입력 항상 유효, 출력 항상 준비) | 500사이클에 결과 500개 | 적재 포트: 대기 중 TREADY가 0인 사이클 0 |
| START 쓰기에서 장치 시작까지 | — | 1 |
장치 시작 뒤 irq 상승 | — | CYCLES + 3 |
| 결과 스트림 (출력 항상 준비) | — | 32행에 36사이클; 64행에 72사이클; 896행에 1,008사이클 |
| 명령 실행 중 메모리 쓰기 | — | 0 |
결함 주입. 래퍼를 한 줄씩 고친 변이판마다 테스트벤치를 다시 돌렸고, 모두 실패로 잡아야 합니다.
린트. Verilator 5.052 --lint-only -Wall을 면제 없이 한 번, 면제를 넣고 한 번 돌렸고, Yosys 0.70+post check는 면제 없이 돌렸습니다. 코어는 고치지 않고 납품하므로, 코어 파일 안의 경고는 고치지 않고 이유를 적어 면제했습니다(면제 목록과 이유, 영어).
| IP | 면제 전 Verilator 경고 | 면제 수 | 면제 뒤 남은 경고 | Yosys 문제 | 기록 |
|---|---|---|---|---|---|
| CV-X1 Pro | 5 (DECLFILENAME 1, UNUSEDSIGNAL 4) | 5 | 0 | 0 | 원본 · 면제 적용 · Yosys |
| CV-GEMV | 19 (DECLFILENAME 3, GENUNNAMED 2, WIDTHEXPAND 3, WIDTHTRUNC 3, UNUSEDSIGNAL 7, SYNCASYNCNET 1) | 17 | 0 | 0 | 원본 · 면제 적용 · Yosys |
IP-XACT. 두 컴포넌트 모두 xmllint (libxml 20913)로 IEEE 1685-2014 스키마 검증을 통과했고, 공개한 파일의 SHA-256은 검증한 파일과 같습니다. 일부러 틀리게 만든 대조 파일(첫 addressOffset 이름 변경)은 예상대로 실패했습니다(종료 코드 3). 결과: PASS (기록).
면적과 타이밍 (배치 전)
| 설계 | 래퍼 µm² | 감싼 IP µm² | 합계 µm² | 래퍼 비중 | 4.000 ns에서 타이밍 |
|---|---|---|---|---|---|
| CV-X1 Pro | 707.028 (플립플롭 81개) | 25,292.344 | 25,999.372 | 코어의 2.8% | 셋업 +0.1389 ns, 홀드 +0.037 ns, 최소 주기 3.86 ns |
| CV-GEMV, 메모리 블랙박스 | 4,704.742 (플립플롭 425개) | 63,568.946 | 68,273.688 | 장치+코어의 7.4% | 보고서는 평가 라이선스로 제공 |
| CV-GEMV, 메모리를 플립플롭으로 | 4,704.742 | 225,092.392 (메모리 161,452.424) | 229,797.134 | — | — |
실제 CV-GEMV 통합에서는 참조용 메모리 배열을 SRAM 매크로로 바꾸고 메모리 경로의 타이밍을 다시 맞춰야 합니다. 보고서: CV-X1 Pro 면적 · CV-X1 Pro 타이밍 · CV-GEMV, 메모리 블랙박스 · CV-GEMV, 메모리를 플립플롭으로.
납품 목록
납품 목록 JSON ↓ (평가 라이선스 파일을 포함한 모든 파일의 경로, 크기, SHA-256).
포함하지 않은 것, 검증하지 않은 것
- 래퍼의 형식 증명, 게이트 수준·SDF 시뮬레이션은 하지 않았습니다. 이번 판에는 배치·배선·클록 트리·전력·실리콘 자료가 없습니다. 타이밍은 이상적 클록 기준입니다.
- CDC/RDC는 Corvel 자체 스크립트로 게이트 넷리스트 구조를 본 것이며, 상용 CDC/RDC나 린트 도구 결과가 아닙니다.
- AXI 모니터는 Corvel이 직접 만든 것이며, 외부 AXI 프로토콜 검사 IP는 쓰지 않았습니다.
- IP-XACT는 스키마 검증만 통과했고 IP-XACT EDA 도구로 불러와 보지는 않았습니다. AMBA 버스 정의 VLNV는 공식 AMBA 정의 파일과 대조하지 않았으니, 불러오기 전에 보유한 AMBA 라이브러리와 맞춰 보십시오.
- CV-GEMV: P = 8, RESULT_STREAM = 1만, 위 표의 ROWS × COLS에서만 시뮬레이션했습니다. 다른 허용 값은 검증하지 않았습니다. 결과의 32비트 포화는 896 × 4,864에서만 일어나고 거기서만 시험했습니다.
- CV-GEMV: 메모리는 참조용 배열이며 SRAM 매크로 타이밍은 다루지 않았습니다. 리셋으로 지워지지 않습니다. 장치가 메모리 읽기 횟수를 내보내지 않아 READS 레지스터가 없습니다(오프셋
0x058은 비어 있음). - CV-GEMV: 평가 계약으로 제공하는 연구용 RTL입니다. 래퍼·코어 RTL, 합성 스크립트, 타이밍 보고서, 테스트벤치, 가리지 않은 기록은 공개하지 않습니다.
- CV-X1 Pro:
WGUARD = 0에서 트래픽 중에 가중치를 쓰면 코어의 '이전 값 읽기' 규칙을 따르며, 이 경우는 모델과 비교하지 않았습니다.PERF_BANK_CONFLICTS는 코어 카운터와 같은지만 확인했습니다. 성능 카운터는 16비트이고 넘치면 0부터 다시 셉니다.