diff options
Diffstat (limited to 'frontends/verilog')
| -rw-r--r-- | frontends/verilog/.gitignore | 2 | ||||
| -rw-r--r-- | frontends/verilog/Makefile.inc | 7 | ||||
| -rw-r--r-- | frontends/verilog/verilog_frontend.cc | 10 | ||||
| -rw-r--r-- | frontends/verilog/verilog_lexer.l | 2 | ||||
| -rw-r--r-- | frontends/verilog/verilog_parser.y | 55 | 
5 files changed, 53 insertions, 23 deletions
diff --git a/frontends/verilog/.gitignore b/frontends/verilog/.gitignore index 1d4ae9e5c..aadbcdcdd 100644 --- a/frontends/verilog/.gitignore +++ b/frontends/verilog/.gitignore @@ -1,4 +1,4 @@  verilog_lexer.cc  verilog_parser.output  verilog_parser.tab.cc -verilog_parser.tab.h +verilog_parser.tab.hh diff --git a/frontends/verilog/Makefile.inc b/frontends/verilog/Makefile.inc index a06c1d5ab..dbaace585 100644 --- a/frontends/verilog/Makefile.inc +++ b/frontends/verilog/Makefile.inc @@ -1,15 +1,14 @@  GENFILES += frontends/verilog/verilog_parser.tab.cc -GENFILES += frontends/verilog/verilog_parser.tab.h +GENFILES += frontends/verilog/verilog_parser.tab.hh  GENFILES += frontends/verilog/verilog_parser.output  GENFILES += frontends/verilog/verilog_lexer.cc  frontends/verilog/verilog_parser.tab.cc: frontends/verilog/verilog_parser.y  	$(Q) mkdir -p $(dir $@) -	$(P) $(BISON) -d -r all -b frontends/verilog/verilog_parser $< -	$(Q) mv frontends/verilog/verilog_parser.tab.c frontends/verilog/verilog_parser.tab.cc +	$(P) $(BISON) -o $@ -d -r all -b frontends/verilog/verilog_parser $< -frontends/verilog/verilog_parser.tab.h: frontends/verilog/verilog_parser.tab.cc +frontends/verilog/verilog_parser.tab.hh: frontends/verilog/verilog_parser.tab.cc  frontends/verilog/verilog_lexer.cc: frontends/verilog/verilog_lexer.l  	$(Q) mkdir -p $(dir $@) diff --git a/frontends/verilog/verilog_frontend.cc b/frontends/verilog/verilog_frontend.cc index 911e36112..8dcc7c5aa 100644 --- a/frontends/verilog/verilog_frontend.cc +++ b/frontends/verilog/verilog_frontend.cc @@ -78,6 +78,9 @@ struct VerilogFrontend : public Frontend {  		log("    -dump_ast2\n");  		log("        dump abstract syntax tree (after simplification)\n");  		log("\n"); +		log("    -no_dump_ptr\n"); +		log("        do not include hex memory addresses in dump (easier to diff dumps)\n"); +		log("\n");  		log("    -dump_vlog\n");  		log("        dump ast as Verilog code (after simplification)\n");  		log("\n"); @@ -184,6 +187,7 @@ struct VerilogFrontend : public Frontend {  	{  		bool flag_dump_ast1 = false;  		bool flag_dump_ast2 = false; +		bool flag_no_dump_ptr = false;  		bool flag_dump_vlog = false;  		bool flag_dump_rtlil = false;  		bool flag_nolatches = false; @@ -241,6 +245,10 @@ struct VerilogFrontend : public Frontend {  				flag_dump_ast2 = true;  				continue;  			} +			if (arg == "-no_dump_ptr") { +				flag_no_dump_ptr = true; +				continue; +			}  			if (arg == "-dump_vlog") {  				flag_dump_vlog = true;  				continue; @@ -381,7 +389,7 @@ struct VerilogFrontend : public Frontend {  		if (flag_nodpi)  			error_on_dpi_function(current_ast); -		AST::process(design, current_ast, flag_dump_ast1, flag_dump_ast2, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit, flag_nomem2reg, flag_mem2reg, lib_mode, flag_noopt, flag_icells, flag_nooverwrite, flag_overwrite, flag_defer, default_nettype_wire); +		AST::process(design, current_ast, flag_dump_ast1, flag_dump_ast2, flag_no_dump_ptr, flag_dump_vlog, flag_dump_rtlil, flag_nolatches, flag_nomeminit, flag_nomem2reg, flag_mem2reg, lib_mode, flag_noopt, flag_icells, flag_nooverwrite, flag_overwrite, flag_defer, default_nettype_wire);  		if (!flag_nopp)  			delete lexin; diff --git a/frontends/verilog/verilog_lexer.l b/frontends/verilog/verilog_lexer.l index 0134416c1..83921bf0b 100644 --- a/frontends/verilog/verilog_lexer.l +++ b/frontends/verilog/verilog_lexer.l @@ -42,7 +42,7 @@  #include "kernel/log.h"  #include "frontends/verilog/verilog_frontend.h"  #include "frontends/ast/ast.h" -#include "verilog_parser.tab.h" +#include "verilog_parser.tab.hh"  USING_YOSYS_NAMESPACE  using namespace AST; diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y index 78cac5543..2389d7d31 100644 --- a/frontends/verilog/verilog_parser.y +++ b/frontends/verilog/verilog_parser.y @@ -654,7 +654,7 @@ specify_item:  	// | pulsestyle_declaration  	// | showcancelled_declaration  	| path_declaration -	// | system_timing_declaration +	| system_timing_declaration  	;  specparam_declaration: @@ -682,22 +682,23 @@ showcancelled_declaration :  */  path_declaration : -	simple_path_declaration +	simple_path_declaration ';'  	// | edge_sensitive_path_declaration  	// | state_dependent_path_declaration  	;  simple_path_declaration : -	parallel_path_description '=' path_delay_value ';' -	// | full_path_description '=' path_delay_value ';' +	parallel_path_description '=' path_delay_value | +	full_path_description '=' path_delay_value  	;  path_delay_value : -	//list_of_path_delay_expressions -	'(' list_of_path_delay_expressions ')' +	'(' path_delay_expression list_of_path_delay_extra_expressions ')' +	|     path_delay_expression +	|     path_delay_expression list_of_path_delay_extra_expressions  	; -list_of_path_delay_expressions : +list_of_path_delay_extra_expressions :  /*  	t_path_delay_expression  	| trise_path_delay_expression ',' tfall_path_delay_expression @@ -709,12 +710,11 @@ list_of_path_delay_expressions :  	  t0x_path_delay_expression ',' tx1_path_delay_expression ',' t1x_path_delay_expression ','  	  tx0_path_delay_expression ',' txz_path_delay_expression ',' tzx_path_delay_expression  */ -	path_delay_expression -	| path_delay_expression ',' path_delay_expression -	| path_delay_expression ',' path_delay_expression ',' path_delay_expression -	| path_delay_expression ',' path_delay_expression ',' path_delay_expression ',' +	',' path_delay_expression +	|  ',' path_delay_expression ',' path_delay_expression +	|  ',' path_delay_expression ',' path_delay_expression ','  	  path_delay_expression ',' path_delay_expression ',' path_delay_expression -	| path_delay_expression ',' path_delay_expression ',' path_delay_expression ',' +	|  ',' path_delay_expression ',' path_delay_expression ','  	  path_delay_expression ',' path_delay_expression ',' path_delay_expression ','  	  path_delay_expression ',' path_delay_expression ',' path_delay_expression ','  	  path_delay_expression ',' path_delay_expression ',' path_delay_expression @@ -723,6 +723,22 @@ list_of_path_delay_expressions :  parallel_path_description :  	'(' specify_input_terminal_descriptor opt_polarity_operator '=' '>' specify_output_terminal_descriptor ')' ; +full_path_description : +	'(' list_of_path_inputs '*' '>' list_of_path_outputs ')' ; + +// This was broken into 2 rules to solve shift/reduce conflicts +list_of_path_inputs : +	specify_input_terminal_descriptor                  opt_polarity_operator  | +	specify_input_terminal_descriptor more_path_inputs opt_polarity_operator ; + +more_path_inputs : +    ',' specify_input_terminal_descriptor | +    more_path_inputs ',' specify_input_terminal_descriptor ; + +list_of_path_outputs : +	specify_output_terminal_descriptor | +	list_of_path_outputs ',' specify_output_terminal_descriptor ; +	  opt_polarity_operator :  	'+'  	| '-' @@ -736,11 +752,18 @@ specify_input_terminal_descriptor :  specify_output_terminal_descriptor :  	TOK_ID ; -/*  system_timing_declaration : -	; -*/ +	TOK_ID '(' system_timing_args ')' ';' ; + +system_timing_arg : +	TOK_POSEDGE TOK_ID | +	TOK_NEGEDGE TOK_ID | +	expr ; +system_timing_args : +	system_timing_arg | +	system_timing_args ',' system_timing_arg ; +   /*  t_path_delay_expression :  	path_delay_expression; @@ -792,7 +815,7 @@ tzx_path_delay_expression :  */  path_delay_expression : -	constant_mintypmax_expression; +	constant_expression;  constant_mintypmax_expression :  	constant_expression  | 
