mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-24 13:18:56 +00:00
Replace "ILANG" with "RTLIL" everywhere.
The only difference between "RTLIL" and "ILANG" is that the latter is the text representation of the former, as opposed to the in-memory graph representation. This distinction serves no purpose but confuses people: it is not obvious that the ILANG backend writes RTLIL graphs. Passes `write_ilang` and `read_ilang` are provided as aliases to `write_rtlil` and `read_rtlil` for compatibility.
This commit is contained in:
parent
4f2b78e19a
commit
00e7dec7f5
28 changed files with 206 additions and 178 deletions
4
frontends/ilang/.gitignore
vendored
4
frontends/ilang/.gitignore
vendored
|
@ -1,4 +0,0 @@
|
|||
ilang_lexer.cc
|
||||
ilang_parser.output
|
||||
ilang_parser.tab.cc
|
||||
ilang_parser.tab.hh
|
|
@ -1,19 +0,0 @@
|
|||
|
||||
GENFILES += frontends/ilang/ilang_parser.tab.cc
|
||||
GENFILES += frontends/ilang/ilang_parser.tab.hh
|
||||
GENFILES += frontends/ilang/ilang_parser.output
|
||||
GENFILES += frontends/ilang/ilang_lexer.cc
|
||||
|
||||
frontends/ilang/ilang_parser.tab.cc: frontends/ilang/ilang_parser.y
|
||||
$(Q) mkdir -p $(dir $@)
|
||||
$(P) $(BISON) -o $@ -d -r all -b frontends/ilang/ilang_parser $<
|
||||
|
||||
frontends/ilang/ilang_parser.tab.hh: frontends/ilang/ilang_parser.tab.cc
|
||||
|
||||
frontends/ilang/ilang_lexer.cc: frontends/ilang/ilang_lexer.l
|
||||
$(Q) mkdir -p $(dir $@)
|
||||
$(P) flex -o frontends/ilang/ilang_lexer.cc $<
|
||||
|
||||
OBJS += frontends/ilang/ilang_parser.tab.o frontends/ilang/ilang_lexer.o
|
||||
OBJS += frontends/ilang/ilang_frontend.o
|
||||
|
|
@ -378,7 +378,7 @@ struct RpcFrontend : public Pass {
|
|||
log(" -> {\"method\": \"derive\", \"module\": \"<module-name\">, \"parameters\": {\n");
|
||||
log(" \"<param-name>\": {\"type\": \"[unsigned|signed|string|real]\",\n");
|
||||
log(" \"value\": \"<param-value>\"}, ...}}\n");
|
||||
log(" <- {\"frontend\": \"[ilang|verilog|...]\",\"source\": \"<source>\"}}\n");
|
||||
log(" <- {\"frontend\": \"[rtlil|verilog|...]\",\"source\": \"<source>\"}}\n");
|
||||
log(" <- {\"error\": \"<error-message>\"}\n");
|
||||
log(" request for the module <module-name> to be derived for a specific set of\n");
|
||||
log(" parameters. <param-name> starts with \\ for named parameters, and with $\n");
|
||||
|
|
4
frontends/rtlil/.gitignore
vendored
Normal file
4
frontends/rtlil/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
rtlil_lexer.cc
|
||||
rtlil_parser.output
|
||||
rtlil_parser.tab.cc
|
||||
rtlil_parser.tab.hh
|
19
frontends/rtlil/Makefile.inc
Normal file
19
frontends/rtlil/Makefile.inc
Normal file
|
@ -0,0 +1,19 @@
|
|||
|
||||
GENFILES += frontends/rtlil/rtlil_parser.tab.cc
|
||||
GENFILES += frontends/rtlil/rtlil_parser.tab.hh
|
||||
GENFILES += frontends/rtlil/rtlil_parser.output
|
||||
GENFILES += frontends/rtlil/rtlil_lexer.cc
|
||||
|
||||
frontends/rtlil/rtlil_parser.tab.cc: frontends/rtlil/rtlil_parser.y
|
||||
$(Q) mkdir -p $(dir $@)
|
||||
$(P) $(BISON) -o $@ -d -r all -b frontends/rtlil/rtlil_parser $<
|
||||
|
||||
frontends/rtlil/rtlil_parser.tab.hh: frontends/rtlil/rtlil_parser.tab.cc
|
||||
|
||||
frontends/rtlil/rtlil_lexer.cc: frontends/rtlil/rtlil_lexer.l
|
||||
$(Q) mkdir -p $(dir $@)
|
||||
$(P) flex -o frontends/rtlil/rtlil_lexer.cc $<
|
||||
|
||||
OBJS += frontends/rtlil/rtlil_parser.tab.o frontends/rtlil/rtlil_lexer.o
|
||||
OBJS += frontends/rtlil/rtlil_frontend.o
|
||||
|
|
@ -18,30 +18,30 @@
|
|||
* ---
|
||||
*
|
||||
* A very simple and straightforward frontend for the RTLIL text
|
||||
* representation (as generated by the 'ilang' backend).
|
||||
* representation.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ilang_frontend.h"
|
||||
#include "rtlil_frontend.h"
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/log.h"
|
||||
|
||||
void rtlil_frontend_ilang_yyerror(char const *s)
|
||||
void rtlil_frontend_yyerror(char const *s)
|
||||
{
|
||||
YOSYS_NAMESPACE_PREFIX log_error("Parser error in line %d: %s\n", rtlil_frontend_ilang_yyget_lineno(), s);
|
||||
YOSYS_NAMESPACE_PREFIX log_error("Parser error in line %d: %s\n", rtlil_frontend_yyget_lineno(), s);
|
||||
}
|
||||
|
||||
YOSYS_NAMESPACE_BEGIN
|
||||
|
||||
struct IlangFrontend : public Frontend {
|
||||
IlangFrontend() : Frontend("ilang", "read modules from ilang file") { }
|
||||
struct RTLILFrontend : public Frontend {
|
||||
RTLILFrontend() : Frontend("rtlil", "read modules from RTLIL file") { }
|
||||
void help() override
|
||||
{
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
log("\n");
|
||||
log(" read_ilang [filename]\n");
|
||||
log(" read_rtlil [filename]\n");
|
||||
log("\n");
|
||||
log("Load modules from an ilang file to the current design. (ilang is a text\n");
|
||||
log("Load modules from an RTLIL file to the current design. (RTLIL is a text\n");
|
||||
log("representation of a design in yosys's internal format.)\n");
|
||||
log("\n");
|
||||
log(" -nooverwrite\n");
|
||||
|
@ -58,27 +58,27 @@ struct IlangFrontend : public Frontend {
|
|||
}
|
||||
void execute(std::istream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) override
|
||||
{
|
||||
ILANG_FRONTEND::flag_nooverwrite = false;
|
||||
ILANG_FRONTEND::flag_overwrite = false;
|
||||
ILANG_FRONTEND::flag_lib = false;
|
||||
RTLIL_FRONTEND::flag_nooverwrite = false;
|
||||
RTLIL_FRONTEND::flag_overwrite = false;
|
||||
RTLIL_FRONTEND::flag_lib = false;
|
||||
|
||||
log_header(design, "Executing ILANG frontend.\n");
|
||||
log_header(design, "Executing RTLIL frontend.\n");
|
||||
|
||||
size_t argidx;
|
||||
for (argidx = 1; argidx < args.size(); argidx++) {
|
||||
std::string arg = args[argidx];
|
||||
if (arg == "-nooverwrite") {
|
||||
ILANG_FRONTEND::flag_nooverwrite = true;
|
||||
ILANG_FRONTEND::flag_overwrite = false;
|
||||
RTLIL_FRONTEND::flag_nooverwrite = true;
|
||||
RTLIL_FRONTEND::flag_overwrite = false;
|
||||
continue;
|
||||
}
|
||||
if (arg == "-overwrite") {
|
||||
ILANG_FRONTEND::flag_nooverwrite = false;
|
||||
ILANG_FRONTEND::flag_overwrite = true;
|
||||
RTLIL_FRONTEND::flag_nooverwrite = false;
|
||||
RTLIL_FRONTEND::flag_overwrite = true;
|
||||
continue;
|
||||
}
|
||||
if (arg == "-lib") {
|
||||
ILANG_FRONTEND::flag_lib = true;
|
||||
RTLIL_FRONTEND::flag_lib = true;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
@ -87,12 +87,27 @@ struct IlangFrontend : public Frontend {
|
|||
|
||||
log("Input filename: %s\n", filename.c_str());
|
||||
|
||||
ILANG_FRONTEND::lexin = f;
|
||||
ILANG_FRONTEND::current_design = design;
|
||||
rtlil_frontend_ilang_yydebug = false;
|
||||
rtlil_frontend_ilang_yyrestart(NULL);
|
||||
rtlil_frontend_ilang_yyparse();
|
||||
rtlil_frontend_ilang_yylex_destroy();
|
||||
RTLIL_FRONTEND::lexin = f;
|
||||
RTLIL_FRONTEND::current_design = design;
|
||||
rtlil_frontend_yydebug = false;
|
||||
rtlil_frontend_yyrestart(NULL);
|
||||
rtlil_frontend_yyparse();
|
||||
rtlil_frontend_yylex_destroy();
|
||||
}
|
||||
} RTLILFrontend;
|
||||
|
||||
struct IlangFrontend : public Frontend {
|
||||
IlangFrontend() : Frontend("ilang", "(deprecated) alias of read_rtlil") { }
|
||||
void help() override
|
||||
{
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
log("\n");
|
||||
log("See `help read_rtlil`.\n");
|
||||
log("\n");
|
||||
}
|
||||
void execute(std::istream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) override
|
||||
{
|
||||
RTLILFrontend.execute(f, filename, args, design);
|
||||
}
|
||||
} IlangFrontend;
|
||||
|
|
@ -18,18 +18,18 @@
|
|||
* ---
|
||||
*
|
||||
* A very simple and straightforward frontend for the RTLIL text
|
||||
* representation (as generated by the 'ilang' backend).
|
||||
* representation.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef ILANG_FRONTEND_H
|
||||
#define ILANG_FRONTEND_H
|
||||
#ifndef RTLIL_FRONTEND_H
|
||||
#define RTLIL_FRONTEND_H
|
||||
|
||||
#include "kernel/yosys.h"
|
||||
|
||||
YOSYS_NAMESPACE_BEGIN
|
||||
|
||||
namespace ILANG_FRONTEND {
|
||||
namespace RTLIL_FRONTEND {
|
||||
extern std::istream *lexin;
|
||||
extern RTLIL::Design *current_design;
|
||||
extern bool flag_nooverwrite;
|
||||
|
@ -39,13 +39,13 @@ namespace ILANG_FRONTEND {
|
|||
|
||||
YOSYS_NAMESPACE_END
|
||||
|
||||
extern int rtlil_frontend_ilang_yydebug;
|
||||
int rtlil_frontend_ilang_yylex(void);
|
||||
void rtlil_frontend_ilang_yyerror(char const *s);
|
||||
void rtlil_frontend_ilang_yyrestart(FILE *f);
|
||||
int rtlil_frontend_ilang_yyparse(void);
|
||||
int rtlil_frontend_ilang_yylex_destroy(void);
|
||||
int rtlil_frontend_ilang_yyget_lineno(void);
|
||||
extern int rtlil_frontend_yydebug;
|
||||
int rtlil_frontend_yylex(void);
|
||||
void rtlil_frontend_yyerror(char const *s);
|
||||
void rtlil_frontend_yyrestart(FILE *f);
|
||||
int rtlil_frontend_yyparse(void);
|
||||
int rtlil_frontend_yylex_destroy(void);
|
||||
int rtlil_frontend_yyget_lineno(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
* ---
|
||||
*
|
||||
* A very simple and straightforward frontend for the RTLIL text
|
||||
* representation (as generated by the 'ilang' backend).
|
||||
* representation.
|
||||
*
|
||||
*/
|
||||
|
||||
|
@ -30,20 +30,20 @@
|
|||
#endif
|
||||
|
||||
#include <cstdlib>
|
||||
#include "frontends/ilang/ilang_frontend.h"
|
||||
#include "ilang_parser.tab.hh"
|
||||
#include "frontends/rtlil/rtlil_frontend.h"
|
||||
#include "rtlil_parser.tab.hh"
|
||||
|
||||
USING_YOSYS_NAMESPACE
|
||||
|
||||
#define YY_INPUT(buf,result,max_size) \
|
||||
result = readsome(*ILANG_FRONTEND::lexin, buf, max_size)
|
||||
result = readsome(*RTLIL_FRONTEND::lexin, buf, max_size)
|
||||
|
||||
%}
|
||||
|
||||
%option yylineno
|
||||
%option noyywrap
|
||||
%option nounput
|
||||
%option prefix="rtlil_frontend_ilang_yy"
|
||||
%option prefix="rtlil_frontend_yy"
|
||||
|
||||
%x STRING
|
||||
|
||||
|
@ -84,11 +84,11 @@ USING_YOSYS_NAMESPACE
|
|||
|
||||
[a-z]+ { return TOK_INVALID; }
|
||||
|
||||
"\\"[^ \t\r\n]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
"$"[^ \t\r\n]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
"."[0-9]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
"\\"[^ \t\r\n]+ { rtlil_frontend_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
"$"[^ \t\r\n]+ { rtlil_frontend_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
"."[0-9]+ { rtlil_frontend_yylval.string = strdup(yytext); return TOK_ID; }
|
||||
|
||||
[0-9]+'[01xzm-]* { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_VALUE; }
|
||||
[0-9]+'[01xzm-]* { rtlil_frontend_yylval.string = strdup(yytext); return TOK_VALUE; }
|
||||
-?[0-9]+ {
|
||||
char *end = nullptr;
|
||||
errno = 0;
|
||||
|
@ -98,7 +98,7 @@ USING_YOSYS_NAMESPACE
|
|||
return TOK_INVALID; // literal out of range of long
|
||||
if (value < INT_MIN || value > INT_MAX)
|
||||
return TOK_INVALID; // literal out of range of int (relevant mostly for LP64 platforms)
|
||||
rtlil_frontend_ilang_yylval.integer = value;
|
||||
rtlil_frontend_yylval.integer = value;
|
||||
return TOK_INT;
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ USING_YOSYS_NAMESPACE
|
|||
yystr[j++] = yystr[i++];
|
||||
}
|
||||
yystr[j] = 0;
|
||||
rtlil_frontend_ilang_yylval.string = yystr;
|
||||
rtlil_frontend_yylval.string = yystr;
|
||||
return TOK_STRING;
|
||||
}
|
||||
<STRING>. { yymore(); }
|
||||
|
@ -145,6 +145,6 @@ USING_YOSYS_NAMESPACE
|
|||
%%
|
||||
|
||||
// this is a hack to avoid the 'yyinput defined but not used' error msgs
|
||||
void *rtlil_frontend_ilang_avoid_input_warnings() {
|
||||
void *rtlil_frontend_avoid_input_warnings() {
|
||||
return (void*)&yyinput;
|
||||
}
|
|
@ -18,15 +18,15 @@
|
|||
* ---
|
||||
*
|
||||
* A very simple and straightforward frontend for the RTLIL text
|
||||
* representation (as generated by the 'ilang' backend).
|
||||
* representation.
|
||||
*
|
||||
*/
|
||||
|
||||
%{
|
||||
#include <list>
|
||||
#include "frontends/ilang/ilang_frontend.h"
|
||||
#include "frontends/rtlil/rtlil_frontend.h"
|
||||
YOSYS_NAMESPACE_BEGIN
|
||||
namespace ILANG_FRONTEND {
|
||||
namespace RTLIL_FRONTEND {
|
||||
std::istream *lexin;
|
||||
RTLIL::Design *current_design;
|
||||
RTLIL::Module *current_module;
|
||||
|
@ -40,12 +40,12 @@ namespace ILANG_FRONTEND {
|
|||
bool flag_nooverwrite, flag_overwrite, flag_lib;
|
||||
bool delete_current_module;
|
||||
}
|
||||
using namespace ILANG_FRONTEND;
|
||||
using namespace RTLIL_FRONTEND;
|
||||
YOSYS_NAMESPACE_END
|
||||
USING_YOSYS_NAMESPACE
|
||||
%}
|
||||
|
||||
%define api.prefix {rtlil_frontend_ilang_yy}
|
||||
%define api.prefix {rtlil_frontend_yy}
|
||||
|
||||
/* The union is defined in the header, so we need to provide all the
|
||||
* includes it requires
|
||||
|
@ -53,7 +53,7 @@ USING_YOSYS_NAMESPACE
|
|||
%code requires {
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "frontends/ilang/ilang_frontend.h"
|
||||
#include "frontends/rtlil/rtlil_frontend.h"
|
||||
}
|
||||
|
||||
%union {
|
||||
|
@ -87,7 +87,7 @@ input:
|
|||
attrbuf.clear();
|
||||
} design {
|
||||
if (attrbuf.size() != 0)
|
||||
rtlil_frontend_ilang_yyerror("dangling attribute");
|
||||
rtlil_frontend_yyerror("dangling attribute");
|
||||
};
|
||||
|
||||
EOL:
|
||||
|
@ -111,7 +111,7 @@ module:
|
|||
log("Ignoring blackbox re-definition of module %s.\n", $2);
|
||||
delete_current_module = true;
|
||||
} else if (!flag_nooverwrite && !flag_overwrite && !existing_mod->get_bool_attribute(ID::blackbox)) {
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of module %s.", $2).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of module %s.", $2).c_str());
|
||||
} else if (flag_nooverwrite) {
|
||||
log("Ignoring re-definition of module %s.\n", $2);
|
||||
delete_current_module = true;
|
||||
|
@ -129,7 +129,7 @@ module:
|
|||
free($2);
|
||||
} module_body TOK_END {
|
||||
if (attrbuf.size() != 0)
|
||||
rtlil_frontend_ilang_yyerror("dangling attribute");
|
||||
rtlil_frontend_yyerror("dangling attribute");
|
||||
current_module->fixup_ports();
|
||||
if (delete_current_module)
|
||||
delete current_module;
|
||||
|
@ -172,12 +172,12 @@ autoidx_stmt:
|
|||
|
||||
wire_stmt:
|
||||
TOK_WIRE {
|
||||
current_wire = current_module->addWire("$__ilang_frontend_tmp__");
|
||||
current_wire = current_module->addWire("$__rtlil_frontend_tmp__");
|
||||
current_wire->attributes = attrbuf;
|
||||
attrbuf.clear();
|
||||
} wire_options TOK_ID EOL {
|
||||
if (current_module->wire($4) != nullptr)
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of wire %s.", $4).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of wire %s.", $4).c_str());
|
||||
current_module->rename(current_wire, $4);
|
||||
free($4);
|
||||
};
|
||||
|
@ -187,7 +187,7 @@ wire_options:
|
|||
current_wire->width = $3;
|
||||
} |
|
||||
wire_options TOK_WIDTH TOK_INVALID {
|
||||
rtlil_frontend_ilang_yyerror("ilang error: invalid wire width");
|
||||
rtlil_frontend_yyerror("RTLIL error: invalid wire width");
|
||||
} |
|
||||
wire_options TOK_UPTO {
|
||||
current_wire->upto = true;
|
||||
|
@ -222,7 +222,7 @@ memory_stmt:
|
|||
attrbuf.clear();
|
||||
} memory_options TOK_ID EOL {
|
||||
if (current_module->memories.count($4) != 0)
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of memory %s.", $4).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of memory %s.", $4).c_str());
|
||||
current_memory->name = $4;
|
||||
current_module->memories[$4] = current_memory;
|
||||
free($4);
|
||||
|
@ -243,7 +243,7 @@ memory_options:
|
|||
cell_stmt:
|
||||
TOK_CELL TOK_ID TOK_ID EOL {
|
||||
if (current_module->cell($3) != nullptr)
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of cell %s.", $3).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of cell %s.", $3).c_str());
|
||||
current_cell = current_module->addCell($3, $2);
|
||||
current_cell->attributes = attrbuf;
|
||||
attrbuf.clear();
|
||||
|
@ -271,7 +271,7 @@ cell_body:
|
|||
} |
|
||||
cell_body TOK_CONNECT TOK_ID sigspec EOL {
|
||||
if (current_cell->hasPort($3))
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of cell port %s.", $3).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of cell port %s.", $3).c_str());
|
||||
current_cell->setPort($3, *$4);
|
||||
delete $4;
|
||||
free($3);
|
||||
|
@ -281,7 +281,7 @@ cell_body:
|
|||
proc_stmt:
|
||||
TOK_PROCESS TOK_ID EOL {
|
||||
if (current_module->processes.count($2) != 0)
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: redefinition of process %s.", $2).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: redefinition of process %s.", $2).c_str());
|
||||
current_process = new RTLIL::Process;
|
||||
current_process->name = $2;
|
||||
current_process->attributes = attrbuf;
|
||||
|
@ -342,7 +342,7 @@ case_body:
|
|||
assign_stmt:
|
||||
TOK_ASSIGN sigspec sigspec EOL {
|
||||
if (attrbuf.size() != 0)
|
||||
rtlil_frontend_ilang_yyerror("dangling attribute");
|
||||
rtlil_frontend_yyerror("dangling attribute");
|
||||
case_stack.back()->actions.push_back(RTLIL::SigSig(*$2, *$3));
|
||||
delete $2;
|
||||
delete $3;
|
||||
|
@ -438,19 +438,19 @@ sigspec:
|
|||
} |
|
||||
TOK_ID {
|
||||
if (current_module->wire($1) == nullptr)
|
||||
rtlil_frontend_ilang_yyerror(stringf("ilang error: wire %s not found", $1).c_str());
|
||||
rtlil_frontend_yyerror(stringf("RTLIL error: wire %s not found", $1).c_str());
|
||||
$$ = new RTLIL::SigSpec(current_module->wire($1));
|
||||
free($1);
|
||||
} |
|
||||
sigspec '[' TOK_INT ']' {
|
||||
if ($3 >= $1->size() || $3 < 0)
|
||||
rtlil_frontend_ilang_yyerror("bit index out of range");
|
||||
rtlil_frontend_yyerror("bit index out of range");
|
||||
$$ = new RTLIL::SigSpec($1->extract($3));
|
||||
delete $1;
|
||||
} |
|
||||
sigspec '[' TOK_INT ':' TOK_INT ']' {
|
||||
if ($3 >= $1->size() || $3 < 0 || $3 < $5)
|
||||
rtlil_frontend_ilang_yyerror("invalid slice");
|
||||
rtlil_frontend_yyerror("invalid slice");
|
||||
$$ = new RTLIL::SigSpec($1->extract($5, $3 - $5 + 1));
|
||||
delete $1;
|
||||
} |
|
||||
|
@ -477,7 +477,7 @@ sigspec_list: sigspec_list_reversed {
|
|||
conn_stmt:
|
||||
TOK_CONNECT sigspec sigspec EOL {
|
||||
if (attrbuf.size() != 0)
|
||||
rtlil_frontend_ilang_yyerror("dangling attribute");
|
||||
rtlil_frontend_yyerror("dangling attribute");
|
||||
current_module->connect(*$2, *$3);
|
||||
delete $2;
|
||||
delete $3;
|
Loading…
Add table
Add a link
Reference in a new issue