INTEGRATION

Two AXI wrappers. One clock, one reset.

The integration contract for CV-X1 Pro (released product line) and CV-GEMV (research RTL, supplied under an evaluation agreement): bus interfaces, clock and reset rules, registers, parameters, what was verified and what was not. Synthesis and timing figures are pre-layout estimates, not silicon measurements.

At a glance

IPStatusWrapperInterfacesSimulation runsLint warnings leftStructural CDC/RDC
CV-X1 Proreleased product linecv_x1_pro_axi, Verilog-2005, publicAXI4-Lite slave, AXI4-Stream slave, AXI4-Stream master6 / 6 PASS0PASS
CV-GEMVresearch RTL, supplied under an evaluation agreementcv_gemv_axi, SystemVerilog, evaluation licenceAXI4-Lite slave, AXI4-Stream slave, AXI4-Stream master, irq16 / 16 PASS0PASS

IP-XACT (IEEE 1685-2014) schema validation of both components: PASS (log). The full written contract is the integration guide; every claim below links to its file.

Bus interfaces

IPInterfaceRoleIP-XACT bus typeSignals (widths from the IP-XACT component)
CV-X1 Pros_axilslaveamba.com:AMBA4:AXI4-Lite:r0p0awaddr[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 Pros_axisslaveamba.com:AMBA4:AXI4Stream:r0p0tvalid, tready, tdata[63:0], tuser[19:0], tlast
CV-X1 Prom_axismasteramba.com:AMBA4:AXI4Stream:r0p0tvalid, tready, tdata[31:0], tuser[1:0], tlast
CV-GEMVs_axilslaveamba.com:AMBA4:AXI4-Lite:r0p0awaddr[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-GEMVs_axisslaveamba.com:AMBA4:AXI4Stream:r0p0tvalid, tready, tdata[31:0], tdest[1:0], tlast
CV-GEMVm_axismasteramba.com:AMBA4:AXI4Stream:r0p0tvalid, tready, tdata[31:0], tlast
CV-GEMVirqoutput—level interrupt, registered: irq = |(INT_STATUS & INT_ENABLE)

Sources: CV-X1 Pro IP-XACT · CV-GEMV IP-XACT.

AXI4-Lite (32-bit data, 12-bit byte address), the same policy in both wrappers:

  • Byte address, 32-bit registers; address bits [1:0] are ignored (AXI4-Lite accesses are full width).
  • AWPROT/ARPROT are accepted and ignored.
  • AW and W are accepted independently, in either order or in the same cycle; one write executes once both are held and the previous B response has been accepted. One write and one read every two cycles at most; BVALID/RVALID stay asserted with stable payload until BREADY/RREADY.
  • Unmapped address: read returns 0x00000000 with SLVERR; write has no effect, returns SLVERR and sets ERR.ADDR_ERR.
  • Write to a read-only register: no effect, SLVERR, ERR.ADDR_ERR.
  • Write-only locations read as 0x00000000 with OKAY.
  • WSTRB: register fields live in byte lane 0 unless stated; a write without WSTRB[0] leaves byte-0 fields unchanged (OKAY).
  • Reads have no side effects.

Measured in simulation: a write completes at least 2 cycles after the later of its AW and W handshakes, a read at least 1 cycle after AR; AW handshakes and AR handshakes are each at least 2 cycles apart. CV-X1 Pro held at most 2 writes and 1 read in flight.

AXI4-Stream. CV-X1 Pro: one result per accepted tile, in order; TSTRB, TKEEP, TID, TDEST are not used (every byte valid). CV-GEMV load port: TDEST selects weights, metadata or query memory, TLAST ends a packet; s_axis_tready is held low while a command runs or a START is pending, so a load never changes a running command. CV-GEMV result port: one signed, saturated row per beat, TLAST on the last row. Field layouts: integration guide, section 4.

Clock and reset

Structural check of the flattened pre-layout netlist; CV-GEMV with its memories black-boxed
IPClock domainsFlip-flopsLatchesWith async resetWithout resetFlops with aresetn in data coneCombinational input → outputSDC clock period
CV-X1 Pro12,71202,71200none4.000 ns
CV-GEMV14,26501,7372,5283,891s_axis_tready ← aresetn4.000 ns
  • One clock, aclk, rising edge. Every flip-flop is clocked by it directly; no derived or gated clocks, no latches.
  • One reset, aresetn, active low, asserted asynchronously. Release must be synchronous to aclk: put a reset synchronizer in the integrating design. Asynchronous release is not supported; the SDC excludes only the reset assertion from timing.
  • CV-X1 Pro: reset clears the weight memory, FIFO, pipeline, accumulator and counters. Every flip-flop has an asynchronous reset and no output has a combinational path from any input.
  • CV-GEMV: reset aborts a running command and clears control state but does not clear the weight, metadata, query or result memories; results are invalid after reset (STATUS.RESULT_VALID = 0). The device also uses aresetn as a synchronous qualifier, so the reset reaches 3,891 data inputs and s_axis_tready depends combinationally on aresetn. Its release must meet setup and hold like a data input.

Reports: CV-X1 Pro CDC/RDC (per-flop JSON) · CV-GEMV, memories black-boxed · CV-GEMV, memories as flip-flops · constraints CV-X1 Pro SDC, CV-GEMV SDC.

Register maps

CV-X1 Pro cv_x1_pro_axi
OffsetNameAccessResetFieldsDescription
0x000IDRO0x43565831IDIdentification, ASCII "CVX1".
0x004VERSIONRO0x00010000MAJOR, MINOR, PATCHWrapper version 1.0.0.
0x008CAPSRO0x13410408LANES, BANKS, ROWS_PER_BANK, FIFO_DEPTH, PIPE_STAGES, SAT_MODE, WEIGHT_READBACKFixed core capabilities.
0x00CCTRLRW0x00000002STREAM_EN, WGUARDControl.
0x010STATUSRO0x00000400INFLIGHT, FIFO_COUNT, BUSY, SAT_OVF, CORE_S_TREADY, M_TVALIDLive status (reset value shown).
0x014ERRW1C0x00000000WGUARD_REJECT, WSTRB_REJECT, ADDR_ERRSticky error flags; write 1 to clear (byte lane 0).
0x018PERF_MAC_TILESRO0x00000000COUNTTiles completed since reset (16-bit, wraps).
0x01CPERF_STALL_CYCLESRO0x00000000COUNTCycles with m_axis_tvalid=1 and m_axis_tready=0 since reset (16-bit, wraps).
0x020PERF_BANK_CONFLICTSRO0x00000000COUNTConsecutive FIFO pops reading the same bank since reset (16-bit, wraps).
0x100 + 4·i, i < 64WEIGHTWO0x00000000KV0, KV1, KV2, KV3, KV4, KV5, KV6, KV7Weight memory, 64 words. Word i (address 0x100+4*i) is bank i[1:0], row i[5:2]; eight signed INT4 values KV0..KV7 in bits [4k+3:4k]. Requires WSTRB=0xF. Write-only: reads return 0. Reset clears the weight memory to zero.

Full map with field bits and descriptions: Markdown · JSON ↓ · IP-XACT memory map.

CV-GEMV cv_gemv_axi
OffsetNameAccessResetFieldsDescription
0x000IDRO0x4356474DIDIdentification, ASCII "CVGM".
0x004VERSIONRO0x00010000MAJOR, MINOR, PATCHWrapper version 1.0.0.
0x008PARAM_ROWSROROWSROWSParameter ROWS.
0x00CPARAM_COLSROCOLSCOLSParameter COLS.
0x010PARAM_CFGRO(RESULT_STREAM << 17) | PP, RESULT_STREAMParameters P and RESULT_STREAM. Bit 16 is an implementation configuration flag documented in the evaluation-licence register map.
0x014PARAM_BEATSRO(2 << 16) | (((P * 12 + 31) / 32) << 8) | PWEIGHT_BEATS, META_BEATS, QUERY_BEATSAXI4-Stream beats per memory word.
0x018W_DEPTHRO(ROWS / P) * (COLS / 8)DEPTHWeight memory depth in words.
0x01CM_DEPTHRO(ROWS / P) * (COLS / 32)DEPTHMetadata memory depth in words.
0x020Q_DEPTHROCOLS / 8DEPTHQuery memory depth in words.
0x024R_BLOCKSROROWS / PBLOCKSResult blocks of P rows.
0x040CTRLWO0x00000000START, RSTREAMCommand register (byte lane 0). Reads return 0. Writing both bits is rejected.
0x044STATUSRO0x00000001CFG_READY, BUSY, RESULT_VALID, ERROR, START_PENDING, LOAD_ACTIVE, WINDOW_VALID, RSTREAM_ACTIVE, LOAD_DEST, IRQLive status (reset value shown).
0x048ERRW1C0x00000000PARTIAL_WORD, OVERRUN, BAD_DEST, DEST_MISMATCH, START_REJECT, RESULT_REJECT, ADDR_ERRSticky error flags; write 1 to clear (byte lane 0). A new event in the same cycle wins.
0x04CINT_STATUSW1C0x00000000DONE, RSTREAM_DONEInterrupt status; write 1 to clear.
0x050INT_ENABLERW0x00000000DONE, RSTREAM_DONEInterrupt enable; irq = |(INT_STATUS & INT_ENABLE), registered (one cycle).
0x054CYCLESRO0x00000000CYCLESDevice resident_cycles of the last command (core cycle_count + 1); 0 after reset and START.
0x05CLOAD_WORDSRO0x00000000COUNTMemory words written through the load port since reset (wraps).
0x060W_BASERW0x00000000BASEStart word address of each weight packet (all byte lanes honoured).
0x064M_BASERW0x00000000BASEStart word address of each metadata packet.
0x068Q_BASERW0x00000000BASEStart word address of each query packet.
0x06CLOAD_PTRRO0x00000000PTRNext word address of the active or last load packet.
0x070RESULT_SELRW0x00000000BLOCKWriting selects result block b (rows b*P..b*P+P-1) and reads it into RESULT_DATA. Rejected (SLVERR, ERR.RESULT_REJECT, value unchanged) unless RESULT_VALID=1, b < R_BLOCKS, no START pending and no result stream active.
0x100 + 4·i, i < PRESULT_DATARO0x00000000ROWRows of the selected block: element l is row RESULT_SEL*P + l (signed 32-bit, saturated). Read with SLVERR and value 0 while STATUS.WINDOW_VALID=0.

Full map with field bits and descriptions: Markdown · JSON ↓ · IP-XACT memory map.

Parameters and simulated ranges

CV-X1 Pro (Markdown · JSON ↓)
ParameterDefaultLegal valuesSimulated
LANES88 (fixed)8
BANKS x ROWS_PER_BANK4 x 164 x 16 (fixed)4 x 16
FIFO_DEPTH44 (fixed)4
AXI4-Lite ADDR/DATA width12 / 3212 / 32 (fixed)12 / 32
s_axis TDATA/TUSER width64 / 2064 / 20 (fixed)64 / 20
m_axis TDATA/TUSER width32 / 232 / 2 (fixed)32 / 2
CV-GEMV (Markdown · JSON ↓)
ParameterDefaultLegal valuesSimulated
ROWS321..4096, ROWS % P == 032, 64, 896
COLS12832..65536, multiple of 32128, 256, 4864
P81..min(ROWS, 960), ROWS % P == 0, address pointer width <= 24 bits8
RESULT_STREAM10 or 11
CV-GEMV configurationSimulatorsHandshake seeds run
ROWS 32 × COLS 128, P 8Icarus Verilog, Verilator1 (Icarus Verilog), 2 (Icarus Verilog), 3 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator)
ROWS 64 × COLS 256, P 8Icarus Verilog, Verilator1 (Icarus Verilog), 2 (Icarus Verilog), 3 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator)
ROWS 896 × COLS 4,864, P 8Icarus Verilog, Verilator1 (Icarus Verilog), 1 (Verilator), 2 (Verilator), 3 (Verilator)

