Before running Spyglass CDC flow, we need to provide some inputs to Spyglass. One of the most important inputs is SGDC constraints. Usually, in SGDC constraints, designers are required to specify:

  1. Current design, to limit the scope of CDC check
  2. List of source clocks and generated clocks
  3. List of valid abstract port / input constraints. Designers can derive these constraints from SDC such as “set_input_delay
  4. List of valid output constraints. Designers can derive these constraints from SDC such as “set_output_delay
  5. List of valid clock groups constraints. Designers can derive these constraints from SDC such as “set_clock_group”. Unlike STA, CDC flow by default assumes all clocks are asynchronous to each other, and it will attempt perform CDC check against all clock pairs. Designers shall use “set_clock_groups” to specify which clock pair is synchronous, thus CDC check is not required for such clock pair.

In RDC flow, designers need to specify a list of resets. Although CDC does not need to know reset information, it is a good idea to make it part of SGDC, since CDC and RDC are just different “goals” for Spyglass CDC.

The following example shows how to specify the required SGDC constraints:

There are some optional SGDC constraints that designers can specify. These include:

  1. List of qualifiers: for CDC synchronization schemes that cannot be recognized by Spyglass CDC, user can use “qualifier -name” to specify them
  2. List of valid clock_sense constraint generated from set_clock_sense command
  3. List of valid cdc false path constraint
  4. List of set_case_analysis. “set_case_analysis” deterministically propagates through both sequential and combo logic
  5. List of quasi_static. “quasi_static” will not propagate beyond sequential elements and pure black boxes; it will propagate through combo logic only happens if logic reduces to buffer/inverter

As a rule of thumb, designers should limit the use of “set_case_analysis” and “quasi_static”, since they may “filter out” real CDC violations. In addition, “set_case_analysis” introduces CDC modes, and it may lead to longer runtime and more iterations.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.