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

Re: [oc] Re: Opencores Design Guidelines



Rudolf:

I need to get a look at the text you identified as confusing.

That's exactly my intent.

1) I am tired of gate-level simulation coming up all X's because
    some RTL flip-flop in an always block had a setup or hold
    violation, and that flop is ONLY THERE to remove metastability
    when signals cross from one clock domain to another (like the
    grey-code address wires from the write side of an async FIFO
    being watched in the read side.

2) I feel that it would be best to set constraints from these special
    sampling flops.  Specifically, the receive clock constraint will
    normally be a full clock period, but since these special flops
    will exhibit metastable behavior (inevitably) the designer has
    to ask synthesis to make there be extra slack between the
    sampling flop and the flops which use the resulting data.

3) I feel that the design is more testable if there are constraints
    between the SOURCE clock and the SAMPLING clock, even
    though these clocks are asynchronous.  I feel that it is important
    from a scan perspective to have the signal delay from the source
    to the destination flops be less that the period of the faster of
    those two clocks.  In test mode, the clocks will not be running
    asynchronously, and the constraint will make sure that the
    signal crosses the clock domain boundry in 1 clock.

So the thing I do is

1) Manually instantiate specially named flops for these special
    synchronization flops in the design.

2) Bring the synchronization clock to the top level, where it is
    connected to the receive clock source.  It is actually on the
    normal receive clock tree, because they are connected at the
    very top of the design.

3) By having a different named clock up to the top level, I hope
    that synthesis constraints can be written which specify constraints
    from Source to ynchronization clocked flops, and from Synchronization
    to Receive clocked flops.

I don't know how to write these constraints.  I think it would be good
to have example constraints files in an example of the use of this
synchronization flop technique.

Anyone know synopsys well enough to pop out an example?  3 clocks,
clock 1 having period A, clock 2 and 3 having period B, BUT tight
constraints between clock 1 and clock 2 as if they were the same
frequency, and tight constraints between clock 2 and clock 3?

Blue Beaver


----- Original Message -----
From: "Rudolf Usselmann" <rudi@asics.ws>
To: <cores@opencores.org>
Cc: "llbutcher" <llbutcher@veriomail.com>
Sent: Sunday, November 11, 2001 12:45 AM
Subject: Re: [oc] Re: Opencores Design Guidelines


>
> Damjan,
>
> the text looks good, EXCEPT for the synchronizer_flop reference.
>
> Let me explain why:
> 1) The synchronizer flop is a single RTL flop.
> 2) The intention, as I understand it, is to use this RTL model to
> replace synchronizer flops in a gate-level simulation to avoid
> unknown output when setup/hold timing is violated (which can
> occur during synchronization).
>
> I feel that this sync flop thingie is VERY confusing.
>
> Lawrence, perhaps you can clarify this somewhere and document
> what the real intention is, and warn people that a single flop will not
> do the job ...
>
> Thanks,
> rudi
>
> On Sunday 11 November 2001 10:31, you wrote:
> > Rudi,
> >
> > is this ok:
> >
> > Strong Recommendation: Signals that cross different clock domains
> > should be sampled twice in destination clock domains (double sampling is
> > a MUST). See synchronizer_flop in OpenCores CVS in module common.
> >
> > Prevents meta-stability state.
> >
> > To make netlist verification easier, you should use one module (i.e.
> > sync.v, sync.vhd) that will have in, out and clock interface and the
> > first flip-flop should
> > have a unique name as this flip-flop will have timing violation. If it
> > has unique
> > name, it is easier to trace it and "change" it to not pass X's.
> >
> > Also it should be clear that you pass ONLY the control signal and not
the
> > data
> > bus etc.
> > <<
> >
> > For the record, I did not write 3.3.1. If above is not ok, send me a
text
> > that you want to see as 3.3.1. The only thing I ask to refer to
> > synchronizer flop in the CVS.
> >
> > regards,
> > Damjan


--
To unsubscribe from cores mailing list please visit http://www.opencores.org/mailinglists.shtml