Edge detector - vhdl

This is a discussion on Edge detector - vhdl ; Hi, I am trying to build a edge detector circuit. I did the following Tag_1 <= Tag AND ( NOT ( Tag) ) ; But its not working. I guess because of zero propagation delay of the AND gate. I ...

+ Reply to Thread
Results 1 to 6 of 6

Edge detector

  1. Default Edge detector

    Hi,

    I am trying to build a edge detector circuit. I did the following

    Tag_1 <= Tag AND ( NOT ( Tag) ) ;

    But its not working. I guess because of zero propagation delay of the
    AND gate. I am using Spartan chip XC3S1000. Can anybody advice!

    John


  2. Default Re: Edge detector

    On 2 May 2007 08:44:30 -0700, john
    <conphiloso@hotmail.com> wrote:

    >I am trying to build a edge detector circuit. I did the following
    >
    >Tag_1 <= Tag AND ( NOT ( Tag) ) ;
    >
    >But its not working. I guess because of zero propagation delay of the
    >AND gate. I am using Spartan chip XC3S1000. Can anybody advice!


    Yes, most certainly.... DON'T TRY TO DO IT LIKE THAT.

    Reason 1:
    ~~~~~~~~~
    Consider what would happen if you were to get such a piece
    of hardware working in the way you imagine it. The output
    pulse would be approximately the same width as the NOT
    operator's propagation delay. This is similar to the
    propagation delay of everything else in your circuit,
    and also similar to the RC time constant of typical
    gate-to-gate wiring. Your pulse will be so narrow that
    it is highly likely to disappear as it moves around
    the device, and in any case it will be too narrow to
    trigger any other logic reliably.

    Reason 2:
    ~~~~~~~~~
    The expression (Tag AND NOT Tag) is a simple function of
    one input that can trivially be shown to be zero. Synthesis
    will rather reliably turn it into a constant '0'.

    Reason 3:
    ~~~~~~~~~
    Why do you want to detect asynchronous edges on Tag? In
    safe synchronous design methodology, the ONLY thing you ever
    do with an asynchronous edge is use it to clock a flip-flop.


    Re-work your design to resynchronise Tag to your clock and
    then detect 0->1 transitions on it synchronously.
    --
    Jonathan Bromley, Consultant

    DOULOS - Developing Design Know-how
    VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

    Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
    jonathan.bromley@MYCOMPANY.com
    http://www.MYCOMPANY.com

    The contents of this message may contain personal views which
    are not the views of Doulos Ltd., unless specifically stated.

  3. Default Re: Edge detector

    john wrote:

    > I am trying to build a edge detector circuit. I did the following
    >
    > Tag_1 <= Tag AND ( NOT ( Tag) ) ;
    >
    > But its not working. I guess because of zero propagation delay of the
    > AND gate. I am using Spartan chip XC3S1000. Can anybody advice!


    I always start with a synchronous process.
    To create an edge detector, I would
    declare an appropriate variable and
    update it every clock edge with
    a procedure like this

    rising
    (arg_in => retime_v.f3, -- USE the variable retime_v.f3
    update => rising_v -- UPDATE the variable rising_v
    );

    See the source for details:
    "Rising Level Counter"
    http://home.comcast.net/~mike_treseler/

    -- Mike Treseler

  4. Default Re: Edge detector

    On May 2, 8:44 pm, john <conphil...@hotmail.com> wrote:
    > Hi,
    >
    > I am trying to build a edge detector circuit. I did the following
    >
    > Tag_1 <= Tag AND ( NOT ( Tag) ) ;
    >
    > But its not working. I guess because of zero propagation delay of the
    > AND gate. I am using Spartan chip XC3S1000. Can anybody advice!
    >
    > John


    Try this...

    process(clk, reset)
    begin
    if reset='1' then
    inp_dly <= '0';
    elsif rising_edge(clk) then
    inp_dly <= inp;
    end if;
    end process;

    inp_in_fall <= (not inp) and inp_dly; // input falling edge detection
    inp_in_rise <= inp and (not inp_dly); // input rising edge detection

    Regards,
    JK


  5. Default Re: Edge detector

    JK wrote:
    > On May 2, 8:44 pm, john <conphil...@hotmail.com> wrote:
    >> Hi,
    >>
    >> I am trying to build a edge detector circuit. I did the following
    >>
    >> Tag_1 <= Tag AND ( NOT ( Tag) ) ;
    >>
    >> But its not working. I guess because of zero propagation delay of the
    >> AND gate. I am using Spartan chip XC3S1000. Can anybody advice!
    >>
    >> John

    >
    > Try this...
    >
    > process(clk, reset)
    > begin
    > if reset='1' then
    > inp_dly <= '0';
    > elsif rising_edge(clk) then
    > inp_dly <= inp;
    > end if;
    > end process;
    >
    > inp_in_fall <= (not inp) and inp_dly; // input falling edge detection
    > inp_in_rise <= inp and (not inp_dly); // input rising edge detection
    >
    > Regards,
    > JK
    >


    Just a comment....
    If the source of the input signal "inp" is not synchronous to your clock
    you should add some extra registers in front of it to avoid metastable
    conditions in your registers.

  6. Default Re: Edge detector

    On May 3, 8:21 pm, Magne <magnem...@yahoo.no> wrote:
    > JK wrote:
    > > On May 2, 8:44 pm, john <conphil...@hotmail.com> wrote:
    > >> Hi,

    >
    > >> I am trying to build a edge detector circuit. I did the following

    >
    > >> Tag_1 <= Tag AND ( NOT ( Tag) ) ;

    >
    > >> But its not working. I guess because of zero propagation delay of the
    > >> AND gate. I am using Spartan chip XC3S1000. Can anybody advice!

    >
    > >> John

    >
    > > Try this...

    >
    > > process(clk, reset)
    > > begin
    > > if reset='1' then
    > > inp_dly <= '0';
    > > elsif rising_edge(clk) then
    > > inp_dly <= inp;
    > > end if;
    > > end process;

    >
    > > inp_in_fall <= (not inp) and inp_dly; // input falling edge detection
    > > inp_in_rise <= inp and (not inp_dly); // input rising edge detection

    >
    > > Regards,
    > > JK

    >
    > Just a comment....
    > If the source of the input signal "inp" is not synchronous to your clock
    > you should add some extra registers in front of it to avoid metastable
    > conditions in your registers.- Hide quoted text -
    >
    > - Show quoted text -


    Yes, sorry I forgot to include this point. inp should be a
    synchronized signal. A simple Dual-flop synchronizer is enough.

    Regards,
    JK


+ Reply to Thread

Similar Threads

  1. 3 bit message detector
    By Application Development in forum verilog
    Replies: 2
    Last Post: 04-09-2007, 10:27 PM
  2. Clarification on this edge-edge intersection formula.
    By Application Development in forum Graphics
    Replies: 3
    Last Post: 12-11-2006, 08:54 AM
  3. Layers X position from grid edge instead of page edge?
    By Application Development in forum Adobe Tools
    Replies: 0
    Last Post: 11-20-2006, 06:38 PM
  4. lie detector
    By Application Development in forum Software-Testing
    Replies: 0
    Last Post: 10-21-2006, 04:44 PM
  5. lie detector
    By Application Development in forum Software-Eng
    Replies: 0
    Last Post: 10-21-2006, 04:41 PM