# Minimal cocotb Makefile.
# Examples:
#   make TESTCASE=basic_write_query_no_noise
#   make TESTCASE=external_noise_mask EXTRA_DEFINES="+define+SIM_NOISE +define+SIM_DEBUG"
#
# Verilator is preferred. Icarus may not support all SystemVerilog constructs used here.

SIM ?= verilator
TOPLEVEL_LANG ?= verilog
TOPLEVEL := cam_top
MODULE ?= tests.test_cam_basic

NUM_ROWS ?= 512
HASH_BITS ?= 512
LANES ?= 16

EXTRA_ARGS += -DNUM_ROWS=$(NUM_ROWS) -DHASH_BITS=$(HASH_BITS) -DLANES=$(LANES)

# cocotb passes PLUSARGS/EXTRA_ARGS differently across simulators. Keep
# SystemVerilog parameters explicit through COMPILE_ARGS for Verilator.
COMPILE_ARGS += -Wall -Wno-fatal
COMPILE_ARGS += +define+SIM_DEBUG
COMPILE_ARGS += $(EXTRA_DEFINES)

VERILOG_SOURCES += $(PWD)/../rtl/popcount.sv
VERILOG_SOURCES += $(PWD)/../rtl/argmax_update.sv
VERILOG_SOURCES += $(PWD)/../rtl/cam_core.sv
VERILOG_SOURCES += $(PWD)/../rtl/cam_top.sv

include $(shell cocotb-config --makefiles)/Makefile.sim
