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


von Thomas Pototschnig (Gast)


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

von Thomas Pototschnig (Gast)


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

von Andreas Kratzsch (Gast)


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

von Thomas Pototschnig (Gast)


Lesenswert?

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

Mfg
Thomas Pototschnig

von Neutron (Gast)


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.

von FPGA-User (Gast)


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.

von Thomas Pototschnig (Gast)


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

von Cpt (Gast)


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

von 123 (Gast)


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?

von Michael (Gast)


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

von Cpt (Gast)


Lesenswert?

Das Skript findest du unter
http://wetnt7.elektro.uni-wuppertal.de/welcome/Mitarbeiter/Ivaniuk/ivaniuk.html

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

von FPGA-User (Gast)


Lesenswert?

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

von dose (Gast)


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.

von Thomas Pototschnig (Gast)


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

von Kest (Gast)


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

von Cpt (Gast)


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

von FPGA-User (Gast)


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 ;-)

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.