Forum Discussion
PHYLite LVDS input
Hi,
Which path are you getting the negative slack? The constraints are specified only for the periphery clock and the data and they seems to be fine to me. You can also try the system level constraints as specified in AN 433, https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/an/an433.pdf#page=44
How about the core logic constraints? Request you to analyze the path of negative slack in more detail.
PHYLite IP is mostly meant of DDR memory interface type applications. It does not support LVDS IO standard.
Regards
Hi Ash_R,
there is almost no logic yet, just a LED driver to make the input used (not optimized out).
The code is below.
ADC clock (DCO_p/DCO_n) is first fed into IOPLL (source-synchrounous compensation mode, +700 ps phase shift, 250 MHz in, 250 MHz out) and then driven to GPIO IP instance (data bits are in DATA_X_p/DATA_X_n).
Attached are reports for the "Slow 100C" corner, same pin (DATA_10). "Slow -40C" is worse (-0.702 Setup, -0.435 Hold), Fast corners are better.
<code>
///////////////////
// ADC input
wire [23:0] adcRaw;
wire adcLocked;
wire adcClock;
wire adcRawValid;
adc_pll adcClockPll (
.locked(adcLocked), // locked.export
.outclk_0(adcClock), // outclk0.clk
.refclk(DCO_p), // refclk.clk
.rst(~startUpReset_n) // reset.reset
);
adc_gpio adcInput (
.ck(adcClock), // ck.export
.dout(adcRaw), // dout.export
.pad_in({
DATA_p_0, DATA_p_1, DATA_p_2, DATA_p_3,
DATA_p_4, DATA_p_5, DATA_p_6, DATA_p_7,
DATA_p_8, DATA_p_9, DATA_p_10, DATA_p_11
}), // pad_in.export
.pad_in_b({
DATA_n_0, DATA_n_1, DATA_n_2, DATA_n_3,
DATA_n_4, DATA_n_5, DATA_n_6, DATA_n_7,
DATA_n_8, DATA_n_9, DATA_n_10, DATA_n_11
}) // pad_in_b.export
);
assign adcRawValid = adcLocked;
assign FPGA_LED1 = (adcRaw > 24'hFF00FF); // Make ADC data used (prevent optimizing-out)
</code>
Related pin-out:
<code>
#######################3
## BANK 2A
set_location_assignment PIN_Y1 -to DATA_n_6
set_location_assignment PIN_Y2 -to DATA_p_6
set_location_assignment PIN_Y6 -to DATA_n_3
set_location_assignment PIN_Y7 -to DATA_p_3
set_location_assignment PIN_AA7 -to DATA_n_1
set_location_assignment PIN_AA8 -to DATA_p_1
set_location_assignment PIN_V8 -to DATA_n_7
set_location_assignment PIN_U8 -to DATA_p_7
set_location_assignment PIN_AB1 -to DATA_n_4
set_location_assignment PIN_AA1 -to DATA_p_4
set_location_assignment PIN_V2 -to DATA_n_11
set_location_assignment PIN_W2 -to DATA_p_11
set_location_assignment PIN_T1 -to DATA_n_10
set_location_assignment PIN_R1 -to DATA_p_10
# set_location_assignment PIN_V1 -to DCO_n
set_location_assignment PIN_U1 -to DCO_p
set_location_assignment PIN_V3 -to DATA_n_9
set_location_assignment PIN_U3 -to DATA_p_9
set_location_assignment PIN_AA4 -to DATA_n_5
set_location_assignment PIN_AB3 -to DATA_p_5
set_location_assignment PIN_W3 -to DATA_n_8
set_location_assignment PIN_W4 -to DATA_p_8
set_location_assignment PIN_AB4 -to DATA_n_2
set_location_assignment PIN_AB5 -to DATA_p_2
set_location_assignment PIN_AB9 -to DATA_n_0
set_location_assignment PIN_AB8 -to DATA_p_0
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_0 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_0 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_1 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_1 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_2 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_2 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_3 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_3 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_4 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_4 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_5 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_5 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_6 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_6 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_7 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_7 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_8 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_8 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_9 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_9 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_10 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_10 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_n_11 -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DATA_p_11 -entity Main
# set_instance_assignment -name IO_STANDARD LVDS -to DCO_n -entity Main
set_instance_assignment -name IO_STANDARD LVDS -to DCO_p -entity Main
</code>
Project settings:
<code>
set_global_assignment -name DEVICE 10CX220YU484I6G
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS"
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON
set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL MAXIMUM
set_global_assignment -name OPTIMIZATION_MODE "HIGH PERFORMANCE EFFORT"
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL ON
set_global_assignment -name TIMING_ANALYZER_DO_REPORT_TIMING ON
set_global_assignment -name IO_PLACEMENT_OPTIMIZATION ON
set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON
set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON
set_global_assignment -name ROUTER_REGISTER_DUPLICATION ON
set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION OFF
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name FAST_PRESERVE OFF -entity main
set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED
set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT ON
set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING "PACK ALL IO REGISTERS"
set_global_assignment -name FLOW_ENABLE_EARLY_PLACE ON
set_global_assignment -name VERILOG_FILE main.v
set_global_assignment -name SDC_FILE main.sdc
</code>