More V3EmitV support (#5779)

This commit is contained in:
Todd Strader 2025-02-14 14:58:11 -05:00 committed by GitHub
parent ffb02cea15
commit b645fcf027
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 68 additions and 1 deletions

View File

@ -235,6 +235,18 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
void visit(AstCoverInc*) override {} // N/A
void visit(AstCoverToggle*) override {} // N/A
void visit(AstTestPlusArgs* nodep) override {
putfs(nodep, nodep->verilogKwd());
putbs("(");
iterateChildrenConst(nodep);
puts(")");
}
void visit(AstValuePlusArgs* nodep) override {
putfs(nodep, nodep->verilogKwd());
putbs("(");
iterateChildrenConst(nodep);
puts(")");
}
void visitNodeDisplay(AstNode* nodep, AstNode* fileOrStrgp, const string& text,
AstNode* exprsp) {
putfs(nodep, nodep->verilogKwd());
@ -476,7 +488,7 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
bool inPct = false;
putbs("");
for (const char c : format) {
if (c == '%') {
if (!inPct && c == '%') {
inPct = true;
} else if (!inPct) { // Normal text
string s;
@ -676,6 +688,13 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
iterateAndNextConstNull(nodep->itemsp());
puts("}");
}
void visit(AstEnumItemRef* nodep) override {
if (AstNodeModule* const classOrPackagep = nodep->classOrPackagep()) {
putfs(nodep, classOrPackagep->prettyName());
puts("::");
}
putfs(nodep, nodep->name());
}
void visit(AstEnumItem* nodep) override {
putfs(nodep, nodep->name());
iterateConstNull(nodep->rangep());

View File

@ -23,10 +23,30 @@ module Vt_debug_emitv_t;
union {
logic a;
} unu;
integer signed i1;
int signed array[0:2];
initial begin
array = '{0:32'sh1, 1:32'sh2, 2:32'sh3};
end
initial begin
begin
if ($test$plusargs(40'h48454c4c4f)) begin
$display("Hello argument found.");
end
if ((Pkg::FOO == 'sh0)) begin
$write("");
end
if ((ZERO == 'sh0)) begin
$write("");
end
if ($value$plusargs(56'h544553543d2564i1)) begin
$display("value was %~", i1);
end
else begin
$display("+TEST= not found");
end
end
end
bit [6:5] [4:3] [2:1] arraymanyd[10:11][12:13][14:15];
logic [15:0] pubflat;
logic [15:0] pubflat_r;
@ -120,6 +140,8 @@ module Vt_debug_emitv_t;
int signed sum;
real r;
string str;
int signed mod_val;
int signed mod_res;
always @(posedge clk) begin
begin
cyc <= (cyc + 'sh1);
@ -240,6 +262,7 @@ module Vt_debug_emitv_t;
$stop;
end
sub.r = 62.0;
mod_res = (mod_val % 'sh5);
$display("%g", $log10(r));
$display("%g", $ln(r));
$display("%g", $exp(r));
@ -308,4 +331,9 @@ package Vt_debug_emitv_p;
endpackage
package Vt_debug_emitv_Pkg;
logic signed [31:0] PKG_PARAM;
typedef enum int signed{
FOO = 32'h0,
BAR = 32'h1,
BAZ = 32'h2
} enum_t;
endpackage

View File

@ -7,6 +7,12 @@
package Pkg;
localparam PKG_PARAM = 1;
typedef enum int {
FOO = 0,
BAR,
BAZ
} enum_t;
endpackage
package PkgImp;
import Pkg::*;
@ -52,8 +58,18 @@ module t (/*AUTOARG*/
us_t us;
union_t unu;
integer i1;
int array[3];
initial array = '{1,2,3};
initial begin
if ($test$plusargs("HELLO")) $display("Hello argument found.");
if (Pkg::FOO == 0) $write("");
if (ZERO == 0) $write("");
if ($value$plusargs("TEST=%d", i1))
$display("value was %d", i1);
else
$display("+TEST= not found");
end
bit [6:5][4:3][2:1] arraymanyd[10:11][12:13][14:15];
@ -125,6 +141,8 @@ module t (/*AUTOARG*/
int sum;
real r;
string str;
int mod_val;
int mod_res;
always_ff @ (posedge clk) begin
cyc <= cyc + 1;
r <= r + 0.01;
@ -195,6 +213,8 @@ module t (/*AUTOARG*/
if (Pkg::PKG_PARAM != 1) $stop;
sub.r = 62.0;
mod_res = mod_val % 5;
$display("%g", $log10(r));
$display("%g", $ln(r));
$display("%g", $exp(r));