12-01-2020 06:12 AM - edited 12-01-2020 06:15 AM
Hello,
I am working on applying timing constraints using the Timing Constraints Wizard. In my system, I have an ADC that feeds data to the FPGA. The ADC provides a "data ready" signal which the FPGA uses to clock in the data. From my understanding, I need to specify "source" in the Synchronous column of the wizard for these signals. The wizard provides two fields to fill in, "dv_bre" and "dv_are". How would I calculate these values? I have the trace delay values calculated from the PCB and the timing specifications of the ADC from its datasheet.
The way I understand it, my calculations are as follows:
dv_bre = amount of time data is valid before data ready - trace delay delta from data ready
dv_are = amount of time data is valid after data ready - trace delay delta from data ready
Does this make sense or I am I making a mistake?
Thank you.
12-02-2020 04:44 PM
The interface between your ADS5444 13-bit ADC and the FPGA is called Source-Synchronous Single Data Rate (SDR). The interface consists of:
For a 200MHz data clock, a general form of the constraints for this interface is:
create_clock -period 5.000 [get_ports DCLK_P]
set_input_delay -clock [get_clocks DCLK_P] -max td_max [get_ports {SDAT_P[*]}]
set_input_delay -clock [get_clocks DCLK_P] -min td_min [get_ports {SDAT_P[*]}]
...where I have used the wildcard (*) to make the set_input_delay constraints apply to all thirteen LVDS data lines. In the set_input_delay constraints, td_max and td_min can be written as follows:
td_max = tper - dv_bre + ddt_max
td_min = dv_are + ddt_min
where (in nanoseconds):
If the board traces that bring the data-clock from the ADC to the FPGA are roughly the same length as the board traces that bring the data lines from the ADC to the FPGA then you can accurately use ddt_max=ddt_min=0.
12-01-2020 05:31 PM - edited 12-01-2020 10:31 PM
Hi David,
Please provide a link to the datasheet for your ADC - and tell us which timing diagram in the datasheet describes how you want to communicate with the ADC.
Also, tell us how fast (Msps) you will be running the ADC.
Using the Timing Constraints Wizard is one way to write constraints for the ADC-to-FPGA interface. However, you can also type the constraints yourself into the Vivado .xdc file. Please take a look at the following post for an example of the constraints and architecture used to receive data from an ADC via a Source Synchronous DDR interface.
https://forums.xilinx.com/t5/FPGA-Configuration/ADC-LVDS-data-capture/m-p/1180927#M20504
Cheers,
Mark
12-02-2020 05:12 AM - edited 12-02-2020 05:19 AM
Thank you for your response.
https://www.ti.com/lit/gpn/ads5444-ep
We are running the ADC at 200 MHz which is being provided to the ADC from an external clock generator IC.
12-02-2020 04:44 PM
The interface between your ADS5444 13-bit ADC and the FPGA is called Source-Synchronous Single Data Rate (SDR). The interface consists of:
For a 200MHz data clock, a general form of the constraints for this interface is:
create_clock -period 5.000 [get_ports DCLK_P]
set_input_delay -clock [get_clocks DCLK_P] -max td_max [get_ports {SDAT_P[*]}]
set_input_delay -clock [get_clocks DCLK_P] -min td_min [get_ports {SDAT_P[*]}]
...where I have used the wildcard (*) to make the set_input_delay constraints apply to all thirteen LVDS data lines. In the set_input_delay constraints, td_max and td_min can be written as follows:
td_max = tper - dv_bre + ddt_max
td_min = dv_are + ddt_min
where (in nanoseconds):
If the board traces that bring the data-clock from the ADC to the FPGA are roughly the same length as the board traces that bring the data lines from the ADC to the FPGA then you can accurately use ddt_max=ddt_min=0.
12-02-2020 05:21 PM
12-03-2020 04:33 AM
One other question:
What would the effect be if to what you explained if the data clock (DRY) from the ADC is routed to non-clock capable pins?
Thank you
12-03-2020 05:32 AM
What would the effect be if to what you explained if the data clock (DRY) from the ADC is routed to non-clock capable pins?
The effects range from "bad" to "very bad" depending on the architecture you use in the FPGA to capture the data coming from the ADC. The "bad" being harder to pass timing analysis and the "very bad" being that the architecture can't be used because it requires the clock to come from a clock-capable pin.
This would be a good topic for another post, "Source Synchronous SDR Input without Clock-Capable Pin". If you start this other post, please again give ADC part#, FPGA part#, and interface clock speed (MHz).
12-03-2020 05:34 AM
Good to know. Thank you for the information. You've been extremely helpful.
12-05-2020 11:56 AM - edited 12-05-2020 11:57 AM
I am just reading Avrum's response to your other post, and he reminds me that one more constraint is needed for your source-synchronous SDR input interface. In particular, you need to specify the jitter of the interface clock using a constraint similar to the following:
set_input_jitter [get_clocks -of_objects [get_ports DCLK_P]] X.XX
In this constraint, X.XX, is the jitter. Xilinx documentation is not clear on the units for jitter, although it seems to be Peak-to-Peak jitter in nanoseconds, which is approximately 14 times the RMS jitter in nanoseconds.
Finally, sometimes we send the interface clock to an MMCM and then use the clock output of the MMCM to capture the data from the interface. If you are doing this, then it is the MMCM itself that mostly determines the jitter of the capture clock - and the value that we specify using the set_input_jitter constraint typically has only a small effect.