Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Why is the last value used to detect the rising edge

Reply
Thread Tools

Why is the last value used to detect the rising edge

 
 
fl
Guest
Posts: n/a
 
      09-04-2008
Hi,
I see the following in a VHDL book and some web tutorial. It is used
to detect clk rising edge.
-----------------
if clk'event and clk'value='1' and clk'last_value='0'
then ...
-- to detect setup time
------------------
I think if clk'event(true) and clk'value='1', then clk'last_value will
be '0' unconditionally. That is, "clk'last_value='0'" is redundant. Is
it?








My question is a lot of process only uses the following to write clk
rising edge:


process (clk)
begin
if clk'event and clk='1'

end process;

I am confused with the above two usage.
Could you explain it for me? Thanks a lot.
 
Reply With Quote
 
 
 
 
kennheinrich@sympatico.ca
Guest
Posts: n/a
 
      09-04-2008
On Sep 3, 8:43 pm, fl <(E-Mail Removed)> wrote:
> Hi,
> I see the following in a VHDL book and some web tutorial. It is used
> to detect clk rising edge.
> -----------------
> if clk'event and clk'value='1' and clk'last_value='0'
> then ...
> -- to detect setup time
> ------------------
> I think if clk'event(true) and clk'value='1', then clk'last_value will
> be '0' unconditionally. That is, "clk'last_value='0'" is redundant. Is
> it?
>
> My question is a lot of process only uses the following to write clk
> rising edge:
>
> process (clk)
> begin
> if clk'event and clk='1'
>
> end process;
>
> I am confused with the above two usage.
> Could you explain it for me? Thanks a lot.


Redundant? It depends on what the type of the clk signal is. If it's a
std_logic, then the check for '0' is *not* redundant. A signal of
type std_logic can have nine different values ('X', '0', '1', 'L',
'H', 'Z', etc). The check for '0' will, in simulation at least, cause
the code inside the "if" statement only to run on a clean 0-to-1
transition. It would be ignored on, for example, an 'X' to '1'
transition. On the other hand, if the signal is of type "bit", which
only has values '0' and '1', then it *is* redundant.

In a more practical sense, though, synthesizers (as opposed to
simulators) will treat the second form (clk'event and clk='1') as a
shorthand for referring to the regular rising edge clock of a real
hardware flip-flop, and ignore any nuances about nine-level
enumerations. For synthesis, I'd think of the clk'last_value='0' term
as redundant, and possibly even confusing to a dumber synthesizer.

- Kenn
 
Reply With Quote
 
 
 
 
Peter
Guest
Posts: n/a
 
      09-04-2008
On 4 Sep, 02:43, fl <(E-Mail Removed)> wrote:
> Hi,
> I see the following in a VHDL book and some web tutorial. It is used
> to detect clk rising edge.
> -----------------
> if clk'event and clk'value='1' and clk'last_value='0'
> then ...
> -- to detect setup time
> ------------------
> I think if clk'event(true) and clk'value='1', then clk'last_value will
> be '0' unconditionally. That is, "clk'last_value='0'" is redundant. Is
> it?
>
> My question is a lot of process only uses the following to write clk
> rising edge:
>
> process (clk)
> begin
> if clk'event and clk='1'
>
> end process;
>
> I am confused with the above two usage.
> Could you explain it for me? Thanks a lot.


Use rising_edge(clk) instead.

/Peter
 
Reply With Quote
 
LittleAlex
Guest
Posts: n/a
 
      09-04-2008
On Sep 3, 5:43*pm, fl <(E-Mail Removed)> wrote:
> I think if clk'event(true) and clk'value='1', then clk'last_value will
> be '0' unconditionally. That is, "clk'last_value='0'" is redundant. Is
> it?


No. The 1st clock will have clk'last_value='U'.

There is probably some initialization that needs to occur.

Alex

 
Reply With Quote
 
Andy
Guest
Posts: n/a
 
      09-04-2008
On Sep 3, 7:43*pm, fl <(E-Mail Removed)> wrote:
> I see the following in a VHDL book and some web tutorial.


Unfortunately there are a ton of books and tutorials that still use
archaic means of detecting the rising or falling edge of clocks. It
was only 15 years ago that standard functions rising_edge() and
falling_edge() were incorporated into the IEEE standard... These
functions correctly detect transitions to and from L and H also.

If, on the other hand, your example uses type bit/bit_vector, I don't
think these functions are defined for that data type, and the check
for last_value='0' is completely redundant.

Andy
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
using both rising edge and falling edge of signal denish VHDL 5 11-17-2008 07:12 PM
Are actions permitted on rising *and* falling edge of clock? Anon Anon VHDL 2 05-25-2007 01:00 PM
findcontrol("PlaceHolderPrice") why why why why why why why why why why why Mr. SweatyFinger ASP .Net 2 12-02-2006 03:46 PM
Rising, falling edge ALuPin VHDL 0 04-21-2005 11:26 AM
Rising edge of the clock john VHDL 9 11-29-2004 11:52 PM



Advertisments