Forum: FPGA, VHDL & Co. Spartan 3: Warnung Gated clock


von Alexander Mundry (Gast)


Lesenswert?

Hallo zusammen,

ich bin in VHDL leider noch ein blutiger Anfänger. Deshalb bräuchte ich
mal wieder eure Hilfe.

Ich verwende das Spartan 3 Starter Kit (Xilinx) mit dem FPGA XC3S200.
Auf dem Board ist ein 50 MHz Quarz verbaut, den ich gerne auch nutzen
und runterteilen würde, um die gewünschte Frequenz zu erhalten.

Konkret wollte ich ein Lauflicht programmieren, das 8 LEDs innerhalb
von 1 Sek. durläuft.

Ich habs wie folgt versucht: (auch wenn hier 10Hz rauskommen sollten!)

Clk         - 50MHz Clock
Counter     - Zähler vom Typ "integer range 4999999 downto 0"
Enable      - Enable-Signal für die nachfolgenden Logikblöcke

if (clk'event and clk = '1') then
   if (Counter = 0) then
      Counter <= 4999999;
      Enable <= '1';
   else
      Counter <= Counter - 1;
      Enable <= '0';
   end if
end if;

if (Enable = '1') then
...       -- weiter Quellcode


nach der Compilierung erhalte ich folgende Warnung:

"DesignRules:372 - Netcheck: Gated clock. Clock _n0010 is sourced by a
combinatorial pin. This is not good design practice. Use the CE (Clock
Enable) pin to control teh loading of data into the flip-flop."

Jetzt meine Frage:
Was will mir diese Meldung "Gated Clock" sagen und wie kann ich diese
vermeiden? D.h. wie kann ich den Clock-Enable-Pin (CE) im Bsp. des
Lauflichts verwenden.

Für jede Antwort bin ich sehr dankber. Vielleicht hat auch jemand einen
Quellcode für ein Lauflicht (Spartan 3) den er mir evtl. zur Verfügung
stellen kann.

Danke!!!

Gruß Alex

von FPGA-User (Gast)


Lesenswert?

Hallo Alex,

das ist ganz einfach, Du musst die Abfrage nur oben
in den Prozess reinschreiben oder nimmst einen
neuen Prozess, der wieder mit CLK getaktet wird.
Ich würde Variante  1 bevorzugen:


if rising_edge(clk) then
   if (Counter = 0) then
      Counter <= 4999999;
      Enable <= '1';
   else
      Counter <= Counter - 1;
      Enable <= '0';
   end if

   if Enable = '1' then
      -- hier den Code für das Lauflicht einfügen
   end if;
end if;

von Dirk (Gast)


Lesenswert?

Hi,

Lauflicht kann ich nicht bieten , aber dieses Tutorial ist fuer VHDL
und Spartan3 Starterkit.

http://www.derepas.com/fabrice/hard/

Gruß,

Dirk

von Daniel R. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Alex,
im Anhang ein kompletter VHDL-Code +Constraints-File für Spartan 3
Startek Kit +Test-Bench für ein Lauflicht. Desweiteren wird die Anzahl
der leuchtenden LEDs auf dem 7-Segment Display angezeigt. Das Lauflicht
läuft glaub ich sogar vorwärts bis LED7 an ist....diese blinkt dann noch
einmal und es läuft wieder rückwärts bis LED0 an ist...diese blinkt
einmal und es läuft wieder vorwärts usw...

Da ich auch Anfänger bin, und das auch eines meiner ersten "Projekte"
war, ist der Code wahrscheinlich anfängertypisch (wenn nicht, dann wäre
ich auch nicht böse.... im Gegenteil).
Aber wenn jemand mal ein wenig Zeit hat, kann er den Code ja mal
anschauen und mir sagen, wie das einfacher zu lösen ist. Ich kann mir
nicht vorstellen, dass mein Lösungsweg perfekt ist (wenn doch, dann
mach ich hier gleich mal einen Freudensprung).


Nochmal zum Code selbst: Die Signalbezeichnungen wie z.B. clk_10Hz
stimmen nicht. Am Anfang waren es mal 10Hz aber ich glaub inzwischen
hab ich das wieder geändert....ist doch schon wieder ein paar Wochen
her. Was ich damit sagen will: Lass dich durch die Signalnamen nicht
beeinflussen.
Das UCF-File stimmt mit dem XILINX SPARTAN 3 STARTER KIT (welches
wirklich ausgezeichnet ist) überein, d.h. du kannst direkt mein
UCF-File nehmen und brauchst die Pins nicht mehr festzulegen.


Viel Spaß damit!
Gruß Daniel!

von Alexander Mundry (Gast)


Lesenswert?

Hallo Leute,

vielen Dank für die Antworten. Werde diese sofort mal anschauen.

Dieses Forum ist einfach Klasse. Suche schon seit Tagen nach einer
Antwort auf meine Frage.

Vielen Dank

Gruß
Alex

von Daniel R. (Gast)


Lesenswert?

@Alex
...und funktionierts???

von Alexander Mundry (Gast)


Lesenswert?

Habs gerade ausprobiert!

Funktionier hervorragend.

Danke noch mal an Alle.


Gruß
Alex

von Alexander Mundry (Gast)


Lesenswert?

Hallo Zusammen,

ich hab jetzt von DCM (Digital Clock Management) gehört. So wie sich
das anhört ist das ein relativ mächtiges "Tool" mit
Frequenzvervielfachung, Phasenverschiebungen, ....

Wie kann ich das in meinen VHDL-Code einbinden? Benötige ich da eine
Library oder muuss ich da irgendwelche Register setzen? ???

Vielleicht kann mir jmd. etwas über DCM erzählen und/oder evtl. ein
kleines Quellcode-Bsp. zur Verfügung stellen, anhand dessen ich mich da
etwas einarbeiten kann.

Bin für jede Info sehr dankbar!


Vielen Dank Leute,

Gruß
Alex

von Patric (Gast)


Lesenswert?

> Vielleicht kann mir jmd. etwas über DCM erzählen und/oder evtl. ein
> kleines Quellcode-Bsp. zur Verfügung stellen, anhand dessen ich mich
> da etwas einarbeiten kann.

Lesen musst du schon selbst:
http://www.xilinx.com/bvdocs/appnotes/xapp462.pdf

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.