mirror of
https://github.com/YosysHQ/yosys
synced 2026-06-04 16:10:51 +00:00
Merge a8485a2adf into a54bca5493
This commit is contained in:
commit
23a4b4ae2b
127 changed files with 1404 additions and 1342 deletions
2
.github/workflows/test-verific.yml
vendored
2
.github/workflows/test-verific.yml
vendored
|
|
@ -78,7 +78,7 @@ jobs:
|
||||||
- name: Run Verific specific Yosys tests
|
- name: Run Verific specific Yosys tests
|
||||||
run: |
|
run: |
|
||||||
make -C tests/sva
|
make -C tests/sva
|
||||||
cd tests/svtypes && bash run-test.sh
|
make -C tests/svtypes
|
||||||
|
|
||||||
- name: Run SBY tests
|
- name: Run SBY tests
|
||||||
if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }}
|
if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }}
|
||||||
|
|
|
||||||
119
Makefile
119
Makefile
|
|
@ -918,110 +918,15 @@ else
|
||||||
ABCOPT=""
|
ABCOPT=""
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Tests that generate .mk with tests/gen-tests-makefile.sh
|
|
||||||
MK_TEST_DIRS =
|
|
||||||
MK_TEST_DIRS += tests/arch/analogdevices
|
|
||||||
MK_TEST_DIRS += tests/arch/anlogic
|
|
||||||
MK_TEST_DIRS += tests/arch/ecp5
|
|
||||||
MK_TEST_DIRS += tests/arch/efinix
|
|
||||||
MK_TEST_DIRS += tests/arch/gatemate
|
|
||||||
MK_TEST_DIRS += tests/arch/gowin
|
|
||||||
MK_TEST_DIRS += tests/arch/ice40
|
|
||||||
MK_TEST_DIRS += tests/arch/intel_alm
|
|
||||||
MK_TEST_DIRS += tests/arch/machxo2
|
|
||||||
MK_TEST_DIRS += tests/arch/microchip
|
|
||||||
MK_TEST_DIRS += tests/arch/nanoxplore
|
|
||||||
MK_TEST_DIRS += tests/arch/nexus
|
|
||||||
MK_TEST_DIRS += tests/arch/quicklogic/pp3
|
|
||||||
MK_TEST_DIRS += tests/arch/quicklogic/qlf_k6n10f
|
|
||||||
MK_TEST_DIRS += tests/arch/xilinx
|
|
||||||
MK_TEST_DIRS += tests/bugpoint
|
|
||||||
MK_TEST_DIRS += tests/opt
|
|
||||||
MK_TEST_DIRS += tests/sat
|
|
||||||
MK_TEST_DIRS += tests/sdc
|
|
||||||
MK_TEST_DIRS += tests/sim
|
|
||||||
MK_TEST_DIRS += tests/svtypes
|
|
||||||
MK_TEST_DIRS += tests/techmap
|
|
||||||
MK_TEST_DIRS += tests/various
|
|
||||||
MK_TEST_DIRS += tests/rtlil
|
|
||||||
ifeq ($(ENABLE_VERIFIC),1)
|
|
||||||
ifneq ($(YOSYS_NOVERIFIC),1)
|
|
||||||
MK_TEST_DIRS += tests/verific
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
MK_TEST_DIRS += tests/verilog
|
|
||||||
|
|
||||||
# Tests that don't generate .mk
|
|
||||||
SH_TEST_DIRS =
|
|
||||||
SH_TEST_DIRS += tests/simple
|
|
||||||
SH_TEST_DIRS += tests/simple_abc9
|
|
||||||
SH_TEST_DIRS += tests/hana
|
|
||||||
SH_TEST_DIRS += tests/asicworld
|
|
||||||
# SH_TEST_DIRS += tests/realmath
|
|
||||||
SH_TEST_DIRS += tests/share
|
|
||||||
SH_TEST_DIRS += tests/opt_share
|
|
||||||
SH_TEST_DIRS += tests/fsm
|
|
||||||
SH_TEST_DIRS += tests/memlib
|
|
||||||
SH_TEST_DIRS += tests/bram
|
|
||||||
SH_TEST_DIRS += tests/svinterfaces
|
|
||||||
SH_TEST_DIRS += tests/xprop
|
|
||||||
SH_TEST_DIRS += tests/select
|
|
||||||
SH_TEST_DIRS += tests/peepopt
|
|
||||||
SH_TEST_DIRS += tests/proc
|
|
||||||
SH_TEST_DIRS += tests/blif
|
|
||||||
SH_TEST_DIRS += tests/arch
|
|
||||||
SH_TEST_DIRS += tests/rpc
|
|
||||||
SH_TEST_DIRS += tests/memfile
|
|
||||||
SH_TEST_DIRS += tests/fmt
|
|
||||||
SH_TEST_DIRS += tests/cxxrtl
|
|
||||||
SH_TEST_DIRS += tests/liberty
|
|
||||||
ifeq ($(ENABLE_FUNCTIONAL_TESTS),1)
|
|
||||||
SH_TEST_DIRS += tests/functional
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Tests that don't generate .mk and need special args
|
|
||||||
SH_ABC_TEST_DIRS =
|
|
||||||
SH_ABC_TEST_DIRS += tests/memories
|
|
||||||
SH_ABC_TEST_DIRS += tests/aiger
|
|
||||||
SH_ABC_TEST_DIRS += tests/alumacc
|
|
||||||
|
|
||||||
# seed-tests/ is a dummy string, not a directory
|
|
||||||
.PHONY: seed-tests
|
|
||||||
seed-tests: $(SH_TEST_DIRS:%=seed-tests/%)
|
|
||||||
.PHONY: seed-tests/%
|
|
||||||
seed-tests/%: %/run-test.sh $(TARGETS) $(EXTRA_TARGETS)
|
|
||||||
+cd $* && bash run-test.sh $(SEEDOPT)
|
|
||||||
+@echo "...passed tests in $*"
|
|
||||||
|
|
||||||
# abcopt-tests/ is a dummy string, not a directory
|
|
||||||
.PHONY: abcopt-tests
|
|
||||||
abcopt-tests: $(SH_ABC_TEST_DIRS:%=abcopt-tests/%)
|
|
||||||
abcopt-tests/%: %/run-test.sh $(TARGETS) $(EXTRA_TARGETS)
|
|
||||||
+cd $* && bash run-test.sh $(ABCOPT) $(SEEDOPT)
|
|
||||||
+@echo "...passed tests in $*"
|
|
||||||
|
|
||||||
# makefile-tests/ is a dummy string, not a directory
|
|
||||||
.PHONY: makefile-tests
|
|
||||||
makefile-tests: $(MK_TEST_DIRS:%=makefile-tests/%)
|
|
||||||
# this target actually emits .mk files
|
|
||||||
%.mk:
|
|
||||||
+cd $(dir $*) && bash run-test.sh
|
|
||||||
# this one spawns submake on each
|
|
||||||
makefile-tests/%: %/run-test.mk $(TARGETS) $(EXTRA_TARGETS)
|
|
||||||
$(MAKE) -C $* -f run-test.mk
|
|
||||||
+@echo "...passed tests in $*"
|
|
||||||
|
|
||||||
test: vanilla-test unit-test
|
test: vanilla-test unit-test
|
||||||
|
|
||||||
vanilla-test: makefile-tests abcopt-tests seed-tests
|
.PHONY: vanilla-test
|
||||||
@echo ""
|
|
||||||
@echo " Passed \"make vanilla-test\"."
|
vanilla-test: $(TARGETS) $(EXTRA_TARGETS)
|
||||||
ifeq ($(ENABLE_VERIFIC),1)
|
@$(MAKE) -C tests vanilla-test \
|
||||||
ifeq ($(YOSYS_NOVERIFIC),1)
|
$(if $(ENABLE_VERIFIC),ENABLE_VERIFIC=$(ENABLE_VERIFIC)) \
|
||||||
@echo " Ran tests without verific support due to YOSYS_NOVERIFIC=1."
|
$(if $(YOSYS_NOVERIFIC),YOSYS_NOVERIFIC=$(YOSYS_NOVERIFIC)) \
|
||||||
endif
|
SEEDOPT=$(SEEDOPT) ABCOPT=$(ABCOPT)
|
||||||
endif
|
|
||||||
@echo ""
|
|
||||||
|
|
||||||
VALGRIND ?= valgrind --error-exitcode=1 --leak-check=full --show-reachable=yes --errors-for-leak-kinds=all
|
VALGRIND ?= valgrind --error-exitcode=1 --leak-check=full --show-reachable=yes --errors-for-leak-kinds=all
|
||||||
|
|
||||||
|
|
@ -1187,16 +1092,8 @@ clean: clean-py clean-unit-test
|
||||||
rm -f $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS) $(EXTRA_OBJS)
|
rm -f $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS) $(EXTRA_OBJS)
|
||||||
rm -f kernel/version_*.o kernel/version_*.cc
|
rm -f kernel/version_*.o kernel/version_*.cc
|
||||||
rm -f libs/*/*.d frontends/*/*.d passes/*/*.d backends/*/*.d kernel/*.d techlibs/*/*.d
|
rm -f libs/*/*.d frontends/*/*.d passes/*/*.d backends/*/*.d kernel/*.d techlibs/*/*.d
|
||||||
rm -rf tests/asicworld/*.out tests/asicworld/*.log
|
|
||||||
rm -rf tests/hana/*.out tests/hana/*.log
|
|
||||||
rm -rf tests/simple/*.out tests/simple/*.log
|
|
||||||
rm -rf tests/memories/*.out tests/memories/*.log tests/memories/*.dmp
|
|
||||||
rm -rf tests/sat/*.log tests/techmap/*.log tests/various/*.log
|
|
||||||
rm -rf tests/bram/temp tests/fsm/temp tests/realmath/temp tests/share/temp tests/smv/temp tests/various/temp
|
|
||||||
rm -rf vloghtb/Makefile vloghtb/refdat vloghtb/rtl vloghtb/scripts vloghtb/spec vloghtb/check_yosys vloghtb/vloghammer_tb.tar.bz2 vloghtb/temp vloghtb/log_test_*
|
rm -rf vloghtb/Makefile vloghtb/refdat vloghtb/rtl vloghtb/scripts vloghtb/spec vloghtb/check_yosys vloghtb/vloghammer_tb.tar.bz2 vloghtb/temp vloghtb/log_test_*
|
||||||
rm -f tests/svinterfaces/*.log_stdout tests/svinterfaces/*.log_stderr tests/svinterfaces/dut_result.txt tests/svinterfaces/reference_result.txt tests/svinterfaces/a.out tests/svinterfaces/*_syn.v tests/svinterfaces/*.diff
|
-$(MAKE) -C $(YOSYS_SRC)/tests clean
|
||||||
rm -f tests/tools/cmp_tbdata
|
|
||||||
rm -f $(addsuffix /run-test.mk,$(MK_TEST_DIRS))
|
|
||||||
-$(MAKE) -C $(YOSYS_SRC)/docs clean
|
-$(MAKE) -C $(YOSYS_SRC)/docs clean
|
||||||
rm -rf docs/util/__pycache__
|
rm -rf docs/util/__pycache__
|
||||||
rm -f libyosys.so
|
rm -f libyosys.so
|
||||||
|
|
|
||||||
2
tests/.gitignore
vendored
2
tests/.gitignore
vendored
|
|
@ -2,3 +2,5 @@
|
||||||
*.out
|
*.out
|
||||||
*.err
|
*.err
|
||||||
run-test.mk
|
run-test.mk
|
||||||
|
**/Makefile
|
||||||
|
*.result
|
||||||
|
|
|
||||||
126
tests/Makefile
Normal file
126
tests/Makefile
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
ifneq ($(wildcard ../Makefile.conf),)
|
||||||
|
include ../Makefile.conf
|
||||||
|
endif
|
||||||
|
|
||||||
|
OVERRIDE_MAIN=1
|
||||||
|
include ./common.mk
|
||||||
|
|
||||||
|
# Directories with tests not run:
|
||||||
|
# errors
|
||||||
|
# lut
|
||||||
|
# pyosys
|
||||||
|
# smv
|
||||||
|
# sva
|
||||||
|
# tools
|
||||||
|
# unit
|
||||||
|
# vloghtb
|
||||||
|
|
||||||
|
# Tests that generate Makefile with gen_tests_makefile.py
|
||||||
|
MK_TEST_DIRS =
|
||||||
|
MK_TEST_DIRS += ./arch/analogdevices
|
||||||
|
MK_TEST_DIRS += ./arch/anlogic
|
||||||
|
MK_TEST_DIRS += ./arch/ecp5
|
||||||
|
MK_TEST_DIRS += ./arch/efinix
|
||||||
|
MK_TEST_DIRS += ./arch/fabulous
|
||||||
|
MK_TEST_DIRS += ./arch/gatemate
|
||||||
|
MK_TEST_DIRS += ./arch/gowin
|
||||||
|
MK_TEST_DIRS += ./arch/ice40
|
||||||
|
MK_TEST_DIRS += ./arch/intel_alm
|
||||||
|
MK_TEST_DIRS += ./arch/machxo2
|
||||||
|
MK_TEST_DIRS += ./arch/microchip
|
||||||
|
MK_TEST_DIRS += ./arch/nanoxplore
|
||||||
|
MK_TEST_DIRS += ./arch/nexus
|
||||||
|
MK_TEST_DIRS += ./arch/quicklogic/pp3
|
||||||
|
MK_TEST_DIRS += ./arch/quicklogic/qlf_k6n10f
|
||||||
|
MK_TEST_DIRS += ./arch/xilinx
|
||||||
|
MK_TEST_DIRS += ./bind
|
||||||
|
MK_TEST_DIRS += ./bugpoint
|
||||||
|
MK_TEST_DIRS += ./opt
|
||||||
|
MK_TEST_DIRS += ./sat
|
||||||
|
MK_TEST_DIRS += ./sdc
|
||||||
|
MK_TEST_DIRS += ./sim
|
||||||
|
MK_TEST_DIRS += ./svtypes
|
||||||
|
MK_TEST_DIRS += ./techmap
|
||||||
|
MK_TEST_DIRS += ./various
|
||||||
|
MK_TEST_DIRS += ./rtlil
|
||||||
|
ifeq ($(ENABLE_VERIFIC),1)
|
||||||
|
ifneq ($(YOSYS_NOVERIFIC),1)
|
||||||
|
MK_TEST_DIRS += ./verific
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
MK_TEST_DIRS += ./verilog
|
||||||
|
MK_TEST_DIRS += ./simple
|
||||||
|
MK_TEST_DIRS += ./simple_abc9
|
||||||
|
MK_TEST_DIRS += ./hana
|
||||||
|
MK_TEST_DIRS += ./asicworld
|
||||||
|
MK_TEST_DIRS += ./realmath
|
||||||
|
MK_TEST_DIRS += ./share
|
||||||
|
MK_TEST_DIRS += ./opt_share
|
||||||
|
MK_TEST_DIRS += ./fsm
|
||||||
|
MK_TEST_DIRS += ./memlib
|
||||||
|
MK_TEST_DIRS += ./bram
|
||||||
|
MK_TEST_DIRS += ./svinterfaces
|
||||||
|
MK_TEST_DIRS += ./xprop
|
||||||
|
MK_TEST_DIRS += ./select
|
||||||
|
MK_TEST_DIRS += ./peepopt
|
||||||
|
MK_TEST_DIRS += ./proc
|
||||||
|
MK_TEST_DIRS += ./blif
|
||||||
|
MK_TEST_DIRS += ./arch
|
||||||
|
MK_TEST_DIRS += ./rpc
|
||||||
|
MK_TEST_DIRS += ./memfile
|
||||||
|
MK_TEST_DIRS += ./fmt
|
||||||
|
MK_TEST_DIRS += ./cxxrtl
|
||||||
|
MK_TEST_DIRS += ./liberty
|
||||||
|
#ifeq ($(ENABLE_FUNCTIONAL_TESTS),1)
|
||||||
|
#MK_TEST_DIRS += ./functional
|
||||||
|
#endif
|
||||||
|
MK_TEST_DIRS += ./memories
|
||||||
|
MK_TEST_DIRS += ./aiger
|
||||||
|
MK_TEST_DIRS += ./alumacc
|
||||||
|
|
||||||
|
all: vanilla-test
|
||||||
|
|
||||||
|
# makefile-./ is a dummy string, not a directory
|
||||||
|
.PHONY: makefile-tests
|
||||||
|
.SILENT: $(MK_TEST_DIRS:%=%/Makefile)
|
||||||
|
makefile-tests: $(MK_TEST_DIRS:%=makefile-./%)
|
||||||
|
prep: $(MK_TEST_DIRS:%=%/Makefile)
|
||||||
|
@echo "All Makefiles generated."
|
||||||
|
|
||||||
|
.PHONY: force-create
|
||||||
|
# this target actually emits Makefile files
|
||||||
|
%/Makefile: force-create
|
||||||
|
+@cd $* && python3 generate_mk.py
|
||||||
|
|
||||||
|
makefile-./%: %/Makefile
|
||||||
|
@$(MAKE) -C $*
|
||||||
|
@echo "...passed tests in $*"
|
||||||
|
|
||||||
|
.PHONY: functional
|
||||||
|
functional:
|
||||||
|
ifeq ($(ENABLE_FUNCTIONAL_TESTS),1)
|
||||||
|
@cd functional && ./run-test.sh
|
||||||
|
endif
|
||||||
|
|
||||||
|
vanilla-test: prep makefile-tests functional
|
||||||
|
@echo ""
|
||||||
|
@echo " Passed \"make vanilla-test\"."
|
||||||
|
ifeq ($(ENABLE_VERIFIC),1)
|
||||||
|
ifeq ($(YOSYS_NOVERIFIC),1)
|
||||||
|
@echo " Ran tests without verific support due to YOSYS_NOVERIFIC=1."
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
@echo ""
|
||||||
|
@$(MAKE) --no-print-directory summary
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -rf ./asicworld/*.out ./asicworld/*.log
|
||||||
|
@rm -rf ./hana/*.out ./hana/*.log
|
||||||
|
@rm -rf ./simple/*.out ./simple/*.log
|
||||||
|
@rm -rf ./memories/*.out ./memories/*.log ./memories/*.dmp
|
||||||
|
@rm -rf ./sat/*.log ./techmap/*.log ./various/*.log
|
||||||
|
@rm -rf ./bram/temp ./fsm/temp ./realmath/temp ./share/temp ./smv/temp ./various/temp
|
||||||
|
@rm -f ./svinterfaces/*.log_stdout ./svinterfaces/*.log_stderr ./svinterfaces/dut_result.txt ./svinterfaces/reference_result.txt ./svinterfaces/a.out ./svinterfaces/*_syn.v ./svinterfaces/*.diff
|
||||||
|
@rm -f ./tools/cmp_tbdata
|
||||||
|
@rm -f $(addsuffix /Makefile,$(MK_TEST_DIRS))
|
||||||
|
@find . -name '*.result' -type f -exec rm -f {} +
|
||||||
59
tests/aiger/generate_mk.py
Normal file
59
tests/aiger/generate_mk.py
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
|
||||||
|
def base(fn):
|
||||||
|
return os.path.splitext(fn)[0]
|
||||||
|
|
||||||
|
def cmd(lines):
|
||||||
|
return " \\\n".join(lines)
|
||||||
|
|
||||||
|
# NB: *.aag and *.aig must contain a symbol table naming the primary
|
||||||
|
# inputs and outputs, otherwise ABC and Yosys will name them
|
||||||
|
# arbitrarily (and inconsistently with each other).
|
||||||
|
|
||||||
|
# Since ABC cannot read *.aag, read the *.aig instead
|
||||||
|
# (which would have been created by the reference aig2aig utility,
|
||||||
|
# available from http://fmv.jku.at/aiger/)
|
||||||
|
def create_tests():
|
||||||
|
aags = sorted(glob.glob("*.aag"))
|
||||||
|
yss = sorted(glob.glob("*.ys"))
|
||||||
|
for aag in aags:
|
||||||
|
b = base(aag)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_target(aag, cmd([
|
||||||
|
f"$(ABC) -q \"read -c {b}.aig; write {b}_ref.v\";",
|
||||||
|
"$(YOSYS) -qp \"",
|
||||||
|
f"read_verilog {b}_ref.v;",
|
||||||
|
"prep;",
|
||||||
|
"design -stash gold;",
|
||||||
|
f"read_aiger -clk_name clock {aag};",
|
||||||
|
"prep;",
|
||||||
|
"design -stash gate;",
|
||||||
|
"design -import gold -as gold;",
|
||||||
|
"design -import gate -as gate;",
|
||||||
|
"miter -equiv -flatten -make_assert -make_outputs gold gate miter;",
|
||||||
|
"sat -verify -prove-asserts -show-ports -seq 16 miter;",
|
||||||
|
f"\" -l {aag}.log"
|
||||||
|
]))
|
||||||
|
|
||||||
|
# ---- Yosys script tests ----
|
||||||
|
for ys in yss:
|
||||||
|
gen_tests_makefile.generate_ys_test(ys)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_target("aigmap", cmd([
|
||||||
|
"rm -rf gate; mkdir gate;",
|
||||||
|
"$(YOSYS) --no-version -p \"test_cell -aigmap -w gate/ -n 1 -s 1 all\";",
|
||||||
|
"set -o pipefail; diff --brief gold gate | tee aigmap.err;",
|
||||||
|
"rm -f aigmap.err"
|
||||||
|
]))
|
||||||
|
|
||||||
|
extra = [ f"ABC ?= {gen_tests_makefile.yosys_basedir}/yosys-abc", "SHELL := /bin/bash" ]
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(create_tests, extra)
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
abcprog="../../yosys-abc" # default to built-in version of abc
|
|
||||||
while getopts "A:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
A) abcprog="$OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
# NB: *.aag and *.aig must contain a symbol table naming the primary
|
|
||||||
# inputs and outputs, otherwise ABC and Yosys will name them
|
|
||||||
# arbitrarily (and inconsistently with each other).
|
|
||||||
|
|
||||||
for aag in *.aag; do
|
|
||||||
# Since ABC cannot read *.aag, read the *.aig instead
|
|
||||||
# (which would have been created by the reference aig2aig utility,
|
|
||||||
# available from http://fmv.jku.at/aiger/)
|
|
||||||
echo "Checking $aag."
|
|
||||||
$abcprog -q "read -c ${aag%.*}.aig; write ${aag%.*}_ref.v"
|
|
||||||
../../yosys -qp "
|
|
||||||
read_verilog ${aag%.*}_ref.v
|
|
||||||
prep
|
|
||||||
design -stash gold
|
|
||||||
read_aiger -clk_name clock $aag
|
|
||||||
prep
|
|
||||||
design -stash gate
|
|
||||||
design -import gold -as gold
|
|
||||||
design -import gate -as gate
|
|
||||||
miter -equiv -flatten -make_assert -make_outputs gold gate miter
|
|
||||||
sat -verify -prove-asserts -show-ports -seq 16 miter
|
|
||||||
" -l ${aag}.log
|
|
||||||
done
|
|
||||||
|
|
||||||
for aig in *.aig; do
|
|
||||||
echo "Checking $aig."
|
|
||||||
$abcprog -q "read -c $aig; write ${aig%.*}_ref.v"
|
|
||||||
../../yosys -qp "
|
|
||||||
read_verilog ${aig%.*}_ref.v
|
|
||||||
prep
|
|
||||||
design -stash gold
|
|
||||||
read_aiger -clk_name clock $aig
|
|
||||||
prep
|
|
||||||
design -stash gate
|
|
||||||
design -import gold -as gold
|
|
||||||
design -import gate -as gate
|
|
||||||
miter -equiv -flatten -make_assert -make_outputs gold gate miter
|
|
||||||
sat -verify -prove-asserts -show-ports -seq 16 miter
|
|
||||||
" -l ${aig}.log
|
|
||||||
done
|
|
||||||
|
|
||||||
for y in *.ys; do
|
|
||||||
echo "Running $y."
|
|
||||||
../../yosys -ql ${y%.*}.log $y
|
|
||||||
done
|
|
||||||
|
|
||||||
# compare aigmap with reference
|
|
||||||
# make gold with: rm gold/*; yosys --no-version -p "test_cell -aigmap -w gold/ -n 1 -s 1 all"
|
|
||||||
rm -rf gate; mkdir gate
|
|
||||||
../../yosys --no-version -p "test_cell -aigmap -w gate/ -n 1 -s 1 all"
|
|
||||||
(
|
|
||||||
set -o pipefail
|
|
||||||
diff --brief gold gate | tee aigmap.err
|
|
||||||
)
|
|
||||||
rm aigmap.err
|
|
||||||
8
tests/alumacc/generate_mk.py
Normal file
8
tests/alumacc/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
9
tests/arch/analogdevices/generate_mk.py
Normal file
9
tests/arch/analogdevices/generate_mk.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
import mem_gen
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
python3 mem_gen.py
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash
|
|
||||||
8
tests/arch/anlogic/generate_mk.py
Normal file
8
tests/arch/anlogic/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/ecp5/generate_mk.py
Normal file
8
tests/arch/ecp5/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/efinix/generate_mk.py
Normal file
8
tests/arch/efinix/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
|
|
@ -13,7 +13,7 @@ design -load postopt # load the post-opt design (otherwise equiv_opt loads the p
|
||||||
cd fsm # Constrain all select calls below inside the top module
|
cd fsm # Constrain all select calls below inside the top module
|
||||||
|
|
||||||
select -assert-count 6 t:LUTFF
|
select -assert-count 6 t:LUTFF
|
||||||
select -assert-max 4 t:LUT2
|
select -assert-max 5 t:LUT2
|
||||||
select -assert-max 2 t:LUT3
|
select -assert-max 4 t:LUT3
|
||||||
select -assert-max 9 t:LUT4
|
select -assert-max 8 t:LUT4
|
||||||
select -assert-none t:LUT2 t:LUT3 t:LUT4 t:LUTFF %% t:* %D
|
select -assert-none t:LUT2 t:LUT3 t:LUT4 t:LUTFF %% t:* %D
|
||||||
|
|
|
||||||
8
tests/arch/fabulous/generate_mk.py
Normal file
8
tests/arch/fabulous/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
8
tests/arch/gatemate/generate_mk.py
Normal file
8
tests/arch/gatemate/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
52
tests/arch/generate_mk.py
Normal file
52
tests/arch/generate_mk.py
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
techlibs_dir = Path("../../techlibs")
|
||||||
|
|
||||||
|
# Architecture-specific defines
|
||||||
|
defines = {
|
||||||
|
"ice40": ["ICE40_HX", "ICE40_LP", "ICE40_U"]
|
||||||
|
}
|
||||||
|
|
||||||
|
def archs():
|
||||||
|
# Loop over architectures
|
||||||
|
for arch in techlibs_dir.iterdir():
|
||||||
|
if not arch.is_dir():
|
||||||
|
continue
|
||||||
|
arch_name = arch.name
|
||||||
|
|
||||||
|
for path in arch.rglob("cells_sim.v"):
|
||||||
|
rel_parts = path.relative_to(techlibs_dir).parts
|
||||||
|
target_base = "_".join(rel_parts[-len(rel_parts):]).replace(".v", "")
|
||||||
|
path_str = str(path)
|
||||||
|
if arch_name in defines:
|
||||||
|
for defn in defines[arch_name]:
|
||||||
|
target_name = f"{target_base}_{defn}"
|
||||||
|
cmd = f"iverilog -t null -I{arch} -D{defn} -DNO_ICE40_DEFAULT_ASSIGNMENTS {path_str}"
|
||||||
|
gen_tests_makefile.generate_target(target_name, cmd)
|
||||||
|
else:
|
||||||
|
target_name = f"{target_base}"
|
||||||
|
cmd = f"iverilog -t null -I{arch} -g2005-sv {path_str}"
|
||||||
|
gen_tests_makefile.generate_target(target_name, cmd)
|
||||||
|
|
||||||
|
def common():
|
||||||
|
for path in ["../../techlibs/common/simcells.v", "../../techlibs/common/simlib.v"]:
|
||||||
|
path_obj = Path(path)
|
||||||
|
target_name = path_obj.stem
|
||||||
|
cmd = f"iverilog -t null {path}"
|
||||||
|
gen_tests_makefile.generate_target(target_name, cmd)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
def callback():
|
||||||
|
archs()
|
||||||
|
common()
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(callback)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
8
tests/arch/gowin/generate_mk.py
Normal file
8
tests/arch/gowin/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/ice40/generate_mk.py
Normal file
8
tests/arch/ice40/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/intel_alm/generate_mk.py
Normal file
8
tests/arch/intel_alm/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/machxo2/generate_mk.py
Normal file
8
tests/arch/machxo2/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/microchip/generate_mk.py
Normal file
8
tests/arch/microchip/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/nanoxplore/generate_mk.py
Normal file
8
tests/arch/nanoxplore/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/nexus/generate_mk.py
Normal file
8
tests/arch/nexus/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/arch/quicklogic/pp3/generate_mk.py
Normal file
8
tests/arch/quicklogic/pp3/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
9
tests/arch/quicklogic/qlf_k6n10f/generate_mk.py
Normal file
9
tests/arch/quicklogic/qlf_k6n10f/generate_mk.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
import mem_gen
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
python3 mem_gen.py
|
|
||||||
source ../../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
declare -A defines=( ["ice40"]="ICE40_HX ICE40_LP ICE40_U" )
|
|
||||||
|
|
||||||
echo "Running syntax check on arch sim models"
|
|
||||||
for arch in ../../techlibs/*; do
|
|
||||||
find $arch -name cells_sim.v | while read path; do
|
|
||||||
arch_name=$(basename -- $arch)
|
|
||||||
if [ "${defines[$arch_name]}" ]; then
|
|
||||||
for def in ${defines[$arch_name]}; do
|
|
||||||
echo -n "Test $path -D$def ->"
|
|
||||||
iverilog -t null -I$arch -D$def -DNO_ICE40_DEFAULT_ASSIGNMENTS $path
|
|
||||||
echo " ok"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo -n "Test $path ->"
|
|
||||||
iverilog -t null -I$arch -g2005-sv $path
|
|
||||||
echo " ok"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
for path in "../../techlibs/common/simcells.v" "../../techlibs/common/simlib.v"; do
|
|
||||||
echo -n "Test $path ->"
|
|
||||||
iverilog -t null $path
|
|
||||||
echo " ok"
|
|
||||||
done
|
|
||||||
8
tests/arch/xilinx/generate_mk.py
Normal file
8
tests/arch/xilinx/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("../..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash", "--yosys-args", "-w 'Yosys has only limited support for tri-state logic at the moment.'" ])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash --yosys-args "-w 'Yosys has only limited support for tri-state logic at the moment.'"
|
|
||||||
8
tests/asicworld/generate_mk.py
Normal file
8
tests/asicworld/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_autotest("*.v", "-e")
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space
|
|
||||||
seed="SEED=$arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS+="-e" *.v
|
|
||||||
8
tests/bind/generate_mk.py
Normal file
8
tests/bind/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
{
|
|
||||||
echo "all::"
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "all:: run-$x"
|
|
||||||
echo "run-$x:"
|
|
||||||
echo " @echo 'Running $x..'"
|
|
||||||
echo " @../../yosys -ql ${x%.ys}.log $x"
|
|
||||||
done
|
|
||||||
for s in *.sh; do
|
|
||||||
if [ "$s" != "run-test.sh" ]; then
|
|
||||||
echo "all:: run-$s"
|
|
||||||
echo "run-$s:"
|
|
||||||
echo " @echo 'Running $s..'"
|
|
||||||
echo " @bash $s"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
} > run-test.mk
|
|
||||||
exec ${MAKE:-make} -f run-test.mk
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
# Generated by Yosys
|
|
||||||
|
|
||||||
.model test
|
.model test
|
||||||
.inputs clk in_a_var[0] in_a_var[1] in_a_var[2] in_a_var[3] in_a_var[4] in_a_var[5] in_a_var[6] in_a_var[7] in_b_var[0] in_b_var[1] in_b_var[2] in_b_var[3] in_b_var[4] in_b_var[5] in_b_var[6] in_b_var[7]
|
.inputs clk in_a_var[0] in_a_var[1] in_a_var[2] in_a_var[3] in_a_var[4] in_a_var[5] in_a_var[6] in_a_var[7] in_b_var[0] in_b_var[1] in_b_var[2] in_b_var[3] in_b_var[4] in_b_var[5] in_b_var[6] in_b_var[7]
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,4 @@
|
||||||
read_blif gatesi.blif
|
read_blif gatesi.blif
|
||||||
write_blif -gatesi gatesi.blif.out
|
write_blif -gatesi gatesi.blif.out
|
||||||
|
! tail -n +2 gatesi.blif.out > gatesi.blif.out.tmp && mv gatesi.blif.out.tmp gatesi.blif.out
|
||||||
|
! diff gatesi.blif.out gatesi.blif.ok
|
||||||
|
|
|
||||||
8
tests/blif/generate_mk.py
Normal file
8
tests/blif/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys --no-version -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
|
|
||||||
for x in *.blif; do
|
|
||||||
diff $x.out $x.ok
|
|
||||||
done
|
|
||||||
|
|
@ -4,6 +4,10 @@ import argparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
|
import glob
|
||||||
|
|
||||||
|
sys.path.append("..")
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
debug_mode = False
|
debug_mode = False
|
||||||
|
|
||||||
|
|
@ -287,9 +291,11 @@ if args.seed is not None:
|
||||||
else:
|
else:
|
||||||
seed = (int(os.times()[4]*100) + os.getpid()) % 900000 + 100000
|
seed = (int(os.times()[4]*100) + os.getpid()) % 900000 + 100000
|
||||||
|
|
||||||
print("PRNG seed: %d" % seed)
|
print("bram PRNG seed: %d" % seed)
|
||||||
random.seed(seed)
|
random.seed(seed)
|
||||||
|
|
||||||
|
os.makedirs("temp", exist_ok=True)
|
||||||
|
|
||||||
for k1 in range(args.count):
|
for k1 in range(args.count):
|
||||||
dsc_f = open("temp/brams_%02d.txt" % k1, "w")
|
dsc_f = open("temp/brams_%02d.txt" % k1, "w")
|
||||||
sim_f = open("temp/brams_%02d.v" % k1, "w")
|
sim_f = open("temp/brams_%02d.v" % k1, "w")
|
||||||
|
|
@ -303,3 +309,19 @@ for k1 in range(args.count):
|
||||||
for k2 in range(lenk2):
|
for k2 in range(lenk2):
|
||||||
create_bram(dsc_f, sim_f, ref_f, tb_f, k1, k2, random.randrange(2 if k2+1 < lenk2 else 1))
|
create_bram(dsc_f, sim_f, ref_f, tb_f, k1, k2, random.randrange(2 if k2+1 < lenk2 else 1))
|
||||||
|
|
||||||
|
configs = sorted(set(
|
||||||
|
os.path.basename(f).replace("brams_", "").replace(".txt", "")
|
||||||
|
for f in glob.glob("temp/brams_*.txt")
|
||||||
|
))
|
||||||
|
|
||||||
|
def create_tests():
|
||||||
|
for i in configs:
|
||||||
|
for j in configs:
|
||||||
|
if i != j:
|
||||||
|
gen_tests_makefile.generate_cmd_test(
|
||||||
|
f"bram_{i}_{j}",
|
||||||
|
f"bash run-single.sh {i} {j}"
|
||||||
|
)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(create_tests)
|
||||||
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
# run this test many times:
|
|
||||||
# MAKE="make -j8" time bash -c 'for ((i=0; i<100; i++)); do echo "-- $i --"; bash run-test.sh || exit 1; done'
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
count=5
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
debug=""
|
|
||||||
while getopts "c:dS:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
c) count="$OPTARG" ;;
|
|
||||||
d) debug="-d" ;;
|
|
||||||
S) seed="-S $OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
rm -rf temp
|
|
||||||
mkdir -p temp
|
|
||||||
|
|
||||||
echo "generating tests.."
|
|
||||||
python3 generate.py $debug -c $count $seed
|
|
||||||
|
|
||||||
{
|
|
||||||
echo -n "all:"
|
|
||||||
for i in $( ls temp/brams_*.txt | sed 's,.*_,,; s,\..*,,;' ); do
|
|
||||||
for j in $( ls temp/brams_*.txt | sed 's,.*_,,; s,\..*,,;' | grep -v $i ); do
|
|
||||||
echo -n " temp/job_${i}_${j}.ok"
|
|
||||||
done; done
|
|
||||||
echo
|
|
||||||
for i in $( ls temp/brams_*.txt | sed 's,.*_,,; s,\..*,,;' ); do
|
|
||||||
for j in $( ls temp/brams_*.txt | sed 's,.*_,,; s,\..*,,;' | grep -v $i ); do
|
|
||||||
echo "temp/job_${i}_${j}.ok:"
|
|
||||||
echo " @bash run-single.sh ${i} ${j}"
|
|
||||||
echo " @echo 'Passed memory_bram test ${i}_${j}.'"
|
|
||||||
echo " @touch \$@"
|
|
||||||
done; done
|
|
||||||
} > temp/makefile
|
|
||||||
|
|
||||||
echo "running tests.."
|
|
||||||
${MAKE:-make} -f temp/makefile
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
8
tests/bugpoint/generate_mk.py
Normal file
8
tests/bugpoint/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
export YOSYS_MAX_THREADS=4
|
|
||||||
44
tests/common.mk
Normal file
44
tests/common.mk
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
all:
|
||||||
|
|
||||||
|
ifndef OVERRIDE_MAIN
|
||||||
|
clean:
|
||||||
|
@rm -f *.log *.result
|
||||||
|
endif
|
||||||
|
|
||||||
|
define run_test
|
||||||
|
@set -e; \
|
||||||
|
rc=0; \
|
||||||
|
( set -e; $(2) ) >/dev/null 2>&1 || rc=$$?; \
|
||||||
|
if [ $$rc -eq 0 ]; then \
|
||||||
|
echo "PASS $1"; \
|
||||||
|
echo PASS > $1.result; \
|
||||||
|
else \
|
||||||
|
echo "FAIL $1"; \
|
||||||
|
echo FAIL > $1.result; \
|
||||||
|
fi
|
||||||
|
endef
|
||||||
|
|
||||||
|
.PHONY: summary
|
||||||
|
summary:
|
||||||
|
@pass=$$(find . -type f -name '*.result' -exec grep '^PASS$$' {} + | wc -l); \
|
||||||
|
fail=$$(find . -type f -name '*.result' -exec grep '^FAIL$$' {} + | wc -l); \
|
||||||
|
total=$$((pass + fail)); \
|
||||||
|
echo "=========================="; \
|
||||||
|
echo "Tests: $$total"; \
|
||||||
|
echo "Passed: $$pass"; \
|
||||||
|
echo "Failed: $$fail"; \
|
||||||
|
echo "=========================="; \
|
||||||
|
if [ $$fail -ne 0 ]; then \
|
||||||
|
echo; \
|
||||||
|
$(MAKE) --no-print-directory report; \
|
||||||
|
fi; \
|
||||||
|
test $$fail -eq 0
|
||||||
|
|
||||||
|
.PHONY: report
|
||||||
|
report:
|
||||||
|
@echo "=========================="
|
||||||
|
@echo "Failing tests:"
|
||||||
|
@find . -name '*.result' -type f -exec grep -H '^FAIL$$' {} + \
|
||||||
|
| cut -d: -f1 \
|
||||||
|
| sed 's|^\./||; s|\.result$$||'
|
||||||
|
@echo "=========================="
|
||||||
29
tests/cxxrtl/generate_mk.py
Normal file
29
tests/cxxrtl/generate_mk.py
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
def run_subtest(name):
|
||||||
|
gen_tests_makefile.generate_cmd_test(f"cxxrtl_{name}", [
|
||||||
|
f"$${{CXX:-g++}} -std=c++11 -O2 -o cxxrtl-test-{name} -I../../backends/cxxrtl/runtime test_{name}.cc -lstdc++",
|
||||||
|
f"./cxxrtl-test-{name}",
|
||||||
|
])
|
||||||
|
|
||||||
|
def compile_only():
|
||||||
|
gen_tests_makefile.generate_cmd_test("cxxrtl_unconnected_output", [
|
||||||
|
'$(YOSYS) -p "read_verilog test_unconnected_output.v; select =*; proc; clean; write_cxxrtl cxxrtl-test-unconnected_output.cc"',
|
||||||
|
f'$${{CXX:-g++}} -std=c++11 -c -o cxxrtl-test-unconnected_output -I../../backends/cxxrtl/runtime cxxrtl-test-unconnected_output.cc',
|
||||||
|
])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
def callback():
|
||||||
|
run_subtest("value")
|
||||||
|
run_subtest("value_fuzz")
|
||||||
|
compile_only()
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(callback)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
run_subtest () {
|
|
||||||
local subtest=$1; shift
|
|
||||||
|
|
||||||
${CXX:-g++} -std=c++11 -O2 -o cxxrtl-test-${subtest} -I../../backends/cxxrtl/runtime test_${subtest}.cc -lstdc++
|
|
||||||
./cxxrtl-test-${subtest}
|
|
||||||
}
|
|
||||||
|
|
||||||
run_subtest value
|
|
||||||
run_subtest value_fuzz
|
|
||||||
|
|
||||||
# Compile-only test.
|
|
||||||
../../yosys -p "read_verilog test_unconnected_output.v; select =*; proc; clean; write_cxxrtl cxxrtl-test-unconnected_output.cc"
|
|
||||||
${CXX:-g++} -std=c++11 -c -o cxxrtl-test-unconnected_output -I../../backends/cxxrtl/runtime cxxrtl-test-unconnected_output.cc
|
|
||||||
116
tests/fmt/generate_mk.py
Normal file
116
tests/fmt/generate_mk.py
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
def initial_display():
|
||||||
|
gen_tests_makefile.generate_cmd_test("initial_display", [
|
||||||
|
f"$(YOSYS) -p \"read_verilog initial_display.v\" | awk '/<<<BEGIN>>>/,/<<<END>>>/ {{print $$0}}' >yosys-initial_display.log 2>&1",
|
||||||
|
"iverilog -o iverilog-initial_display initial_display.v",
|
||||||
|
"./iverilog-initial_display >iverilog-initial_display.log",
|
||||||
|
"diff yosys-initial_display.log iverilog-initial_display.log",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def always_display():
|
||||||
|
cases = [
|
||||||
|
("clk", "-DEVENT_CLK"),
|
||||||
|
("clk_rst", "-DEVENT_CLK_RST"),
|
||||||
|
("star", "-DEVENT_STAR"),
|
||||||
|
("clk_en", "-DEVENT_CLK -DCOND_EN"),
|
||||||
|
("clk_rst_en", "-DEVENT_CLK_RST -DCOND_EN"),
|
||||||
|
("star_en", "-DEVENT_STAR -DCOND_EN"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for name, defs in cases:
|
||||||
|
gen_tests_makefile.generate_cmd_test(f"always_display_{name}", [
|
||||||
|
f"$(YOSYS) -p \"read_verilog {defs} always_display.v; proc; opt_expr -mux_bool; clean\" -o yosys-always_display-{name}-1.v",
|
||||||
|
f"$(YOSYS) -p \"read_verilog yosys-always_display-{name}-1.v; proc; opt_expr -mux_bool; clean\" -o yosys-always_display-{name}-2.v",
|
||||||
|
f"diff yosys-always_display-{name}-1.v yosys-always_display-{name}-2.v",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def roundtrip():
|
||||||
|
cases = [
|
||||||
|
("dec_unsigned", '-DBASE_DEC -DSIGN=""'),
|
||||||
|
("dec_signed", '-DBASE_DEC -DSIGN="signed"'),
|
||||||
|
("hex_unsigned", '-DBASE_HEX -DSIGN=""'),
|
||||||
|
("hex_signed", '-DBASE_HEX -DSIGN="signed"'),
|
||||||
|
("oct_unsigned", '-DBASE_HEX -DSIGN=""'),
|
||||||
|
("oct_signed", '-DBASE_HEX -DSIGN="signed"'),
|
||||||
|
("bin_unsigned", '-DBASE_HEX -DSIGN=""'),
|
||||||
|
("bin_signed", '-DBASE_HEX -DSIGN="signed"'),
|
||||||
|
]
|
||||||
|
|
||||||
|
for name, defs in cases:
|
||||||
|
gen_tests_makefile.generate_cmd_test(f"roundtrip_{name}", [
|
||||||
|
f"$(YOSYS) -p \"read_verilog {defs} roundtrip.v; proc; clean\" -o yosys-roundtrip-{name}-1.v",
|
||||||
|
f"$(YOSYS) -p \"read_verilog yosys-roundtrip-{name}-1.v; proc; clean\" -o yosys-roundtrip-{name}-2.v",
|
||||||
|
f"diff yosys-roundtrip-{name}-1.v yosys-roundtrip-{name}-2.v",
|
||||||
|
|
||||||
|
f"iverilog {defs} -o iverilog-roundtrip-{name} roundtrip.v roundtrip_tb.v",
|
||||||
|
f"./iverilog-roundtrip-{name} >iverilog-roundtrip-{name}.log",
|
||||||
|
|
||||||
|
f"iverilog {defs} -o iverilog-roundtrip-{name}-1 yosys-roundtrip-{name}-1.v roundtrip_tb.v",
|
||||||
|
f"./iverilog-roundtrip-{name}-1 >iverilog-roundtrip-{name}-1.log",
|
||||||
|
|
||||||
|
f"iverilog {defs} -o iverilog-roundtrip-{name}-2 yosys-roundtrip-{name}-2.v roundtrip_tb.v",
|
||||||
|
f"./iverilog-roundtrip-{name}-2 >iverilog-roundtrip-{name}-2.log",
|
||||||
|
|
||||||
|
f"diff iverilog-roundtrip-{name}.log iverilog-roundtrip-{name}-1.log",
|
||||||
|
f"diff iverilog-roundtrip-{name}-1.log iverilog-roundtrip-{name}-2.log",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def cxxrtl():
|
||||||
|
cases = ["always_full", "always_comb"]
|
||||||
|
|
||||||
|
for name in cases:
|
||||||
|
gen_tests_makefile.generate_cmd_test(f"cxxrtl_{name}", [
|
||||||
|
f"$(YOSYS) -p \"read_verilog {name}.v; proc; clean; write_cxxrtl -print-output std::cerr yosys-{name}.cc\"",
|
||||||
|
f"$${{CXX:-g++}} -std=c++11 -o yosys-{name} -I../../backends/cxxrtl/runtime {name}_tb.cc -lstdc++",
|
||||||
|
f"./yosys-{name} 2>yosys-{name}.log",
|
||||||
|
|
||||||
|
f"iverilog -o iverilog-{name} {name}.v {name}_tb.v",
|
||||||
|
f"./iverilog-{name} | grep -v \"$finish called\" >iverilog-{name}.log",
|
||||||
|
|
||||||
|
f"diff iverilog-{name}.log yosys-{name}.log",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def extra():
|
||||||
|
gen_tests_makefile.generate_cmd_test("always_full_equiv", [
|
||||||
|
"$(YOSYS) -p \"read_verilog always_full.v; prep; clean\" -o yosys-always_full-1.v",
|
||||||
|
"iverilog -o iverilog-always_full-1 yosys-always_full-1.v always_full_tb.v",
|
||||||
|
"./iverilog-always_full-1 > tmp.log",
|
||||||
|
"grep -v '\\$finish called' tmp.log > iverilog-always_full-1.log",
|
||||||
|
"diff iverilog-always_full.log iverilog-always_full-1.log",
|
||||||
|
], deps=["cxxrtl_always_full"])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("display_lm", [
|
||||||
|
"$(YOSYS) -p \"read_verilog display_lm.v\" >yosys-display_lm.log 2>&1",
|
||||||
|
"$(YOSYS) -p \"read_verilog display_lm.v; write_cxxrtl yosys-display_lm.cc\"",
|
||||||
|
f"$${{CXX:-g++}} -std=c++11 -o yosys-display_lm_cc -I../../backends/cxxrtl/runtime display_lm_tb.cc -lstdc++",
|
||||||
|
"./yosys-display_lm_cc >yosys-display_lm_cc.log",
|
||||||
|
"grep \"^%l: \\\\\\bot\\$$\" \"yosys-display_lm.log\"",
|
||||||
|
"grep \"^%m: \\\\\\bot\\$$\" \"yosys-display_lm.log\"",
|
||||||
|
"grep \"^%l: \\\\\\bot\\$$\" \"yosys-display_lm_cc.log\"",
|
||||||
|
"grep \"^%m: \\\\\\bot\\$$\" \"yosys-display_lm_cc.log\"",
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
def callback():
|
||||||
|
initial_display()
|
||||||
|
always_display()
|
||||||
|
roundtrip()
|
||||||
|
cxxrtl()
|
||||||
|
extra()
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(callback)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
../../yosys -p 'read_verilog initial_display.v' | awk '/<<<BEGIN>>>/,/<<<END>>>/ {print $0}' >yosys-initial_display.log
|
|
||||||
iverilog -o iverilog-initial_display initial_display.v
|
|
||||||
./iverilog-initial_display >iverilog-initial_display.log
|
|
||||||
diff yosys-initial_display.log iverilog-initial_display.log
|
|
||||||
|
|
||||||
test_always_display () {
|
|
||||||
local subtest=$1; shift
|
|
||||||
../../yosys -p "read_verilog $* always_display.v; proc; opt_expr -mux_bool; clean" -o yosys-always_display-${subtest}-1.v
|
|
||||||
../../yosys -p "read_verilog yosys-always_display-${subtest}-1.v; proc; opt_expr -mux_bool; clean" -o yosys-always_display-${subtest}-2.v
|
|
||||||
diff yosys-always_display-${subtest}-1.v yosys-always_display-${subtest}-2.v
|
|
||||||
}
|
|
||||||
|
|
||||||
test_always_display clk -DEVENT_CLK
|
|
||||||
test_always_display clk_rst -DEVENT_CLK_RST
|
|
||||||
test_always_display star -DEVENT_STAR
|
|
||||||
|
|
||||||
test_always_display clk_en -DEVENT_CLK -DCOND_EN
|
|
||||||
test_always_display clk_rst_en -DEVENT_CLK_RST -DCOND_EN
|
|
||||||
test_always_display star_en -DEVENT_STAR -DCOND_EN
|
|
||||||
|
|
||||||
test_roundtrip () {
|
|
||||||
local subtest=$1; shift
|
|
||||||
../../yosys -p "read_verilog $* roundtrip.v; proc; clean" -o yosys-roundtrip-${subtest}-1.v
|
|
||||||
../../yosys -p "read_verilog yosys-roundtrip-${subtest}-1.v; proc; clean" -o yosys-roundtrip-${subtest}-2.v
|
|
||||||
diff yosys-roundtrip-${subtest}-1.v yosys-roundtrip-${subtest}-2.v
|
|
||||||
|
|
||||||
iverilog $* -o iverilog-roundtrip-${subtest} roundtrip.v roundtrip_tb.v
|
|
||||||
./iverilog-roundtrip-${subtest} >iverilog-roundtrip-${subtest}.log
|
|
||||||
iverilog $* -o iverilog-roundtrip-${subtest}-1 yosys-roundtrip-${subtest}-1.v roundtrip_tb.v
|
|
||||||
./iverilog-roundtrip-${subtest}-1 >iverilog-roundtrip-${subtest}-1.log
|
|
||||||
iverilog $* -o iverilog-roundtrip-${subtest}-2 yosys-roundtrip-${subtest}-2.v roundtrip_tb.v
|
|
||||||
./iverilog-roundtrip-${subtest}-1 >iverilog-roundtrip-${subtest}-2.log
|
|
||||||
diff iverilog-roundtrip-${subtest}.log iverilog-roundtrip-${subtest}-1.log
|
|
||||||
diff iverilog-roundtrip-${subtest}-1.log iverilog-roundtrip-${subtest}-2.log
|
|
||||||
}
|
|
||||||
|
|
||||||
test_roundtrip dec_unsigned -DBASE_DEC -DSIGN=""
|
|
||||||
test_roundtrip dec_signed -DBASE_DEC -DSIGN="signed"
|
|
||||||
test_roundtrip hex_unsigned -DBASE_HEX -DSIGN=""
|
|
||||||
test_roundtrip hex_signed -DBASE_HEX -DSIGN="signed"
|
|
||||||
test_roundtrip oct_unsigned -DBASE_HEX -DSIGN=""
|
|
||||||
test_roundtrip oct_signed -DBASE_HEX -DSIGN="signed"
|
|
||||||
test_roundtrip bin_unsigned -DBASE_HEX -DSIGN=""
|
|
||||||
test_roundtrip bin_signed -DBASE_HEX -DSIGN="signed"
|
|
||||||
|
|
||||||
test_cxxrtl () {
|
|
||||||
local subtest=$1; shift
|
|
||||||
|
|
||||||
../../yosys -p "read_verilog ${subtest}.v; proc; clean; write_cxxrtl -print-output std::cerr yosys-${subtest}.cc"
|
|
||||||
${CXX:-g++} -std=c++11 -o yosys-${subtest} -I../../backends/cxxrtl/runtime ${subtest}_tb.cc -lstdc++
|
|
||||||
./yosys-${subtest} 2>yosys-${subtest}.log
|
|
||||||
iverilog -o iverilog-${subtest} ${subtest}.v ${subtest}_tb.v
|
|
||||||
./iverilog-${subtest} |grep -v '\$finish called' >iverilog-${subtest}.log
|
|
||||||
diff iverilog-${subtest}.log yosys-${subtest}.log
|
|
||||||
}
|
|
||||||
|
|
||||||
test_cxxrtl always_full
|
|
||||||
test_cxxrtl always_comb
|
|
||||||
|
|
||||||
# Ensure Verilog backend preserves behaviour of always block with multiple $displays.
|
|
||||||
../../yosys -p "read_verilog always_full.v; prep; clean" -o yosys-always_full-1.v
|
|
||||||
iverilog -o iverilog-always_full-1 yosys-always_full-1.v always_full_tb.v
|
|
||||||
./iverilog-always_full-1 |grep -v '\$finish called' >iverilog-always_full-1.log
|
|
||||||
diff iverilog-always_full.log iverilog-always_full-1.log
|
|
||||||
|
|
||||||
../../yosys -p "read_verilog display_lm.v" >yosys-display_lm.log
|
|
||||||
../../yosys -p "read_verilog display_lm.v; write_cxxrtl yosys-display_lm.cc"
|
|
||||||
${CXX:-g++} -std=c++11 -o yosys-display_lm_cc -I../../backends/cxxrtl/runtime display_lm_tb.cc -lstdc++
|
|
||||||
./yosys-display_lm_cc >yosys-display_lm_cc.log
|
|
||||||
for log in yosys-display_lm.log yosys-display_lm_cc.log; do
|
|
||||||
grep "^%l: \\\\bot\$" "$log"
|
|
||||||
grep "^%m: \\\\bot\$" "$log"
|
|
||||||
done
|
|
||||||
2
tests/fsm/.gitignore
vendored
2
tests/fsm/.gitignore
vendored
|
|
@ -1 +1 @@
|
||||||
temp
|
uut_*.*
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,18 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
from contextlib import contextmanager
|
from pathlib import Path
|
||||||
|
|
||||||
# set to 'True' to compare verific with yosys
|
# set to 'True' to compare verific with yosys
|
||||||
test_verific = False
|
test_verific = False
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def redirect_stdout(new_target):
|
|
||||||
old_target, sys.stdout = sys.stdout, new_target
|
|
||||||
try:
|
|
||||||
yield new_target
|
|
||||||
finally:
|
|
||||||
sys.stdout = old_target
|
|
||||||
|
|
||||||
def random_expr(variables):
|
def random_expr(variables):
|
||||||
c = random.choice(['bin', 'uni', 'var', 'const'])
|
c = random.choice(['bin', 'uni', 'var', 'const'])
|
||||||
if c == 'bin':
|
if c == 'bin':
|
||||||
|
|
@ -39,12 +36,16 @@ args = parser.parse_args()
|
||||||
seed = args.seed
|
seed = args.seed
|
||||||
if seed is None:
|
if seed is None:
|
||||||
seed = random.randrange(sys.maxsize)
|
seed = random.randrange(sys.maxsize)
|
||||||
print("PRNG seed: %d" % seed)
|
print("fsm PRNG seed: %d" % seed)
|
||||||
random.seed(seed)
|
random.seed(seed)
|
||||||
|
|
||||||
|
for path in Path(".").glob("uut_*.*"):
|
||||||
|
if path.is_file():
|
||||||
|
path.unlink()
|
||||||
|
|
||||||
for idx in range(args.count):
|
for idx in range(args.count):
|
||||||
with open('temp/uut_%05d.v' % idx, 'w') as f:
|
with open('uut_%05d.v' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
rst2 = random.choice([False, True])
|
rst2 = random.choice([False, True])
|
||||||
if rst2:
|
if rst2:
|
||||||
print('module uut_%05d(clk, rst1, rst2, rst, a, b, c, x, y, z);' % (idx))
|
print('module uut_%05d(clk, rst1, rst2, rst, a, b, c, x, y, z);' % (idx))
|
||||||
|
|
@ -99,16 +100,16 @@ for idx in range(args.count):
|
||||||
print(' end')
|
print(' end')
|
||||||
print(' end')
|
print(' end')
|
||||||
print('endmodule')
|
print('endmodule')
|
||||||
with open('temp/uut_%05d.ys' % idx, 'w') as f:
|
with open('uut_%05d.ys' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
if test_verific:
|
if test_verific:
|
||||||
print('read_verilog temp/uut_%05d.v' % idx)
|
print('read_verilog uut_%05d.v' % idx)
|
||||||
print('proc;; rename uut_%05d gold' % idx)
|
print('proc;; rename uut_%05d gold' % idx)
|
||||||
print('verific -vlog2k temp/uut_%05d.v' % idx)
|
print('verific -vlog2k uut_%05d.v' % idx)
|
||||||
print('verific -import uut_%05d' % idx)
|
print('verific -import uut_%05d' % idx)
|
||||||
print('rename uut_%05d gate' % idx)
|
print('rename uut_%05d gate' % idx)
|
||||||
else:
|
else:
|
||||||
print('read_verilog temp/uut_%05d.v' % idx)
|
print('read_verilog uut_%05d.v' % idx)
|
||||||
print('proc;;')
|
print('proc;;')
|
||||||
print('copy uut_%05d gold' % idx)
|
print('copy uut_%05d gold' % idx)
|
||||||
print('rename uut_%05d gate' % idx)
|
print('rename uut_%05d gate' % idx)
|
||||||
|
|
@ -118,3 +119,4 @@ for idx in range(args.count):
|
||||||
print('miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter')
|
print('miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter')
|
||||||
print('sat -verify-no-timeout -timeout 20 -seq 5 -set-at 1 %s_rst 1 -prove trigger 0 -prove-skip 1 -show-inputs -show-outputs miter' % ('gold' if rst2 else 'in'))
|
print('sat -verify-no-timeout -timeout 20 -seq 5 -set-at 1 %s_rst 1 -prove trigger 0 -prove-skip 1 -show-inputs -show-outputs miter' % ('gold' if rst2 else 'in'))
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
# run this test many times:
|
|
||||||
# time bash -c 'for ((i=0; i<100; i++)); do echo "-- $i --"; bash run-test.sh || exit 1; done'
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
count=50
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "c:S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
c) count="$OPTARG" ;;
|
|
||||||
S) seed="-S $OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
rm -rf temp
|
|
||||||
mkdir -p temp
|
|
||||||
echo "generating tests.."
|
|
||||||
python3 generate.py -c $count $seed
|
|
||||||
|
|
||||||
{
|
|
||||||
all_targets="all_targets:"
|
|
||||||
echo "all: all_targets"
|
|
||||||
echo " @echo"
|
|
||||||
for i in $( ls temp/*.ys | sed 's,[^0-9],,g; s,^0*\(.\),\1,g;' ); do
|
|
||||||
idx=$( printf "%05d" $i )
|
|
||||||
echo "temp/uut_${idx}.log: temp/uut_${idx}.ys temp/uut_${idx}.v"
|
|
||||||
echo " @echo -n '[$i]'"
|
|
||||||
echo " @../../yosys -ql temp/uut_${idx}.out temp/uut_${idx}.ys"
|
|
||||||
echo " @mv temp/uut_${idx}.out temp/uut_${idx}.log"
|
|
||||||
echo " @grep -q 'SAT proof finished' temp/uut_${idx}.log && echo -n K || echo -n T"
|
|
||||||
all_targets="$all_targets temp/uut_${idx}.log"
|
|
||||||
done
|
|
||||||
echo "$all_targets"
|
|
||||||
} > temp/makefile
|
|
||||||
|
|
||||||
echo "running tests.."
|
|
||||||
${MAKE:-make} -f temp/makefile
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
11
tests/functional/generate_mk.py
Normal file
11
tests/functional/generate_mk.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
def callback():
|
||||||
|
gen_tests_makefile.generate_cmd_test("functional",f'pytest -v -m "not smt and not rkt" . "$$@"')
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(callback)
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
pytest -v -m "not smt and not rkt" "$SCRIPT_DIR" "$@"
|
pytest -v -m "not smt and not rkt" "$SCRIPT_DIR" "$@"
|
||||||
|
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
||||||
set -eu
|
|
||||||
|
|
||||||
YOSYS_BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../ >/dev/null 2>&1 && pwd)"
|
|
||||||
|
|
||||||
# $ generate_target target_name test_command
|
|
||||||
generate_target() {
|
|
||||||
target_name=$(basename $PWD)-$1
|
|
||||||
test_command=$2
|
|
||||||
echo "all: $target_name"
|
|
||||||
echo ".PHONY: $target_name"
|
|
||||||
echo "$target_name:"
|
|
||||||
printf "\t@YOSYS_MAX_THREADS=4 %s\n" "$test_command"
|
|
||||||
printf "\t@echo 'Passed %s'\n" "$target_name"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $ generate_ys_test ys_file [yosys_args]
|
|
||||||
generate_ys_test() {
|
|
||||||
ys_file=$1
|
|
||||||
yosys_args_=${2:-}
|
|
||||||
generate_target "$ys_file" "\"$YOSYS_BASEDIR/yosys\" -ql ${ys_file}.err $yosys_args_ $ys_file && mv ${ys_file}.err ${ys_file}.log"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $ generate_tcl_test tcl_file [yosys_args]
|
|
||||||
generate_tcl_test() {
|
|
||||||
tcl_file=$1
|
|
||||||
yosys_args_=${2:-}
|
|
||||||
generate_target "$tcl_file" "\"$YOSYS_BASEDIR/yosys\" -ql ${tcl_file}.err $yosys_args_ $tcl_file && mv ${tcl_file}.err ${tcl_file}.log"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $ generate_bash_test bash_file
|
|
||||||
generate_bash_test() {
|
|
||||||
bash_file=$1
|
|
||||||
generate_target "$bash_file" "bash -v $bash_file >${bash_file}.err 2>&1 && mv ${bash_file}.err ${bash_file}.log"
|
|
||||||
}
|
|
||||||
|
|
||||||
# $ generate_tests [-y|--yosys-scripts] [-s|--prove-sv] [-b|--bash] [-a|--yosys-args yosys_args]
|
|
||||||
generate_tests() {
|
|
||||||
do_ys=false
|
|
||||||
do_tcl=false
|
|
||||||
do_sv=false
|
|
||||||
do_sh=false
|
|
||||||
yosys_args=""
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
arg="$1"
|
|
||||||
case "$arg" in
|
|
||||||
-y|--yosys-scripts)
|
|
||||||
do_ys=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-t|--tcl-scripts)
|
|
||||||
do_tcl=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-s|--prove-sv)
|
|
||||||
do_sv=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-b|--bash)
|
|
||||||
do_sh=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-a|--yosys-args)
|
|
||||||
yosys_args+="$2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo >&2 "Unknown argument: $1"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ ! ( $do_ys = true || $do_tcl = true || $do_sv = true || $do_sh = true ) ]]; then
|
|
||||||
echo >&2 "Error: No file types selected"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ".PHONY: all"
|
|
||||||
echo "all:"
|
|
||||||
|
|
||||||
if [[ $do_ys = true ]]; then
|
|
||||||
for x in *.ys; do
|
|
||||||
generate_ys_test "$x" "$yosys_args"
|
|
||||||
done
|
|
||||||
fi;
|
|
||||||
if [[ $do_tcl = true ]]; then
|
|
||||||
for x in *.tcl; do
|
|
||||||
generate_tcl_test "$x" "$yosys_args"
|
|
||||||
done
|
|
||||||
fi;
|
|
||||||
if [[ $do_sv = true ]]; then
|
|
||||||
for x in *.sv; do
|
|
||||||
if [ ! -f "${x%.sv}.ys" ]; then
|
|
||||||
generate_ys_test "$x" "-p \"prep -top top; async2sync; sat -enable_undef -verify -prove-asserts\" $yosys_args"
|
|
||||||
fi;
|
|
||||||
done
|
|
||||||
fi;
|
|
||||||
if [[ $do_sh == true ]]; then
|
|
||||||
for s in *.sh; do
|
|
||||||
if [ "$s" != "run-test.sh" ]; then
|
|
||||||
generate_bash_test "$s"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
generate_mk() {
|
|
||||||
generate_tests "$@" > run-test.mk
|
|
||||||
}
|
|
||||||
141
tests/gen_tests_makefile.py
Normal file
141
tests/gen_tests_makefile.py
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
yosys_basedir = os.path.relpath(os.path.join(os.path.dirname(__file__), ".."))
|
||||||
|
common_mk = os.path.relpath(os.path.join(os.path.dirname(__file__), "common.mk"))
|
||||||
|
|
||||||
|
def _cwd_base():
|
||||||
|
return os.path.basename(os.getcwd())
|
||||||
|
|
||||||
|
def generate_target(name, command, deps = None):
|
||||||
|
#target = f"{_cwd_base()}-{name}"
|
||||||
|
target = f"{name}"
|
||||||
|
print(f"all: {target}")
|
||||||
|
print(f".PHONY: {target}")
|
||||||
|
print(f"{target}_cmd={command}")
|
||||||
|
if deps:
|
||||||
|
print(f"{target}: {' '.join(deps)}")
|
||||||
|
else:
|
||||||
|
print(f"{target}:")
|
||||||
|
|
||||||
|
print(f"\t@$(call run_test,{target}, $({target}_cmd))")
|
||||||
|
|
||||||
|
def generate_ys_test(ys_file, yosys_args="", commands=""):
|
||||||
|
cmd = f'$(YOSYS) -ql {ys_file}.err {yosys_args} {ys_file} && mv {ys_file}.err {ys_file}.log'
|
||||||
|
if commands:
|
||||||
|
cmd += f"; \\\n{commands}"
|
||||||
|
generate_target(ys_file, cmd)
|
||||||
|
|
||||||
|
def generate_tcl_test(tcl_file, yosys_args="", commands=""):
|
||||||
|
cmd = f'$(YOSYS) -ql {tcl_file}.err {yosys_args} {tcl_file} && mv {tcl_file}.err {tcl_file}.log'
|
||||||
|
if commands:
|
||||||
|
cmd += f"; \\\n{commands}"
|
||||||
|
generate_target(tcl_file, cmd)
|
||||||
|
|
||||||
|
def generate_sv_test(sv_file, yosys_args="", commands=""):
|
||||||
|
base = os.path.splitext(sv_file)[0]
|
||||||
|
if not os.path.exists(base + ".ys"):
|
||||||
|
yosys_cmd = '-p "prep -top top; async2sync; sat -enable_undef -verify -prove-asserts"'
|
||||||
|
cmd = f'$(YOSYS) -ql {sv_file}.err {yosys_cmd} {yosys_args} {sv_file} && mv {sv_file}.err {sv_file}.log'
|
||||||
|
if commands:
|
||||||
|
cmd += f"; \\\n{commands}"
|
||||||
|
generate_target(sv_file, cmd)
|
||||||
|
|
||||||
|
def generate_bash_test(sh_file, commands=""):
|
||||||
|
cmd = f"bash -v {sh_file} >{sh_file}.err 2>&1 && mv {sh_file}.err {sh_file}.log"
|
||||||
|
if commands:
|
||||||
|
cmd += f"; \\\n{commands}"
|
||||||
|
generate_target(sh_file, cmd)
|
||||||
|
|
||||||
|
def unpack_cmd(cmd):
|
||||||
|
if isinstance(cmd, str):
|
||||||
|
return cmd
|
||||||
|
if isinstance(cmd, (list, tuple)):
|
||||||
|
return " && \\\n".join(cmd)
|
||||||
|
raise TypeError("cmd must be a string or a list/tuple of strings")
|
||||||
|
|
||||||
|
def generate_cmd_test(test_name, cmd, yosys_args="", deps = None):
|
||||||
|
generate_target(test_name, unpack_cmd(cmd), deps)
|
||||||
|
|
||||||
|
def generate_tests(argv, cmds):
|
||||||
|
parser = argparse.ArgumentParser(add_help=False)
|
||||||
|
parser.add_argument("-y", "--yosys-scripts", action="store_true")
|
||||||
|
parser.add_argument("-t", "--tcl-scripts", action="store_true")
|
||||||
|
parser.add_argument("-s", "--prove-sv", action="store_true")
|
||||||
|
parser.add_argument("-b", "--bash", action="store_true")
|
||||||
|
parser.add_argument("-a", "--yosys-args", default="")
|
||||||
|
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
|
||||||
|
if not (args.yosys_scripts or args.tcl_scripts or args.prove_sv or args.bash):
|
||||||
|
raise RuntimeError("No file types selected")
|
||||||
|
|
||||||
|
if args.yosys_scripts:
|
||||||
|
for f in sorted(glob.glob("*.ys")):
|
||||||
|
generate_ys_test(f, args.yosys_args, cmds)
|
||||||
|
|
||||||
|
if args.tcl_scripts:
|
||||||
|
for f in sorted(glob.glob("*.tcl")):
|
||||||
|
generate_tcl_test(f, args.yosys_args, cmds)
|
||||||
|
|
||||||
|
if args.prove_sv:
|
||||||
|
for f in sorted(glob.glob("*.sv")):
|
||||||
|
generate_sv_test(f, args.yosys_args, cmds)
|
||||||
|
|
||||||
|
if args.bash:
|
||||||
|
for f in sorted(glob.glob("*.sh")):
|
||||||
|
if f != "run-test.sh":
|
||||||
|
generate_bash_test(f, cmds)
|
||||||
|
|
||||||
|
def print_header(extra=None):
|
||||||
|
print(f"include {common_mk}")
|
||||||
|
print(f"YOSYS ?= {yosys_basedir}/yosys")
|
||||||
|
print("")
|
||||||
|
print("export YOSYS_MAX_THREADS := 4")
|
||||||
|
if extra:
|
||||||
|
for line in extra:
|
||||||
|
print(line)
|
||||||
|
print("")
|
||||||
|
print(".PHONY: all")
|
||||||
|
print("all:")
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def redirect_stdout(new_target):
|
||||||
|
old_target, sys.stdout = sys.stdout, new_target
|
||||||
|
try:
|
||||||
|
yield new_target
|
||||||
|
finally:
|
||||||
|
sys.stdout = old_target
|
||||||
|
|
||||||
|
def generate(argv, extra=None, cmds=""):
|
||||||
|
with open("Makefile", "w") as f:
|
||||||
|
with redirect_stdout(f):
|
||||||
|
print_header(extra)
|
||||||
|
generate_tests(argv, cmds)
|
||||||
|
|
||||||
|
def generate_custom(callback, extra=None):
|
||||||
|
with open("Makefile", "w") as f:
|
||||||
|
with redirect_stdout(f):
|
||||||
|
print_header(extra)
|
||||||
|
callback()
|
||||||
|
|
||||||
|
def generate_autotest_file(test_file, commands):
|
||||||
|
cmd = f"../tools/autotest.sh -G -j ${{SEEDOPT}} ${{EXTRA_FLAGS}} {test_file}; \\\n{commands}"
|
||||||
|
generate_target(test_file, cmd)
|
||||||
|
|
||||||
|
def generate_autotest(pattern, extra_flags, cmds=""):
|
||||||
|
with open("Makefile", "w") as f:
|
||||||
|
with redirect_stdout(f):
|
||||||
|
print_header([ f"EXTRA_FLAGS = {extra_flags}",
|
||||||
|
"SEED ?=",
|
||||||
|
"ifneq ($(strip $(SEED)),)",
|
||||||
|
" SEEDOPT=-S$(SEED)",
|
||||||
|
"endif",
|
||||||
|
])
|
||||||
|
for fn in sorted(glob.glob(pattern)):
|
||||||
|
generate_autotest_file(fn, cmds)
|
||||||
8
tests/hana/generate_mk.py
Normal file
8
tests/hana/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_autotest("test_*.v", "-l hana_vlib.v -n 300 -e")
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
S) arg="${OPTARG#"${OPTARG%%[![:space:]]*}"}" # remove leading space
|
|
||||||
seed="SEED=$arg" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
exec ${MAKE:-make} -f ../tools/autotest.mk $seed EXTRA_FLAGS="-l hana_vlib.v -n 300 -e" test_*.v
|
|
||||||
44
tests/liberty/generate_mk.py
Normal file
44
tests/liberty/generate_mk.py
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
def lib_tests():
|
||||||
|
for lib in sorted(glob.glob("*.lib")):
|
||||||
|
base = os.path.splitext(lib)[0]
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test(lib, [
|
||||||
|
f'$(YOSYS) -p "read_verilog small.v; synth -top small; dfflibmap -info -liberty {lib}" -ql {base}.log',
|
||||||
|
|
||||||
|
f'$(YOSYS_FILTERLIB) - {lib} > {lib}.filtered',
|
||||||
|
f'$(YOSYS_FILTERLIB) -verilogsim {lib} > {lib}.verilogsim',
|
||||||
|
|
||||||
|
f'diff {lib}.filtered {lib}.filtered.ok',
|
||||||
|
f'diff {lib}.verilogsim {lib}.verilogsim.ok',
|
||||||
|
|
||||||
|
f'if [ -e {base}.log.ok ]; then '
|
||||||
|
f'$(YOSYS) -p "dfflibmap -info -liberty {lib}" -TqqQl {base}.log; '
|
||||||
|
f'diff {base}.log {base}.log.ok; '
|
||||||
|
f'fi',
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def ys_tests():
|
||||||
|
for ys in sorted(glob.glob("*.ys")):
|
||||||
|
gen_tests_makefile.generate_ys_test(ys)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
def callback():
|
||||||
|
lib_tests()
|
||||||
|
ys_tests()
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(callback,
|
||||||
|
[f"YOSYS_FILTERLIB ?= {gen_tests_makefile.yosys_basedir}/yosys-filterlib"])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
for x in *.lib; do
|
|
||||||
echo "Testing on $x.."
|
|
||||||
../../yosys -p "read_verilog small.v; synth -top small; dfflibmap -info -liberty ${x}" -ql ${x%.lib}.log
|
|
||||||
../../yosys-filterlib - $x 2>/dev/null > $x.filtered
|
|
||||||
../../yosys-filterlib -verilogsim $x > $x.verilogsim
|
|
||||||
diff $x.filtered $x.filtered.ok
|
|
||||||
diff $x.verilogsim $x.verilogsim.ok
|
|
||||||
if [[ -e ${x%.lib}.log.ok ]]; then
|
|
||||||
../../yosys -p "dfflibmap -info -liberty ${x}" -TqqQl ${x%.lib}.log
|
|
||||||
diff ${x%.lib}.log ${x%.lib}.log.ok
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -q -s $x -l ${x%.ys}.log
|
|
||||||
done
|
|
||||||
|
|
||||||
68
tests/memfile/generate_mk.py
Normal file
68
tests/memfile/generate_mk.py
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
def create_tests():
|
||||||
|
setup = "mkdir -p temp && cp content1.dat temp/content2.dat"
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("parent_content1", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"content1.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("parent_content2_temp", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"temp/content2.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("parent_content2_full", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"memfile/temp/content2.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("same_content1", [
|
||||||
|
f"{setup}",
|
||||||
|
'$(YOSYS) -qp "read_verilog -defer memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"content1.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("same_content2", [
|
||||||
|
f"{setup}",
|
||||||
|
'$(YOSYS) -qp "read_verilog -defer memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"temp/content2.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("child_content1", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd temp && ../$(YOSYS) -qp "read_verilog -defer ../memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"content1.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("child_content2_temp", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd temp && ../$(YOSYS) -qp "read_verilog -defer ../memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"temp/content2.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("child_content2_direct", [
|
||||||
|
f"{setup}",
|
||||||
|
'cd temp && ../$(YOSYS) -qp "read_verilog -defer ../memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"temp/content2.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("fail_empty_filename",
|
||||||
|
'! $(YOSYS) -qp "read_verilog memory.v"')
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_cmd_test("fail_missing_file", [
|
||||||
|
'! $(YOSYS) -qp "read_verilog -defer memory.v; '
|
||||||
|
'chparam -set MEMFILE \\"content3.dat\\" memory"'
|
||||||
|
])
|
||||||
|
|
||||||
|
extra = ["YOSYS_ABS := $(abspath $(YOSYS))"]
|
||||||
|
gen_tests_makefile.generate_custom(create_tests, extra)
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
mkdir -p temp
|
|
||||||
cp content1.dat temp/content2.dat
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo "Running from the parent directory with content1.dat"
|
|
||||||
../yosys -qp "read_verilog -defer memfile/memory.v; chparam -set MEMFILE \"content1.dat\" memory"
|
|
||||||
echo "Running from the parent directory with temp/content2.dat"
|
|
||||||
../yosys -qp "read_verilog -defer memfile/memory.v; chparam -set MEMFILE \"temp/content2.dat\" memory"
|
|
||||||
echo "Running from the parent directory with memfile/temp/content2.dat"
|
|
||||||
../yosys -qp "read_verilog -defer memfile/memory.v; chparam -set MEMFILE \"memfile/temp/content2.dat\" memory"
|
|
||||||
|
|
||||||
cd memfile
|
|
||||||
|
|
||||||
echo "Running from the same directory with content1.dat"
|
|
||||||
../../yosys -qp "read_verilog -defer memory.v; chparam -set MEMFILE \"content1.dat\" memory"
|
|
||||||
echo "Running from the same directory with temp/content2.dat"
|
|
||||||
../../yosys -qp "read_verilog -defer memory.v; chparam -set MEMFILE \"temp/content2.dat\" memory"
|
|
||||||
|
|
||||||
cd temp
|
|
||||||
|
|
||||||
echo "Running from a child directory with content1.dat"
|
|
||||||
../../../yosys -qp "read_verilog -defer ../memory.v; chparam -set MEMFILE \"content1.dat\" memory"
|
|
||||||
echo "Running from a child directory with temp/content2.dat"
|
|
||||||
../../../yosys -qp "read_verilog -defer ../memory.v; chparam -set MEMFILE \"temp/content2.dat\" memory"
|
|
||||||
echo "Running from a child directory with content2.dat"
|
|
||||||
../../../yosys -qp "read_verilog -defer ../memory.v; chparam -set MEMFILE \"temp/content2.dat\" memory"
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo "Checking a failure when zero length filename is provided"
|
|
||||||
if ../../yosys -qp "read_verilog memory.v"; then
|
|
||||||
echo "The execution should fail but it didn't happen, which is WRONG."
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "Execution failed, which is OK."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Checking a failure when not existing filename is provided"
|
|
||||||
if ../../yosys -qp "read_verilog -defer memory.v; chparam -set MEMFILE \"content3.dat\" memory"; then
|
|
||||||
echo "The execution should fail but it didn't happen, which is WRONG."
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "Execution failed, which is OK."
|
|
||||||
fi
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
|
|
||||||
# - priority logic
|
# - priority logic
|
||||||
|
|
@ -1536,44 +1542,50 @@ endmodule
|
||||||
TESTS.append(Test("rom_case", ROM_CASE.format(attr=""), ["block_sdp"], [], {"RAM_BLOCK_SDP" : 0}))
|
TESTS.append(Test("rom_case", ROM_CASE.format(attr=""), ["block_sdp"], [], {"RAM_BLOCK_SDP" : 0}))
|
||||||
TESTS.append(Test("rom_case_block", ROM_CASE.format(attr="(* rom_style = \"block\" *) "), ["block_sdp"], [], {"RAM_BLOCK_SDP" : 1}))
|
TESTS.append(Test("rom_case_block", ROM_CASE.format(attr="(* rom_style = \"block\" *) "), ["block_sdp"], [], {"RAM_BLOCK_SDP" : 1}))
|
||||||
|
|
||||||
with open("run-test.mk", "w") as mf:
|
|
||||||
mf.write("ifneq ($(strip $(SEED)),)\n")
|
|
||||||
mf.write("SEEDOPT=-S$(SEED)\n")
|
|
||||||
mf.write("endif\n")
|
|
||||||
mf.write("all:")
|
|
||||||
for t in TESTS:
|
|
||||||
mf.write(" " + t.name)
|
|
||||||
mf.write("\n")
|
|
||||||
mf.write(".PHONY: all\n")
|
|
||||||
|
|
||||||
|
for t in TESTS:
|
||||||
for t in TESTS:
|
with open("t_{}.v".format(t.name), "w") as tf:
|
||||||
with open("t_{}.v".format(t.name), "w") as tf:
|
tf.write(t.src)
|
||||||
tf.write(t.src)
|
with open("t_{}.ys".format(t.name), "w") as sf:
|
||||||
with open("t_{}.ys".format(t.name), "w") as sf:
|
sf.write("proc\n")
|
||||||
sf.write("proc\n")
|
sf.write("opt\n")
|
||||||
sf.write("opt\n")
|
sf.write("opt -full\n")
|
||||||
sf.write("opt -full\n")
|
sf.write("memory -nomap\n")
|
||||||
sf.write("memory -nomap\n")
|
sf.write("dump\n")
|
||||||
sf.write("dump\n")
|
sf.write("memory_libmap")
|
||||||
sf.write("memory_libmap")
|
|
||||||
for lib in t.libs:
|
|
||||||
sf.write(" -lib ../memlib_{}.txt".format(lib))
|
|
||||||
for d in t.defs:
|
|
||||||
sf.write(" -D {}".format(d))
|
|
||||||
sf.write("\n")
|
|
||||||
sf.write("memory_map\n")
|
|
||||||
for k, v in t.cells.items():
|
|
||||||
if isinstance(v, tuple):
|
|
||||||
(cc, ca) = v
|
|
||||||
sf.write("select -assert-count {} t:{}\n".format(cc, k))
|
|
||||||
for kk, vv in ca.items():
|
|
||||||
sf.write("select -assert-count {} t:{} r:{}={} %i\n".format(cc, k, kk, vv))
|
|
||||||
else:
|
|
||||||
sf.write("select -assert-count {} t:{}\n".format(v, k))
|
|
||||||
mf.write("{}:\n".format(t.name))
|
|
||||||
mf.write("\t@../tools/autotest.sh -G -j $(SEEDOPT) $(EXTRA_FLAGS) -p 'script ../t_{}.ys'".format(t.name))
|
|
||||||
for lib in t.libs:
|
for lib in t.libs:
|
||||||
mf.write(" -l memlib_{}.v".format(lib))
|
sf.write(" -lib ../memlib_{}.txt".format(lib))
|
||||||
mf.write(" t_{}.v || (cat t_{}.err; exit 1)\n".format(t.name, t.name))
|
for d in t.defs:
|
||||||
mf.write(".PHONY: {}\n".format(t.name))
|
sf.write(" -D {}".format(d))
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("memory_map\n")
|
||||||
|
for k, v in t.cells.items():
|
||||||
|
if isinstance(v, tuple):
|
||||||
|
(cc, ca) = v
|
||||||
|
sf.write("select -assert-count {} t:{}\n".format(cc, k))
|
||||||
|
for kk, vv in ca.items():
|
||||||
|
sf.write("select -assert-count {} t:{} r:{}={} %i\n".format(cc, k, kk, vv))
|
||||||
|
else:
|
||||||
|
sf.write("select -assert-count {} t:{}\n".format(v, k))
|
||||||
|
|
||||||
|
def create_tests():
|
||||||
|
for t in TESTS:
|
||||||
|
libs_args = ""
|
||||||
|
for lib in t.libs:
|
||||||
|
libs_args += f" -l memlib_{lib}.v"
|
||||||
|
cmd = (
|
||||||
|
f"../tools/autotest.sh -G -j ${{SEEDOPT}} ${{EXTRA_FLAGS}} "
|
||||||
|
f"-p 'script ../t_{t.name}.ys'"
|
||||||
|
f"{libs_args} "
|
||||||
|
f"t_{t.name}.v || (cat t_{t.name}.err; exit 1)"
|
||||||
|
)
|
||||||
|
gen_tests_makefile.generate_target(t.name, cmd)
|
||||||
|
|
||||||
|
extra = [
|
||||||
|
"SEED ?=",
|
||||||
|
"ifneq ($(strip $(SEED)),)",
|
||||||
|
" SEEDOPT=-S$(SEED)",
|
||||||
|
"endif",
|
||||||
|
]
|
||||||
|
gen_tests_makefile.generate_custom(create_tests, extra)
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
S) seed="$OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
python3 generate.py
|
|
||||||
exec ${MAKE:-make} -f run-test.mk SEED="$seed"
|
|
||||||
58
tests/memories/generate_mk.py
Normal file
58
tests/memories/generate_mk.py
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_autotest("*.v", "",
|
||||||
|
"""if grep -Eq 'expect-(wr-ports|rd-ports|rd-clk)' $@; then \\
|
||||||
|
$(YOSYS) -f verilog -qp "proc; opt; memory -nomap; dump -outfile $(@:.v=).dmp t:\\$$mem_v2" $@; \\
|
||||||
|
if grep -q expect-wr-ports $@; then \\
|
||||||
|
val=$$(gawk '/expect-wr-ports/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\WR_PORTS $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected number of write ports."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-wr-wide-continuation $@; then \\
|
||||||
|
val=$$(gawk '/expect-wr-wide-continuation/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\WR_WIDE_CONTINUATION $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected write wide continuation."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-ports $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-ports/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\RD_PORTS $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected number of read ports."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-clk $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-clk/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "connect \\\\RD_CLK $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read clock."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-en $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-en/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "connect \\\\RD_EN $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read enable."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-srst-sig $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-srst-sig/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "connect \\\\RD_SRST $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read sync reset."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-srst-val $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-srst-val/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\RD_SRST_VALUE $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read sync reset value."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-arst-sig $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-arst-sig/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "connect \\\\RD_ARST $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read async reset."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-arst-val $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-arst-val/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\RD_ARST_VALUE $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read async reset value."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-init-val $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-init-val/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\RD_INIT_VALUE $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read init value."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-rd-wide-continuation $@; then \\
|
||||||
|
val=$$(gawk '/expect-rd-wide-continuation/ { print $$3; }' $@); \\
|
||||||
|
grep -Fq "parameter \\\\RD_WIDE_CONTINUATION $$val" $(@:.v=).dmp || { echo " ERROR: Unexpected read wide continuation."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
if grep -q expect-no-rd-clk $@; then \\
|
||||||
|
grep -Fq "connect \\\\RD_CLK 1'x" $(@:.v=).dmp || { echo " ERROR: Expected no read clock."; exit 1; }; \\
|
||||||
|
fi; \\
|
||||||
|
fi""")
|
||||||
|
|
@ -1,73 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
abcopt=""
|
|
||||||
while getopts "A:S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
A) abcopt="-A $OPTARG" ;;
|
|
||||||
S) seed="$OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
${MAKE:-make} -f ../tools/autotest.mk SEED="$seed" EXTRA_FLAGS="$abcopt" *.v
|
|
||||||
|
|
||||||
for f in `egrep -l 'expect-(wr-ports|rd-ports|rd-clk)' *.v`; do
|
|
||||||
echo -n "Testing expectations for $f .."
|
|
||||||
../../yosys -f verilog -qp "proc; opt; memory -nomap;; dump -outfile ${f%.v}.dmp t:\$mem_v2" $f
|
|
||||||
if grep -q expect-wr-ports $f; then
|
|
||||||
grep -q "parameter \\\\WR_PORTS $(gawk '/expect-wr-ports/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected number of write ports."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-wr-wide-continuation $f; then
|
|
||||||
grep -q "parameter \\\\WR_WIDE_CONTINUATION $(gawk '/expect-wr-wide-continuation/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected write wide continuation."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-ports $f; then
|
|
||||||
grep -q "parameter \\\\RD_PORTS $(gawk '/expect-rd-ports/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected number of read ports."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-clk $f; then
|
|
||||||
grep -q "connect \\\\RD_CLK \\$(gawk '/expect-rd-clk/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read clock."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-en $f; then
|
|
||||||
grep -q "connect \\\\RD_EN \\$(gawk '/expect-rd-en/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read enable."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-srst-sig $f; then
|
|
||||||
grep -q "connect \\\\RD_SRST \\$(gawk '/expect-rd-srst-sig/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read sync reset."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-srst-val $f; then
|
|
||||||
grep -q "parameter \\\\RD_SRST_VALUE $(gawk '/expect-rd-srst-val/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read sync reset value."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-arst-sig $f; then
|
|
||||||
grep -q "connect \\\\RD_ARST \\$(gawk '/expect-rd-arst-sig/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read async reset."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-arst-val $f; then
|
|
||||||
grep -q "parameter \\\\RD_ARST_VALUE $(gawk '/expect-rd-arst-val/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read async reset value."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-init-val $f; then
|
|
||||||
grep -q "parameter \\\\RD_INIT_VALUE $(gawk '/expect-rd-init-val/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read init value."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-rd-wide-continuation $f; then
|
|
||||||
grep -q "parameter \\\\RD_WIDE_CONTINUATION $(gawk '/expect-rd-wide-continuation/ { print $3; }' $f)\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Unexpected read wide continuation."; false; }
|
|
||||||
fi
|
|
||||||
if grep -q expect-no-rd-clk $f; then
|
|
||||||
grep -q "connect \\\\RD_CLK 1'x\$" ${f%.v}.dmp ||
|
|
||||||
{ echo " ERROR: Expected no read clock."; false; }
|
|
||||||
fi
|
|
||||||
echo " ok."
|
|
||||||
done
|
|
||||||
|
|
||||||
8
tests/opt/generate_mk.py
Normal file
8
tests/opt/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--tcl-scripts"])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --tcl-scripts
|
|
||||||
2
tests/opt_share/.gitignore
vendored
2
tests/opt_share/.gitignore
vendored
|
|
@ -1 +1 @@
|
||||||
temp
|
uut_*.*
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,42 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
from contextlib import contextmanager
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def redirect_stdout(new_target):
|
|
||||||
old_target, sys.stdout = sys.stdout, new_target
|
|
||||||
try:
|
|
||||||
yield new_target
|
|
||||||
finally:
|
|
||||||
sys.stdout = old_target
|
|
||||||
|
|
||||||
|
|
||||||
def random_plus_x():
|
def random_plus_x():
|
||||||
return "%s x" % random.choice(['+', '+', '+', '-', '-', '|', '&', '^'])
|
return "%s x" % random.choice(['+', '+', '+', '-', '-', '|', '&', '^'])
|
||||||
|
|
||||||
|
|
||||||
def maybe_plus_x(expr):
|
def maybe_plus_x(expr):
|
||||||
if random.randint(0, 4) == 0:
|
if random.randint(0, 4) == 0:
|
||||||
return "(%s %s)" % (expr, random_plus_x())
|
return "(%s %s)" % (expr, random_plus_x())
|
||||||
else:
|
else:
|
||||||
return expr
|
return expr
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||||
parser = argparse.ArgumentParser(
|
parser.add_argument('-S', '--seed', type = int, help = 'seed for PRNG')
|
||||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
|
||||||
parser.add_argument('-S', '--seed', type=int, help='seed for PRNG')
|
|
||||||
parser.add_argument('-c',
|
|
||||||
'--count',
|
|
||||||
type=int,
|
|
||||||
default=100,
|
|
||||||
help='number of test cases to generate')
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.seed is not None:
|
seed = args.seed
|
||||||
print("PRNG seed: %d" % args.seed)
|
if seed is None:
|
||||||
random.seed(args.seed)
|
seed = random.randrange(sys.maxsize)
|
||||||
|
print("opt_share PRNG seed: %d" % seed)
|
||||||
|
random.seed(seed)
|
||||||
|
|
||||||
|
for path in Path(".").glob("uut_*.*"):
|
||||||
|
if path.is_file():
|
||||||
|
path.unlink()
|
||||||
|
|
||||||
for idx in range(args.count):
|
for idx in range(args.count):
|
||||||
with open('temp/uut_%05d.v' % idx, 'w') as f:
|
with open('uut_%05d.v' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
print('module uut_%05d(a, b, c, s, y);' % (idx))
|
print('module uut_%05d(a, b, c, s, y);' % (idx))
|
||||||
op = random.choice([
|
op = random.choice([
|
||||||
random.choice(['+', '-', '*', '/', '%']),
|
random.choice(['+', '-', '*', '/', '%']),
|
||||||
|
|
@ -67,20 +61,20 @@ for idx in range(args.count):
|
||||||
cast2, ops2[0], op, ops2[1]))
|
cast2, ops2[0], op, ops2[1]))
|
||||||
print('endmodule')
|
print('endmodule')
|
||||||
|
|
||||||
with open('temp/uut_%05d.ys' % idx, 'w') as f:
|
with open('uut_%05d.ys' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
print('read_verilog temp/uut_%05d.v' % idx)
|
print('read_verilog uut_%05d.v' % idx)
|
||||||
print('proc;;')
|
print('proc;;')
|
||||||
print('copy uut_%05d gold' % idx)
|
print('copy uut_%05d gold' % idx)
|
||||||
print('rename uut_%05d gate' % idx)
|
print('rename uut_%05d gate' % idx)
|
||||||
print('tee -a temp/all_share_log.txt log')
|
print('tee -o uut_%05d.txt opt gate' % idx)
|
||||||
print('tee -a temp/all_share_log.txt log #job# uut_%05d' % idx)
|
print('tee -o uut_%05d.txt opt_share gate' % idx)
|
||||||
print('tee -a temp/all_share_log.txt opt gate')
|
print('tee -o uut_%05d.txt opt_clean gate' % idx)
|
||||||
print('tee -a temp/all_share_log.txt opt_share gate')
|
|
||||||
print('tee -a temp/all_share_log.txt opt_clean gate')
|
|
||||||
print(
|
print(
|
||||||
'miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter'
|
'miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter'
|
||||||
)
|
)
|
||||||
print(
|
print(
|
||||||
'sat -set-def-inputs -verify -prove trigger 0 -show-inputs -show-outputs miter'
|
'sat -set-def-inputs -verify -prove trigger 0 -show-inputs -show-outputs miter'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
|
|
||||||
# run this test many times:
|
|
||||||
# time bash -c 'for ((i=0; i<100; i++)); do echo "-- $i --"; bash run-test.sh || exit 1; done'
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
count=100
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "c:S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
c) count="$OPTARG" ;;
|
|
||||||
S) seed="-S $OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
rm -rf temp
|
|
||||||
mkdir -p temp
|
|
||||||
echo "generating tests.."
|
|
||||||
python3 generate.py -c $count $seed
|
|
||||||
|
|
||||||
{
|
|
||||||
echo ".PHONY: all"
|
|
||||||
echo "all:"
|
|
||||||
|
|
||||||
for i in $( ls temp/*.ys | sed 's,[^0-9],,g; s,^0*\(.\),\1,g;' ); do
|
|
||||||
idx=$( printf "%05d" $i )
|
|
||||||
echo ".PHONY: test-$idx"
|
|
||||||
echo "all: test-$idx"
|
|
||||||
echo "test-$idx:"
|
|
||||||
printf "\t@%s\n" \
|
|
||||||
"echo -n [$i]" \
|
|
||||||
"../../yosys -ql temp/uut_${idx}.log temp/uut_${idx}.ys"
|
|
||||||
done
|
|
||||||
} > temp/makefile
|
|
||||||
|
|
||||||
echo "running tests.."
|
|
||||||
${MAKE:-make} -f temp/makefile
|
|
||||||
echo
|
|
||||||
|
|
||||||
failed_share=$( echo $( gawk '/^#job#/ { j=$2; db[j]=0; } /^Removing [246] cells/ { delete db[j]; } END { for (j in db) print(j); }' temp/all_share_log.txt ) )
|
|
||||||
if [ -n "$failed_share" ]; then
|
|
||||||
echo "Resource sharing failed for the following test cases: $failed_share"
|
|
||||||
false
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
8
tests/peepopt/generate_mk.py
Normal file
8
tests/peepopt/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
8
tests/proc/generate_mk.py
Normal file
8
tests/proc/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
2
tests/realmath/.gitignore
vendored
2
tests/realmath/.gitignore
vendored
|
|
@ -1 +1 @@
|
||||||
temp
|
uut_*
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,12 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
import gen_tests_makefile
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
from contextlib import contextmanager
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def redirect_stdout(new_target):
|
|
||||||
old_target, sys.stdout = sys.stdout, new_target
|
|
||||||
try:
|
|
||||||
yield new_target
|
|
||||||
finally:
|
|
||||||
sys.stdout = old_target
|
|
||||||
|
|
||||||
def random_expression(depth = 3, maxparam = 0):
|
def random_expression(depth = 3, maxparam = 0):
|
||||||
def recursion():
|
def recursion():
|
||||||
|
|
@ -42,13 +37,15 @@ parser.add_argument('-S', '--seed', type = int, help = 'seed for PRNG')
|
||||||
parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
|
parser.add_argument('-c', '--count', type = int, default = 100, help = 'number of test cases to generate')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.seed is not None:
|
seed = args.seed
|
||||||
print("PRNG seed: %d" % args.seed)
|
if seed is None:
|
||||||
random.seed(args.seed)
|
seed = random.randrange(sys.maxsize)
|
||||||
|
print("realmath PRNG seed: %d" % seed)
|
||||||
|
random.seed(seed)
|
||||||
|
|
||||||
for idx in range(args.count):
|
for idx in range(args.count):
|
||||||
with open('temp/uut_%05d.v' % idx, 'w') as f:
|
with open('uut_%05d.v' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
print('module uut_%05d(output [63:0] %s);\n' % (idx, ', '.join(['y%02d' % i for i in range(100)])))
|
print('module uut_%05d(output [63:0] %s);\n' % (idx, ', '.join(['y%02d' % i for i in range(100)])))
|
||||||
for i in range(30):
|
for i in range(30):
|
||||||
if idx < 10:
|
if idx < 10:
|
||||||
|
|
@ -63,13 +60,13 @@ for idx in range(args.count):
|
||||||
for i in range(100):
|
for i in range(100):
|
||||||
print('assign y%02d = 65536 * (%s);' % (i, random_expression(maxparam = 60)))
|
print('assign y%02d = 65536 * (%s);' % (i, random_expression(maxparam = 60)))
|
||||||
print('endmodule')
|
print('endmodule')
|
||||||
with open('temp/uut_%05d.ys' % idx, 'w') as f:
|
with open('uut_%05d.ys' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
print('read_verilog uut_%05d.v' % idx)
|
print('read_verilog uut_%05d.v' % idx)
|
||||||
print('rename uut_%05d uut_%05d_syn' % (idx, idx))
|
print('rename uut_%05d uut_%05d_syn' % (idx, idx))
|
||||||
print('write_verilog uut_%05d_syn.v' % idx)
|
print('write_verilog uut_%05d_syn.v' % idx)
|
||||||
with open('temp/uut_%05d_tb.v' % idx, 'w') as f:
|
with open('uut_%05d_tb.v' % idx, 'w') as f:
|
||||||
with redirect_stdout(f):
|
with gen_tests_makefile.redirect_stdout(f):
|
||||||
print('module uut_%05d_tb;\n' % idx)
|
print('module uut_%05d_tb;\n' % idx)
|
||||||
print('wire [63:0] %s;' % (', '.join(['r%02d' % i for i in range(100)])))
|
print('wire [63:0] %s;' % (', '.join(['r%02d' % i for i in range(100)])))
|
||||||
print('wire [63:0] %s;' % (', '.join(['s%02d' % i for i in range(100)])))
|
print('wire [63:0] %s;' % (', '.join(['s%02d' % i for i in range(100)])))
|
||||||
|
|
@ -99,3 +96,20 @@ for idx in range(args.count):
|
||||||
print('end')
|
print('end')
|
||||||
print('endmodule')
|
print('endmodule')
|
||||||
|
|
||||||
|
|
||||||
|
def create_tests():
|
||||||
|
for idx in range(args.count):
|
||||||
|
cmd = [
|
||||||
|
f"$(YOSYS) -qq uut_{idx:05d}.ys",
|
||||||
|
f"iverilog -o uut_{idx:05d}_tb uut_{idx:05d}_tb.v uut_{idx:05d}.v uut_{idx:05d}_syn.v",
|
||||||
|
f"./uut_{idx:05d}_tb"
|
||||||
|
# f"./uut_{idx:05d}_tb | tee uut_{idx:05d}.err;",
|
||||||
|
# f"if test -s uut_{idx:05d}.err; then",
|
||||||
|
# " echo \"Note: Make sure that iverilog is an up-to-date git checkout of Icarus Verilog.\";",
|
||||||
|
# " exit 1;",
|
||||||
|
# "fi;",
|
||||||
|
# f"rm -f uut_{idx:05d}.err"
|
||||||
|
]
|
||||||
|
gen_tests_makefile.generate_cmd_test(f"uut_{idx:05d}", cmd)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(create_tests)
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
count=100
|
|
||||||
seed="" # default to no seed specified
|
|
||||||
while getopts "c:S:" opt
|
|
||||||
do
|
|
||||||
case "$opt" in
|
|
||||||
c) count="$OPTARG" ;;
|
|
||||||
S) seed="-S $OPTARG" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift "$((OPTIND-1))"
|
|
||||||
|
|
||||||
rm -rf temp
|
|
||||||
mkdir -p temp
|
|
||||||
echo "generating tests.."
|
|
||||||
python3 generate.py -c $count $seed
|
|
||||||
|
|
||||||
cd temp
|
|
||||||
echo "running tests.."
|
|
||||||
for ((i = 0; i < $count; i++)); do
|
|
||||||
echo -n "[$i]"
|
|
||||||
idx=$( printf "%05d" $i )
|
|
||||||
../../../yosys -qq uut_${idx}.ys
|
|
||||||
iverilog -o uut_${idx}_tb uut_${idx}_tb.v uut_${idx}.v uut_${idx}_syn.v
|
|
||||||
./uut_${idx}_tb | tee uut_${idx}.err
|
|
||||||
if test -s uut_${idx}.err; then
|
|
||||||
echo "Note: Make sure that 'iverilog' is an up-to-date git checkout of Icarus Verilog."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
rm -f uut_${idx}.err
|
|
||||||
done
|
|
||||||
echo
|
|
||||||
|
|
||||||
17
tests/rpc/generate_mk.py
Normal file
17
tests/rpc/generate_mk.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
import glob
|
||||||
|
|
||||||
|
def create_tests():
|
||||||
|
yss = sorted(glob.glob("*.ys"))
|
||||||
|
for ys in yss:
|
||||||
|
gen_tests_makefile.generate_ys_test(ys)
|
||||||
|
|
||||||
|
cmd = [ "python3 frontend.py unix-socket frontend.sock" ]
|
||||||
|
gen_tests_makefile.generate_cmd_test("frontend.py", cmd)
|
||||||
|
|
||||||
|
gen_tests_makefile.generate_custom(create_tests)
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
python3 frontend.py unix-socket frontend.sock
|
|
||||||
8
tests/rtlil/generate_mk.py
Normal file
8
tests/rtlil/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash"])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../gen-tests-makefile.sh
|
|
||||||
generate_mk --bash --yosys-scripts
|
|
||||||
8
tests/sat/generate_mk.py
Normal file
8
tests/sat/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts
|
|
||||||
8
tests/sdc/generate_mk.py
Normal file
8
tests/sdc/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts", "--bash"])
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
set -eu
|
|
||||||
source ../gen-tests-makefile.sh
|
|
||||||
generate_mk --yosys-scripts --bash
|
|
||||||
8
tests/select/generate_mk.py
Normal file
8
tests/select/generate_mk.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("..")
|
||||||
|
|
||||||
|
import gen_tests_makefile
|
||||||
|
|
||||||
|
gen_tests_makefile.generate(["--yosys-scripts"])
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
source ../common-env.sh
|
|
||||||
set -e
|
|
||||||
for x in *.ys; do
|
|
||||||
echo "Running $x.."
|
|
||||||
../../yosys -ql ${x%.ys}.log $x
|
|
||||||
done
|
|
||||||
2
tests/share/.gitignore
vendored
2
tests/share/.gitignore
vendored
|
|
@ -1 +1 @@
|
||||||
temp
|
uut_*.*
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue