Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
13 years ago

State A => State B multicycle path?

Is there a way to tell TimeQuest that all signals launched by State A and captured by State B are part of a multi-cycle path? My combinational path delay is too large so i'm adding a timer to delay my FSM state transition by one extra cycle. Previously, I have been using the SDC per below but I wonder if there is a way to tell TimeQuest that any signals travelling between the launch and latch FF's are multicycle?

set_multicycle_path -setup -end -from [get_keepers {main_controller:main_controller_inst|reg_rx_regs_offset[*]}] -to [get_keepers {tx_tlp_buffer:tx_tlp_buffer_inst|mem[*][*]}] 2

set_multicycle_path -hold -end -from [get_keepers {main_controller:main_controller_inst|reg_rx_regs_offset[*]}] -to [get_keepers {tx_tlp_buffer:tx_tlp_buffer_inst|mem[*][*]}] 2

Thanks

23 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    My point is that the statement in bold doesn't apply. The reason is that downstream combinational logic will block the metastable signal from reaching the next register. Only at T2 will the combination logic let the Latch_FF.Q signal through to the next register. At T2 the Latch_FF.Q will not be metastable.

    --- Quote End ---

    I think you got confused on something basic.

    This may be simpler to understand if, instead we assume Latch_FF will go metastable at T1, we simply assume the delay is so long that it totally overshoots the tSU/tH window at T1 and Latch_FF simply latches the old value.

    At the T2 clock edge, two things happen at the same time:

    - Latch_FF latches the value at it's input prior to the clock edge

    - Downstream_FF latches the value at it's input prior to the clock edge.

    So, after T2 clock edge, Latch_FF will (most likely) have a correct value.

    But what Downstream_FF will be latching at the T2 clock edge is based on what Latch_FF had prior to the clock edge -- a bad value.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    So, after T2 clock edge, Latch_FF will (most likely) have a correct value.

    But what Downstream_FF will be latching at the T2 clock edge is based on what Latch_FF had prior to the clock edge -- a bad value.

    --- Quote End ---

    But if the output of Latch_FF isn't considered to be 'valid' until T2 then

    the Downstream_FF won't be 'using' this value until T3 at which point it

    will be a solid '1' or '0'.

    ?

    I think I'd rather find a work around to this but think that what the OP says is true (with the caveat about registering the correct output at T2).

    Nial.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    But if the output of Latch_FF isn't considered to be 'valid' until T2 then

    the Downstream_FF won't be 'using' this value until T3 at which point it

    will be a solid '1' or '0'.

    --- Quote End ---

    It is very unsafe design to violate register timing and then wait until it recovers. A register may not end up in the right state if it is violated.

    This practice is unavoidable across clk domain transfers (but two synchroniser stages are needed in this case)