Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
55bb98d
Add SURF RTL Regression Documentation
bengineerd Mar 20, 2026
4c5be3e
Implement initial RTL regression inventory and pilot module selection
bengineerd Mar 20, 2026
44fcb52
Add local bootstrap scripts and VSCode tasks for regression setup
bengineerd Mar 20, 2026
489161a
Enhance RTL regression framework with organized test structure and in…
bengineerd Mar 20, 2026
a42fcc3
Update RTL regression progress with HDL coverage findings and documen…
bengineerd Mar 20, 2026
5908288
Enhance RTL regression framework with new test organization and docum…
bengineerd Mar 21, 2026
d86804d
Add pytest configuration and enhance FifoAsync regression tests
bengineerd Mar 21, 2026
b08ca24
Update RTL regression documentation with package coverage policy
bengineerd Mar 21, 2026
6c4396b
Enhance RTL regression framework with FifoSync implementation and ins…
bengineerd Mar 21, 2026
5edd87a
Add RTL instantiation graph and documentation for regression planning
bengineerd Mar 21, 2026
01d1329
Implement Synchronizer regression tests and update documentation
bengineerd Mar 21, 2026
6a757b2
Enhance RTL regression framework with new module implementations and …
bengineerd Mar 21, 2026
e6199de
Enhance RTL regression framework with new CRC modules and comprehensi…
bengineerd Mar 21, 2026
dc25891
Implement new regression tests for general and delay modules, enhanci…
bengineerd Mar 21, 2026
4792840
Enhance test documentation and clarity in delay and general modules
bengineerd Mar 21, 2026
a1e787a
Implement new regression tests for DSP and FIFO modules, enhancing co…
bengineerd Mar 21, 2026
bf2d41c
Implement and validate additional base modules and their regression t…
bengineerd Mar 21, 2026
54e1dfe
Add test utilities for dual-port RAM and enhance existing RAM tests
bengineerd Mar 21, 2026
a658ff0
Enhance Python regression documentation with structured commenting gu…
bengineerd Mar 21, 2026
4bfffee
Add AxiStreamPipeline and AxiLiteCrossbar with validation tests
bengineerd Mar 21, 2026
f1578fd
Refactor RTL regression documentation and establish flat build order
bengineerd Mar 22, 2026
229deb7
Add AxiStreamMuxIpIntegrator and validation tests
bengineerd Mar 22, 2026
9b6ceb2
Add AxiStreamDeMuxIpIntegrator and validation tests
bengineerd Mar 22, 2026
eecdf10
Add new AXI Lite and AXI Stream IP Integrators with validation tests
bengineerd Mar 22, 2026
4c10833
Update RTL instantiation graph and introduce phase-1 queue
bengineerd Mar 22, 2026
01d754a
Add AXI Lite and AXI Stream regression benches
bengineerd Mar 22, 2026
5150931
Add new AXI4 IP Integrators and validation tests
bengineerd Mar 26, 2026
b8214ae
Add new AXI Lite and AXI Stream IP Integrators
bengineerd Mar 26, 2026
c032370
Refactor CI workflow for ruckus dependency management.
bengineerd Mar 26, 2026
c1a3a6c
Add new AXI Stream and AXI Lite IP Integrators
bengineerd Mar 26, 2026
cbee5b6
Add new AXI Lite, AXI Stream, and AXI4 IP Integrators with validation…
bengineerd Mar 26, 2026
8db16b1
Refactor sorting key in bottom-up layer function and clean up test im…
bengineerd Mar 26, 2026
ecb9074
Add legacy test files and update pytest configuration
bengineerd Mar 26, 2026
f5f1918
Update .gitignore and remove obsolete VSCode tasks
bengineerd Mar 26, 2026
66dacb1
Enhance CI workflow with concurrency management
bengineerd Mar 26, 2026
9f79a70
Refactor AXI Stream and AXI Lite IP Integrators for consistency
bengineerd Mar 26, 2026
d48ba03
Update CI workflow and pytest configuration
bengineerd Mar 26, 2026
e3eeeb3
Refactor port declarations in AXI Lite and AXI Stream IP Integrators
bengineerd Mar 26, 2026
8a1e913
Add AxiRateGen IP Integrator and validation tests
bengineerd Mar 27, 2026
b5720f4
Update planning docs
bengineerd Mar 27, 2026
b6a26b1
Update plan order
bengineerd Mar 27, 2026
8971eae
More plan updates.
bengineerd Mar 27, 2026
dae0817
Add new AXI IP Integrators for FIFO and Ring Buffer
bengineerd Mar 27, 2026
5f5fae5
Add new AXI IP Integrators for Stream and DMA
bengineerd Mar 27, 2026
f2e45fc
Update AXI test cases to handle known RTL bugs
bengineerd Mar 27, 2026
57f8c8a
Update regression environment setup to enhance pytest execution
bengineerd Mar 27, 2026
d75c15d
Centralize GHDL compile flags.
bengineerd Mar 27, 2026
62b8376
Conda env
bengineerd Mar 27, 2026
94b2542
Add new AXI IP Integrators for various components
bengineerd Mar 27, 2026
69ab113
Add utility functions for AXI operations and refactor test cases
bengineerd Mar 27, 2026
4b9a844
Refactor AxiRateGen test to remove unused AxiMaster import
bengineerd Mar 27, 2026
76ff58d
Remove obsolete test files for AxiRingBuffer and AxiStreamBatchingFifo
bengineerd Mar 27, 2026
4065b46
Refactor AXI IP Integrators for consistency and readability
bengineerd Mar 27, 2026
1d78e07
Add VHDL wrappers for various components to enhance cocotb testing
bengineerd Mar 28, 2026
658b2ae
Enhance AXI IP Integrators with additional signal declarations
bengineerd Mar 28, 2026
5113ca8
Refactor VHDL files for improved formatting and consistency
bengineerd Mar 28, 2026
5f00924
Update VHDL linting guidelines in documentation
bengineerd Mar 28, 2026
f74f2f8
Add new VHDL wrappers for various components to enhance cocotb testing
bengineerd Mar 29, 2026
492f7e2
Add new VHDL wrappers and test cases for FIFO and SRP protocols
bengineerd Mar 29, 2026
f0acfef
Remove obsolete legacy test files for AXI components
bengineerd Mar 29, 2026
718970b
Linting.
bengineerd Mar 29, 2026
6a5d84b
Remove legacy-style testbench execution from CI workflow to streamlin…
bengineerd Mar 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
35 changes: 23 additions & 12 deletions .github/workflows/surf_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@

