From 0ef22c76095bcca8ac7cacfc32e4ce6dd552addf Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 24 Nov 2013 17:37:27 +0100 Subject: [PATCH] Added support for signed parameters in ilang --- backends/ilang/ilang_backend.cc | 2 +- frontends/ilang/lexer.l | 1 + frontends/ilang/parser.y | 8 +++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/backends/ilang/ilang_backend.cc b/backends/ilang/ilang_backend.cc index b51b3f88b..573708412 100644 --- a/backends/ilang/ilang_backend.cc +++ b/backends/ilang/ilang_backend.cc @@ -155,7 +155,7 @@ void ILANG_BACKEND::dump_cell(FILE *f, std::string indent, const RTLIL::Cell *ce } fprintf(f, "%s" "cell %s %s\n", indent.c_str(), cell->type.c_str(), cell->name.c_str()); for (auto it = cell->parameters.begin(); it != cell->parameters.end(); it++) { - fprintf(f, "%s parameter %s ", indent.c_str(), it->first.c_str()); + fprintf(f, "%s parameter%s %s ", indent.c_str(), cell->signed_parameters.count(it->first) ? " signed" : "", it->first.c_str()); dump_const(f, it->second); fprintf(f, "\n"); } diff --git a/frontends/ilang/lexer.l b/frontends/ilang/lexer.l index 287f9dbf6..d582d0413 100644 --- a/frontends/ilang/lexer.l +++ b/frontends/ilang/lexer.l @@ -39,6 +39,7 @@ "module" { return TOK_MODULE; } "attribute" { return TOK_ATTRIBUTE; } "parameter" { return TOK_PARAMETER; } +"signed" { return TOK_SIGNED; } "wire" { return TOK_WIRE; } "memory" { return TOK_MEMORY; } "width" { return TOK_WIDTH; } diff --git a/frontends/ilang/parser.y b/frontends/ilang/parser.y index 71c63bc44..54c2280a8 100644 --- a/frontends/ilang/parser.y +++ b/frontends/ilang/parser.y @@ -54,7 +54,7 @@ using namespace ILANG_FRONTEND; %token TOK_CELL TOK_CONNECT TOK_SWITCH TOK_CASE TOK_ASSIGN TOK_SYNC %token TOK_LOW TOK_HIGH TOK_POSEDGE TOK_NEGEDGE TOK_EDGE TOK_ALWAYS TOK_INIT %token TOK_UPDATE TOK_PROCESS TOK_END TOK_INVALID TOK_EOL TOK_OFFSET -%token TOK_PARAMETER TOK_ATTRIBUTE TOK_MEMORY TOK_SIZE +%token TOK_PARAMETER TOK_ATTRIBUTE TOK_MEMORY TOK_SIZE TOK_SIGNED %type sigspec sigspec_list %type sync_type @@ -189,6 +189,12 @@ cell_body: free($3); delete $4; } | + cell_body TOK_PARAMETER TOK_SIGNED TOK_ID constant TOK_EOL { + current_cell->parameters[$4] = *$5; + current_cell->signed_parameters.insert($4); + free($4); + delete $5; + } | cell_body TOK_CONNECT TOK_ID sigspec TOK_EOL { if (current_cell->connections.count($3) != 0) rtlil_frontend_ilang_yyerror("scope error"); -- 2.30.2