All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Removed dependency to a specific gcc g++ version in Makefile
- Arithmetic and memory vector instructions with
vl == 0
are considered as aNOP
- Increment bit width of the vector length type (
vlen_t
), accounting for vectors whose length isVLMAX
- Fix vector length calculation for the
MaskB
operand, which depends onvsew
- Fix typo on the
vrf_pnt
updating logic at the Mask Unit - Update README to highlight dependency with Spike
- Update Bender's link dependency to the public CVA6 repository
- Retrigger the
compile
module if the ModelSim compilation did not succeed
- The
encoding.h
in the common Ara runtime is now a copy from theencoding.h
in the Spike submodule
- Parametrization for FPU and FPU-specific formats support, through the
FPUSupport
ara_soc parameter
- GitHub Actions-based CI
- Hardware support for:
- Vector single-width floating-point fused multiply-add instructions (vfnmacc, vfmsac, vfnmsac, vfnmadd, vfmsub, vfnmsub)
- Vector floating-point sign-injection instructions (vfsgnj, vfsgnjn, vfsgnjx)
- Vector widening floating-point add/subtract instructions (vfwadd, vfwsub, vfwadd.w, vfwsub.w)
- Vector widening floating-point multiply instructions (vfwmul)
- Vector widening floating-point fused multiply-add instructions (vfwmacc, vfwnmacc, vfwmsac, vfwnmsac)
- Vector floating-point merge instruction (vfmerge)
- Vector floating-point move instruction (vfmv)
- Contributing guidelines updated to include commit message and C++ code style guidelines
- Hardware support for:
- Vector single-width floating-point add/subtract instructions (vfadd, vfsub, vfrsub)
- Vector single-width floating-point multiply instructions (vfmul)
- Vector single-width floating-point fused multiply-add instructions (vfmacc, vfmadd)
- Vector single-width floating-point min/max instructions (vfmin, vfmax)
- Software implementation of a floating-point matrix multiplication kernel
- Support for a coherent mode between Ara and Ariane
- Snoop AW channel from Ara to L2
- Invalidate Ariane's L1 cache sets accordingly
- Coherent mode can be toggled together with consistent mode using the LSB of CSR 0x702
- Ariane's data cache is active by default
- The matrix multiplication kernel achieves better performance
- It reports the performance and the utilization for several matrix sizes
- Hardware support for:
- Vector single-width integer divide instructions (vdivu, vdiv, vremu, vrem)
- Vector integer comparison instructions (vmseq, vmsne, vmsltu, vmslt, vmsleu, vmsle, vmsgtu, vmsgt)
- Vector carry-out of add-with-carry and subtract-with-borrow instructions (vmadc, vmsbc)
- Runtime measurement functions
- Consistent mode which orders scalar and vector loads/stores.
- Conservative ordering without address comparison
- Consistent mode is enabled per default, can be disabled by clearing the LSB of CSR 0x702.
- Ariane's accelerator dispatcher module was rewritten, fixing a bug where instructions would get skipped.
- The Vector Store unit takes the EEW of the source vector register into account to shuffle the elements before writing them to memory.
- Vector mask instructions (vmand, vmnand, vmandnot, vmxor, vmor, vmnor, vmornot, vmxnor) no longer require the non-compliant constraint that the vector length is divisible by eight.
- Hardware compilation with Verilator
- Software implementation of a matrix multiplication kernel
- The
riscv_tests_simc
Makefile target was deprecated. The riscv-tests are now run with the Verilated design, which can be called through theriscv_tests_simv
Makefile target. - The operand queues now take as a parameter the type conversions they support (currently,
SupportIntExt2
,SupportIntExt4
, andSupportIntExt8
) - The Vector Multiplier unit now has independant pipelines for each element width.
- Hardware support for:
- Vector single-width integer multiply instructions (vmul, vmulh, vmulhu, vmulhsu)
- Vector single-width integer multiply-add instructions (vmacc, vnmsac, vmadd, vnmsub)
- Vector integer add-with-carry/subtract-with-borrow instructions (vadc, vsbc)
- Vector widening integer multiply instructions (vwmul, vwmulu, vwmulsu)
- Vector widening integer multiply-add instructions (vwmaccu, vwmacc, vwmaccsu, vwmaccus)
- Explicit scan chain signals added to the lane's and Ara's interfaces
- Miscellaneous fixes for compatibility with Synopsys DC
- Send the correct bits of the address to the Vector Register File's banks
- Correctly calculate the initial address of each vector register in the VRF
- Hardware support for:
- Bit-shift instructions (vsll, vsrl, vsra)
- Vector widening integer add/subtract (vwadd, vwaddu, vwsub, vwsubu)
- Vector integer extension (vzext, vsext)
- Vector integer merge and move instructions (vmerge, vmv)
- Vector narrowing integer right shift instructions (vnsrl, vnsra)
- Bender updated to version 0.21.0
- CVA6's forwarding mechanism of operand B for accelerator instructions
-
Hardware support for:
- Vector configuration instructions (vsetvl/vsetvli)
- Unit-strided vector loads and vector stores
- Basic arithmetic and logic instructions (vand, vor, vxor, vadd, vsub, vrsub, vmin-u, vmax-u)
- Predicated instructions through a mask unit
- Vector mask instructions (vmand, vmnand, vmandnot, vmor, vmnor, vmornot, vmxor, vmxnor)
- Length multipliers
-
Implementation of a synthesizable Ara SoC top-level
-
Software support for RISC-V Vector code
-
Continuous integration tests through riscv-tests executed both with Spike and on Ara