name: CI
on: [push]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:

Expand All @@ -25,8 +28,6 @@ jobs:

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
with:
Expand All @@ -37,9 +38,15 @@ jobs:
sudo apt-get update
sudo apt-get install -y make python3 python3-pip tclsh ghdl
python -m pip install --upgrade pip
pip install -r pip_requirements.txt
git clone https://github.com/slaclab/ruckus.git
pip install -r ruckus/scripts/pip_requirements.txt
python -m pip install -r pip_requirements.txt
if [ -L ruckus ] && [ ! -d ruckus ]; then
echo "Removing broken ruckus symlink from checkout"
rm ruckus
fi
if [ ! -d ruckus ]; then
git clone https://github.com/slaclab/ruckus.git ruckus
fi
python -m pip install -r ruckus/scripts/pip_requirements.txt

- name: Check for trailing whitespace and tabs
run: |
Expand Down Expand Up @@ -77,8 +84,6 @@ jobs:

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
with:
Expand All @@ -89,14 +94,20 @@ jobs:
sudo apt-get update
sudo apt-get install -y make python3 python3-pip tclsh ghdl
python -m pip install --upgrade pip
pip install -r pip_requirements.txt
git clone https://github.com/slaclab/ruckus.git
pip install -r ruckus/scripts/pip_requirements.txt
python -m pip install -r pip_requirements.txt
if [ -L ruckus ] && [ ! -d ruckus ]; then
echo "Removing broken ruckus symlink from checkout"
rm ruckus
fi
if [ ! -d ruckus ]; then
git clone https://github.com/slaclab/ruckus.git ruckus
fi
python -m pip install -r ruckus/scripts/pip_requirements.txt

- name: VHDL Regression Testing
- name: Parallel Regression Tests
run: |
make MODULES=$PWD import
python -m pytest --cov -v -n auto tests/
python -m pytest --cov -v -n auto --dist=worksteal tests/axi tests/base tests/dsp tests/protocols

- name: Code Coverage
run: |
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@ ruckus/
build/
sim_build/
.coverage*

# Local editor/agent state
.vscode/
.cursor/
.claude/
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,21 @@ export OUT_DIR = $(PROJ_DIR)/build
# Override the submodule check because ruckus external of this repo
export OVERRIDE_SUBMODULE_LOCKS = 1

ifndef GHDL_CMD
export GHDL_CMD = ghdl
endif

export GHDL_BASE_FLAGS = \
--workdir=$(OUT_DIR) \
--std=08 \
--ieee=synopsys \
-frelaxed-rules \
-fexplicit

