Define timing_check_event in the parser
Signed-off-by: Krzysztof Sychla <ksychla@antmicro.com>
This commit is contained in:
parent
df43c647be
commit
9a64049c7e
|
|
@ -3341,13 +3341,13 @@ public:
|
|||
};
|
||||
class AstSetuphold final : public AstNodeStmt {
|
||||
// Verilog $setuphold
|
||||
// @astgen op1 := refevp : AstSenItem
|
||||
// @astgen op2 := dataevp : AstSenItem
|
||||
// @astgen op3 := delrefp : Optional[AstSenItem]
|
||||
// @astgen op4 := deldatap : Optional[AstSenItem]
|
||||
// @astgen op1 := refevp : AstNodeExpr
|
||||
// @astgen op2 := dataevp : AstNodeExpr
|
||||
// @astgen op3 := delrefp : Optional[AstNodeExpr]
|
||||
// @astgen op4 := deldatap : Optional[AstNodeExpr]
|
||||
public:
|
||||
AstSetuphold(FileLine* fl, AstSenItem* refevp, AstSenItem* dataevp,
|
||||
AstSenItem* delrefp = nullptr, AstSenItem* deldatap = nullptr)
|
||||
AstSetuphold(FileLine* fl, AstNodeExpr* refevp, AstNodeExpr* dataevp,
|
||||
AstNodeExpr* delrefp = nullptr, AstNodeExpr* deldatap = nullptr)
|
||||
: ASTGEN_SUPER_Setuphold(fl) {
|
||||
this->refevp(refevp);
|
||||
this->dataevp(dataevp);
|
||||
|
|
|
|||
|
|
@ -1383,16 +1383,16 @@ class WidthVisitor final : public VNVisitor {
|
|||
AstAssignW* newp = nullptr;
|
||||
|
||||
if (nodep->delrefp() != nullptr) {
|
||||
AstNodeVarRef* lhsp = nodep->delrefp()->varrefp()->cloneTreePure(false);
|
||||
AstNodeVarRef* lhsp = VN_AS(nodep->delrefp()->cloneTreePure(false), VarRef);
|
||||
lhsp->access(VAccess::WRITE);
|
||||
AstNodeVarRef* rhsp = nodep->refevp()->varrefp()->cloneTreePure(false);
|
||||
AstNodeVarRef* rhsp = VN_AS(nodep->refevp()->cloneTreePure(false), VarRef);
|
||||
newp = new AstAssignW{flp, lhsp, rhsp};
|
||||
}
|
||||
|
||||
if (nodep->deldatap() != nullptr) {
|
||||
AstNodeVarRef* lhsp = nodep->deldatap()->varrefp()->cloneTreePure(false);
|
||||
AstNodeVarRef* lhsp = VN_AS(nodep->deldatap()->cloneTreePure(false), VarRef);
|
||||
lhsp->access(VAccess::WRITE);
|
||||
AstNodeVarRef* rhsp = nodep->dataevp()->varrefp()->cloneTreePure(false);
|
||||
AstNodeVarRef* rhsp = VN_AS(nodep->dataevp()->cloneTreePure(false), VarRef);
|
||||
|
||||
if (newp == nullptr) {
|
||||
newp = new AstAssignW{flp, lhsp, rhsp};
|
||||
|
|
|
|||
|
|
@ -5789,12 +5789,32 @@ system_timing_check<nodep>: // ==IEEE: system_timing_check
|
|||
;
|
||||
|
||||
setuphold_timing_check<nodep>: // ==IEEE: $setuphold_timing_check
|
||||
yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' senitemE ')' ';' { $$ = new AstSetuphold{$1, $3, $5, $17}; }
|
||||
| yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' senitemE ',' senitemE ')' ';' { $$ = new AstSetuphold{$1, $3, $5, $17, $19}; }
|
||||
yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ',' idAnyE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ',' idAnyE ',' minTypMaxE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ')' ';' { $$ = nullptr; }
|
||||
| yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' terminal_identifierE ')' ';' { $$ = new AstSetuphold{$1, $3, $5, $17}; }
|
||||
| yD_SETUPHOLD '(' timing_check_event ',' timing_check_event ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' terminal_identifierE ',' terminal_identifierE ')' ';' { $$ = new AstSetuphold{$1, $3, $5, $17, $19}; }
|
||||
;
|
||||
|
||||
timing_check_event<nodeExprp>: // ==IEEE: $timing_check_event
|
||||
terminal_identifier { $$ = $1; }
|
||||
| yPOSEDGE terminal_identifier { $$ = $2; }
|
||||
| yNEGEDGE terminal_identifier { $$ = $2; }
|
||||
| yEDGE terminal_identifier { $$ = $2; }
|
||||
| terminal_identifier yP_ANDANDAND expr { $$ = $1; }
|
||||
| yPOSEDGE terminal_identifier yP_ANDANDAND expr { $$ = $2; }
|
||||
| yNEGEDGE terminal_identifier yP_ANDANDAND expr { $$ = $2; }
|
||||
| yEDGE terminal_identifier yP_ANDANDAND expr { $$ = $2; }
|
||||
;
|
||||
|
||||
terminal_identifier<nodeExprp>:
|
||||
id { $$ = new AstParseRef{$<fl>1, VParseRefExp::PX_TEXT, *$1, nullptr, nullptr}; }
|
||||
;
|
||||
|
||||
terminal_identifierE<nodeExprp>:
|
||||
/*empty*/ { $$ = nullptr; }
|
||||
| terminal_identifier { $$ = $1; }
|
||||
;
|
||||
|
||||
idAnyE<strp>:
|
||||
|
|
@ -5802,12 +5822,6 @@ idAnyE<strp>:
|
|||
| idAny { $$ = $1; }
|
||||
;
|
||||
|
||||
senitemE<senItemp>:
|
||||
/*empty*/ { $$ = nullptr; }
|
||||
| senitem { $$ = $1; }
|
||||
;
|
||||
|
||||
|
||||
junkToSemiList:
|
||||
junkToSemi { } /* ignored */
|
||||
| junkToSemiList junkToSemi { } /* ignored */
|
||||
|
|
|
|||
Loading…
Reference in New Issue