Forum Discussion

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

Data+clk path through (constraints)

Hi,

Im trying to specify timing constraints for a simple design but i dont know how to fully complete the constraints.

I still have unconstrained paths: 'clk_in' and 'clk_out'

report_ucp -panel_name "Unconstrained Paths"

Design is not fully constrained for setup requirements

Design is not fully constrained for hold requirements

The datapath is registered but not the clock path. The datapath seems to be fully constrained but the is still problem with the clock path. (no setup/hold for the "clk_out <= clk <= clk_in" path)

Can anybody help me? Solution/explaination.

Thanks.

Bkirks :)

...see vhdl + sdc here:

<<data_clk_pass_through .vhd .... >>

entity data_clk_pass_through is

port

(

Din : in unsigned (24 downto 0);

Dout : out unsigned (24 downto 0);

clk_in : in std_logic;

clk_out : out std_logic

);

end entity;

architecture rtl of data_clk_pass_through is

signal clk : std_logic;

begin

process (clk)

begin

if (rising_edge(clk)) then

Dout <= Din;

end if;

end process;

clk <= clk_in;

clk_out<=clk;

end rtl;

<<data_clk_pass_through .vhd................. end>>

<<timing.sdc ..........>>

#**************************************************************

# Time Information

#**************************************************************

set_time_format -unit ns -decimal_places 3

#Specify the clock period

set dvi_period 8.000

#*********************************************

#DVI_RX_device (TFP 401)

#Specify the required tSU + tH

set dvi_rx_tSU 2.100

set dvi_rx_tH 0.500

#Boarddelay

set dvi_rx_BD_dmin 0.000

set dvi_rx_BD_dmax 0.000

set dvi_rx_BD_cmin 0.000

set dvi_rx_BD_cmax 0.000

#*********************************************

#*********************************************

#DVI_TX_device (TFP 410)

#Specify the required tSU + tH

set dvi_tx_tSU 1.200

set dvi_tx_tH 1.300

#Boarddelay

set dvi_tx_BD_dmin 0.000

set dvi_tx_BD_dmax 0.000

set dvi_tx_BD_cmin 0.000

set dvi_tx_BD_cmax 0.000

#**********************************************

#**************************************************************

# Create Clock

#**************************************************************

create_clock -name clk_in -period $dvi_period [get_ports {clk_in}]

create_clock -name clk_virtual -period $dvi_period

create_clock -name clk_out -period $dvi_period [get_ports {clk_out}]

#**************************************************************

# Set Input Delay

#**************************************************************

set_input_delay -clock [get_clocks {clk_virtual}] -max [expr $dvi_period - ($dvi_rx_tSU + ($dvi_rx_BD_cmin - $dvi_rx_BD_dmax))] [get_ports {Din*}]

set_input_delay -clock [get_clocks {clk_virtual}] -min [expr $dvi_rx_tH - ($dvi_rx_BD_cmax - $dvi_rx_BD_dmin)] [get_ports {Din*}]

#**************************************************************

# Set Output Delay

#**************************************************************

set_output_delay -clock [get_clocks { clk_out }] -max [expr ($dvi_tx_tSU -($dvi_tx_BD_dmax-$dvi_tx_BD_cmin)) ] [get_ports {Dout*}]

set_output_delay -clock [get_clocks { clk_out }] -min [expr -($dvi_tx_tH -($dvi_tx_BD_cmax-$dvi_tx_BD_dmin)) ] [get_ports {Dout*}]

<<timing.sdc ..........end>>

8 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    you need to treat your output clock as either generated clock or a non clock output.

    A generated clock is any clock signal generated by PLL or logic including just wiring as in your case.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    OK, now changed:

    #create_clock -name clk_out -period $dvi_period 
    create_generated_clock -name clk_out -source  

    ...but it makes no difference (still same unconstrained paths!!)

    clk_in: No input delay, min/max delays, false-path exceptions, or max skew assignments found. This port has clock assignment.

    clk_out: No output delay, min/max delays, false-path exceptions, or max skew assignments found. This port has clock assignment.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi B_Kirk, in the sdc file under clocks definitions add "derive_clock_uncertainty" command. This will calculate uncertainty between all clocks in design. Maybe this will help.

    edit:

    you can drive your process and clk_out port directly by clk_in:

    --- Quote Start ---

    process (clk_in)

    begin

    if (rising_edge(clk_in)) then

    Dout <= Din;

    end if;

    end process;

    clk_out<=clk_in;

    --- Quote End ---

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    It could be just a silly syntax issue:

    write as Din

    [*], Dout

    [*] instead
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I actually tried your code earlier and ended up with same issue. Data are constrained. clocks are defined but timequest thinks of clock_in and clock_out as if data path. I personally wouldn't care about tool's behavior here but would like to know why it is behaving like that. Your code is a good model to see timequest at a very basic but useful level.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Thanks for all your replies.

    Glad to hear that my timing constraints are ok but i have to ignore the warning about unconstrained path.

    It was my goal to make my own simple template and understand timing constraint terms.

    I feel like im understanding it so far (for low complexity designs) - will now keep on adding more complexity...

    Who knows i return with further questions.