diff options
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/rtlil/rtlil_lexer.l | 1 | ||||
| -rw-r--r-- | frontends/rtlil/rtlil_parser.y | 19 | 
2 files changed, 19 insertions, 1 deletions
diff --git a/frontends/rtlil/rtlil_lexer.l b/frontends/rtlil/rtlil_lexer.l index beef220f6..897ebf667 100644 --- a/frontends/rtlil/rtlil_lexer.l +++ b/frontends/rtlil/rtlil_lexer.l @@ -79,6 +79,7 @@ USING_YOSYS_NAMESPACE  "global"	{ return TOK_GLOBAL; }  "init"		{ return TOK_INIT; }  "update"	{ return TOK_UPDATE; } +"memwr"		{ return TOK_MEMWR; }  "process"	{ return TOK_PROCESS; }  "end"		{ return TOK_END; } diff --git a/frontends/rtlil/rtlil_parser.y b/frontends/rtlil/rtlil_parser.y index 646489196..7a8f508bf 100644 --- a/frontends/rtlil/rtlil_parser.y +++ b/frontends/rtlil/rtlil_parser.y @@ -69,7 +69,7 @@ USING_YOSYS_NAMESPACE  %token TOK_AUTOIDX TOK_MODULE TOK_WIRE TOK_WIDTH TOK_INPUT TOK_OUTPUT TOK_INOUT  %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_GLOBAL TOK_INIT -%token TOK_UPDATE TOK_PROCESS TOK_END TOK_INVALID TOK_EOL TOK_OFFSET +%token TOK_UPDATE TOK_MEMWR TOK_PROCESS TOK_END TOK_INVALID TOK_EOL TOK_OFFSET  %token TOK_PARAMETER TOK_ATTRIBUTE TOK_MEMORY TOK_SIZE TOK_SIGNED TOK_REAL TOK_UPTO  %type <rsigspec> sigspec_list_reversed @@ -155,6 +155,7 @@ param_defval_stmt:  	TOK_PARAMETER TOK_ID constant EOL {  		current_module->avail_parameters($2);  		current_module->parameter_default_values[$2] = *$3; +		delete $3;  		free($2);  	}; @@ -389,6 +390,22 @@ update_list:  		delete $3;  		delete $4;  	} | +	update_list attr_list TOK_MEMWR TOK_ID sigspec sigspec sigspec constant EOL { +		RTLIL::MemWriteAction act; +		act.attributes = attrbuf; +		act.memid = $4; +		act.address = *$5; +		act.data = *$6; +		act.enable = *$7; +		act.priority_mask = *$8; +		current_process->syncs.back()->mem_write_actions.push_back(std::move(act)); +		attrbuf.clear(); +		free($4); +		delete $5; +		delete $6; +		delete $7; +		delete $8; +	} |  	/* empty */;  constant:  | 
