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
> 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?
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
Dann würde ich vermuten, dass der Vergleich
1 | Kanal_1 < pwm0 |
zu lange braucht... Ist das ein 16-Bit-Vergleich? Probier mal zur Ursachenforschung nur einen Teil von jedem Vektor zu vergleichen.
Hallo, ja das ist ein 16 bit Vergleich. ok, werd ich ausprobieren, angenommen es ist wirklich der Vergleich, wie könnt ich das umgehen bzw. schneller machen? Danke vielmals Bernhard
>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.
hallo, herzlichen Dank für die vielen Antworten, sobald ich es ausprobiert habe melde ich mich wieder!! habt dank Bernhard
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
> 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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.