How valmyr/systoliccore works
This repository implements a parameterized systolic-array matrix-multiplication accelerator, with a Python-side workflow for preparing matrices and convolution workloads and communicating with a Zynq FPGA. The main path prepares and arranges operands, sends them over TCP to the board, transfers data toward programmable logic, performs multiply-accumulate operations, and returns results. The README describes the array and operand shifting; sampled Python and C show client/server and FIFO behavior. RTL wiring beyond the documented architecture is inferred from module names, so uncertain connections are omitted.
Main entry points: echo_backup_funcional.c TCP echo server · systolicMatrixMultiply.sv Matrix multiply · SystolicCore.sv Systolic core · ethernet_server_zynq.py TCP client
Components 15
Workload preparation
- Convolution workflow
python/ethernet_server_zynq.py - Operand arrangement
python/ethernet_server_zynq.py - TCP client
python/ethernet_server_zynq.py
Board transport
- TCP echo server
python/echo_backup_funcional.c - AXI FIFO transfer
python/echo_backup_funcional.c
Accelerator RTL
- Matrix multiply
rtl/systolicMatrixMultiply.sv - Systolic core
rtl/SystolicCore.sv - Multiply accumulate
rtl/accumulator.sv
Data movement
- AXI stream core
rtl/AXI_Stream_Systolic_Core.v - Systolic control
rtl/SystolicControlUnit.sv - Operand shifting
rtl/shiftdata.sv - Serial conversion
rtl/serial2mem.sv - Result conversion
rtl/mem2serial.sv
Other components
- Workload user
- Zynq board
Connections 15
- Workload user → Convolution workflow: supplies workload
- Convolution workflow → Operand arrangement: prepares operands
- Operand arrangement → TCP client: provides operands
- TCP client → TCP echo server: sends TCP data
- TCP echo server → AXI FIFO transfer: writes input words
- AXI FIFO transfer → AXI stream core: transfers data
- AXI stream core → Serial conversion: streams input
- Serial conversion → Matrix multiply: supplies operands
- Matrix multiply → Systolic core: controls computation
- Systolic core → Multiply accumulate: multiplies and accumulates
- Systolic core → Operand shifting: forwards operands
- Matrix multiply → Result conversion: provides results
- Result conversion → AXI FIFO transfer: returns output data
- AXI FIFO transfer → TCP echo server: reads output words
- TCP echo server → TCP client: writes TCP response