Merge pull request #1147 from YosysHQ/clifford/fix1144
authorClifford Wolf <clifford@clifford.at>
Wed, 3 Jul 2019 10:30:37 +0000 (12:30 +0200)
committerDavid Shah <dave@ds0.me>
Tue, 9 Jul 2019 17:47:08 +0000 (18:47 +0100)
Improve specify dummy parser

frontends/verilog/verilog_parser.y
tests/various/specify.v
tests/various/specify.ys

index d89b2dc88e74575e0fc29aef42442f60371fbab1..0fec445fa4780d53ff46ddda1b7b1ad932641372 100644 (file)
@@ -1021,13 +1021,8 @@ list_of_specparam_assignments:
 specparam_assignment:
        ignspec_id '=' constant_mintypmax_expression ;
 
-/*
-pulsestyle_declaration :
-       ;
-
-showcancelled_declaration :
-       ;
-*/
+ignspec_opt_cond:
+       TOK_IF '(' ignspec_expr ')' | /* empty */;
 
 path_declaration :
        simple_path_declaration ';'
@@ -1036,8 +1031,8 @@ path_declaration :
        ;
 
 simple_path_declaration :
-       parallel_path_description '=' path_delay_value |
-       full_path_description '=' path_delay_value
+       ignspec_opt_cond parallel_path_description '=' path_delay_value |
+       ignspec_opt_cond full_path_description '=' path_delay_value
        ;
 
 path_delay_value :
@@ -1047,32 +1042,20 @@ path_delay_value :
        ;
 
 list_of_path_delay_extra_expressions :
-/*
-       t_path_delay_expression
-       | trise_path_delay_expression ',' tfall_path_delay_expression
-       | trise_path_delay_expression ',' tfall_path_delay_expression ',' tz_path_delay_expression
-       | t01_path_delay_expression ',' t10_path_delay_expression ',' t0z_path_delay_expression ','
-         tz1_path_delay_expression ',' t1z_path_delay_expression ',' tz0_path_delay_expression
-       | t01_path_delay_expression ',' t10_path_delay_expression ',' t0z_path_delay_expression ','
-         tz1_path_delay_expression ',' t1z_path_delay_expression ',' tz0_path_delay_expression ','
-         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 list_of_path_delay_extra_expressions;
+
+specify_edge_identifier :
+       TOK_POSEDGE | TOK_NEGEDGE ;
 
 parallel_path_description :
-       '(' specify_input_terminal_descriptor opt_polarity_operator '=' '>' specify_output_terminal_descriptor ')' ;
+       '(' specify_input_terminal_descriptor opt_polarity_operator '=' '>' specify_output_terminal_descriptor ')' |
+       '(' specify_edge_identifier specify_input_terminal_descriptor '=' '>' '(' specify_output_terminal_descriptor opt_polarity_operator ':' ignspec_expr ')' ')' |
+       '(' specify_edge_identifier specify_input_terminal_descriptor '=' '>' '(' specify_output_terminal_descriptor TOK_POS_INDEXED ignspec_expr ')' ')' ;
 
 full_path_description :
-       '(' list_of_path_inputs '*' '>' list_of_path_outputs ')' ;
+       '(' list_of_path_inputs '*' '>' list_of_path_outputs ')' |
+       '(' specify_edge_identifier list_of_path_inputs '*' '>' '(' list_of_path_outputs opt_polarity_operator ':' ignspec_expr ')' ')' |
+       '(' specify_edge_identifier list_of_path_inputs '*' '>' '(' list_of_path_outputs TOK_POS_INDEXED ignspec_expr ')' ')' ;
 
 // This was broken into 2 rules to solve shift/reduce conflicts
 list_of_path_inputs :
@@ -1112,56 +1095,6 @@ system_timing_args :
        system_timing_arg |
        system_timing_args ',' system_timing_arg ;
 
-/*
-t_path_delay_expression :
-       path_delay_expression;
-
-trise_path_delay_expression :
-       path_delay_expression;
-
-tfall_path_delay_expression :
-       path_delay_expression;
-
-tz_path_delay_expression :
-       path_delay_expression;
-
-t01_path_delay_expression :
-       path_delay_expression;
-
-t10_path_delay_expression :
-       path_delay_expression;
-
-t0z_path_delay_expression :
-       path_delay_expression;
-
-tz1_path_delay_expression :
-       path_delay_expression;
-
-t1z_path_delay_expression :
-       path_delay_expression;
-
-tz0_path_delay_expression :
-       path_delay_expression;
-
-t0x_path_delay_expression :
-       path_delay_expression;
-
-tx1_path_delay_expression :
-       path_delay_expression;
-
-t1x_path_delay_expression :
-       path_delay_expression;
-
-tx0_path_delay_expression :
-       path_delay_expression;
-
-txz_path_delay_expression :
-       path_delay_expression;
-
-tzx_path_delay_expression :
-       path_delay_expression;
-*/
-
 path_delay_expression :
        ignspec_constant_expression;
 
index afc421da8a3eda3667a29534506d076550548301..5d44d78f76b4f51e2fbe6a55f3ef82b947eeea57 100644 (file)
@@ -7,9 +7,11 @@ module test (
                if (EN) Q <= D;
 
        specify
-               if (EN) (CLK *> (Q : D)) = (1, 2:3:4);
+`ifndef SKIP_UNSUPPORTED_IGN_PARSER_CONSTRUCTS
+               if (EN) (posedge CLK *> (Q : D)) = (1, 2:3:4);
                $setup(D, posedge CLK &&& EN, 5);
                $hold(posedge CLK, D &&& EN, 6);
+`endif
        endspecify
 endmodule
 
@@ -28,3 +30,10 @@ module test2 (
                (B => Q) = 1.5;
        endspecify
 endmodule
+
+module issue01144(input clk, d, output q);
+specify
+  (posedge clk => (q +: d)) = (3,1);
+  (posedge clk *> (q +: d)) = (3,1);
+endspecify
+endmodule
index a5ca07219ae97055bdb573f8a04ae4256837d47a..00597e1e282c9d0ae7367b235d7cc606faec0934 100644 (file)
@@ -54,3 +54,5 @@ equiv_struct
 equiv_induct -seq 5
 equiv_status -assert
 design -reset
+
+read_verilog -DSKIP_UNSUPPORTED_IGN_PARSER_CONSTRUCTS specify.v