clocks in lattice ecp2

Gast #1310738
Lesenswert?

Hallo,

ich habe ein Problem mit den Clocks bei einem Lattice ECP2.
Ich habe eine PLL aufgesetzt die mir aus 25MHz 50MHz generiert und mit 
diesen 50MHz takte ich einen Zaehler den ich dann verwende um einen PWM 
zu generieren (dieser PWM hat ein eigenes .vhd file):
  process (clk_pwm)
  begin
    if rising_edge(clk_pwm) then
      if pwmPeriod = "1111111111111111" then
        pwmPeriod   <= (others => '0');
        pwmReload   <= '1';
      else
        pwmPeriod <= pwmPeriod + 1;
        pwmReload   <= '0';
      end if;
    end if;
  end process;
  pwmOut <= pwmPeriod;

pwmOut gibt mir also immer den aktuellen Zaehlerstand aus, den ich im 
top file verwende in dieser Form (pwmOut wird in der portmap auf pwm0 
geroutet):
led_out(0) <=   '1' when Kanal_1 < pwm0 else
                '0';

Somit bekomme ich eine Ausgangsfrequenz an der Led von 763Hz (50MHz / 
65536).
Soweit so gut, ich muss die Ausgangsfrequenz aber auch noch weiter 
erhöhen, habe also die PLL auf 100MHz eingestellt und komm jetzt aber 
mitn Timing nicht mehr hin, krieg die Fehlermeldung:

FREQUENCY NET "clk_100" 100.000000 MHz  |             |             |
;                                       |  100.000 MHz|   62.263 MHz| 
2 *

Welche Möglichkeiten hab ich, damit ich clk_100 auf mindestens 100MHz 
bringe??

Herzlichen Dank im Voraus
Bernhard
Moderator (Firma: Titel) Persönliche Seite #1310829
Lesenswert?

> Welche Möglichkeiten hab ich, damit ich clk_100 auf mindestens 100MHz
> bringe??
Du solltest erst mal herausfinden, welcher Logik-Pfad deine Taktfrequenz 
beschränkt. Das geht am einfachsten über die statische Timinganalyse.

> clk_100 ... clk_pwm
Wieviele Takte hast du eigentlich in deinem Design?
Wie sind die erzeugt und wie werden sie verteilt?
Gast #1311207
Lesenswert?

Hallo,

wenn ich die Zeile
led_out(0) <=   '1' when Kanal_1 < pwm0 else
                '0';
auskommentiere, komm ich laut Trace Report auf 264MHz...

Hab dann nur mehr eine 24MHz Clock,
clk_pwm wird in der portmap vom pwm module auf clk_100 verdrahtet.
Erzeugt werden beide clocks mit einer PLL.

Bernhard
Gast #1311300
Lesenswert?

>Hallo,
>was meinst du mit registrieren??
>Danke
>Bernhard

Das könnte >SuperWilly< damit meinen:
1
led_temp <=   '1' when Kanal_1 < pwm0 else
2
                       '0';
3
process (clk_pwm)
4
  begin
5
    if rising_edge(clk_pwm) then
6
       led_register <=  led_temp; 
7
    end if;
8
 end process;
9

10
led_out(0) <= led_register;

Damit wird noch ein Flipflop zwischen der Logik und dem
Led Ausgang eingebaut, dies könnte die mögliche Takt
Frequenz auch erhöhen. das Ausgangssignal wird aber
um einen Takt verzögert.
Gast #1311754
Lesenswert?

Hallo,
habe das jetzt ausprobiert:
led_temp <=   '1' when Kanal_1 < pwm0 else
                       '0';
process (clk_pwm)
  begin
    if rising_edge(clk_pwm) then
       led_register <=  led_temp;
    end if;
 end process;

led_out(0) <= led_register;

hat aber leider nix gebracht, auch das vergleichen von nur einem Bit und 
nicht die vollen 16 Bit hat auch nix gebracht.

Sobald ich die Zeile:

led_out(0) <= led_register;

auskommentiere komm ich wieder auf ca. 260MHz.
led_out ist ja ein Pin der aus dem FPGA auf eine Led rausgeht.
Gibts da eine Beschränkung für Ausgangspins oder irgendwas in der 
Richtung?

Herzlichen Dank
Bernhard
Moderator (Firma: Titel) Persönliche Seite #1311765
Lesenswert?

> Gibts da eine Beschränkung für Ausgangspins
Wenn du den Ausgang nochmal registirest, wird auf jeden Fall das 
Ausgangsregister im IO-Pad verwendet, dann brauchst du relativ lange 
Routingpfade dorthin. Das wird dir das Timing zerhageln. Aber wie 
gesagt: eine Timing-Analyse sollte dir die Schwachstelle aufzeigen.

BTW:
Ich würde das pragmatisch machen und den Pfad nach aussen so 
constrainen, dass er ignoriert wird. Dorthin sind nun wirklich keine 
100MHz nötig ;-)

Am Rande:
Hast du überhaupt schon irgendein Clock-Constraint gesetzt? Weiß die 
Toolchain, dass du 100MHz willst?
Gast #1311770
Lesenswert?

Hallo,

>
Ich würde das pragmatisch machen und den Pfad nach aussen so
constrainen, dass er ignoriert wird. Dorthin sind nun wirklich keine
100MHz nötig ;-)
>
da hast du natürlich recht, brauch ich ja auch nicht, aber ich denke mal 
das es mit dem Ausgang zu tun haben muss, da mir dort die clock 
reduziert wird!?

>
Hast du überhaupt schon irgendein Clock-Constraint gesetzt? Weiß die
Toolchain, dass du 100MHz willst?
>

ja, hab ich, pll mit ipexpress eingebunden, dort auf 100MHz Ausgang 
gestellt und im Design Planer bei Clock/Period Constraints, die clk_100 
angeklickt und auf 100MHz gestellt (überschreibt glaub ich eh die 
eingestellte Frequenz in der PLL).

Danke,
Bernhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren