Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
17241 Discussions

Timing violation with Altera GPIO in DDR mode

MRenn
Débutant
6 997 Visites

I have a setup violation at the register after the input register. The input register is constrained as described in AN433.

set_input_delay -add_delay -clock virt_adc_clk -min -0.6 [get_ports {ADC_DATA[*]}] set_input_delay -add_delay -clock virt_adc_clk -min -0.6 -clock_fall [get_ports {ADC_DATA[*]}]   set_input_delay -add_delay -clock virt_adc_clk -max 0.6 [get_ports {ADC_DATA[*]}] set_input_delay -add_delay -clock virt_adc_clk -max 0.6 -clock_fall [get_ports {ADC_DATA[*]}]   set_false_path -setup -fall_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks CLK262] set_false_path -setup -rise_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks CLK262] set_false_path -hold -rise_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks CLK262] set_false_path -hold -fall_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks CLK262]

But now i have the violation after the input register, as you can see in the picture from Timequest.

Do I miss something?

0 Compliments
33 Réponses
sstrell
Contributeur émérite III
4 110 Visites

Can you show your clock constraints from the SDC?

 

#iwork4intel

0 Compliments
MRenn
Débutant
4 110 Visites

Thank you for your answer.

 

I tried this:

create_clock -period "262.144 MHz" -name virt_adc_clk create_clock -period "262.144 MHz" -name {SAMPLE_CLK_1} {SAMPLE_CLK_1}   create_generated_clock -name {CLK262} \ -source [get_ports {SAMPLE_CLK_1}] \ -divide_by 1 \ -multiply_by 1 \ -phase 90 \ -duty_cycle 50.00 { iopll262|iopll_0|altera_iopll_i|twentynm_pll|iopll_inst|outclk[0] } derive_pll_clocks -create_base_clocks

and also this without phase shift:

create_clock -period "262.144 MHz" -name virt_adc_clk create_clock -period "262.144 MHz" -name {SAMPLE_CLK_1} {SAMPLE_CLK_1}   create_generated_clock -name {CLK262} \ -source [get_ports {SAMPLE_CLK_1}] \ -divide_by 1 \ -multiply_by 1 \ -duty_cycle 50.00 { iopll262|iopll_0|altera_iopll_i|twentynm_pll|iopll_inst|outclk[0] } derive_pll_clocks -create_base_clocks

The violations are the same. For the appplication is no difference because we use the ADC AD9652 and we adjust the DCO by starting the system.

0 Compliments
sstrell
Contributeur émérite III
4 110 Visites

Get rid of the generated clock constraint. derive_pll_clocks does that for you. Also, is this edge-aligned or center-aligned? Instead of using -create_base_clocks, you need to have a create_clock constraint that properly defines the relationship between the virtual clock and the clock coming into the FPGA depending on that alignment using the -waveform option.

 

#iwork4intel

0 Compliments
MRenn
Débutant
4 110 Visites

This is edge-aligned. I changed to your recommendations and now Quartus compiles the design. This will takes some hours.

create_clock -period "262.144 MHz" -name virt_adc_clk -waveform {0.0 1.907} create_clock -period "262.144 MHz" -name {SAMPLE_CLK_1} {SAMPLE_CLK_1} -waveform {0.0 1.907}   derive_pll_clocks -create_base_clocks   set_input_delay -add_delay -clock virt_adc_clk -min -0.6 [get_ports {ADC_DATA[*]}] set_input_delay -add_delay -clock virt_adc_clk -min -0.6 -clock_fall [get_ports {ADC_DATA[*]}]   set_input_delay -add_delay -clock virt_adc_clk -max 0.6 [get_ports {ADC_DATA[*]}] set_input_delay -add_delay -clock virt_adc_clk -max 0.6 -clock_fall [get_ports {ADC_DATA[*]}]   set_false_path -setup -fall_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -setup -rise_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -hold -rise_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -hold -fall_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks iopll262|iopll_0|adc_clk]

Should I delete the -create_base_clocks? I thought I need it forc other PPLs.

 

0 Compliments
MRenn
Débutant
4 110 Visites

The PLL settings:

0 Compliments
sstrell
Contributeur émérite III
4 110 Visites

Yes, get rid of create_base_clocks unless with "I thought I need it forc other PPLs." you mean that you have other PLLs in your design that are sourced from other input reference clocks. I'd still manually create all the base clocks, though.

 

#iwork4intel

0 Compliments
MRenn
Débutant
4 110 Visites

I think I made a mistake with the settings of the PLL. I used -90° instead of 90° phase shift. With this and the assignments:

set_false_path -setup -fall_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -setup -rise_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -hold -rise_from [get_clocks virt_adc_clk] -rise_to \ [get_clocks iopll262|iopll_0|adc_clk] set_false_path -hold -fall_from [get_clocks virt_adc_clk] -fall_to \ [get_clocks iopll262|iopll_0|adc_clk]

I cuttet the wrong transfers.

 

Now with 90° pase shift I also get slacks at the input registers.

I could not find the maximum achievable frequency for the LVDS DDIO GPIO with an Arria 10 10AS066H3F34I2SG. Where can I find it?

 

