From c5dbdddf7b1e8ff83af11d7a2b2c4956552bc4b2 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sun, 2 Aug 2026 12:37:21 -0700 Subject: [PATCH] Add regression tests for specparam reference order Check separately that a module-body specparam declaration following a reference is rejected and that a specparam declared in a specify block remains visible before its declaration. Run both tests through the native and vlog95 backends. Signed-off-by: Lars-Peter Clausen --- .../ivltests/specparam_reference_order_fail.v | 9 +++++++++ .../specparam_specify_reference_order.v | 18 ++++++++++++++++++ ivtest/regress-vvp.list | 2 ++ .../specparam_reference_order_fail.json | 5 +++++ .../specparam_specify_reference_order.json | 4 ++++ 5 files changed, 38 insertions(+) create mode 100644 ivtest/ivltests/specparam_reference_order_fail.v create mode 100644 ivtest/ivltests/specparam_specify_reference_order.v create mode 100644 ivtest/vvp_tests/specparam_reference_order_fail.json create mode 100644 ivtest/vvp_tests/specparam_specify_reference_order.json diff --git a/ivtest/ivltests/specparam_reference_order_fail.v b/ivtest/ivltests/specparam_reference_order_fail.v new file mode 100644 index 000000000..321d641b9 --- /dev/null +++ b/ivtest/ivltests/specparam_reference_order_fail.v @@ -0,0 +1,9 @@ +// Check that a module-body specparam is declared before it is referenced. + +module test; + + wire value; + assign value = delay; + specparam delay = 1; + +endmodule diff --git a/ivtest/ivltests/specparam_specify_reference_order.v b/ivtest/ivltests/specparam_specify_reference_order.v new file mode 100644 index 000000000..5e13ac1e9 --- /dev/null +++ b/ivtest/ivltests/specparam_specify_reference_order.v @@ -0,0 +1,18 @@ +// Check that specify-block specparams can be referenced before declaration. + +module test; + + specify + specparam value = delay; + specparam delay = 42; + endspecify + + initial begin + if (value !== 42) begin + $display("FAILED. Expected 42, got %0d", value); + end else begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index c8f84fcee..6874747ff 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -234,6 +234,8 @@ sf_onehot_fail vvp_tests/sf_onehot_fail.json sf_onehot0_fail vvp_tests/sf_onehot0_fail.json shift6 vvp_tests/shift6.json single_element_array vvp_tests/single_element_array.json +specparam_reference_order_fail vvp_tests/specparam_reference_order_fail.json +specparam_specify_reference_order vvp_tests/specparam_specify_reference_order.json struct_enum_partsel vvp_tests/struct_enum_partsel.json struct_field_left_right vvp_tests/struct_field_left_right.json struct_nested1 vvp_tests/struct_nested1.json diff --git a/ivtest/vvp_tests/specparam_reference_order_fail.json b/ivtest/vvp_tests/specparam_reference_order_fail.json new file mode 100644 index 000000000..fb75c7475 --- /dev/null +++ b/ivtest/vvp_tests/specparam_reference_order_fail.json @@ -0,0 +1,5 @@ +{ + "type" : "CE", + "source" : "specparam_reference_order_fail.v", + "iverilog-args" : [ "-g2001" ] +} diff --git a/ivtest/vvp_tests/specparam_specify_reference_order.json b/ivtest/vvp_tests/specparam_specify_reference_order.json new file mode 100644 index 000000000..faebe5ec9 --- /dev/null +++ b/ivtest/vvp_tests/specparam_specify_reference_order.json @@ -0,0 +1,4 @@ +{ + "type" : "normal", + "source" : "specparam_specify_reference_order.v" +}