2025-07-14 12:51:58 +02:00
|
|
|
{"type":"NETLIST","name":"$root","addr":"(B)","loc":"a,0:0,0:0","timeunit":"1ps","timeprecision":"1ps","typeTablep":"(C)","constPoolp":"(D)","dollarUnitPkgp":"(E)","stdPackagep":"(F)","evalp":"UNLINKED","evalNbap":"UNLINKED","dpiExportTriggerp":"UNLINKED","delaySchedulerp":"UNLINKED","nbaEventp":"UNLINKED","nbaEventTriggerp":"UNLINKED","topScopep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"modulesp": [
|
2025-08-22 12:44:35 +02:00
|
|
|
{"type":"MODULE","name":"t","addr":"(G)","loc":"e,7:8,7:9","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"t","level":2,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PORT","name":"clk","addr":"(H)","loc":"e,9:4,9:7","exprp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"clk","addr":"(I)","loc":"e,11:10,11:13","dtypep":"UNLINKED","origName":"clk","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"LOGIC_IMPLICIT","addr":"(J)","loc":"e,11:10,11:13","dtypep":"(J)","keyword":"LOGIC_IMPLICIT","generic":false,"rangep": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"cyc","addr":"(K)","loc":"e,13:12,13:15","dtypep":"UNLINKED","origName":"cyc","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"integer","addr":"(L)","loc":"e,13:4,13:11","dtypep":"(L)","keyword":"integer","range":"31:0","generic":false,"rangep": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(M)","loc":"e,13:18,13:19","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"crc","addr":"(O)","loc":"e,14:15,14:18","dtypep":"UNLINKED","origName":"crc","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(P)","loc":"e,14:4,14:7","dtypep":"(P)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(Q)","loc":"e,14:8,14:9","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3f","addr":"(R)","loc":"e,14:9,14:11","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(T)","loc":"e,14:12,14:13","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"sum","addr":"(U)","loc":"e,15:15,15:18","dtypep":"UNLINKED","origName":"sum","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(V)","loc":"e,15:4,15:7","dtypep":"(V)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(W)","loc":"e,15:8,15:9","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3f","addr":"(X)","loc":"e,15:9,15:11","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(Y)","loc":"e,15:12,15:13","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"in","addr":"(Z)","loc":"e,18:16,18:18","dtypep":"UNLINKED","origName":"in","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"WIRE","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(AB)","loc":"e,18:9,18:10","dtypep":"(AB)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(BB)","loc":"e,18:9,18:10","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(CB)","loc":"e,18:10,18:12","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(EB)","loc":"e,18:13,18:14","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNW","name":"","addr":"(FB)","loc":"e,18:19,18:20","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELEXTRACT","name":"","addr":"(GB)","loc":"e,18:24,18:25","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(HB)","loc":"e,18:21,18:24","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(IB)","loc":"e,18:25,18:27","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(JB)","loc":"e,18:28,18:29","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"in","addr":"(KB)","loc":"e,18:16,18:18","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": [],"strengthSpecp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"out","addr":"(LB)","loc":"e,22:25,22:28","dtypep":"UNLINKED","origName":"out","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"WIRE","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(MB)","loc":"e,22:9,22:10","dtypep":"(MB)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(NB)","loc":"e,22:9,22:10","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(OB)","loc":"e,22:10,22:12","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(PB)","loc":"e,22:13,22:14","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CELL","name":"test","addr":"(QB)","loc":"e,25:9,25:13","origName":"test","recursive":false,"modp":"(RB)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"pinsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PIN","name":"out","addr":"(SB)","loc":"e,27:15,27:18","svDotName":true,"svImplicit":false,"modVarp":"UNLINKED","modPTypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"exprp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELEXTRACT","name":"","addr":"(TB)","loc":"e,27:45,27:46","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"out","addr":"(UB)","loc":"e,27:42,27:45","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(VB)","loc":"e,27:46,27:48","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(WB)","loc":"e,27:49,27:50","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrp": []}
|
|
|
|
|
]},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PIN","name":"clk","addr":"(XB)","loc":"e,29:15,29:18","svDotName":true,"svImplicit":false,"modVarp":"UNLINKED","modPTypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"exprp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"clk","addr":"(YB)","loc":"e,29:42,29:45","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
]},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PIN","name":"in","addr":"(ZB)","loc":"e,30:15,30:17","svDotName":true,"svImplicit":false,"modVarp":"UNLINKED","modPTypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"exprp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELEXTRACT","name":"","addr":"(AC)","loc":"e,30:44,30:45","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"in","addr":"(BC)","loc":"e,30:42,30:44","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(CC)","loc":"e,30:45,30:47","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(DC)","loc":"e,30:48,30:49","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrp": []}
|
|
|
|
|
]}
|
|
|
|
|
],"paramsp": [],"rangep": [],"intfRefsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"result","addr":"(EC)","loc":"e,33:16,33:22","dtypep":"UNLINKED","origName":"result","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"WIRE","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(FC)","loc":"e,33:9,33:10","dtypep":"(FC)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(GC)","loc":"e,33:9,33:10","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3f","addr":"(HC)","loc":"e,33:10,33:12","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(IC)","loc":"e,33:13,33:14","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNW","name":"","addr":"(JC)","loc":"e,33:23,33:24","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"REPLICATE","name":"","addr":"(KC)","loc":"e,33:25,33:26","dtypep":"(LC)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"srcp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONCAT","name":"","addr":"(MC)","loc":"e,33:31,33:32","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"32'h0","addr":"(NC)","loc":"e,33:26,33:31","dtypep":"(OC)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"out","addr":"(PC)","loc":"e,33:33,33:36","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"countp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"32'h1","addr":"(QC)","loc":"e,33:25,33:26","dtypep":"(OC)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"result","addr":"(RC)","loc":"e,33:16,33:22","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": [],"strengthSpecp": []},
|
2025-08-18 01:14:34 +02:00
|
|
|
{"type":"ALWAYS","name":"","addr":"(SC)","loc":"e,36:4,36:10","keyword":"always","isSuspendable":false,"needProcess":false,"sentreep": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"EVENTCONTROL","name":"","addr":"(TC)","loc":"e,36:11,36:12",
|
2025-08-18 01:14:34 +02:00
|
|
|
"sentreep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SENTREE","name":"","addr":"(UC)","loc":"e,36:11,36:12","isMulti":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"sensesp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SENITEM","name":"","addr":"(VC)","loc":"e,36:14,36:21","edgeType":"POS",
|
2024-03-28 12:32:18 +01:00
|
|
|
"sensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"clk","addr":"(WC)","loc":"e,36:22,36:25","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"condp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(XC)","loc":"e,36:27,36:32","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(YC)","loc":"e,40:11,40:13","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ADD","name":"","addr":"(ZC)","loc":"e,40:18,40:19","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(AD)","loc":"e,40:14,40:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(BD)","loc":"e,40:20,40:21","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(CD)","loc":"e,40:7,40:10","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(DD)","loc":"e,41:11,41:13","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"REPLICATE","name":"","addr":"(ED)","loc":"e,41:14,41:15","dtypep":"(LC)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"srcp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONCAT","name":"","addr":"(FD)","loc":"e,41:24,41:25","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELEXTRACT","name":"","addr":"(GD)","loc":"e,41:18,41:19","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(HD)","loc":"e,41:15,41:18","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3e","addr":"(ID)","loc":"e,41:19,41:21","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(JD)","loc":"e,41:22,41:23","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"XOR","name":"","addr":"(KD)","loc":"e,41:43,41:44","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"XOR","name":"","addr":"(LD)","loc":"e,41:34,41:35","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(MD)","loc":"e,41:29,41:30","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(ND)","loc":"e,41:26,41:29","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3f","addr":"(OD)","loc":"e,41:30,41:32","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(PD)","loc":"e,41:39,41:40","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(QD)","loc":"e,41:36,41:39","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh2","addr":"(RD)","loc":"e,41:40,41:41","dtypep":"(SD)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(TD)","loc":"e,41:48,41:49","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(UD)","loc":"e,41:45,41:48","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(VD)","loc":"e,41:49,41:50","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"countp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"32'h1","addr":"(WD)","loc":"e,41:14,41:15","dtypep":"(OC)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(XD)","loc":"e,41:7,41:10","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(YD)","loc":"e,42:11,42:13","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"XOR","name":"","addr":"(ZD)","loc":"e,42:21,42:22","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"result","addr":"(AE)","loc":"e,42:14,42:20","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"REPLICATE","name":"","addr":"(BE)","loc":"e,42:23,42:24","dtypep":"(LC)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"srcp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONCAT","name":"","addr":"(CE)","loc":"e,42:33,42:34","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELEXTRACT","name":"","addr":"(DE)","loc":"e,42:27,42:28","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(EE)","loc":"e,42:24,42:27","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3e","addr":"(FE)","loc":"e,42:28,42:30","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(GE)","loc":"e,42:31,42:32","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"XOR","name":"","addr":"(HE)","loc":"e,42:52,42:53","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"XOR","name":"","addr":"(IE)","loc":"e,42:43,42:44","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(JE)","loc":"e,42:38,42:39","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(KE)","loc":"e,42:35,42:38","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3f","addr":"(LE)","loc":"e,42:39,42:41","dtypep":"(S)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(ME)","loc":"e,42:48,42:49","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(NE)","loc":"e,42:45,42:48","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh2","addr":"(OE)","loc":"e,42:49,42:50","dtypep":"(SD)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(PE)","loc":"e,42:57,42:58","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fromp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(QE)","loc":"e,42:54,42:57","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(RE)","loc":"e,42:58,42:59","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"countp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"32'h1","addr":"(SE)","loc":"e,42:23,42:24","dtypep":"(OC)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(TE)","loc":"e,42:7,42:10","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(UE)","loc":"e,43:7,43:9",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"EQ","name":"","addr":"(VE)","loc":"e,43:15,43:17","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(XE)","loc":"e,43:11,43:14","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(YE)","loc":"e,43:18,43:19","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(ZE)","loc":"e,43:21,43:26","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(AF)","loc":"e,45:14,45:16","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"64'h5aef0c8dd70a4497","addr":"(BF)","loc":"e,45:17,45:38","dtypep":"(CF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(DF)","loc":"e,45:10,45:13","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(EF)","loc":"e,46:14,46:16","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"'0","addr":"(FF)","loc":"e,46:17,46:19","dtypep":"(WE)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(GF)","loc":"e,46:10,46:13","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"elsesp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(HF)","loc":"e,48:12,48:14",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"LT","name":"","addr":"(IF)","loc":"e,48:20,48:21","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(JF)","loc":"e,48:16,48:19","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sha","addr":"(KF)","loc":"e,48:22,48:24","dtypep":"(LF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(MF)","loc":"e,48:26,48:31","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(NF)","loc":"e,49:14,49:16","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"'0","addr":"(OF)","loc":"e,49:17,49:19","dtypep":"(WE)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(PF)","loc":"e,49:10,49:13","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"elsesp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(QF)","loc":"e,51:12,51:14",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"LT","name":"","addr":"(RF)","loc":"e,51:20,51:21","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(SF)","loc":"e,51:16,51:19","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh5a","addr":"(TF)","loc":"e,51:22,51:24","dtypep":"(UF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(VF)","loc":"e,51:26,51:31","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],"stmtsp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"elsesp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(WF)","loc":"e,53:12,53:14",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"EQ","name":"","addr":"(XF)","loc":"e,53:20,53:22","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(YF)","loc":"e,53:16,53:19","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh63","addr":"(ZF)","loc":"e,53:23,53:25","dtypep":"(UF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(AG)","loc":"e,53:27,53:32","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"DISPLAY","name":"","addr":"(BG)","loc":"e,54:10,54:16",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fmtp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SFORMATF","name":"","addr":"(CG)","loc":"e,54:10,54:16","dtypep":"(DG)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"exprsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"232'h5b2530745d206379633d3d253064206372633d25782073756d3d25780a","addr":"(EG)","loc":"e,54:17,54:49","dtypep":"(FG)"},
|
|
|
|
|
{"type":"TIME","name":"","addr":"(GG)","loc":"e,54:51,54:56","dtypep":"(HG)","timeunit":"NONE"},
|
|
|
|
|
{"type":"PARSEREF","name":"cyc","addr":"(IG)","loc":"e,54:58,54:61","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []},
|
|
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(JG)","loc":"e,54:63,54:66","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []},
|
|
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(KG)","loc":"e,54:68,54:71","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"filep": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(LG)","loc":"e,55:10,55:12",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"NEQCASE","name":"","addr":"(MG)","loc":"e,55:18,55:21","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"crc","addr":"(NG)","loc":"e,55:14,55:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"64'hc77bb9b3784ea091","addr":"(OG)","loc":"e,55:22,55:42","dtypep":"(CF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"STOP","name":"","addr":"(PG)","loc":"e,55:44,55:49","isFatal":false}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"elsesp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"IF","name":"","addr":"(QG)","loc":"e,58:10,58:12",
|
2024-03-28 12:32:18 +01:00
|
|
|
"condp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"NEQCASE","name":"","addr":"(RG)","loc":"e,58:18,58:21","dtypep":"(WE)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"sum","addr":"(SG)","loc":"e,58:14,58:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"64'h4afe43fb79d7b71e","addr":"(TG)","loc":"e,58:22,58:42","dtypep":"(CF)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"STOP","name":"","addr":"(UG)","loc":"e,58:44,58:49","isFatal":false}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"elsesp": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"DISPLAY","name":"","addr":"(VG)","loc":"e,59:10,59:16",
|
2024-03-28 12:32:18 +01:00
|
|
|
"fmtp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SFORMATF","name":"","addr":"(WG)","loc":"e,59:10,59:16","dtypep":"(DG)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"exprsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"168'h2a2d2a20416c6c2046696e6973686564202a2d2a0a","addr":"(XG)","loc":"e,59:17,59:41","dtypep":"(YG)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"filep": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"FINISH","name":"","addr":"(ZG)","loc":"e,60:10,60:17"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
],"elsesp": []}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
2025-06-29 15:56:44 +02:00
|
|
|
]},
|
2025-08-22 12:44:35 +02:00
|
|
|
{"type":"MODULE","name":"Test","addr":"(RB)","loc":"e,66:8,66:12","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"Test","level":3,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PORT","name":"out","addr":"(AH)","loc":"e,68:4,68:7","exprp": []},
|
|
|
|
|
{"type":"PORT","name":"clk","addr":"(BH)","loc":"e,70:4,70:7","exprp": []},
|
|
|
|
|
{"type":"PORT","name":"in","addr":"(CH)","loc":"e,70:9,70:11","exprp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"clk","addr":"(DH)","loc":"e,78:10,78:13","dtypep":"UNLINKED","origName":"clk","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"LOGIC_IMPLICIT","addr":"(EH)","loc":"e,78:10,78:13","dtypep":"(EH)","keyword":"LOGIC_IMPLICIT","generic":false,"rangep": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"in","addr":"(FH)","loc":"e,79:17,79:19","dtypep":"UNLINKED","origName":"in","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(GH)","loc":"e,79:10,79:11","dtypep":"(GH)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(HH)","loc":"e,79:10,79:11","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(IH)","loc":"e,79:11,79:13","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(JH)","loc":"e,79:14,79:15","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"out","addr":"(KH)","loc":"e,80:22,80:25","dtypep":"UNLINKED","origName":"out","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"OUTPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"childDTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(LH)","loc":"e,80:11,80:14","dtypep":"(LH)","keyword":"logic","generic":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"rangep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"RANGE","name":"","addr":"(MH)","loc":"e,80:15,80:16","ascending":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"leftp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1f","addr":"(NH)","loc":"e,80:16,80:18","dtypep":"(DB)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"rightp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(OH)","loc":"e,80:19,80:20","dtypep":"(N)"}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-08-18 01:14:34 +02:00
|
|
|
{"type":"ALWAYS","name":"","addr":"(PH)","loc":"e,82:4,82:10","keyword":"always","isSuspendable":false,"needProcess":false,"sentreep": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"EVENTCONTROL","name":"","addr":"(QH)","loc":"e,82:11,82:12",
|
2025-08-18 01:14:34 +02:00
|
|
|
"sentreep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SENTREE","name":"","addr":"(RH)","loc":"e,82:11,82:12","isMulti":false,
|
2024-03-28 12:32:18 +01:00
|
|
|
"sensesp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"SENITEM","name":"","addr":"(SH)","loc":"e,82:13,82:20","edgeType":"POS",
|
2024-03-28 12:32:18 +01:00
|
|
|
"sensp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"clk","addr":"(TH)","loc":"e,82:21,82:24","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"condp": []}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(UH)","loc":"e,82:26,82:31","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"ASSIGNDLY","name":"","addr":"(VH)","loc":"e,83:11,83:13","dtypep":"UNLINKED",
|
2024-03-28 12:32:18 +01:00
|
|
|
"rhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"in","addr":"(WH)","loc":"e,83:14,83:16","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"PARSEREF","name":"out","addr":"(XH)","loc":"e,83:7,83:10","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2024-05-08 14:31:34 +02:00
|
|
|
],"timingControlp": []},
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"ASSERTCTL","name":"","addr":"(YH)","loc":"e,86:7,86:17","ctlType":"",
|
2024-05-08 14:31:34 +02:00
|
|
|
"controlTypep": [
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"CONST","name":"32'h4","addr":"(ZH)","loc":"e,86:7,86:17","dtypep":"(OC)"}
|
2025-09-06 16:31:08 +02:00
|
|
|
],
|
|
|
|
|
"assertTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'hf","addr":"(AI)","loc":"e,86:7,86:17","dtypep":"(OC)"}
|
|
|
|
|
],
|
|
|
|
|
"directiveTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'h7","addr":"(BI)","loc":"e,86:7,86:17","dtypep":"(OC)"}
|
|
|
|
|
]},
|
|
|
|
|
{"type":"ASSERTCTL","name":"","addr":"(CI)","loc":"e,87:7,87:18","ctlType":"",
|
2024-05-08 14:31:34 +02:00
|
|
|
"controlTypep": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"CONST","name":"32'h5","addr":"(DI)","loc":"e,87:7,87:18","dtypep":"(OC)"}
|
|
|
|
|
],
|
|
|
|
|
"assertTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'hf","addr":"(EI)","loc":"e,87:7,87:18","dtypep":"(OC)"}
|
|
|
|
|
],
|
|
|
|
|
"directiveTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'h7","addr":"(FI)","loc":"e,87:7,87:18","dtypep":"(OC)"}
|
|
|
|
|
]},
|
|
|
|
|
{"type":"ASSERT","name":"","addr":"(GI)","loc":"e,88:7,88:13","type":"[SIMPLE_IMMEDIATE]",
|
2024-05-08 14:31:34 +02:00
|
|
|
"propp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(HI)","loc":"e,88:14,88:15","dtypep":"(N)"}
|
2024-05-08 14:31:34 +02:00
|
|
|
],"sentreep": [],"failsp": [],"passsp": []},
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"ASSERTCTL","name":"","addr":"(II)","loc":"e,89:7,89:16","ctlType":"",
|
2024-05-08 14:31:34 +02:00
|
|
|
"controlTypep": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"CONST","name":"32'h3","addr":"(JI)","loc":"e,89:7,89:16","dtypep":"(OC)"}
|
|
|
|
|
],
|
|
|
|
|
"assertTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'hf","addr":"(KI)","loc":"e,89:7,89:16","dtypep":"(OC)"}
|
|
|
|
|
],
|
|
|
|
|
"directiveTypesp": [
|
|
|
|
|
{"type":"CONST","name":"32'h7","addr":"(LI)","loc":"e,89:7,89:16","dtypep":"(OC)"}
|
|
|
|
|
]},
|
|
|
|
|
{"type":"ASSERTCTL","name":"","addr":"(MI)","loc":"e,90:7,90:21","ctlType":"",
|
2024-07-10 11:06:13 +02:00
|
|
|
"controlTypep": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3","addr":"(NI)","loc":"e,90:22,90:23","dtypep":"(SD)"}
|
2024-07-10 11:06:13 +02:00
|
|
|
],
|
|
|
|
|
"assertTypesp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"CONST","name":"?32?sh8","addr":"(OI)","loc":"e,90:25,90:26","dtypep":"(LF)"}
|
2025-07-09 22:59:26 +02:00
|
|
|
],"directiveTypesp": []},
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"BEGIN","name":"blk","addr":"(PI)","loc":"e,91:15,91:18","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":false,"genforp": [],
|
2025-07-09 22:59:26 +02:00
|
|
|
"stmtsp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"DISABLE","name":"","addr":"(QI)","loc":"e,92:10,92:17",
|
2025-07-09 22:59:26 +02:00
|
|
|
"targetRefp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"PARSEREF","name":"blk","addr":"(RI)","loc":"e,92:18,92:21","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-09 22:59:26 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
|
|
|
|
{"type":"PACKAGE","name":"$unit","addr":"(E)","loc":"a,0:0,0:0","origName":"__024unit","level":3,"modPublic":false,"inLibrary":true,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
|
|
|
|
"stmtsp": [
|
2025-09-06 21:21:50 +02:00
|
|
|
{"type":"PACKAGEIMPORT","name":"*","addr":"(SI)","loc":"d,31:9,31:12","packagep":"(F)","resolvedClassp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
|
|
|
|
{"type":"PACKAGE","name":"std","addr":"(F)","loc":"d,31:9,31:12","origName":"std","level":4,"modPublic":false,"inLibrary":true,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"1ps","inlinesp": [],
|
|
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CLASS","name":"mailbox","addr":"(TI)","loc":"d,32:3,32:8","isExtended":false,"isInterfaceClass":false,"isVirtual":false,"origName":"mailbox","level":5,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","classOrPackagep":"UNLINKED","inlinesp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"T","addr":"(UI)","loc":"d,33:12,33:13","dtypep":"UNLINKED","origName":"T","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"GPARAM","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":true,"isParam":true,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSETYPEDTYPE","name":"","addr":"(VI)","loc":"d,33:7,33:11","dtypep":"UNLINKED","generic":false}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TYPEDEFFWD","name":"T","addr":"(WI)","loc":"d,33:12,33:13","fwdType":"none"},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"m_bound","addr":"(XI)","loc":"d,35:19,35:26","dtypep":"UNLINKED","origName":"m_bound","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(YI)","loc":"d,35:15,35:18","dtypep":"(YI)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"m_queue","addr":"(ZI)","loc":"d,36:17,36:24","dtypep":"UNLINKED","origName":"m_queue","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BRACKETARRAYDTYPE","name":"","addr":"(AJ)","loc":"d,36:24,36:25","dtypep":"UNLINKED","generic":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(BJ)","loc":"d,36:15,36:16","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"elementsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"UNBOUNDED","name":"","addr":"(CJ)","loc":"d,36:25,36:26","dtypep":"(DJ)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"new","addr":"(EJ)","loc":"d,38:14,38:17","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"new","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"bound","addr":"(FJ)","loc":"d,38:22,38:27","dtypep":"UNLINKED","origName":"bound","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(GJ)","loc":"d,38:18,38:21","dtypep":"(GJ)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(HJ)","loc":"d,38:30,38:31","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(IJ)","loc":"d,39:15,39:16","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"bound","addr":"(JJ)","loc":"d,39:17,39:22","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_bound","addr":"(KJ)","loc":"d,39:7,39:14","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"num","addr":"(LJ)","loc":"d,42:18,42:21","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"num",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(MJ)","loc":"d,42:14,42:17","dtypep":"(MJ)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(NJ)","loc":"d,43:7,43:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DOT","name":"","addr":"(OJ)","loc":"d,43:21,43:22","dtypep":"UNLINKED","colon":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_queue","addr":"(PJ)","loc":"d,43:14,43:21","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"size","addr":"(QJ)","loc":"d,43:22,43:26","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"put","addr":"(RJ)","loc":"d,46:10,46:13","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"put","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(SJ)","loc":"d,46:16,46:23","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(TJ)","loc":"d,46:14,46:15","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"try_put","addr":"(UJ)","loc":"d,54:18,54:25","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"try_put",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(VJ)","loc":"d,54:14,54:17","dtypep":"(VJ)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(WJ)","loc":"d,54:28,54:35","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(XJ)","loc":"d,54:26,54:27","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"IF","name":"","addr":"(YJ)","loc":"d,55:7,55:9",
|
2025-07-14 12:51:58 +02:00
|
|
|
"condp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"LOGOR","name":"","addr":"(ZJ)","loc":"d,55:24,55:26","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"EQ","name":"","addr":"(AK)","loc":"d,55:19,55:21","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_bound","addr":"(BK)","loc":"d,55:11,55:18","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(CK)","loc":"d,55:22,55:23","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"LT","name":"","addr":"(DK)","loc":"d,55:33,55:34","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"num","addr":"(EK)","loc":"d,55:27,55:30","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_bound","addr":"(FK)","loc":"d,55:35,55:42","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(GK)","loc":"d,55:44,55:49","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(HK)","loc":"d,56:16,56:17",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DOT","name":"","addr":"(IK)","loc":"d,56:16,56:17","dtypep":"UNLINKED","colon":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_queue","addr":"(JK)","loc":"d,56:9,56:16","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASKREF","name":"push_back","addr":"(KK)","loc":"d,56:17,56:26","dtypep":"(LK)","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"pinsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ARG","name":"","addr":"(MK)","loc":"d,56:27,56:34",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"message","addr":"(NK)","loc":"d,56:27,56:34","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
]}
|
|
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(OK)","loc":"d,57:9,57:15",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(PK)","loc":"d,57:16,57:17","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"elsesp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(QK)","loc":"d,59:7,59:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(RK)","loc":"d,59:14,59:15","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"get","addr":"(SK)","loc":"d,62:10,62:13","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"get","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(TK)","loc":"d,62:20,62:27","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"REF","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(UK)","loc":"d,62:18,62:19","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"try_get","addr":"(VK)","loc":"d,71:18,71:25","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"try_get",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(WK)","loc":"d,71:14,71:17","dtypep":"(WK)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(XK)","loc":"d,71:32,71:39","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"REF","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(YK)","loc":"d,71:30,71:31","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"IF","name":"","addr":"(ZK)","loc":"d,72:7,72:9",
|
2025-07-14 12:51:58 +02:00
|
|
|
"condp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"GT","name":"","addr":"(AL)","loc":"d,72:17,72:18","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"num","addr":"(BL)","loc":"d,72:11,72:14","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(CL)","loc":"d,72:19,72:20","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(DL)","loc":"d,72:22,72:27","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(EL)","loc":"d,73:17,73:18","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DOT","name":"","addr":"(FL)","loc":"d,73:26,73:27","dtypep":"UNLINKED","colon":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_queue","addr":"(GL)","loc":"d,73:19,73:26","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"pop_front","addr":"(HL)","loc":"d,73:27,73:36","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"message","addr":"(IL)","loc":"d,73:9,73:16","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(JL)","loc":"d,74:9,74:15",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(KL)","loc":"d,74:16,74:17","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"elsesp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(LL)","loc":"d,76:7,76:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(ML)","loc":"d,76:14,76:15","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"peek","addr":"(NL)","loc":"d,79:10,79:14","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"peek","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(OL)","loc":"d,79:21,79:28","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"REF","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(PL)","loc":"d,79:19,79:20","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"try_peek","addr":"(QL)","loc":"d,88:18,88:26","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"try_peek",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(RL)","loc":"d,88:14,88:17","dtypep":"(RL)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"message","addr":"(SL)","loc":"d,88:33,88:40","dtypep":"UNLINKED","origName":"message","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"REF","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"T","addr":"(TL)","loc":"d,88:31,88:32","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"IF","name":"","addr":"(UL)","loc":"d,89:7,89:9",
|
2025-07-14 12:51:58 +02:00
|
|
|
"condp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"GT","name":"","addr":"(VL)","loc":"d,89:17,89:18","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"num","addr":"(WL)","loc":"d,89:11,89:14","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(XL)","loc":"d,89:19,89:20","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(YL)","loc":"d,89:22,89:27","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(ZL)","loc":"d,90:17,90:18","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"SELBIT","name":"","addr":"(AM)","loc":"d,90:26,90:27","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fromp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_queue","addr":"(BM)","loc":"d,90:19,90:26","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"bitp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(CM)","loc":"d,90:27,90:28","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"thsp": [],"attrp": []}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"message","addr":"(DM)","loc":"d,90:9,90:16","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(EM)","loc":"d,91:9,91:15",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(FM)","loc":"d,91:16,91:17","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"elsesp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(GM)","loc":"d,93:7,93:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(HM)","loc":"d,93:14,93:15","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"extendsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CLASS","name":"semaphore","addr":"(IM)","loc":"d,97:3,97:8","isExtended":false,"isInterfaceClass":false,"isVirtual":false,"origName":"semaphore","level":5,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","classOrPackagep":"UNLINKED","inlinesp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"m_keyCount","addr":"(JM)","loc":"d,98:19,98:29","dtypep":"UNLINKED","origName":"m_keyCount","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(KM)","loc":"d,98:15,98:18","dtypep":"(KM)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"new","addr":"(LM)","loc":"d,100:14,100:17","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"new","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"keyCount","addr":"(MM)","loc":"d,100:22,100:30","dtypep":"UNLINKED","origName":"keyCount","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(NM)","loc":"d,100:18,100:21","dtypep":"(NM)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(OM)","loc":"d,100:33,100:34","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(PM)","loc":"d,101:18,101:19","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"keyCount","addr":"(QM)","loc":"d,101:20,101:28","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(RM)","loc":"d,101:7,101:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"put","addr":"(SM)","loc":"d,104:19,104:22","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"put","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"keyCount","addr":"(TM)","loc":"d,104:27,104:35","dtypep":"UNLINKED","origName":"keyCount","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(UM)","loc":"d,104:23,104:26","dtypep":"(UM)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(VM)","loc":"d,104:38,104:39","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(WM)","loc":"d,105:18,105:20","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ADD","name":"","addr":"(XM)","loc":"d,105:18,105:20","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(YM)","loc":"d,105:7,105:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"keyCount","addr":"(ZM)","loc":"d,105:21,105:29","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(AN)","loc":"d,105:7,105:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"get","addr":"(BN)","loc":"d,108:10,108:13","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"get","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"keyCount","addr":"(CN)","loc":"d,108:18,108:26","dtypep":"UNLINKED","origName":"keyCount","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(DN)","loc":"d,108:14,108:17","dtypep":"(DN)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(EN)","loc":"d,108:29,108:30","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"try_get","addr":"(FN)","loc":"d,117:18,117:25","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"try_get",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(GN)","loc":"d,117:14,117:17","dtypep":"(GN)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"keyCount","addr":"(HN)","loc":"d,117:30,117:38","dtypep":"UNLINKED","origName":"keyCount","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(IN)","loc":"d,117:26,117:29","dtypep":"(IN)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(JN)","loc":"d,117:41,117:42","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"IF","name":"","addr":"(KN)","loc":"d,118:7,118:9",
|
2025-07-14 12:51:58 +02:00
|
|
|
"condp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"GTE","name":"","addr":"(LN)","loc":"d,118:22,118:24","dtypep":"(WE)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(MN)","loc":"d,118:11,118:21","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"keyCount","addr":"(NN)","loc":"d,118:25,118:33","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"thensp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BEGIN","name":"","addr":"(ON)","loc":"d,118:35,118:40","generate":false,"genfor":false,"implied":false,"needProcess":false,"unnamed":true,"genforp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(PN)","loc":"d,119:20,119:22","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"SUB","name":"","addr":"(QN)","loc":"d,119:20,119:22","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(RN)","loc":"d,119:9,119:19","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"keyCount","addr":"(SN)","loc":"d,119:23,119:31","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"m_keyCount","addr":"(TN)","loc":"d,119:9,119:19","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(UN)","loc":"d,120:9,120:15",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(VN)","loc":"d,120:16,120:17","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"elsesp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(WN)","loc":"d,122:7,122:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(XN)","loc":"d,122:14,122:15","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"extendsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CLASS","name":"process","addr":"(YN)","loc":"d,126:3,126:8","isExtended":false,"isInterfaceClass":false,"isVirtual":false,"origName":"process","level":5,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","classOrPackagep":"UNLINKED","inlinesp": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TYPEDEF","name":"state","addr":"(ZN)","loc":"d,133:7,133:12","dtypep":"UNLINKED","attrPublic":false,"isUnderClass":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DEFIMPLICITDTYPE","name":"__typeimpenum0","addr":"(AO)","loc":"d,127:13,127:17","dtypep":"UNLINKED","generic":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMDTYPE","name":"","addr":"(BO)","loc":"d,127:13,127:17","dtypep":"UNLINKED","enum":true,"generic":false,"refDTypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(CO)","loc":"d,127:18,127:19","dtypep":"(CO)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"itemsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMITEM","name":"FINISHED","addr":"(DO)","loc":"d,128:7,128:15","dtypep":"UNLINKED","rangep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(EO)","loc":"d,128:18,128:19","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMITEM","name":"RUNNING","addr":"(FO)","loc":"d,129:7,129:14","dtypep":"UNLINKED","rangep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh1","addr":"(GO)","loc":"d,129:17,129:18","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMITEM","name":"WAITING","addr":"(HO)","loc":"d,130:7,130:14","dtypep":"UNLINKED","rangep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh2","addr":"(IO)","loc":"d,130:17,130:18","dtypep":"(SD)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMITEM","name":"SUSPENDED","addr":"(JO)","loc":"d,131:7,131:16","dtypep":"UNLINKED","rangep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh3","addr":"(KO)","loc":"d,131:19,131:20","dtypep":"(SD)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ENUMITEM","name":"KILLED","addr":"(LO)","loc":"d,132:7,132:13","dtypep":"UNLINKED","rangep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh4","addr":"(MO)","loc":"d,132:16,132:17","dtypep":"(NO)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"self","addr":"(OO)","loc":"d,140:29,140:33","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"self",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"process","addr":"(PO)","loc":"d,140:21,140:28","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"p","addr":"(QO)","loc":"d,141:15,141:16","dtypep":"UNLINKED","origName":"p","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"process","addr":"(RO)","loc":"d,141:7,141:14","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],
|
|
|
|
|
"valuep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"NEW","name":"new","addr":"(SO)","loc":"d,141:19,141:22","dtypep":"UNLINKED","isImplicit":false,"isScoped":false,"dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(TO)","loc":"d,145:7,145:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"p","addr":"(UO)","loc":"d,145:14,145:15","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"set_status","addr":"(VO)","loc":"d,148:29,148:39","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"set_status","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"s","addr":"(WO)","loc":"d,148:46,148:47","dtypep":"UNLINKED","origName":"s","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"state","addr":"(XO)","loc":"d,148:40,148:45","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"status","addr":"(YO)","loc":"d,154:20,154:26","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"status",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"state","addr":"(ZO)","loc":"d,154:14,154:19","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(AP)","loc":"d,158:7,158:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"RUNNING","addr":"(BP)","loc":"d,158:14,158:21","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"kill","addr":"(CP)","loc":"d,162:19,162:23","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"kill","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(DP)","loc":"d,163:7,163:17",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASKREF","name":"set_status","addr":"(EP)","loc":"d,163:7,163:17","dtypep":"(LK)","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"pinsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ARG","name":"","addr":"(FP)","loc":"d,163:18,163:24",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"KILLED","addr":"(GP)","loc":"d,163:18,163:24","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"suspend","addr":"(HP)","loc":"d,166:19,166:26","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"suspend","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DISPLAY","name":"","addr":"(IP)","loc":"d,167:7,167:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fmtp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"SFORMATF","name":"","addr":"(JP)","loc":"d,167:7,167:13","dtypep":"(DG)",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"296'h7374643a3a70726f636573733a3a73757370656e642829206e6f7420737570706f72746564","addr":"(KP)","loc":"d,167:14,167:53","dtypep":"(LP)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"filep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STOP","name":"","addr":"(MP)","loc":"d,167:7,167:13","isFatal":false}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"resume","addr":"(NP)","loc":"d,170:19,170:25","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"resume","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(OP)","loc":"d,171:7,171:17",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASKREF","name":"set_status","addr":"(PP)","loc":"d,171:7,171:17","dtypep":"(LK)","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"pinsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ARG","name":"","addr":"(QP)","loc":"d,171:18,171:25",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"RUNNING","addr":"(RP)","loc":"d,171:18,171:25","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"await","addr":"(SP)","loc":"d,174:10,174:15","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"await","fvarp": [],"classOrPackagep": [],"stmtsp": [],"scopeNamep": []},
|
|
|
|
|
{"type":"TASK","name":"killQueue","addr":"(TP)","loc":"d,180:17,180:26","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"killQueue","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"processQueue","addr":"(UP)","loc":"d,180:39,180:51","dtypep":"UNLINKED","origName":"processQueue","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"REF","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BRACKETARRAYDTYPE","name":"","addr":"(VP)","loc":"d,180:51,180:52","dtypep":"UNLINKED","generic":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"REFDTYPE","name":"process","addr":"(WP)","loc":"d,180:31,180:38","dtypep":"UNLINKED","generic":false,"typedefp":"UNLINKED","refDTypep":"UNLINKED","classOrPackagep":"UNLINKED","typeofp": [],"classOrPackageOpp": [],"paramsp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"elementsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"UNBOUNDED","name":"","addr":"(XP)","loc":"d,180:52,180:53","dtypep":"(DJ)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"delayp": [],"valuep": [],"attrsp": []}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"get_randstate","addr":"(YP)","loc":"d,227:21,227:34","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"get_randstate",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"string","addr":"(ZP)","loc":"d,227:14,227:20","dtypep":"(ZP)","keyword":"string","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"s","addr":"(AQ)","loc":"d,228:14,228:15","dtypep":"UNLINKED","origName":"s","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"VAR","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"string","addr":"(BQ)","loc":"d,228:7,228:13","dtypep":"(BQ)","keyword":"string","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(CQ)","loc":"d,230:8,230:9",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DOT","name":"","addr":"(DQ)","loc":"d,230:8,230:9","dtypep":"UNLINKED","colon":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"s","addr":"(EQ)","loc":"d,230:7,230:8","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASKREF","name":"itoa","addr":"(FQ)","loc":"d,230:9,230:13","dtypep":"(LK)","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"pinsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ARG","name":"","addr":"(GQ)","loc":"d,230:14,230:21",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RAND","name":"","addr":"(HQ)","loc":"d,230:14,230:21","dtypep":"UNLINKED","seedp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
]}
|
|
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(IQ)","loc":"d,231:7,231:20",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASKREF","name":"set_randstate","addr":"(JQ)","loc":"d,231:7,231:20","dtypep":"(LK)","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"pinsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ARG","name":"","addr":"(KQ)","loc":"d,231:21,231:22",
|
2025-07-14 12:51:58 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"s","addr":"(LQ)","loc":"d,231:21,231:22","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
]},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RETURN","name":"","addr":"(MQ)","loc":"d,232:7,232:13",
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"s","addr":"(NQ)","loc":"d,232:14,232:15","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"TASK","name":"set_randstate","addr":"(OQ)","loc":"d,235:19,235:32","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"set_randstate","fvarp": [],"classOrPackagep": [],
|
2025-07-14 12:51:58 +02:00
|
|
|
"stmtsp": [
|
Deprecate clocker attribute and --clk option (#6463)
The only use for the clocker attribute and the AstVar::isUsedClock that
is actually necessary today for correctness is to mark top level inputs
of --lib-create blocks as being (or driving) a clock signal. Correctness
of --lib-create (and hence hierarchical blocks) actually used to depend
on having the right optimizations eliminate intermediate clocks (e.g.:
V3Gate), when the top level port was not used directly in a sensitivity
list, or marking top level signals manually via --clk or the clocker
attribute. However V3Sched::partition already needs to trace through the
logic to figure out what signals might drive a sensitivity list, so it
can very easily mark all top level inputs as such.
In this patch we remove the AstVar::attrClocker and AstVar::isUsedClock
attributes, and replace them with AstVar::isPrimaryClock, automatically
set by V3Sched::partition. This eliminates all need for manual
annotation so we are deprecating the --clk/--no-clk options and the
clocker/no_clocker attributes.
This also eliminates the opportunity for any further mis-optimization
similar to #6453.
Regarding the other uses of the removed AstVar attributes:
- As of 5.000, initial edges are triggered via a separate mechanism
applied in V3Sched, so the use in V3EmitCFunc.cpp is redundant
- Also as of 5.000, we can handle arbitrary sensitivity expressions, so
the restriction on eliminating clock signals in V3Gate is unnecessary
- Since the recent change when Dfg is applied after V3Scope, it does
perform the equivalent of GateClkDecomp, so we can delete that pass.
2025-09-20 16:50:22 +02:00
|
|
|
{"type":"VAR","name":"s","addr":"(PQ)","loc":"d,235:40,235:41","dtypep":"UNLINKED","origName":"s","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"lifetime":"NONE","varType":"PORT","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"childDTypep": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"string","addr":"(QQ)","loc":"d,235:33,235:39","dtypep":"(QQ)","keyword":"string","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"delayp": [],"valuep": [],"attrsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"STMTEXPR","name":"","addr":"(RQ)","loc":"d,236:7,236:15",
|
2025-08-08 11:09:54 +02:00
|
|
|
"exprp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"RAND","name":"","addr":"(SQ)","loc":"d,236:7,236:15","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"seedp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"DOT","name":"","addr":"(TQ)","loc":"d,236:17,236:18","dtypep":"UNLINKED","colon":false,
|
2025-07-14 12:51:58 +02:00
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"s","addr":"(UQ)","loc":"d,236:16,236:17","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNCREF","name":"atoi","addr":"(VQ)","loc":"d,236:18,236:22","dtypep":"UNLINKED","dotted":"","taskp":"UNLINKED","classOrPackagep":"UNLINKED","namep": [],"pinsp": [],"scopeNamep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
]}
|
|
|
|
|
],"scopeNamep": []}
|
|
|
|
|
],"extendsp": []},
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"FUNC","name":"randomize","addr":"(WQ)","loc":"d,239:16,239:25","dtypep":"UNLINKED","method":false,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"randomize",
|
2025-07-14 12:51:58 +02:00
|
|
|
"fvarp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"int","addr":"(XQ)","loc":"d,239:12,239:15","dtypep":"(XQ)","keyword":"int","range":"31:0","generic":false,"rangep": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"classOrPackagep": [],
|
|
|
|
|
"stmtsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"ASSIGN","name":"","addr":"(YQ)","loc":"d,240:15,240:16","dtypep":"UNLINKED",
|
2025-07-14 12:51:58 +02:00
|
|
|
"rhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"CONST","name":"?32?sh0","addr":"(ZQ)","loc":"d,240:17,240:18","dtypep":"(N)"}
|
2025-07-14 12:51:58 +02:00
|
|
|
],
|
|
|
|
|
"lhsp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"PARSEREF","name":"randomize","addr":"(AR)","loc":"d,240:5,240:14","dtypep":"UNLINKED","expect":"TEXT","lhsp": [],"ftaskrefp": []}
|
2025-07-14 12:51:58 +02:00
|
|
|
],"timingControlp": []}
|
|
|
|
|
],"scopeNamep": []}
|
2025-06-29 15:56:44 +02:00
|
|
|
]}
|
2024-03-28 12:32:18 +01:00
|
|
|
],"filesp": [],
|
|
|
|
|
"miscsp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(LK)",
|
2024-03-28 12:32:18 +01:00
|
|
|
"typesp": [
|
2025-09-13 15:10:37 +02:00
|
|
|
{"type":"BASICDTYPE","name":"integer","addr":"(DJ)","loc":"d,36:25,36:26","dtypep":"(DJ)","keyword":"integer","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(N)","loc":"d,38:30,38:31","dtypep":"(N)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(WE)","loc":"d,55:19,55:21","dtypep":"(WE)","keyword":"logic","generic":true,"rangep": []},
|
|
|
|
|
{"type":"VOIDDTYPE","name":"","addr":"(LK)","loc":"d,56:17,56:26","dtypep":"(LK)","generic":false},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(SD)","loc":"d,130:17,130:18","dtypep":"(SD)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(NO)","loc":"d,132:16,132:17","dtypep":"(NO)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(LP)","loc":"d,167:14,167:53","dtypep":"(LP)","keyword":"logic","range":"295:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"string","addr":"(DG)","loc":"d,167:7,167:13","dtypep":"(DG)","keyword":"string","generic":true,"rangep": []},
|
2025-07-14 12:51:58 +02:00
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(S)","loc":"e,14:9,14:11","dtypep":"(S)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(DB)","loc":"e,18:10,18:12","dtypep":"(DB)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(OC)","loc":"e,33:26,33:31","dtypep":"(OC)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(LC)","loc":"e,33:25,33:26","dtypep":"(LC)","keyword":"logic","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(CF)","loc":"e,45:17,45:38","dtypep":"(CF)","keyword":"logic","range":"63:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(LF)","loc":"e,48:22,48:24","dtypep":"(LF)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(UF)","loc":"e,51:22,51:24","dtypep":"(UF)","keyword":"logic","range":"31:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(FG)","loc":"e,54:17,54:49","dtypep":"(FG)","keyword":"logic","range":"231:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"QData","addr":"(HG)","loc":"e,54:51,54:56","dtypep":"(HG)","keyword":"QData","range":"63:0","generic":true,"rangep": []},
|
|
|
|
|
{"type":"BASICDTYPE","name":"logic","addr":"(YG)","loc":"e,59:17,59:41","dtypep":"(YG)","keyword":"logic","range":"167:0","generic":true,"rangep": []}
|
2024-03-28 12:32:18 +01:00
|
|
|
]},
|
|
|
|
|
{"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0",
|
|
|
|
|
"modulep": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"MODULE","name":"@CONST-POOL@","addr":"(BR)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [],
|
2024-03-28 12:32:18 +01:00
|
|
|
"stmtsp": [
|
2025-09-06 16:31:08 +02:00
|
|
|
{"type":"SCOPE","name":"@CONST-POOL@","addr":"(CR)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(BR)","varsp": [],"blocksp": [],"inlinesp": []}
|
2025-06-29 15:56:44 +02:00
|
|
|
]}
|
2024-03-28 12:32:18 +01:00
|
|
|
]}
|
|
|
|
|
]}
|