2
\$\begingroup\$

What's the difference between a += 1 and a = a+1 in Verilog?

always_comb begin
 a = '0;
 a += 1;
end

always_comb begin
 a= '0;
 a = a+1;
end

Is the 2nd case a combinational loop?

\$\endgroup\$
1
  • \$\begingroup\$ It's the same thing. Just make sure you don't mistake += with =+ because those expressions are different. \$\endgroup\$
    – user103380
    Dec 3, 2019 at 6:19

2 Answers 2

5
\$\begingroup\$

a+=1 is just a short-hand for a=a+1. They both are equivalent.

There is no combinational loop in both cases.

a will be simply driven 1 in both cases. Synthesiser usually flags this as warning or info.

\$\endgroup\$
2
\$\begingroup\$

These are equivalent assignment statements in SystemVerilog—there is absolutely no difference. And the two always_comb blocks do absolutely nothing as they have no sensitivity to any variables. In fact, some tools may generate warnings or errors stating that the blocks do not represent combinational logic.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ The always_comb will run once per IEEE1800-2017 § 9.2.2.2.2 always_comb compared to always @* "always_comb automatically executes once at time zero, whereas always @* waits until a change occurs on a signal in the inferred sensitivity list." \$\endgroup\$
    – Greg
    Dec 3, 2019 at 16:30
  • \$\begingroup\$ Yes, that's true for simulation. Not sure how synthesis tools treat time 0 behavior \$\endgroup\$
    – dave_59
    Dec 3, 2019 at 16:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.