Please find the test design in the attachment.

 

Thank you for your help!

0 Compliments
KhaiChein_Y_Intel
4 110 Visites

Hi,

 

There is no qpf and qsf files in the QAR attached. Could you archive again? May I know what version of the software you are using?

 

Thanks.

 

0 Compliments
MRenn
Débutant
4 110 Visites

Hi,

 

because of this issue we still use Quartus Prime 16.1.1 Build 200

https://www.intel.com/content/altera-www/global/en_us/index/support/support-resources/knowledge-base/ip/2019/why-is-the-last-output-frame-of-the-intel--fft-ip-core-missing-e.html

 

I manually added the qpf and qsf to the archive.

 

Thank you for your help.

0 Compliments
MRenn
Débutant
4 110 Visites

Now I tested with 18.1. The Timing is the same, also slacks with setup and hold.

0 Compliments
KhaiChein_Y_Intel
4 110 Visites

Hi,

 

I am still looking into this.Please allow me some time on this.

Thanks.

0 Compliments
MRenn
Débutant
4 110 Visites

Hi,

 

thank you for your message.

0 Compliments
KhaiChein_Y_Intel
4 110 Visites

Hi,

 

I checked in the Timing Analyzer. The register is located within the I/O. According to the user guide https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_altera_gpio.pdf, you may set the delay elements manually in the Intel Quartus Prime settings file (.qsf). 

 

Input Delay Element

set_intance_assignment –to <PIN> -name INPUT_DELAY_CHAIN <0..63>

 

Output Delay Element set_intance_assignment –to <PIN> -name OUTPUT_DELAY_CHAIN <0..15>

 

Output Enable Delay Element

set_intance_assignment –to <PIN> -name OE_DELAY_CHAIN <0..15>

 

You may try to set the max and min value and see if it helps the timing. If no, this is the maximum frequency you can achieve with the I/O standard you have set, 1.8V

 

Thanks.

0 Compliments
MRenn
Débutant
4 106 Visites

Hi,

 

I tried with Input Delay 0, 1 and 63.

With more delay the setup slack is higher. With Delay set to 1 the hold slack is positive.

I also tried with FAST_INPUT_REGISTER on. No difference.

I never got less than -0.962ns setup slack.

The data delay is 1.341ns. Is the the correct value for a register located within the I/O?

 

Thanks

 

 

0 Compliments
KhaiChein_Y_Intel
4 106 Visites

Hi,

 

I am sorry for the late reply as I was out of office for 5 days.

The I/O standard you are using is 1.8V. According to the User guide, https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/arria-10/a10_handbook.pdf, user has to use terminated I/O standards if the GPIO is operating at a frequency higher than 250 MHz. SSTL, HSTL, POD and HSUL I/O standards are terminated I/O standards.

Thanks.

0 Compliments
MRenn
Débutant
4 106 Visites

​H,

 

 

I changed the I/O Standard to Differential 1.8V SSTL Class 1, but the negative slack is still there.

 

In the handbook Intel recommends to use PHYLite for source synchronous Interfaces with more than 200 Mbps.

I tried to set the parameters for this IP.

I set the Interface clock to 262.144MHz,     clock rate of user logic: Full

If I do so, I cannot set the PLL reference clock to 262.144MHz. Just half of it, but  I need to set this clock, because it is coming from the ADC.

 

I don't know why it is not possible. In the PHYLite User Guide

https://www.intel.com/content/www/us/en/programmable/documentation/bhc1410942178562.html#bhc1410941851660/en-us Table 3

the Max Core Clock Rate (Full) with Arria 10 Speed Grade -2 is 266MHz.

 

 

Do I miss something?

Thanks. 

0 Compliments
KhaiChein_Y_Intel
4 106 Visites

Hi,

 

To update, I am still looking into this. Please allow me some time on this.

 

Thanks.

0 Compliments
KhaiChein_Y_Intel
4 106 Visites

Hi,

 

I checked with the team, you have to use Phy Lite for frequency above 200 MHz.

 

Thanks.

0 Compliments
MRenn
Débutant
4 106 Visites

​Hi,

 

I tried Phy Lite but had problems with setting the correct frequencies as I wrote 19 days before.

 

The text was:

 

In the handbook Intel recommends to use PHYLite for source synchronous Interfaces with more than 200 Mbps.

I set the Interface clock to 262.144MHz,    clock rate of user logic: Full

If I do so, I cannot set the PLL reference clock to 262.144MHz. Just half of it, but I need to set this clock, because it is coming from the ADC.

 

I don't know why it is not possible. In the PHYLite User Guide

https://www.intel.com/content/www/us/en/programmable/documentation/bhc1410942178562.html#bhc1410941851660/en-us Table 3

the Max Core Clock Rate (Full) with Arria 10 Speed Grade -2 is 266MHz.

 

Thanks.

 

0 Compliments
KhaiChein_Y_Intel
4 005 Visites

Hi,

 

Can you provide the design.qar that is using the PhyLite so that I can look into it?

 

Thanks.

0 Compliments
Répondre