1
\$\begingroup\$

My question is, essentially, as stated in the title. For what it's worth, it's prompted by a comment made by Stuart Sutherland on page 256 of his RTL Modelling with SystemVerilog:

The primary RTL modeling construct for combinational logic is the always proce­dure, using either the general purpose always keyword or the RTL-specific always_comb keyword. These always procedures can take advantage of the robust set of operators programming statements that are discussed in Chapters 5 and 6, whereas continuous assignments are limited to using only SystemVerilog operators.

I have bolded the relevant sentence. The suggestion seems to be that there are more operators which can be used while in an always statement but, even after flipping back through the book, I can't seem to find any suggestion of this.

Chapter 5 is titled "RTL Expression Operators" and Chapter 6 "RTL Programming Statements". I suspect Sutherland was using "operator" very inclusively to also mean things like if-else statements, case statements, etc., in which case the claim makes sense.

toolic
10.8k11 gold badges31 silver badges35 bronze badges
asked Feb 6, 2024 at 16:50
\$\endgroup\$
0

2 Answers 2

1
\$\begingroup\$

I do not have access to the book, but I agree with your suspicion that the author was not solely speaking about SystemVerilog operators (like = & <<), but meant other constructs as well, such as if/else and case statements.

From a recommended coding practice point of view, continuous assignments are great if the logic is pretty simple:

assign a = (b & c) | (d & e);

But, as the logic gets a lot more complex, lines of code can get very long, which means they will be harder to read, understand and maintain.

In that case, it is better to use procedural assignments (always blocks). A common use of an always block is for the combinational logic for the next-state logic of a finite state machine. While it might be possible to use a complex continuous assignment, it is much more natural to use a case statement.

answered Feb 6, 2024 at 18:46
\$\endgroup\$
1
  • \$\begingroup\$ Very clearly phrased and exactly what I needed -- thank you as always toolic! \$\endgroup\$ Commented Feb 6, 2024 at 19:01
1
\$\begingroup\$

The correct answer to the question in title is yes, there are some operators you cannot use in continuous assignment (or any non-procedural context); specifically the inc_or_dec_expressions (++/--) or operators_assigment (+=/>>=,etc)

For example

bit a,b,c;
assign a = b + c--;

The SystemVerilog BNF syntax prevents some of these expressions, but there should be some text somewhere disallowing side-effects in non-procedural contexts.

answered Feb 6, 2024 at 21:23
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.