Forum: FPGA, VHDL & Co. Geteilten Takt als Takt verwenden


von Martin O. (ossi-2)


Lesenswert?

Mein FPGA-design erzeugt per PLL ein 100MHz Signal.
Dies möchte ich duch 4 teilen und als 25MHz Takt verwenden.
Ich möchte den 25MHz Takt auch im SDC File angeben, damit
ich das Timing verifizieren kann.

Wenn ich so programmiere:
1
// clk_100: 100MHz Takt von PLL erzeugt
2
// Counter1: Binärzähler
3
4
parameter cntrWidth = 40 ;
5
wire [ cntrWidth-1:0] cntr100 ;
6
Counter1 #( .WIDTH( cntrWidth ) ) CounterA ( clk_100, cntr100 ) ;
7
8
wire clk_25 ;
9
assign clk_25=cntr100[1] ;   // clk_25 ist 25MHz  Takt
10
11
always @(posedge clk_25) begin
12
  .....
13
  end

erhalte ich die Warnung:

Warning (332060): Node: Counter1:CounterA|cntr_o[1] was determined to be 
a clock but was found without an associated clock assignment.

Daraufhin habe ich dem SDC File hinzugefügt:

create_generated_clock -name myClk1 -period 40.0 [get_nets 
Counter1:CounterA|cntr_o[1]]

Das hat aber anscheinend keine Wirkung, die Warnung bleibt bestehen.
Auch die Zeile

create_clock -name clk_25 -period 40.0 [get_pins clk_25]

Führt nicht zum Ziel. Was mache ich falsch? Wie spezifiziere ich
einen Takt der intern erzeugt wird?

: Bearbeitet durch User
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Du solltest die 25 MHz ebenfalls via PLL generieren. In der Regel 
brauchst du dann nicht mal die 25 MHz als Constraint zu spezifizieren, 
die meisten Tools (zumindest der großen Hersteller) leiten das direkt 
ab.

Ich weiß zwar nicht welchen FPGA du hier verwenden willst, jedoch kenne 
ich jetzt spontan keinen bei dem man einfach Logik auf ein Clock Netz 
routen darf.

von Klakx (Gast)


Lesenswert?

Klar, das kann man beispielsweise bei xilinx. Trotzdem vermeide ich es. 
Bei 25 MHz geht das sicher, jedoch wie bereits gesagt, ist es aus der 
pll üblicher

von Lukas (Gast)


Lesenswert?

Oder du verwendest den 100 MHz Takt und erzeugt alle 4 Takte ein 
ClockEnable Signal

von Markus F. (mfro)


Lesenswert?

Martin O. schrieb:
> create_generated_clock -name myClk1 -period 40.0 [get_nets
> Counter1:CounterA|cntr_o[1]]

probier' mal:
1
create_generated_clock -source clk_100 -divide_by 4 -master clk_100 Counter1:CounterA|cntr_o\[1\]

So funzt das (analog) bei mir. Dass "händisch" erzeugte Taktsignale 
nicht unbedingt toll sind, hat man dir ja schon erklärt.

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.