export GHDL_OPTIONAL_WARNINGS = elaboration hide specs shared
export GHDL_SUPPORTED_WARNING_NAMES := $(shell $(GHDL_CMD) --help-warnings 2>/dev/null | awk '/^[[:space:]]*-W/ {name=$$1; sub(/^-W/, "", name); sub(/\*$$/, "", name); if (name != "all") print name}')
export GHDL_WARNING_FLAGS := $(strip $(foreach warn,$(GHDL_OPTIONAL_WARNINGS),$(if $(filter $(warn),$(GHDL_SUPPORTED_WARNING_NAMES)),-Wno-$(warn))))
export GHDLFLAGS = $(GHDL_BASE_FLAGS) $(GHDL_WARNING_FLAGS)

# Load the common makefile library
include $(MODULES)/ruckus/system_ghdl.mk
177 changes: 177 additions & 0 deletions axi/axi-lite/ip_integrator/AxiLiteAsyncIpIntegrator.vhd
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
library ieee;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bengineerd Reminder that you need to add the licensing code header to all .vhd and .py files that you just created

use ieee.std_logic_1164.all;

library surf;
use surf.StdRtlPkg.all;
use surf.AxiLitePkg.all;

entity AxiLiteAsyncIpIntegrator is
generic (
TPD_G : time := 1 ns;
RST_POLARITY_G : sl := '1';
RST_ASYNC_G : boolean := false;
AXI_ERROR_RESP_G : slv(1 downto 0) := AXI_RESP_SLVERR_C;
COMMON_CLK_G : boolean := false;
NUM_ADDR_BITS_G : natural := 32;
PIPE_STAGES_G : integer range 0 to 16 := 0);
port (
sAxiClk : in sl;
sAxiClkRst : in sl;
mAxiClk : in sl;
mAxiClkRst : in sl;
S_AXI_AWADDR : in slv(NUM_ADDR_BITS_G-1 downto 0);
S_AXI_AWPROT : in slv(2 downto 0);
S_AXI_AWVALID : in sl;
S_AXI_AWREADY : out sl;
S_AXI_WDATA : in slv(31 downto 0);
S_AXI_WSTRB : in slv(3 downto 0);
S_AXI_WVALID : in sl;
S_AXI_WREADY : out sl;
S_AXI_BRESP : out slv(1 downto 0);
S_AXI_BVALID : out sl;
S_AXI_BREADY : in sl;
S_AXI_ARADDR : in slv(NUM_ADDR_BITS_G-1 downto 0);
S_AXI_ARPROT : in slv(2 downto 0);
S_AXI_ARVALID : in sl;
S_AXI_ARREADY : out sl;
S_AXI_RDATA : out slv(31 downto 0);
S_AXI_RRESP : out slv(1 downto 0);
S_AXI_RVALID : out sl;
S_AXI_RREADY : in sl;
M_AXI_AWADDR : out slv(NUM_ADDR_BITS_G-1 downto 0);
M_AXI_AWPROT : out slv(2 downto 0);
M_AXI_AWVALID : out sl;
M_AXI_AWREADY : in sl;
M_AXI_WDATA : out slv(31 downto 0);
M_AXI_WSTRB : out slv(3 downto 0);
M_AXI_WVALID : out sl;
M_AXI_WREADY : in sl;
M_AXI_BRESP : in slv(1 downto 0);
M_AXI_BVALID : in sl;
M_AXI_BREADY : out sl;
M_AXI_ARADDR : out slv(NUM_ADDR_BITS_G-1 downto 0);
M_AXI_ARPROT : out slv(2 downto 0);
M_AXI_ARVALID : out sl;
M_AXI_ARREADY : in sl;
M_AXI_RDATA : in slv(31 downto 0);
M_AXI_RRESP : in slv(1 downto 0);
M_AXI_RVALID : in sl;
M_AXI_RREADY : out sl);
end entity AxiLiteAsyncIpIntegrator;

architecture rtl of AxiLiteAsyncIpIntegrator is

signal sAxiAResetN : sl := '1';
signal mAxiAResetN : sl := '1';

signal sAxiReadMaster : AxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C;
signal sAxiReadSlave : AxiLiteReadSlaveType := AXI_LITE_READ_SLAVE_INIT_C;
signal sAxiWriteMaster : AxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C;
signal sAxiWriteSlave : AxiLiteWriteSlaveType := AXI_LITE_WRITE_SLAVE_INIT_C;

signal mAxiReadMaster : AxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C;
signal mAxiReadSlave : AxiLiteReadSlaveType := AXI_LITE_READ_SLAVE_INIT_C;
signal mAxiWriteMaster : AxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C;
signal mAxiWriteSlave : AxiLiteWriteSlaveType := AXI_LITE_WRITE_SLAVE_INIT_C;

begin

sAxiAResetN <= not sAxiClkRst when (RST_POLARITY_G = '1') else sAxiClkRst;
mAxiAResetN <= not mAxiClkRst when (RST_POLARITY_G = '1') else mAxiClkRst;