CV-X1 Pro has no HDL parameters; its configuration is fixed and was simulated as delivered. For CV-GEMV, a value inside the legal range is not thereby verified: only the configurations above were simulated, all with P = 8 and RESULT_STREAM = 1. Derived parameters (tiles, groups, address widths, depths, beats) must not be overridden. One further implementation parameter, reported in bit 16 of PARAM_CFG, is documented in the evaluation-licence parameter table and register map, with the configurations simulated for it.

What was verified

22 of 22 runs pass
ConfigurationSimulatorSeeds (log)ResultCompared with the modelRegister reads comparedWrite responses compared
CV-X1 ProIcarus Verilog1 2 3PASS25,786 stream results3,1793,336
CV-X1 ProVerilator1 2 3PASS25,786 stream results3,1793,336
CV-GEMV 32 × 128, P 8Icarus Verilog1 2 3PASS15 commands (15 cycle counts matched); 480 rows via AXI4-Lite, 576 via AXI4-Stream1,071354
CV-GEMV 32 × 128, P 8Verilator1 2 3PASS15 commands (15 cycle counts matched); 480 rows via AXI4-Lite, 576 via AXI4-Stream1,071354
CV-GEMV 64 × 256, P 8Icarus Verilog1 2 3PASS15 commands (15 cycle counts matched); 960 rows via AXI4-Lite, 1,152 via AXI4-Stream1,611414
CV-GEMV 64 × 256, P 8Verilator1 2 3PASS15 commands (15 cycle counts matched); 960 rows via AXI4-Lite, 1,152 via AXI4-Stream1,611414
CV-GEMV 896 × 4,864, P 8Icarus Verilog1PASS5 commands (5 cycle counts matched); 4,480 rows via AXI4-Lite, 5,376 via AXI4-Stream5,188657
CV-GEMV 896 × 4,864, P 8Verilator1 2 3PASS15 commands (15 cycle counts matched); 13,440 rows via AXI4-Lite, 16,128 via AXI4-Stream15,5641,971

