Forum Discussion

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

Need Help to Verify Timing Constraints On Output Pins to External Device

Hi,

I'm relatively new in FPGA designing, so forgive me if my question seem simple.

The project I am working on involves using a Cyclone V to control 4 external DDS chips (AD9915). So I'm using the FPGA pins to send data to the DDS chips. I wish to clock my design at 156.25 MHz (which is period of 6.4 ns).

These DDS chips supply the 156.25 MHz clocks that I am using to clock my design in the FPGA. The DDS chip requires a setup time of 2 ns and hold time of 0 ns. (http://www.analog.com/static/imported-files/data_sheets/ad9915.pdf [pg 6])

I have read many reference online that specifies that a virtual clock has to be created for the 'set_output_delay' command to reference to. So just taking four pins from my design as an example, the SDC file looks like this. i have just attached a register with a constant value to these output ports just to verify the sdc file, also i put a 0 ns for setup and hold for the external device just to verify.

// These are the actual clock coming into the FPGA from the DDS

create_clock -name {ddsclk1} -period 6.400 -waveform { 0.000 3.200 } [get_ports {dds_clk_1}]

create_clock -name {ddsclk2} -period 6.400 -waveform { 0.000 3.200 } [get_ports {dds_clk_2}]

create_clock -name {ddsclk3} -period 6.400 -waveform { 0.000 3.200 } [get_ports {dds_clk_3}]

create_clock -name {ddsclk4} -period 6.400 -waveform { 0.000 3.200 } [get_ports {dds_clk_4}]

// These are virtual clocks I set up

create_clock -name {ddsclk1_ext} -period 6.400 -waveform { 0.000 3.200 }

create_clock -name {ddsclk2_ext} -period 6.400 -waveform { 0.000 3.200 }

create_clock -name {ddsclk3_ext} -period 6.400 -waveform { 0.000 3.200 }

create_clock -name {ddsclk4_ext} -period 6.400 -waveform { 0.000 3.200 }

// and then the setup time and hold time (I have set them to 0 just to verify)

set_output_delay -clock { ddsclk1_ext } -max 0.000 [get_ports {func_pin_1[0]}]

set_output_delay -clock { ddsclk1_ext } -max 0.000 [get_ports {func_pin_1[1]}]

set_output_delay -clock { ddsclk1_ext } -max 0.000 [get_ports {func_pin_1[2]}]

set_output_delay -clock { ddsclk1_ext } -max 0.000 [get_ports {func_pin_1[3]}] ......... and the same thing for ddsclk2,3,4_ext for func_pin_2,3,4

set_output_delay -clock { ddsclk1_ext } -min 0.000 [get_ports {func_pin_1[0]}]

set_output_delay -clock { ddsclk1_ext } -min 0.000 [get_ports {func_pin_1[1]}]

set_output_delay -clock { ddsclk1_ext } -min 0.000 [get_ports {func_pin_1[2]}]

set_output_delay -clock { ddsclk1_ext } -min 0.000 [get_ports {func_pin_1[3]}] ......... and the same thing for ddsclk2,3,4_ext for func_pin_2,3,4

I have also set the false paths between the four clock domains. However, when I compile my very simple design and run TimeQuest, TimeQuest reports that my setup slacks for ddsclk1,2,3,4_ext are negative. I find these strange and would expect Cyclone V to be able to run at much faster speed than 156.25 MHz, moreover my design now is just a reg to the output port.

http://www.alteraforum.com/forum/attachment.php?attachmentid=10148&stc=1

So, I am suspecting that I did not constrain the design properly. Hope anyone can give their two cents on the way I did the timing constraints.

Thanks in advance!

24 Replies