mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 01:54:01 +02:00
Support multiple-output buf/not gate primitives
This commit is contained in:
+22
-10
@@ -5117,10 +5117,28 @@ gateRangeE<nodep>:
|
||||
;
|
||||
|
||||
gateBuf<nodep>:
|
||||
gateFront variable_lvalue ',' gatePinExpr ')'
|
||||
{ $$ = new AstAssignW{$<fl>1, $2, $4}; DEL($1); }
|
||||
// UNSUP // IEEE: Multiple output variable_lvalues
|
||||
// UNSUP // Causes conflict - need to take in variable_lvalue or a gatePinExpr
|
||||
gateFront variable_lvalue ',' exprList ')'
|
||||
{ AstNodeExpr* inp = $4;
|
||||
while (inp->nextp()) inp = VN_AS(inp->nextp(), NodeExpr);
|
||||
$$ = new AstAssignW{$<fl>1, $2, GRAMMARP->createGatePin(inp->cloneTree(false))};
|
||||
for (AstNodeExpr* outp = $4; outp->nextp(); outp = VN_CAST(outp->nextp(), NodeExpr)) {
|
||||
$$->addNext(new AstAssignW{$<fl>1, outp->cloneTree(false),
|
||||
GRAMMARP->createGatePin(inp->cloneTree(false))});
|
||||
}
|
||||
DEL($1); DEL($4); }
|
||||
;
|
||||
gateNot<nodep>:
|
||||
gateFront variable_lvalue ',' exprList ')'
|
||||
{ AstNodeExpr* inp = $4;
|
||||
while (inp->nextp()) inp = VN_AS(inp->nextp(), NodeExpr);
|
||||
$$ = new AstAssignW{$<fl>1, $2, new AstNot{$<fl>1,
|
||||
GRAMMARP->createGatePin(inp->cloneTree(false))}};
|
||||
for (AstNodeExpr* outp = $4; outp->nextp(); outp = VN_CAST(outp->nextp(), NodeExpr)) {
|
||||
$$->addNext(new AstAssignW{$<fl>1, outp->cloneTree(false),
|
||||
new AstNot{$<fl>1,
|
||||
GRAMMARP->createGatePin(inp->cloneTree(false))}});
|
||||
}
|
||||
DEL($1); DEL($4); }
|
||||
;
|
||||
gateBufif0<nodep>:
|
||||
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||
@@ -5130,12 +5148,6 @@ gateBufif1<nodep>:
|
||||
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||
{ $$ = new AstAssignW{$<fl>1, $2, new AstBufIf1{$<fl>1, $6, $4}}; DEL($1); }
|
||||
;
|
||||
gateNot<nodep>:
|
||||
gateFront variable_lvalue ',' gatePinExpr ')'
|
||||
{ $$ = new AstAssignW{$<fl>1, $2, new AstNot{$<fl>1, $4}}; DEL($1); }
|
||||
// UNSUP // IEEE: Multiple output variable_lvalues
|
||||
// UNSUP // Causes conflict - need to take in variable_lvalue or a gatePinExpr
|
||||
;
|
||||
gateNotif0<nodep>:
|
||||
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||
{ $$ = new AstAssignW{$<fl>1, $2, new AstBufIf1{$<fl>1, new AstNot{$<fl>1, $6},
|
||||
|
||||
Reference in New Issue
Block a user