Simulators: Icarus Verilog and Verilator 5.052; handshake seeds 1, 2, 3. For each of the 10 seed and configuration pairs run in both simulators, the two logs report identical counts and results. Every result is compared with an independent Python model, through both the AXI4-Lite result window and the result stream. The testbenches drive AW before W, W before AW and both in one cycle, back-to-back requests, random VALID/READY delays, reads during writes, OKAY and SLVERR for every address class, write strobes, write-1-to-clear flags, the reset value of every register and a reset in the middle of traffic. Summaries: CV-X1 Pro JSON ↓ · CV-GEMV JSON ↓ · all results JSON ↓. The public CV-GEMV logs have the per-command cycle values redacted; the unredacted logs are delivered under the evaluation licence.

Item (cycles, measured in simulation)CV-X1 ProCV-GEMV
Stream input to result, handshake to handshakemin 4, max 108 (with random backpressure)—
Throughput, always-valid source and always-ready sink500 results in 500 cyclesload port: TREADY low for 0 cycles while idle
START write to device start—1
irq rise after device start—CYCLES + 3
Result stream, always-ready sink—32 rows in 36 cycles; 64 rows in 72 cycles; 896 rows in 1,008 cycles
Memory writes while a command executes—0

Fault injection. Each testbench was rerun against single-line mutations of its wrapper; it must fail on every one.