U_SlaveShim : entity surf.SlaveAxiLiteIpIntegrator
generic map (
INTERFACENAME => "S_AXI",
EN_ERROR_RESP => true,
HAS_PROT => 1,
HAS_WSTRB => 1,
ADDR_WIDTH => NUM_ADDR_BITS_G)
port map (
S_AXI_ACLK => sAxiClk,
S_AXI_ARESETN => sAxiAResetN,
S_AXI_AWADDR => S_AXI_AWADDR,
S_AXI_AWPROT => S_AXI_AWPROT,
S_AXI_AWVALID => S_AXI_AWVALID,
S_AXI_AWREADY => S_AXI_AWREADY,
S_AXI_WDATA => S_AXI_WDATA,
S_AXI_WSTRB => S_AXI_WSTRB,
S_AXI_WVALID => S_AXI_WVALID,
S_AXI_WREADY => S_AXI_WREADY,
S_AXI_BRESP => S_AXI_BRESP,
S_AXI_BVALID => S_AXI_BVALID,
S_AXI_BREADY => S_AXI_BREADY,
S_AXI_ARADDR => S_AXI_ARADDR,
S_AXI_ARPROT => S_AXI_ARPROT,
S_AXI_ARVALID => S_AXI_ARVALID,
S_AXI_ARREADY => S_AXI_ARREADY,
S_AXI_RDATA => S_AXI_RDATA,
S_AXI_RRESP => S_AXI_RRESP,
S_AXI_RVALID => S_AXI_RVALID,
S_AXI_RREADY => S_AXI_RREADY,
axilClk => open,
axilRst => open,
axilReadMaster => sAxiReadMaster,
axilReadSlave => sAxiReadSlave,
axilWriteMaster => sAxiWriteMaster,
axilWriteSlave => sAxiWriteSlave);

U_MasterShim : entity surf.MasterAxiLiteIpIntegrator
generic map (
INTERFACENAME => "M_AXI",
EN_ERROR_RESP => true,
HAS_PROT => 1,
HAS_WSTRB => 1,
ADDR_WIDTH => NUM_ADDR_BITS_G)
port map (
M_AXI_ACLK => mAxiClk,
M_AXI_ARESETN => mAxiAResetN,
M_AXI_AWADDR => M_AXI_AWADDR,
M_AXI_AWPROT => M_AXI_AWPROT,
M_AXI_AWVALID => M_AXI_AWVALID,
M_AXI_AWREADY => M_AXI_AWREADY,
M_AXI_WDATA => M_AXI_WDATA,
M_AXI_WSTRB => M_AXI_WSTRB,
M_AXI_WVALID => M_AXI_WVALID,
M_AXI_WREADY => M_AXI_WREADY,
M_AXI_BRESP => M_AXI_BRESP,
M_AXI_BVALID => M_AXI_BVALID,
M_AXI_BREADY => M_AXI_BREADY,
M_AXI_ARADDR => M_AXI_ARADDR,
M_AXI_ARPROT => M_AXI_ARPROT,
M_AXI_ARVALID => M_AXI_ARVALID,
M_AXI_ARREADY => M_AXI_ARREADY,
M_AXI_RDATA => M_AXI_RDATA,
M_AXI_RRESP => M_AXI_RRESP,
M_AXI_RVALID => M_AXI_RVALID,
M_AXI_RREADY => M_AXI_RREADY,
axilClk => open,
axilRst => open,
axilReadMaster => mAxiReadMaster,
axilReadSlave => mAxiReadSlave,
axilWriteMaster => mAxiWriteMaster,
axilWriteSlave => mAxiWriteSlave);

U_DUT : entity surf.AxiLiteAsync
generic map (
TPD_G => TPD_G,
RST_POLARITY_G => RST_POLARITY_G,
RST_ASYNC_G => RST_ASYNC_G,
AXI_ERROR_RESP_G => AXI_ERROR_RESP_G,
COMMON_CLK_G => COMMON_CLK_G,
NUM_ADDR_BITS_G => NUM_ADDR_BITS_G,
PIPE_STAGES_G => PIPE_STAGES_G)
port map (
sAxiClk => sAxiClk,
sAxiClkRst => sAxiClkRst,
sAxiReadMaster => sAxiReadMaster,
sAxiReadSlave => sAxiReadSlave,
sAxiWriteMaster => sAxiWriteMaster,
sAxiWriteSlave => sAxiWriteSlave,
mAxiClk => mAxiClk,
mAxiClkRst => mAxiClkRst,
mAxiReadMaster => mAxiReadMaster,
mAxiReadSlave => mAxiReadSlave,
mAxiWriteMaster => mAxiWriteMaster,
mAxiWriteSlave => mAxiWriteSlave);

end architecture rtl;
Loading
Loading