2
\$\begingroup\$

I have a reset bridge in VHDL which is based on a multi-FF synchronizer chain as depicted below. This reset bridge is used in various instances throughout my design. I want to properly constrain the path to the asynchronous clear port.

Reset synchronizer

Constraint:

set_max_delay -to [get_pins -hierarchical *i_reset_bridge*|s_rst_sync_FF[*]|ACLR] 10.000

Quartus tells me that it cannot find any matching pins:

Argument <to> is an empty collection

Any hint on how to get my sdc running?

\$\endgroup\$
8
  • \$\begingroup\$ This will be FPGA and tool dependent. \$\endgroup\$ Apr 6 at 14:07
  • \$\begingroup\$ Intel MAX 10, Quartus Prime 18.1 \$\endgroup\$
    – Juergen
    Apr 6 at 14:09
  • \$\begingroup\$ This reset bridge synchronises only the de-assertion of the async reset, the reset-assertion to your design is still asynchronous. Is your design using a global asynchronous reset? Just to confirm your intent. \$\endgroup\$
    – Mitu Raj
    Apr 6 at 18:46
  • 1
    \$\begingroup\$ @MituRaj Yes, assertion can cause metastability. But the reset pulse is stretched by the reset bridge to allow enough time for the metastability to settle. \$\endgroup\$
    – Juergen
    Apr 7 at 6:54
  • 1
    \$\begingroup\$ Something like: set_max_delay -from [get_cells flopA] -to [get_cells flopB] 2 ; you will get the full hierarchial name of flopA and flopB from schematic/netlist. \$\endgroup\$
    – Mitu Raj
    Apr 7 at 10:27
3
\$\begingroup\$

My constraints now look like this:

set_max_delay -to [get_pins -nocase -hierarchical s_rst_sync_ff[*]|CLRN] 10.000
set_max_delay -from [get_cells -nocase -hierarchical s_rst_sync_ff[*]] -to [get_cells -nocase -hierarchical s_rst_sync_ff[*]] 2.500

Besides, I enabled synchronizer identification in the Quartus qsf file:

set_global_assignment -name SYNCHRONIZER_IDENTIFICATION "FORCED IF ASYNCHRONOUS"

With these settings, the design meets timing and all synchronizer flops are placed close together.

\$\endgroup\$
5
  • \$\begingroup\$ The first statement is not actually needed on CLRN, as an asynchronous assertion doesn't need to be constrained on sdc, only de-assertion by the synchronizer has to be. By the way, Is" s_rst_sync_ff" the name of the synchronizer module instance? What's the need of -nocase/hierarchial? Just wondering. \$\endgroup\$
    – Mitu Raj
    Apr 7 at 10:38
  • 1
    \$\begingroup\$ @MituRaj The VHDL signal s_rst_sync_ff is a std_logic_vector based shift register. It's the synchronizer flop chain. \$\endgroup\$
    – Juergen
    Apr 7 at 10:41
  • 1
    \$\begingroup\$ @MituRaj hierarchical is needed because I have multiple instances of the reset bridge in different module at different hierarchy levels in my design. nocase could be omitted I guess. \$\endgroup\$
    – Juergen
    Apr 7 at 10:42
  • \$\begingroup\$ Cheers mate ... \$\endgroup\$
    – Mitu Raj
    Apr 7 at 10:42
  • 1
    \$\begingroup\$ @MituRaj thx a lot! \$\endgroup\$
    – Juergen
    Apr 7 at 10:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.