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
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
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
argh wie dumm :-) Da hab ich den Wald vor lauter Bäumen nicht gesehen ... Mfg Thomas Pototschnig
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.
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.
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
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
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?
@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
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
... interessant ... aber : VHDL kann auch viel einfacher sein und richtig Spass machen :-)) typisch UNI
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.
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
> 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
@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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.