Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Clock Edge notation

Reply
Thread Tools

Clock Edge notation

 
 
ALuPin
Guest
Posts: n/a
 
      09-29-2004
Hi,

I have a question concerning the following phenomenon:

I have a signal which is registered by the following way:


entity xy is
port (...
DQS : inout std_logic_vector(15 downto 0);
);
end xy;

architecture zy of xy is
signal l_input_cell : std_logic_vector(15 downto 0);
begin

process(Reset, Clk)
begin
if Reset='1' then
l_input_cell <= (others => '0');
elsif rising_edge(Clk) then
l_input_cell <= DQS;
end if;
end process;
end zy;

When I simulated the design (I had changed a different design to my
own
VHDL style) I got different simulation results (functional simulation
Modelsim) with respect to the signal "l_input_cell".

Then I changed "rising_edge(Clk)" back to "Clk'event and Clk='1'" and
I got the same result as in the original design.

So why is there a difference at all?
Does the use of an INOUT port play any role ?

I would appreciate your help.

Kind regards

André
 
Reply With Quote
 
 
 
 
Allan Herriman
Guest
Posts: n/a
 
      09-29-2004
On 29 Sep 2004 07:06:36 -0700, (ALuPin) wrote:

[snip]
>Then I changed "rising_edge(Clk)" back to "Clk'event and Clk='1'" and
>I got the same result as in the original design.
>
>So why is there a difference at all?


http://groups.google.com/groups?selm...ws.agilent.com

Regards,
Allan
 
Reply With Quote
 
 
 
 
Jim Lewis
Guest
Posts: n/a
 
      09-29-2004
ALuPin,
First read Allan's post.

Bottom line, if Clk is doing a normal 0-1 transition,
these two are equivalent. Highlighting the differences:
rising_edge(Clk) finds 0-1, L-1, 0-H, L-H transitions of Clk
clk='1' and Clk'event finds all changes except 1-1.

If your problem only occurs at time 0, you have run into a
well known issue that is easy to avoid. See below.
If this happens at times other than time 0, the clock
net is misbehaving and it probably needs to be fixed.
I would not consider an X-1 transition of clock a valid
functional clock.

From a different point of view, how are you deciding
that your designs are different? If you mask out
things that occur before reset is applied, are they
the same?


Avoiding time 0 Problems
--------------------------
To avoid time 0 problems, I start clock at the inactive
edge and I initialize it:

signal Clk : std_logic := '0' ;
.. . .

Clk <= not Clk after tperiod_Clk/2 ;

-- or --

process begin
Clk <= '0' ;
wait for tperiod_Clk/2 ;
Clk <= '1' ;
wait for tperiod_Clk/2 ;
end process ;


Use the form that matches your current clock driving methodology.
Although I recommend the first form for new projects, I do
not recommend switching after you have built and run testbenches
because differences in execution of testbenches that can result.
To illuminate this, consider the code below (note Sel is driven
only so you can see the differences in the two clock setups).

Sel <= '0' after tpd ; -- where tpd << tperiod_Clk
wait for 10 * tperiod_Clk ; --
wait until Clk = '1' ; -- align with clock
Sel <= '1' after tpd ;

Simulation differences here are due to differences in
delta cycle setup time of the clocks above.

Long term, when using wait for that is a function of
your clock period, I using the following:

wait for 10*tperiod_Clk - tpd ;
wait until Clk = '1' ;


Cheers,
Jim
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
Jim Lewis
Director of Training private.php?do=newpm&u=
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~


> Hi,
>
> I have a question concerning the following phenomenon:
>
> I have a signal which is registered by the following way:
>
>
> entity xy is
> port (...
> DQS : inout std_logic_vector(15 downto 0);
> );
> end xy;
>
> architecture zy of xy is
> signal l_input_cell : std_logic_vector(15 downto 0);
> begin
>
> process(Reset, Clk)
> begin
> if Reset='1' then
> l_input_cell <= (others => '0');
> elsif rising_edge(Clk) then
> l_input_cell <= DQS;
> end if;
> end process;
> end zy;
>
> When I simulated the design (I had changed a different design to my
> own
> VHDL style) I got different simulation results (functional simulation
> Modelsim) with respect to the signal "l_input_cell".
>
> Then I changed "rising_edge(Clk)" back to "Clk'event and Clk='1'" and
> I got the same result as in the original design.
>
> So why is there a difference at all?
> Does the use of an INOUT port play any role ?
>
> I would appreciate your help.
>
> Kind regards
>
> André

 
Reply With Quote
 
rickman
Guest
Posts: n/a
 
      09-29-2004
ALuPin wrote:
>
> Hi,
>
> I have a question concerning the following phenomenon:
>
> I have a signal which is registered by the following way:
>
> entity xy is
> port (...
> DQS : inout std_logic_vector(15 downto 0);
> );
> end xy;
>
> architecture zy of xy is
> signal l_input_cell : std_logic_vector(15 downto 0);
> begin
>
> process(Reset, Clk)
> begin
> if Reset='1' then
> l_input_cell <= (others => '0');
> elsif rising_edge(Clk) then
> l_input_cell <= DQS;
> end if;
> end process;
> end zy;
>
> When I simulated the design (I had changed a different design to my
> own
> VHDL style) I got different simulation results (functional simulation
> Modelsim) with respect to the signal "l_input_cell".
>
> Then I changed "rising_edge(Clk)" back to "Clk'event and Clk='1'" and
> I got the same result as in the original design.
>
> So why is there a difference at all?
> Does the use of an INOUT port play any role ?


I can't say that the INOUT port would make a difference since you never
assign a value to DQS. But there is a difference between the two clock
edge descriptions. I don't recall how "rising_edge()" is defined, but
it is not the same as "Clk'event and Clk='1'". Even so, I would not
expect a difference in how the two operate unless CLK has values other
than '1' and '0'.

I belive "Clk'event and Clk='1'" will detect a transistion from *any*
value to '1' as a valid clock edge, while "rising_edge(Clk)" requires
the previous state to be '0' or possibly 'L'. Does you simulation allow
Clk to be undefined with a 'Z', 'U' or 'X'?


--

Rick "rickman" Collins


Ignore the reply address. To email me use the above address with the XY
removed.

Arius - A Signal Processing Solutions Company
Specializing in DSP and FPGA design URL http://www.arius.com
4 King Ave 301-682-7772 Voice
Frederick, MD 21701-3110 301-682-7666 FAX
 
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
Lenovo ThinkPad EDGE 13: Bleeding Edge Ian Front Page News 0 02-28-2011 10:18 AM
using both rising edge and falling edge of signal denish VHDL 5 11-17-2008 07:12 PM
Hungarian Notation Vs. Pascal Notation? Grey Squirrel ASP .Net 6 03-21-2007 09:42 AM
What is the best way to clock data in on one clock edge and out on another? simon.stockton@baesystems.com VHDL 4 04-26-2006 11:36 PM
Boost.graph - changing edge end-points or copying an edge Ferdi Smit C++ 0 10-10-2005 04:30 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57