IPResultLog
CV-X1 Pro12 of 12 mutants detectedlog
CV-GEMV12 of 12 mutants detectedlog

Lint. Verilator 5.052 --lint-only -Wall, first without waivers, then with them; Yosys 0.70+post check without waivers. The cores are delivered unmodified, so warnings inside core files are waived with a stated reason rather than fixed (waivers and reasons).

IPVerilator warnings, no waiversWaiversLeft after waiversYosys problemsLogs
CV-X1 Pro5 (DECLFILENAME 1, UNUSEDSIGNAL 4)500raw · waived · Yosys
CV-GEMV19 (DECLFILENAME 3, GENUNNAMED 2, WIDTHEXPAND 3, WIDTHTRUNC 3, UNUSEDSIGNAL 7, SYNCASYNCNET 1)1700raw · waived · Yosys

IP-XACT. Both components validate against the IEEE 1685-2014 schema with xmllint (libxml 20913); the published files' SHA-256 match the validated files. A negative control (first addressOffset renamed to addrOffset) fails as expected (exit 3). Result: PASS (log).

Area and timing (pre-layout)

Yosys + ABC, Nangate45 typical, hierarchical; OpenSTA with ideal clocks. CV-GEMV at ROWS=32 COLS=128 P=8 RESULT_STREAM=1
DesignWrapper µm²Wrapped IP µm²Total µm²Wrapper overheadTiming at 4.000 ns
CV-X1 Pro707.028 (81 flip-flops)25,292.34425,999.3722.8% of coresetup +0.1389 ns, hold +0.037 ns, minimum period 3.86 ns
CV-GEMV, memories black-boxed4,704.742 (425 flip-flops)63,568.94668,273.6887.4% of device + corereport under evaluation licence
CV-GEMV, memories as flip-flops4,704.742225,092.392 (memory 161,452.424)229,797.134——

