[SOLVED] Why don't 2 flip-flop synchronizers have a reset?

Status
Not open for further replies.

weetabixharry

Full Member level 4
Joined
Oct 9, 2013
Messages
232
Helped
69
Reputation
142
Reaction score
73
Trophy points
1,318
Location
Sweden
Activity points
3,463
I am not aware of any reason why a 2 flip-flop (or N flip-flop) synchronizer should not have a reset. However, almost every implementation I have ever seen has no reset.
  • Is there some problem/drawback with resetting a 2 flip-flop synchronizer?
  • Is the answer the same for both synchronous and asynchronous (i.e. asynchronous assert, synchronous de-assert) resets?


My Search Results:​

These are the VHDL/Verilog implementations I have found and none of them have resets:
A google image search also finds dozens of circuit diagrams without resets connected (or at least without them drawn).

The only implementation I have found with a reset is the System Verilog implementation on p. 47 of this article.
 


I don't think this is correct. The latest Intel "Design Practices" recommend the use of a standard asynchronous assert, synchronous de-assert reset. See this link:

These resets are asynchronously asserted and synchronously deasserted.

Intel call this "synchronized asynchronous reset". I call it "asynchronous reset" (but not "fully asynchronous reset", which is never used in a synchronous system).
 

yes true, that is extra functionality that will help reset if clock is not available
 

I hate to drag on further on this thread... but I find it useful to correct your wording.
I think you are only "correcting" what has been completely clear in the discussion. If not for all contributors, I apologize for causing confusion.

I consider synchronous reset what is designated sclr in the below logic element schematic and asynchronous what is designated aclr. As already discussed, aclr is typically used for initial reset and need to be released synchronous to the register clock to avoid undefined logic states.



Regarding the "wasting resources" discussion, there are apparently differences between vendors and FPGA families.
 

    andre_luis

    Points: 2
    Helpful Answer Positive Rating
Regarding the "wasting resources" discussion, there are apparently differences between vendors and FPGA families.
The diagram you showed looks in many ways extremely similar to Xilinx. If "LAB Wide" means "Slice Wide", then control signals are shared, just like in Xilinx slices.

Therefore, similar to Xilinx, I think a synchronous reset could be implemented in 2 ways: using SCLEAR, or by including the synchronous reset signal as another input to the 4-input LUT.

Therefore, I think efficient packing into slices may be possible in Intel if synchronous resets are used. This is not possible if asynchronous resets are used.

EDIT: For Intel, it sounds like there is a more significant performance penalty for the "MUX reset" method:

And they don't seem to mention any resource savings. (Although Intel documentation usually fails to mention almost everything, in my experience). So it's not clear if this is due to a problem in silicon, or in their build tools.

Source: Intel Recommended Design Practices: Use Synchronous Resets
 
Last edited:

When reset is released, you want the synchronizer output to be equal to the D input.
Otherwise there can be a "false" edge on the synchronizer output, that doesn't correspond to an input edge.
The simplest way to achieve this is to don't use reset for the synchronizer registers.
This means that the synchronizer starts working before reset is released, which is fine.
Nothing will be better by connecting the reset input.
 

I observe that "Real Digital People" have a nearly religious aversion
to asynchronous resets in general, and don't like the politics involved
in going against the state religion (as enforced by their Methodology
Harpies).

Whether there's any actual reason outside of tool incapability or
management not having your back, I couldn't guess.
 

An asynchronous reset occurring too close to the clock edge can cause the flip-flop output to go metastable. That’s a bad thing. It’s not religion or politics; it’s technology.

Signed,
The Real Digital People
 

An asynchronous reset occurring too close to the clock edge can cause the flip-flop output to go metastable.
Yes... I'm not sure how we got reduced to stating the obvious.

And that doesn't just apply to resets. Everything else in a synchronous system is synchronous for a very good reason. This isn't some agenda.

In the special case of a reset, in some cases, it is worth investing extra effort to deal with the disadvantages of an asynchronous reset in order to get access to its one major advantage: it can be asserted without its clock running. We can talk about other minor device-specific considerations, but that's it in a nutshell.
 

An asynchronous reset occurring too close to the clock edge can cause the flip-flop output to go metastable. That’s a bad thing. It’s not religion or politics; it’s technology.

Signed,
The Real Digital People

Similarly synchronous reset occurring too close to the clock edge can cause the flip-flop output to go metastable. This is because it is not synchronous except by name unless it arrives synced.

Too close needs be checked by timing tool. To do that it needs the incoming signal(call it sync or async) to be generated in a known way otherwise you get a false timing pass as the path is left unchecked.

It is up to you to connect it to FF port as you see best.

The notion of losing clock and so losing reset assertion may be valid but I can power cycle if my reset button fails. well if practical, or use reset bridge if it works-I am not sure.

compare: D input is pre-synced by launch register before arriving at latch. This same concept needs be applied to any incoming signal joining the fun around FF.
 

On another hand your test engineer will hate you if your outputs are non-deterministic by one or two clocks (as can be the case in your two stage non-initialized sync-as-pipeline).
 

From an outsider perspective, I think the original question could not be properly answered without knowing the exact application/need. There are general good practices which could be disregarded here or there to achieve specific objetives.
 

This thread is not getting any closer to answering my question.

I received a more focused answer to the same question here: link. I will close this thread by summarizing the answer I received there:
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…