From df43c647beac94431296dc307130ec87c37c8018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Chmiel?= Date: Fri, 28 Feb 2025 16:34:48 +0100 Subject: [PATCH] Support multiple setuphold statements in one block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bartłomiej Chmiel --- src/verilog.y | 52 +++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/verilog.y b/src/verilog.y index fc494803c..38ccfa538 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -5764,16 +5764,39 @@ tableEntry: // IEEE: combinational_entry + sequential_entry //************************************************ // Specify -specify_block: // ==IEEE: specify_block - ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ')' ';' yENDSPECIFY { $$ = nullptr; } - | ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ')' ';' yENDSPECIFY { $$ = nullptr; } - | ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ')' ';' yENDSPECIFY { $$ = nullptr; } - | ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ')' ';' yENDSPECIFY { $$ = nullptr; } - | ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' senitemE ')' ';' yENDSPECIFY { $$ = new AstSetuphold{$2, $4, $6, $18}; } - | ySPECIFY yD_SETUPHOLD '(' senitem ',' senitem ',' expr ',' expr ',' idAnyE ',' minTypMaxE ',' minTypMaxE ',' senitemE ',' senitemE ')' ';' yENDSPECIFY { $$ = new AstSetuphold{$2, $4, $6, $18, $20}; } +specify_block: // ==IEEE: specify_block + ySPECIFY specify_itemList yENDSPECIFY { $$ = $2; } | ySPECIFY yENDSPECIFY { $$ = nullptr; } ; +specify_itemList: // IEEE: { specify_item } + specify_item { $$ = $1; } + | specify_itemList specify_item { $$ = addNextNull($1, $2); } + ; + +specify_item: // ==IEEE: specify_item + specparam_declaration { $$ = $1; } + | system_timing_check { $$ = $1; } + | yaTIMINGSPEC junkToSemiList ';' { $$ = nullptr; } + ; + +specparam_declaration: // ==IEEE: specparam_declaration + ySPECPARAM junkToSemiList ';' { $$ = nullptr; } + ; + +system_timing_check: // ==IEEE: system_timing_check + setuphold_timing_check { $$ = $1; } + ; + +setuphold_timing_check: // ==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}; } + ; + idAnyE: /*empty*/ { $$ = nullptr; } | idAny { $$ = $1; } @@ -5785,21 +5808,6 @@ senitemE: ; -specifyJunkList: - specifyJunk { } /* ignored */ - | specifyJunkList specifyJunk { } /* ignored */ - ; - -specifyJunk: - BISONPRE_NOT(ySPECIFY,yENDSPECIFY) { } - | ySPECIFY specifyJunk yENDSPECIFY { } - | error {} - ; - -specparam_declaration: // ==IEEE: specparam_declaration - ySPECPARAM junkToSemiList ';' { $$ = nullptr; } - ; - junkToSemiList: junkToSemi { } /* ignored */ | junkToSemiList junkToSemi { } /* ignored */