From b77bb851edf69e7f8e85b8b2bbe56d245a0c6869 Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Fri, 19 Jun 2026 11:15:08 +1200 Subject: [PATCH] tests: Add mixed_upto write_verilog test --- tests/Makefile | 1 + tests/write_verilog/generate_mk.py | 37 ++++++++++++++++++++++++++++++ tests/write_verilog/mixed_upto.sv | 13 +++++++++++ 3 files changed, 51 insertions(+) create mode 100644 tests/write_verilog/generate_mk.py create mode 100644 tests/write_verilog/mixed_upto.sv diff --git a/tests/Makefile b/tests/Makefile index 1721dba71..fb442ffff 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -75,6 +75,7 @@ MK_TEST_DIRS += ./memories MK_TEST_DIRS += ./aiger MK_TEST_DIRS += ./alumacc MK_TEST_DIRS += ./check_mem +MK_TEST_DIRS += ./write_verilog all: vanilla-test diff --git a/tests/write_verilog/generate_mk.py b/tests/write_verilog/generate_mk.py new file mode 100644 index 000000000..bdcf93a65 --- /dev/null +++ b/tests/write_verilog/generate_mk.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import glob + +import sys +sys.path.append("..") + +import gen_tests_makefile + +def generate_write_test(sv_file: str): + # if the first line of the file starts with // (ie a comment), the rest of + # the line is treated as the commands to run after reading the input + header_cmds = "" + with open(sv_file, "r") as f: + line = f.readline().rstrip() + if line.startswith("//"): + header_cmds = line[3:] + + # process input & write output + read_cmd = f"read -sv {sv_file}; {header_cmds}" + out_file = f"{sv_file}.out" + out_yosys_cmd = f"{read_cmd}; rename gold gate; write_verilog {out_file}" + out_cmd = f'$(YOSYS) -l {out_file}.err -p "{out_yosys_cmd}" && mv {out_file}.err {out_file}.log' + gen_tests_makefile.generate_target(out_file, out_cmd) + + # test input & output equivalence + equiv = "equiv_make gold gate equiv; equiv_induct equiv; equiv_status -assert equiv" + yosys_cmd = f"{read_cmd}; design -stash gold; read -sv {out_file}; {header_cmds}; design -import gold; {equiv}" + cmd = f'$(YOSYS) -l {sv_file}.err -p "{yosys_cmd}" && mv {sv_file}.err {sv_file}.log' + gen_tests_makefile.generate_target(sv_file, cmd, [out_file]) + +def generate_write_tests(): + # currently configured to use `read -sv` on each + for f in sorted(glob.glob("*.sv")): + generate_write_test(f) + +gen_tests_makefile.generate_custom(generate_write_tests) diff --git a/tests/write_verilog/mixed_upto.sv b/tests/write_verilog/mixed_upto.sv new file mode 100644 index 000000000..3ef608c99 --- /dev/null +++ b/tests/write_verilog/mixed_upto.sv @@ -0,0 +1,13 @@ +// hierarchy; proc;; simplemap +module gold( + input clk, + input [1:0] in, + output reg [1:0] out +); + reg [0:1] r; + + always @(posedge clk) begin + out <= r; + r <= in; + end +endmodule