@@ -141,9 +141,8 @@ Function: expr2verilogt::convert_sva_cycle_delay
141141
142142\*******************************************************************/
143143
144- expr2verilogt::resultt expr2verilogt::convert_sva_cycle_delay (
145- const sva_cycle_delay_exprt &src,
146- verilog_precedencet precedence)
144+ expr2verilogt::resultt
145+ expr2verilogt::convert_sva_cycle_delay (const sva_cycle_delay_exprt &src)
147146{
148147 std::string dest=" ##" ;
149148
@@ -163,13 +162,13 @@ expr2verilogt::resultt expr2verilogt::convert_sva_cycle_delay(
163162
164163 auto rhs = convert_rec (src.rhs ());
165164
166- if (precedence > rhs.p )
165+ if (rhs.p == verilog_precedencet::MIN )
167166 dest += ' (' ;
168167 dest += rhs.s ;
169- if (precedence > rhs.p )
168+ if (rhs.p == verilog_precedencet::MIN )
170169 dest += ' )' ;
171170
172- return {precedence , dest};
171+ return {verilog_precedencet::MIN , dest};
173172}
174173
175174/* ******************************************************************\
@@ -224,33 +223,41 @@ Function: expr2verilogt::convert_sva_sequence_concatenation
224223
225224\*******************************************************************/
226225
227- expr2verilogt::resultt expr2verilogt::convert_sva_sequence_concatenation (
228- const binary_exprt &src,
229- verilog_precedencet precedence)
226+ expr2verilogt::resultt
227+ expr2verilogt::convert_sva_sequence_concatenation (const binary_exprt &src)
230228{
231- if (src.operands ().size ()!=2 )
232- return convert_norep (src);
233-
234229 std::string dest;
235230
236231 auto op0 = convert_rec (src.op0 ());
237232 auto op1 = convert_rec (src.op1 ());
238233
239- if (precedence > op0.p )
234+ bool lhs_paren = op0.p == verilog_precedencet::MIN &&
235+ src.op0 ().id () != ID_sva_sequence_concatenation &&
236+ src.op0 ().id () != ID_sva_cycle_delay &&
237+ src.op0 ().id () != ID_sva_cycle_delay_plus &&
238+ src.op0 ().id () != ID_sva_cycle_delay_star;
239+
240+ if (lhs_paren)
240241 dest += ' (' ;
241242 dest += op0.s ;
242- if (precedence > op0. p )
243+ if (lhs_paren )
243244 dest += ' )' ;
244245
245246 dest+=' ' ;
246247
247- if (precedence > op0.p )
248+ bool rhs_paren = op1.p == verilog_precedencet::MIN &&
249+ src.op1 ().id () != ID_sva_sequence_concatenation &&
250+ src.op1 ().id () != ID_sva_cycle_delay &&
251+ src.op1 ().id () != ID_sva_cycle_delay_plus &&
252+ src.op1 ().id () != ID_sva_cycle_delay_star;
253+
254+ if (rhs_paren)
248255 dest += ' (' ;
249256 dest += op1.s ;
250- if (precedence > op0. p )
257+ if (rhs_paren )
251258 dest += ' )' ;
252259
253- return {precedence , dest};
260+ return {verilog_precedencet::MIN , dest};
254261}
255262
256263/* ******************************************************************\
@@ -1838,9 +1845,7 @@ expr2verilogt::resultt expr2verilogt::convert_rec(const exprt &src)
18381845 convert_sva_binary (" #=#" , to_binary_expr (src));
18391846
18401847 else if (src.id ()==ID_sva_cycle_delay)
1841- return convert_sva_cycle_delay (
1842- to_sva_cycle_delay_expr (src), precedence = verilog_precedencet::MIN);
1843- // not sure about precedence
1848+ return convert_sva_cycle_delay (to_sva_cycle_delay_expr (src));
18441849
18451850 else if (src.id () == ID_sva_strong)
18461851 return convert_function (" strong" , src);
@@ -1862,9 +1867,7 @@ expr2verilogt::resultt expr2verilogt::convert_rec(const exprt &src)
18621867 }
18631868
18641869 else if (src.id ()==ID_sva_sequence_concatenation)
1865- return convert_sva_sequence_concatenation (
1866- to_binary_expr (src), precedence = verilog_precedencet::MIN);
1867- // not sure about precedence
1870+ return convert_sva_sequence_concatenation (to_binary_expr (src));
18681871
18691872 else if (src.id () == ID_sva_sequence_first_match)
18701873 return convert_sva_sequence_first_match (
@@ -1885,16 +1888,6 @@ expr2verilogt::resultt expr2verilogt::convert_rec(const exprt &src)
18851888 convert_sva_binary (" within" , to_binary_expr (src));
18861889 // not sure about precedence
18871890
1888- else if (src.id () == ID_sva_sequence_within)
1889- return convert_sva_sequence_concatenation (
1890- to_binary_expr (src), precedence = verilog_precedencet::MIN);
1891- // not sure about precedence
1892-
1893- else if (src.id () == ID_sva_sequence_throughout)
1894- return convert_sva_sequence_concatenation (
1895- to_binary_expr (src), precedence = verilog_precedencet::MIN);
1896- // not sure about precedence
1897-
18981891 else if (src.id ()==ID_sva_always)
18991892 return precedence = verilog_precedencet::MIN,
19001893 convert_sva_unary (" always" , to_sva_always_expr (src));
0 commit comments