mikrocontroller.net

Forum: FPGA, VHDL & Co. clk'event bei beiden Taktflanken


Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne einen Zähler bei beiden Flanken meines Taktes
inkrementieren. Und dachte, dass könnte so gehen:

process (clk)
begin
    if clk'event then
        ...
    end if;
end process;

wird aber nicht vom synthese-Werkzeug akzeptiert ("unsupported Clock
statement").

Bei:
if clk'event and clk='1' then
...
elsif clk'event and clk='0' then
...
end if;

bekomme ich dann "bad synchronous description"

Gibt es da eine einfache Lösung dafür?

Mfg
Thomas

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab hier: http://www.mikrocontroller.net/forum/read-9-225902.html
ein ähnliches Problem gefunden.

Ein paar Tipps hab ich da drin jedenfalls gefunden, die ich mal
ausprobieren werde.

Mfg
Thomas Pototschnig

Autor: Andreas Kratzsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in dem Fall genügt:

process (clk)
begin
    ...

ohne jedes 'if',
weil der Process sowieso nur auf Pegel Wechsel an
diesen Eingang reagiert.

Andreas

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
argh wie dumm :-)
Da hab ich den Wald vor lauter Bäumen nicht gesehen ...

Mfg
Thomas Pototschnig

Autor: Neutron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, soweit ich weiss hängt das vom verwendeten Baustein ab. Viele CPLDs
können nur auf steigende Flanken triggern. Ich glaube die Coolrunner
können das. Mit FPGAs kenn ich mich nicht aus.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

Du kannst den Zähler nicht mit beiden Flanken inkrementieren,
wenn es das FPGA/CPLD nicht unterstützt.
M.W. können das nur CoolRunner II, da nur diese Flip-Flops
haben, die auf beide Flanken schalten können.
Mir ist sonst kein FPGA / CPLD von ALTERA/XILINX bekannt, dass
sowas drauf hat.

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht tatsächlich, wenn ich einen Prozess baue, der in der
Sensitivity-List nur das CLK-Signal drinhat.

Allerdings meckert das Synthesewerkzeug und warnt vor kombinatorischen
Schleifen, was ja auch klar ist, da bei dieser Methode keine FlipFlops
generiert werden und das Inkrementieren des Zählers rein kombinatorisch
funktioniert.

Der ModelSim simuliert es zwar so wie ich es gerne möchte, aber so ganz
gefällt mir es aber nicht. Ich werde mir einen anderen Weg suchen, weil
das eher gepfuscht ist und möglicherweise nicht sicher läuft.

Ich wusste aber echt nicht, dass es garnicht möglich ist mit beiden
Flanken zu arbeiten, bzw dass der FPGA das unterstützen muss. Das werde
ich mir mal für zukünftige Probleme merken :-)

Mfg
Thomas Pototschnig

Autor: Cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also als sauberes Workaround für den Spartan 3 z.B. haben wir in der Uni
eine DCM davorgeschaltet und damit den Takt verdoppelt. Dann kannst du
wieder auf rising edge triggern und hast den selben Effekt, wie mit dem
normalen Takt auf beiden Flanken.

Cpt

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will ein sdram lesen und bei der steigenden flanke die adresse
ausgeben und bei der fallenden die daten lesen. Ich benütze ein spartan
3 und das synthesetool meckert nicht. kann die funktion aber schlecht in
der hardware debuggen. geht das jetzt oder nicht?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@CPT

Hast Du vielleicht noch das Script von der Uni? Wenn ja, dann wäre es
nett wenn Du es zur Verfügung stellen könntest.

Grüsse

Michael

Autor: Cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Skript findest du unter
http://wetnt7.elektro.uni-wuppertal.de/welcome/Mit...

Die Vorlesung "modern aproaches in digital design" (madd) war die
Grundlagenvorlesung und "design and implementation of digital
systems" (DIDS) die Fortsetzung. Wenn mich nicht alles täuscht ist der
betreffende Abschnitt im Kapitel über Frequenzteiler im Zusammenhang mit
dem Johnson Counter ... In einer von den DIDS Übungen müsste auch ein
template für eine einfache DCM Einbindung sein.

Ich weiß aber nicht wie lange das noch online ist, weil der Dozent ein
Gastprof aus Rußland ist und mittlerweile wieder weg...
Wenn es weg ist melde dich einfach.

Grüße

Cpt

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... interessant ... aber :
VHDL kann auch viel einfacher sein und richtig Spass machen :-))
typisch UNI

Autor: dose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei einem Lattice CPLd 5000MX kann man auch zwischen den steigenden und
Fallenden Flanken wählen. ICh habe es nur im Simulator ausprobiert und
nie in Hardware gegossen.

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einem Prozess fallende oder steigende Flanke zu verwenden ist ja kein
Problem. Schwierig ist es nur, wenn man in einem Prozess beide haben
will :-)

Mfg
Thomas Pototschnig

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich will ein sdram lesen und bei der steigenden flanke die adresse
> ausgeben und bei der fallenden die daten lesen. Ich benütze ein
> spartan 3 und das synthesetool meckert nicht. kann die
> funktion aber schlecht in
> der hardware debuggen. geht das jetzt oder nicht?

probier mal einfach mit Multiplexern. Das ist ja DDR und hab zig mal
gemacht, und es funktioniert

Data_In <= DQ when (clk='1') else (others=>'Z');
ADDR    <= Addresse when (clk='0') else (others =>'Z');

also clk als Steuereingang des Multiplexers.

Verstehe jetzt Dein Problem nicht ;-)

Kest

Autor: Cpt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGA-User

Also mir hat das ganze was gebracht. Ich fand es eigentlich recht
interessant und nützlich. Das praktische war dann auch eher in den
Übungen bzw. dem Abschlußprojekt. Na ja jedem das seine gell :-)

Grüße

Cpt

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Cpt

ja OK, was ich beim Überfliegen gut fand, war dass das Schaltbild
immer gleich neben dem VHDL-Code stand.
Die Kapitel "komplexe Kombinatorik" und "Testbench" fand ich
aus Sicht des Praktikers allerdings völlig daneben.
Ich kenne das noch gut aus UNI-Zeiten (ich hatte allerdings leider
nie eine VHDL-Vorlesung) aber generell gilt:
auf allen möglichen Konstrukten herumreiten, also gleich mal
configurations in TB behandeln, dann mit "transport" und "reject"
operieren, tausend Varianten von Kombinatorik mit Prozessen
beschreiben (warum einfach, wenns auch kompliziert geht) usw.
Statemachines können so schön einfach sein, nein es muss
ein "Mikroprogramm" erstellt werden ...

Die UNI muss halt ihrem Anspruch gerecht werden ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.