| www.delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to geda-user-bounces using -f |
| Date: | Mon, 20 Feb 2012 00:17:53 -0500 |
| Message-Id: | <201202200517.q1K5HrUD026271@envy.delorie.com> |
| From: | DJ Delorie <dj AT delorie DOT com> |
| To: | geda-user AT delorie DOT com |
| In-reply-to: | <4F41CB0A.2020902@optonline.net> (message from gene glick on Sun, |
| 19 Feb 2012 23:24:42 -0500) | |
| Subject: | Re: [geda-user] verilog question - blocking/non-blocking |
| References: | <4F41CB0A DOT 2020902 AT optonline DOT net> |
| Reply-To: | geda-user AT delorie DOT com |
| Errors-To: | nobody AT delorie DOT com |
| X-Mailing-List: | geda-user AT delorie DOT com |
| X-Unsubscribes-To: | listserv AT delorie DOT com |
> Question : does one method synthesize significantly different logic
> than the other?
For those who think verilog is software, it's not...
The "=" operator is like a bunch of gates wired in series, with each
gate's input tied to the previous gate's output. If multiple gates
compute the same "output", the last active one listed wins.
The "<=" operator is like a bunch of gates with a common input.
If you think software-like, think of your code this way:
always @(posedge clk)
begin
/* edge happens here */
new_count = count + 1;
if (new_count == 0)
do_something
count = new_count;
end
always @(posedge clk)
begin
prev_count = count;
/* edge happens here */
count <= prev_count + 1; // non-blocking method
if (prev_count == 0)
do_something
end
My personal paradigm is to use '=' in an @always combinatoric state
machine that computes the next state from the current state, and '<='
in a separate edge-triggered @always that just copies the next state
to the current state.
For example, see http://www.delorie.com/electronics/sdram/simple1.v
The last two blocks are an "always @(negedge ram_wclock) begin" that
copies the next state to the current state, followed by a huge "always
@(...lots of things...)" that computes the next state.
I've found that if I try to mix combinatoric and edge logic in the
same block, I end up doing something pessimal and the chip won't run
as fast as it should.
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |