Forum: FPGA, VHDL & Co. sdc: clock wird nicht erkannt


von Max (Gast)


Lesenswert?

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

von Marius W. (mw1987)


Lesenswert?

Also ich habe bisher immer nur die Input-Clock im Quartus definiert und 
dann "derive_pll_clocks". Alles weitere macht der Quartus soweit ich 
weiß automatisch, da ja die PLL-Konfiguration bekannt ist.

Also sollte dein SDC für die Clocks eigentlich so aussehen:
1
create_clock -name [get_ports { InClk_40MHz }] -period 25.000 -waveform { 0.000 12.500 } [get_ports { InClk_40MHz }]
2
derive_pll_clocks

Gruß
Marius

von Max (Gast)


Lesenswert?

Thx, das habe ich schon versucht. Ich habe mehrere Clocks, deswegen 
check ich nicht, wo/wie da ein Bezug zum eigentlich Systemtakt gemacht 
wird?

von Max (Gast)


Lesenswert?

@Frage nebenbei:

Max schrieb:
> 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?

"By default, pipe characters are used to separate one hierarchy level 
from the next. They are treated as
special characters and are taken into account when string matching with 
wildcards is performed."

von Max (Gast)


Lesenswert?

So geht's falls es noch wer mal braucht:
1
create_clock -name [get_ports { InClk_40MHz }] -period 25.000 -waveform { 0.000 12.500 } [get_ports { InClk_40MHz }]
2
3
# hier erzeugt er die Clock _col0 (die aber kein "offizielles" Signal ist...)
4
derive_pll_clocks -create_base_clocks 
5
6
set sysClk {_col0 }
7
8
set_input_delay -clock [get_clocks $sysClk] -max 2 [all_inputs]

dere

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.