Electronic – FPGA input synchronisation

fpgavhdl

I have a basic question for advanced FPGA developers: Do I need to use special synchronisation code for FPGA inputs?

I mean, the input will be checked in a synchronous process. Outside of the FPGA, input signals can change at any time (freq is much lower than the clock of the FPGA). Does the FPGA have some special input implementation which considers this (I am using Microsemi Proasic3) ?

If a special treatment is necessary, how should I do it?

Best Answer

One common technique to ward against potential metastability issues, which can result in cases like this, is to double register your inputs. Like this:

double register credit: Altera whitepaper

Metastability is a phenomenon that can cause system failure in digital devices, including FPGAs, when a signal is transferred between circuitry in unrelated or asynchronous clock domains. This paper describes metastability in FPGAs, explains why the phenomenon occurs, and discusses how it can cause design failures. The calculated mean time between failures (MTBF) due to metastability indicates whether designers should take steps to reduce the chance of such failures. This paper explains how MTBF is calculated from various design and device parameters, and how both FPGA vendors and designers can increase the MTBF. System reliability can be improved by reducing the chance of metastability failures with design techniques and optimizations.