From f843780aad6274a6d4a82a7348520269762dce78 Mon Sep 17 00:00:00 2001 From: Ryszard Rozak Date: Thu, 19 Feb 2026 08:36:21 +0100 Subject: [PATCH] Add UNSUPPORTED on $sampled in sensitivity list (#7093) --- src/V3AssertPre.cpp | 8 ++++++++ test_regress/t/t_sampled_sensitivity.out | 6 ++++++ test_regress/t/t_sampled_sensitivity.py | 16 ++++++++++++++++ test_regress/t/t_sampled_sensitivity.v | 18 ++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 test_regress/t/t_sampled_sensitivity.out create mode 100755 test_regress/t/t_sampled_sensitivity.py create mode 100644 test_regress/t/t_sampled_sensitivity.v diff --git a/src/V3AssertPre.cpp b/src/V3AssertPre.cpp index 0073dbe2d..81ebc2afc 100644 --- a/src/V3AssertPre.cpp +++ b/src/V3AssertPre.cpp @@ -382,6 +382,14 @@ private: nodep->v3error("Event controls cannot be used in " "synchronous drives (IEEE 1800-2023 14.16)"); } + + const AstSampled* sampledp; + if (nodep->exists([&sampledp](const AstSampled* const sp) { + sampledp = sp; + return true; + })) { + sampledp->v3warn(E_UNSUPPORTED, "Unsupported: $sampled inside sensitivity list"); + } } void visit(AstNodeVarRef* nodep) override { UINFO(8, " -varref: " << nodep); diff --git a/test_regress/t/t_sampled_sensitivity.out b/test_regress/t/t_sampled_sensitivity.out new file mode 100644 index 000000000..e35a70b97 --- /dev/null +++ b/test_regress/t/t_sampled_sensitivity.out @@ -0,0 +1,6 @@ +%Error-UNSUPPORTED: t/t_sampled_sensitivity.v:14:20: Unsupported: $sampled inside sensitivity list + : ... note: In instance 't' + 14 | always @(posedge $sampled(clk)) begin + | ^~~~~~~~ + ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest +%Error: Exiting due to diff --git a/test_regress/t/t_sampled_sensitivity.py b/test_regress/t/t_sampled_sensitivity.py new file mode 100755 index 000000000..3160d0589 --- /dev/null +++ b/test_regress/t/t_sampled_sensitivity.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +# DESCRIPTION: Verilator: Verilog Test driver/expect definition +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of either the GNU Lesser General Public License Version 3 +# or the Perl Artistic License Version 2.0. +# SPDX-FileCopyrightText: 2024 Wilson Snyder +# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 + +import vltest_bootstrap + +test.scenarios('vlt') + +test.lint(fails=True, expect_filename=test.golden_filename) + +test.passes() diff --git a/test_regress/t/t_sampled_sensitivity.v b/test_regress/t/t_sampled_sensitivity.v new file mode 100644 index 000000000..bff4af5a4 --- /dev/null +++ b/test_regress/t/t_sampled_sensitivity.v @@ -0,0 +1,18 @@ +// DESCRIPTION: Verilator: Verilog Test module +// +// This file ONLY is placed under the Creative Commons Public Domain. +// SPDX-FileCopyrightText: 2026 Antmicro +// SPDX-License-Identifier: CC0-1.0 + +module t ( /*AUTOARG*/ + // Inputs + clk +); + + input clk; + + always @(posedge $sampled(clk)) begin + $write("*-* All Finished *-*\n"); + $finish; + end +endmodule