The terminology for safe, unsafe, and endpoints is different in the context of Cross Domain Crossing (CDC) and inter-clock timing analysis.
In the context of CDC, an asynchronous crossing is safe when proper synchronization circuitry is used to prevent metastability. For example, a safe single-bit CDC can be implemented by a synchronizer, which is a chain of registers with same clock and control signals. A safe multi-bit CDC can be implemented with a MUX Hold circuitry or a Clock Enabled Controlled circuitry.
Conversely, an unsafe CDC is when the CDC analysis engine does not recognize a known safe synchronization circuit on an asynchronous CDC path.
The number of endpoints reported for CDC between two clock domains can be different than the number of endpoints reported by the timing analysis commands. For example, an asynchronous reset synchronizer involves multiple timing path endpoints. However, the synchronization circuitry is reported as a single element and therefore as a single CDC endpoint. Similarly, a multi-bit CDC contains multiple single bit crossings but is reported as a single CDC endpoint. However, the same bus is reported as multiple timing endpoints by other timing reports.
report_clock_interaction
and report_cdc
have different purposes, the number of endpoints reported by each command must not be compared. In the context of report_clock_interaction
, safe/unsafe refers to the ability for the timing analysis engine to provide a slack that matches the worst situation in hardware. For report_cdc
, safe/unsafe refers to the type of CDC circuitry implemented in the design.