From 7336b9ebfc391bfa5e612f208d3ab496d8bbf722 Mon Sep 17 00:00:00 2001 From: Todd Strader Date: Fri, 11 Apr 2025 12:25:56 -0400 Subject: [PATCH] Add V3EmitV support for sampled value functions (#5931) --- src/V3EmitV.cpp | 32 +++++++++++++++++++++++++++++++ test_regress/t/t_debug_emitv.out | 33 ++++++++++++++++++++++++++++++++ test_regress/t/t_debug_emitv.v | 13 +++++++++++++ 3 files changed, 78 insertions(+) diff --git a/src/V3EmitV.cpp b/src/V3EmitV.cpp index b8176858d..f854796a6 100644 --- a/src/V3EmitV.cpp +++ b/src/V3EmitV.cpp @@ -401,6 +401,38 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst { } puts(")"); } + void visit(AstSampled* nodep) override { + putfs(nodep, "$sampled("); + iterateAndNextConstNull(nodep->exprp()); + puts(")"); + } + void visit(AstRose* nodep) override { + putfs(nodep, "$rose("); + iterateAndNextConstNull(nodep->exprp()); + if (nodep->sentreep()) { + puts(", "); + iterateAndNextConstNull(nodep->sentreep()); + } + puts(")"); + } + void visit(AstFell* nodep) override { + putfs(nodep, "$fell("); + iterateAndNextConstNull(nodep->exprp()); + if (nodep->sentreep()) { + puts(", "); + iterateAndNextConstNull(nodep->sentreep()); + } + puts(")"); + } + void visit(AstStable* nodep) override { + putfs(nodep, "$stable("); + iterateAndNextConstNull(nodep->exprp()); + if (nodep->sentreep()) { + puts(", "); + iterateAndNextConstNull(nodep->sentreep()); + } + puts(")"); + } void visit(AstReturn* nodep) override { putfs(nodep, "return "); iterateAndNextConstNull(nodep->lhsp()); diff --git a/test_regress/t/t_debug_emitv.out b/test_regress/t/t_debug_emitv.out index 07624a32f..f4a7202ff 100644 --- a/test_regress/t/t_debug_emitv.out +++ b/test_regress/t/t_debug_emitv.out @@ -310,6 +310,39 @@ module Vt_debug_emitv_t; $display("%g", $asinh(r)); $display("%g", $acosh(r)); $display("%g", $atanh(r)); + if ($sampled(cyc[1])) begin + $write(""); + end + if ($rose(cyc)) begin + $write(""); + end + if ($fell(cyc)) begin + $write(""); + end + if ($stable(cyc)) begin + $write(""); + end + if ((! $stable(cyc))) begin + $write(""); + end + if ($past(cyc[1])) begin + $write(""); + end + if ($rose(cyc, @( clk))) begin + $write(""); + end + if ($fell(cyc, @( clk))) begin + $write(""); + end + if ($stable(cyc, @( clk))) begin + $write(""); + end + if ((! $stable(cyc, @( clk)))) begin + $write(""); + end + if ($past(cyc[1], 'sh5)) begin + $write(""); + end force sum = 'sha; begin : unnamedblk1_1 integer signed __Vrepeat0; diff --git a/test_regress/t/t_debug_emitv.v b/test_regress/t/t_debug_emitv.v index 025089c07..f6111f33c 100644 --- a/test_regress/t/t_debug_emitv.v +++ b/test_regress/t/t_debug_emitv.v @@ -251,6 +251,19 @@ module t (/*AUTOARG*/ $display("%g", $acosh(r)); $display("%g", $atanh(r)); + if ($sampled(cyc[1])) $write(""); + if ($rose(cyc)) $write(""); + if ($fell(cyc)) $write(""); + if ($stable(cyc)) $write(""); + if ($changed(cyc)) $write(""); + if ($past(cyc[1])) $write(""); + + if ($rose(cyc, clk)) $write(""); + if ($fell(cyc, clk)) $write(""); + if ($stable(cyc, clk)) $write(""); + if ($changed(cyc, clk)) $write(""); + if ($past(cyc[1], 5)) $write(""); + force sum = 10; repeat (2) if (sum != 10) $stop; release sum;