Hallo.
Ich bin gerade dabei mein erstes .sdc-file zu schreiben (Quartus II) und
habe dabei leider etwas Probleme...
Folgender Aufbau:
Input-Pin(Port) ist der Anschluss für eine PLL(in 40MHz). Der PLL-output
ist dann der interne Systemtakt(100MHz). Den Takt möchte ich intern für
meine Constraints verwenden, aber ich schaffe es nicht, dass der Takt
"sysClk" erkannt wird und bekomme Meldungen wie:
"Warning: Ignored filter at Modul_0.sdc(92): sysClk could not be matched
with a clock"
Meine Vorgehensweisen waren ua:
1 | #**************************************************************
|
2 | # Create Clock
|
3 | #**************************************************************
|
4 | #create_clock -name [get_ports { InClk_40MHz }] -period 25.000 -waveform { 0.000 12.500 } [get_ports { InClk_40MHz }]
|
5 |
|
6 | # Automatically apply a generate clock on the output of phase-locked loops (PLLs)
|
7 | # This command can be safely left in the SDC even if no PLLs exist in the design
|
8 | #derive_pll_clocks -create_base_clocks [get_ports InClk_40MHz ] macht error
|
9 |
|
10 | derive_pll_clocks
|
11 |
|
12 | #**************************************************************
|
13 | # Create Generated Clock
|
14 | #**************************************************************
|
15 | #create_generated_clock -name {sysClk} -source [get_ports { InClk_40MHz } ] -multiply_by 5 -divide_by 2 -duty_cycle 50.000 [get_pins {sysClk}]
|
16 |
|
17 | #alle Varianten durch probiert...
|
18 |
|
19 | #**************************************************************
|
20 | # Constrain the input I/O path
|
21 | #**************************************************************
|
22 | set_input_delay -clock [get_clocks {sysClk}] -max 2 [all_inputs]
|
23 | set_input_delay -clock [get_pins {sysClk}] -min 1 [all_inputs]
|
24 | #**************************************************************
|
25 | # Constrain the output I/O path
|
26 | #**************************************************************
|
27 | set_output_delay -clock [get_ports {sysClk}] 1 [all_outputs]
|
Eigentlich bin ich der Meinung, dass es so:
1 | create_clock -name [get_ports { InClk_40MHz }] -period 25.000 -waveform { 0.000 12.500 } [get_ports { InClk_40MHz }]
|
2 | derive_pll_clocks
|
3 | create_generated_clock -name {sysClk} -source [get_ports { InClk_40MHz } ] -multiply_by 5 -divide_by 2 -duty_cycle 50.000 [get_pins {sysClk}]
|
4 | ...
|
5 | set_input_delay -clock [get_pins {sysClk}] -min 1 [all_inputs]
|
"ungefähr"stimmen würde, aber die clock wird nicht erkannt und ich
kapier gerade die Beschreibungen zu Kommandos auch nur halb :(
In der Beschreibung zum Kommando "derive_pll_clocks" steht:
"Identifies PLLs or similar resources in the design and creates
generated clocks for their output clock pins. Multiple generated
clocks may be created for each output clock pin if the PLL is using
clock switchover, one for the inclk[0] input clock pin and one for the
inclk[1] input clock pin.
By default this command does not create base clocks on input clock
ports that are driving the PLL. When you use the create_base_clocks
option, derive_pll_clocks also creates the base clock on an input
clock port deriving the PLL. This option does not overwrite an
existing clock."
Verwende ich "create_base_clocks"-Option habe ich eine Fehlermeldung.
Wenn nach dieser Beschreibung "generated clocks" erzeugt werden, wie
kann ich diese dann im restlichen .sdc verwenden? Wenn der generierte
Systemtakt erkannt wurde, ist es richtig wenn ich schreibe [get_pins
sysClk], da es ein internes Signal ist, oder?
Frage nebenbei: Wie is das eigentlich, wenn ich in meiner
Top-Level-Architectue mehrere Komponenten verwende, und die wiederum
interne Signale mit gleichem Namen wie in Umgebender verwenden? Wie kann
man da dann die Beschränkungen setzen, also auf die innersten Signale
zugreifen?
Über jeden Tip dankbar,
Max