[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gEDA: Icarus NetAssign, NetAssignNB



Yes, you understood right. This is what I wanted to hear.. Thank you.

Regards,
Hendrik Greving


Steven Wilson wrote:

> I may have completely mis-understood Hendrik's question -
>
> I'm likely not able to answer what I now perceive the question. Let me 
> restate it just for clarities sake and Hendrik can say yes or no.
>
> He asking about the use of NetAssign/NetAssignNB within icarus and the 
> followup was a question whether blocking/non-blocking might be their use?
>
> Hendrik - does that capture the question correctly?
>
> Steve
>
> Steven Wilson wrote:
>
>> I'll take this - Steve isn't around for the moment.
>>
>> This is one of those very basic confusions of verilog -
>>
>> Two examples - one of each:
>>
>> reg a, b,c ;
>>
>> // Assume that we start at before the clock with a = 1, b = 0, c = 0.
>>
>> always @ ( posedge clk)  // Blocking
>>  begin
>>       b = a;
>>       c = b;
>>   end
>>
>> always @(posedge clk) // Non-blocking
>>  begin
>>    b <= a;
>>    c <= b;
>>  end
>>
>> So what is the difference -   after the rising clock edge occurs -
>>
>> Blocking: a = 1, b = 1, c = 1.
>> Non-blocking a = 1, b = 1, c = 0.
>>
>> Why?
>>
>> Well - blocking means wait till the current step is completed before 
>> moving to the next statement. Non-blocking means perform all 
>> statements in parallel. Applying these definitions to the examples we 
>> find that in the blocking code. First the value of a is assigned to 
>> b, then the value of b is assigned to c. Thus the value of a 
>> propagates to both of the other variables.
>>
>> In the non-blocking case, the value of a is ONLY assigned to the 
>> first statement, while the current value of b is assigned to c 
>> SIMULTANEOUSLY.
>>
>> As a coding convention - a way to keep out of trouble is to use 
>> Blocking ONLY for combinational logic (think muxes..) while you only 
>> use non-blocking for describing registered logic.  So anywhere you 
>> have a "posedge/negedge" in the always statement - no blocking code.
>>
>> Hope this helps.
>>
>> Steve
>>
>>
>>
>>
>>
>> Hendrik Greving wrote:
>>
>>> Hendrik Greving wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm Hendrik, new to this group.. Currently, I'm working with Icarus 
>>>> and modifying it according my purpose. I've got a short question, 
>>>> could anybody tell me, what's the difference between above?
>>>>
>>>> Regards,
>>>> Hendrik
>>>>
>>>>
>>> blocking/non-blocking?
>>>
>>> Regards,
>>> Hendrik Greving
>>
>>
>>
>>
>
>
>