A production CV-GEMV integration replaces the reference memory arrays with SRAM macros and re-times the memory paths. Reports: CV-X1 Pro area · CV-X1 Pro timing · CV-GEMV, memories black-boxed · CV-GEMV, memories as flip-flops.

What is delivered

Delivery manifest 1.0.0
IPDeliverableAvailabilityFiles
CV-X1 ProWrapper RTL (Verilog-2005)publiccv_x1_pro_axi.v
CV-X1 ProCore RTL (unmodified, already public)publicdut.v
CV-X1 ProTiming constraints (SDC)publiccv_x1_pro_axi.sdc
CV-X1 ProSynthesis script and reports (Yosys stat, OpenSTA)publiccv_x1_pro_axi.ys, stat_hier.log, stat_flat.log, yosys.log, sta.tcl, sta.log
CV-X1 ProLint reports and waiverspublicverilator_lint_raw.log, verilator_lint_waived.log, yosys_check.log, lint-summary.json, cv_x1_pro_axi.vlt, lint-waivers.md
CV-X1 ProStructural CDC/RDC report (per-flop JSON)publiccdc.md, cdc.json
CV-X1 ProIP-XACT IEEE 1685-2014 componentpubliccv_x1_pro_axi.xml
CV-X1 ProRegister mappubliccv_x1_pro_axi.regmap.md, cv_x1_pro_axi.regmap.json
CV-X1 ProParameter tablepubliccv_x1_pro_axi.params.md, cv_x1_pro_axi.params.json
CV-X1 ProTestbench, AXI monitors, vector generator / golden modelpublictb_cv_x1_pro_axi.sv, axil_monitor.sv, axis_monitor.sv, gen_x1_vectors.py
CV-X1 ProSimulation logs (Icarus, Verilator) and fault-injection logpublicmutation_x1.log, x1-summary.json, x1_icarus_seed1.log, x1_icarus_seed2.log, x1_icarus_seed3.log, x1_verilator_seed1.log, x1_verilator_seed2.log, x1_verilator_seed3.log
CV-GEMVWrapper RTL (SystemVerilog)evaluation licence1 file; SHA-256 in the manifest
CV-GEMVDevice/core/memory RTL (unmodified)evaluation licence4 files; SHA-256 in the manifest
CV-GEMVTiming constraints (SDC)publiccv_gemv_axi.sdc
CV-GEMVSynthesis scriptsevaluation licence2 files; SHA-256 in the manifest
CV-GEMVSynthesis stat logs (memory excluded / memory as flip-flops)publicstat_flat.log, stat_hier.log, stat_flat.log, stat_hier.log
CV-GEMVTiming reports (OpenSTA)evaluation licence2 files; SHA-256 in the manifest
CV-GEMVLint reports (source excerpts removed) and waiverspublicverilator_lint_raw.log, verilator_lint_waived.log, yosys_check.log, lint-summary.json, lint-waivers.md
CV-GEMVVerilator waiver fileevaluation licence1 file; SHA-256 in the manifest
CV-GEMVStructural CDC/RDC reports (grouped by source file)publiccdc-memory-as-flops.json, cdc-memory-as-flops.md, cdc-memory-excluded.json, cdc-memory-excluded.md
CV-GEMVIP-XACT IEEE 1685-2014 componentpubliccv_gemv_axi.xml
CV-GEMVRegister mappubliccv_gemv_axi.regmap.md, cv_gemv_axi.regmap.json
CV-GEMVParameter tablepubliccv_gemv_axi.params.md, cv_gemv_axi.params.json
CV-GEMVTestbench and vector generator / golden modelevaluation licence4 files; SHA-256 in the manifest
CV-GEMVSimulation logs, public copies (one parameter and per-command cycle values redacted) and fault-injection logpublicgemv-summary.json, gemv_32x128_p8_icarus_seed1.log, gemv_32x128_p8_icarus_seed2.log, gemv_32x128_p8_icarus_seed3.log, gemv_32x128_p8_verilator_seed1.log, gemv_32x128_p8_verilator_seed2.log, gemv_32x128_p8_verilator_seed3.log, gemv_64x256_p8_icarus_seed1.log, gemv_64x256_p8_icarus_seed2.log, gemv_64x256_p8_icarus_seed3.log, gemv_64x256_p8_verilator_seed1.log, gemv_64x256_p8_verilator_seed2.log, gemv_64x256_p8_verilator_seed3.log, gemv_896x4864_p8_icarus_seed1.log, gemv_896x4864_p8_verilator_seed1.log, gemv_896x4864_p8_verilator_seed2.log, gemv_896x4864_p8_verilator_seed3.log, mutation_gemv.log
CV-GEMVSimulation logs, unredacted, incl. the non-default parameter configurationevaluation licence24 files; combined SHA-256 in the manifest
CV-GEMVComplete register map, parameter table and IP-XACT (all parameters)evaluation licence5 files; SHA-256 in the manifest
bothIntegration guide (public edition)publicINTEGRATION_GUIDE.md
bothIntegration guide (complete edition)evaluation licence1 file; SHA-256 in the manifest
bothIP-XACT schema validation logpublicipxact-validation.log
bothEvidence summary (numbers used on the site)publicsummary.json
bothFlow scripts (simulation, synthesis, lint, CDC, IP-XACT)publicnetlist_check.py, run_synth.py, validate_ipxact.py
bothFault-injection, publishing and full-flow scriptsevaluation licence7 files; SHA-256 in the manifest

