It is a syntactical restriction. The left operand of the goto operator [->] must be a boolean expression (or distribution). ##0 is not boolean operator. Even though some sequence expression degenerate into boolean expressions, they are not syntactically boolean expressions.
One more thing to add on Dave’s reply:
I read the ##0 as the start of a new sequence that starts in the same time
step as the end point of the preceding sequence. Thus,
@( posedge clk ) a |=> $rose(b) ##0 $rose( c );
It’s a different connotation than the logical && that represents combinational logic.
Ben Cohen Ben@systemverilog.us
Link to the list of papers and books that I wrote, many are now donated.
In reply to ben@SystemVerilog.us:
Hi Ben , Do you mean to say that go-to repetition can only be used with a sequence and not concatenation of 2 sequences using ##0 ?
The syntax for the goto is Boolean [> n].
b[->1] is equivalent to: !b[*0:] ##1 b
b[->2] is equivalent to: !b[*0:] ##1 b ##1 !b[*0:$] ##1 b
b[->2] is equivalent to b[>1] ##0 b[->1]