Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Process sensitivity list - why doesn't the process enter when signals on it's sensitivity list change.

45 views
Skip to first unread message

A

unread,
Dec 15, 2021, 4:28:36 PM12/15/21
to
Hello,

I am perplexed with VHDL behavior in the example I tried on EDA Playground. Here's the link so that you can simulate yourself.

https://www.edaplayground.com/x/Qx_J

My question is why doesn't the process enter when 'B' changes? The process seems to remain stuck at time 0 - with A, B, C values as Uninitialized.

Thanks

Maurice SAAB

unread,
Dec 16, 2021, 5:50:49 AM12/16/21
to
in process (A, B, C).... there is no wait statement, so time didn't advances

HTH



--
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

A

unread,
Dec 16, 2021, 1:37:28 PM12/16/21
to
Process is sensitive to A.B.C - so can't have wait statement in the process. No wait when there is sensitivity list - VHDL rule.

Maurice SAAB

unread,
Dec 16, 2021, 2:38:15 PM12/16/21
to
Seems working with my (old) simulator:
ENTER: At Time = 0 ns INPUT = 'U''U''U'
EXIT: At Time = 0 ns iOUT1 = 'U''U''U'
ENTER: At Time = 1 ns INPUT = '0''U''U'
EXIT: At Time = 1 ns iOUT1 = '0''U''U'
ENTER: At Time = 11 ns INPUT = '0''0''U'
EXIT: At Time = 11 ns iOUT1 = '0''0''U'
ENTER: At Time = 15 ns INPUT = '0''0''0'
EXIT: At Time = 15 ns iOUT1 = '0''0''0'
ENTER: At Time = 26 ns INPUT = '1''0''0'
EXIT: At Time = 26 ns iOUT1 = '1''0''0'
ENTER: At Time = 36 ns INPUT = '1''1''0'
EXIT: At Time = 36 ns iOUT1 = '1''1''0'
ENTER: At Time = 40 ns INPUT = '1''1''1'
EXIT: At Time = 40 ns iOUT1 = '1''1''1'

there is ENTER at 36ns when B changes


Charles Bailey

unread,
Dec 16, 2021, 8:10:05 PM12/16/21
to
The main problem is that signals B and C are being driven by two
processes. Unless you are dealing with tri-state logic this is usually
a no-no. Remember that in VHDL a signal is not a variable in the sense
that you would think of a variable in a conventional programming
language. An assignment statement for a signal (<=) within a process or
in a stand-alone concurrent statement creates a driver for that signal.
So, in the example you pointed to, B and C have conflicting drivers.

Another problem is that signal B appears in the sensitivity list of the
first process and also appears on the left-hand side of an assignment
statement in that process. This is also usually a no-no since the
feedback can cause endless loops in some cases. (Trust me, over the
past few months I have been solving some simulator hang problems in
somebody else's logic caused by process feedback.)

Charles Bailey

A

unread,
Dec 17, 2021, 1:47:13 PM12/17/21
to
Thanks Maurice. But the reason it worked for you is because I had changed the model (drive A first) to make it work. If you try it again, it'll show the behavior as I explained in my original post.

A

unread,
Dec 17, 2021, 1:50:14 PM12/17/21
to
Thanks Charles. Multiple drivers is a good point. I was aware of this but I wanted to see if the process would at least enter once, when 'B' changes. I think since 'A' drives B and since A is 'U' at time zero; when B goes to '0', the multiple drivers get resolved to 'U' and the sensitivity list does not see a change in 'B'. Confusing explanation but that's the only way I can see why the process does not trigger when 'B' changes at time 1ns. Thanks again.
0 new messages