Delivery manifest JSON ↓ (paths, sizes and SHA-256 of every file, including those under the evaluation licence).

Not included, not verified

  • No formal proof of the wrappers; no gate-level or SDF-annotated simulation; no placement, routing, clock tree, power or silicon data in this release. Timing uses ideal clocks.
  • CDC/RDC is a structural analysis of the gate netlist with Corvel's own script, not a commercial CDC/RDC or lint tool.
  • The AXI monitors are Corvel's own; no third-party AXI protocol-checker IP was used.
  • IP-XACT is schema-valid but was not imported into an IP-XACT EDA tool. The AMBA bus-definition VLNVs were not checked against the official AMBA definition files; check them against your licensed AMBA library before import.
  • CV-GEMV: only P = 8 and RESULT_STREAM = 1 were simulated, at the ROWS × COLS listed above; other legal values are not verified. 32-bit result saturation is reachable and tested only at 896 × 4,864.
  • CV-GEMV: memories are reference arrays; SRAM macro timing is not covered. Reset does not clear them. The device does not export its memory read counter, so there is no READS register (offset 0x058 is unmapped).
  • CV-GEMV: the RTL is research RTL supplied under an evaluation agreement; its wrapper and core RTL, synthesis scripts, timing reports, testbench and unredacted logs are not public.
  • CV-X1 Pro: weight writes during traffic with WGUARD = 0 follow the core's read-old-data rule and are not compared against a model; PERF_BANK_CONFLICTS is checked only for equality with the core counter; the performance counters are 16-bit and wrap.