Fix toggle coverage of unpacked unions with reals.
This commit is contained in:
parent
c20634e4f8
commit
e2e0795538
|
|
@ -365,7 +365,7 @@ class CoverageVisitor final : public VNVisitor {
|
|||
AstNodeExpr* const varRefp = new AstStructSel{
|
||||
varp->fileline(), above.m_varRefp->cloneTree(true), itemp->name()};
|
||||
AstNodeExpr* const chgRefp = new AstStructSel{
|
||||
varp->fileline(), above.m_varRefp->cloneTree(true), itemp->name()};
|
||||
varp->fileline(), above.m_chgRefp->cloneTree(true), itemp->name()};
|
||||
varRefp->dtypep(subtypep);
|
||||
chgRefp->dtypep(subtypep);
|
||||
ToggleEnt newent{above.m_comment + "."s + itemp->name(), varRefp, chgRefp};
|
||||
|
|
@ -377,11 +377,23 @@ class CoverageVisitor final : public VNVisitor {
|
|||
// Arbitrarily handle only the first member of the union
|
||||
if (const AstMemberDType* const itemp = adtypep->membersp()) {
|
||||
AstNodeDType* const subtypep = itemp->subDTypep()->skipRefp();
|
||||
ToggleEnt newent{above.m_comment + "."s + itemp->name(),
|
||||
above.m_varRefp->cloneTree(true),
|
||||
above.m_chgRefp->cloneTree(true)};
|
||||
toggleVarRecurse(subtypep, depth + 1, newent, varp, chgVarp);
|
||||
newent.cleanup();
|
||||
if (adtypep->packed()) {
|
||||
ToggleEnt newent{above.m_comment + "."s + itemp->name(),
|
||||
above.m_varRefp->cloneTree(true),
|
||||
above.m_chgRefp->cloneTree(true)};
|
||||
toggleVarRecurse(subtypep, depth + 1, newent, varp, chgVarp);
|
||||
newent.cleanup();
|
||||
} else {
|
||||
AstNodeExpr* const varRefp = new AstStructSel{
|
||||
varp->fileline(), above.m_varRefp->cloneTree(true), itemp->name()};
|
||||
AstNodeExpr* const chgRefp = new AstStructSel{
|
||||
varp->fileline(), above.m_chgRefp->cloneTree(true), itemp->name()};
|
||||
varRefp->dtypep(subtypep);
|
||||
chgRefp->dtypep(subtypep);
|
||||
ToggleEnt newent{above.m_comment + "."s + itemp->name(), varRefp, chgRefp};
|
||||
toggleVarRecurse(subtypep, depth + 1, newent, varp, chgVarp);
|
||||
newent.cleanup();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dtypep->v3fatalSrc("Unexpected node data type in toggle coverage generation: "
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@
|
|||
|
||||
%000002 str_t stoggle; initial stoggle='0;
|
||||
|
||||
union {
|
||||
real val1; // TODO use bit [7:0] here
|
||||
real val2; // TODO use bit [3:0] here
|
||||
%000001 } utoggle;
|
||||
|
||||
const reg aconst = '0;
|
||||
|
||||
%000000 reg [1:0][1:0] ptoggle; initial ptoggle=0;
|
||||
|
|
@ -72,6 +77,7 @@
|
|||
toggle <= '0;
|
||||
stoggle.u <= toggle;
|
||||
stoggle.b <= toggle;
|
||||
utoggle.val1 <= real'(cyc[7:0]);
|
||||
ptoggle[0][0] <= toggle;
|
||||
if (cyc==3) begin
|
||||
toggle <= '1;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ module t (/*AUTOARG*/
|
|||
|
||||
str_t stoggle; initial stoggle='0;
|
||||
|
||||
union {
|
||||
real val1; // TODO use bit [7:0] here
|
||||
real val2; // TODO use bit [3:0] here
|
||||
} utoggle;
|
||||
|
||||
const reg aconst = '0;
|
||||
|
||||
reg [1:0][1:0] ptoggle; initial ptoggle=0;
|
||||
|
|
@ -71,6 +76,7 @@ module t (/*AUTOARG*/
|
|||
toggle <= '0;
|
||||
stoggle.u <= toggle;
|
||||
stoggle.b <= toggle;
|
||||
utoggle.val1 <= real'(cyc[7:0]);
|
||||
ptoggle[0][0] <= toggle;
|
||||
if (cyc==3) begin
|
||||
toggle <= '1;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,12 @@
|
|||
-000002 point: comment=stoggle.b
|
||||
-000002 point: comment=stoggle.u.ua
|
||||
|
||||
union {
|
||||
real val1; // TODO use bit [7:0] here
|
||||
real val2; // TODO use bit [3:0] here
|
||||
%000001 } utoggle;
|
||||
-000001 point: comment=utoggle.val1
|
||||
|
||||
const reg aconst = '0;
|
||||
|
||||
%000000 reg [1:0][1:0] ptoggle; initial ptoggle=0;
|
||||
|
|
@ -115,6 +121,7 @@
|
|||
toggle <= '0;
|
||||
stoggle.u <= toggle;
|
||||
stoggle.b <= toggle;
|
||||
utoggle.val1 <= real'(cyc[7:0]);
|
||||
ptoggle[0][0] <= toggle;
|
||||
if (cyc==3) begin
|
||||
toggle <= '1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue