7459 - Radiant: How do -start and -end work for -hold on multicycle constraints?

7459 - Radiant: How do -start and -end work for -hold on multicycle constraints?

For a multicycle constraint, -start and -end indicate to which clock (launch or capture clock) the constraint is referenced. Below is an example:

Setting up the Example:

Let's say we have a path from register coutr1_reg[5] to register coutr2_0io[4]. coutr1_reg[5] is clocked by clk1 which is at 20MHz, while coutr2_0io[4] is clocked by at 40MHz.
 
By default, the tool will try to find the worst-case setup check and worst-case hold check for Timing Analysis. As we know, the setup check is done on the next clock edge (or 1 clock period) of the capture clock, while the hold check is done on the same capture edge of the launch edge. In this case, the setup check (RED ARROW) and hold check (GREEN ARROW) are shown. 




Let’s say that the Capture register Samples the data at the 5th Rising edge of the Capture clock (40MHz). We then move the setup check at the 5th rising edge using the constraint below. For setup, by default its multicycle constraint is referenced to the Capture clock (40MHz) since we have defined 4 then the setup check (red arrowhead) will be moved 4 clock cycles from the first edge of the capture clock. The Blue arrow indicates that the distance between the arrowheads is 4 clock cycles:



Since we have only defined for -setup, by default, the Hold check will move with the setup check, where it is 1 clock period before the setup check (as shown in the green arrow).


Usage of -start / -end for -hold:
Now that the example is set up, see what the -start, and -end does for the -hold constraint. 
 
For the example above, we might need to relax our hold to its original hold check which is at the first clock edge. By default, the -hold references its multicycle constraint on the Launch Clock (in contrast with the -setup which where its referenced to the Capture clock). Since we wanted to relax the hold by moving its hold check to its original (at first clock edge of the Capture clock), we then used -end for the multicycle constraint to reference to the Capture clock instead of the Launch clock. In this case, we have defined 3 clock cycles, hence we then move the hold check (the green arrowhead) 3 clock cycles before the initial hold check. The blue arrow indicates the 3 clock cycles and the movement of the hold check from the 4th clock edge to the 1st clock edge. 



Now let's say instead of using -end, we then use -start. Hence the reference is at the launch clock,  instead of moving the green arrowhead, we then move the green arrow endpoint. Since we have defined 1 as the multiplier, we are indicating that the hold check at Launch is 1 clock cycle after the first edge of the Launch clock. As shown below:



In summary and shortest terms, -start and -end indicate from which the setup and hold check will move. The -start indicates that you will move the launch clock edge of the hold check based on your multiplier (seen as the arrow endpoint), while the -end simply indicates that you will move the capture clock edge of the hold check based on your multiplier (seen as the arrowhead). 
 
Note what is meant by the following: 
- Arrow Head  in Blue Circle
- Arrow Endpoint in Orange Circle.



Some additional points (if you look into the timing analyzer):
Each waveform shown above basically signifies its Setup/Hold constraint:
1) 25ns for setup, since the setup check is 25ns from launch to capture clock (represented by the blue arrow is 25 ns). While 0ns for Hold since the hold check is done at the same clock edge as seen in the green arrow.

2) 100ns for setup, since the setup check is 100ns from launch to capture clock (represented by the blue arrow is 100 ns). While 75 ns for Hold since the hold check is done 75 ns from launch to capture (represented by a gray arrow).


3) 100ns for setup, since the setup check is 100ns from launch to capture clock (represented by the blue arrow is 100 ns). While 0ns for Hold since the hold check is done at the same clock edge as seen in the green arrow.


4) 100ns for setup, since the setup check is 100ns from launch to capture clock (represented by the blue arrow is 100 ns). While 25 ns for Hold since the hold check is done 25 ns from launch to capture (represented by a gray arrow).