Hallo, ich habe folgendes Konstrukt: process (clk) begin if clk'event and clk='1' then bla <= '1'; end if; end process; Ich hab damit folgendes Problem: Wird das so synthetisiert, dass kurz nach dem 'event "bla" auf high gesetzt wird, oder wird das so optimiert, dass es gleichzeitig mit dem Takt passiert, also dass eine nachfolgende Komponente die auf das "bla"-Signal hören würde, dann "bla" im selben Takt noch als high sieht? Danke im Voraus Mfg Duck
Hallo Duck ! Ersetze doch clk'event and clk='1' then durch rising_edge(clk), dann ist alles klar definiert. darüber hinaus wäre es gut wenn Du in den process noch ein reset mit einbaust, also: if (reset='0')then bla <='1'; elsif rising_edge(clk) then blub <= '1'; Über den genauen Unterschied von rising_edge zu clk'event gab es vor längerer Zeit mal einen Thread. Findest Du unter: http://www.mikrocontroller.net/articles/VHDL#CLK.3D.271.27_and_CLK.27event_oder_rising_edge.28.29.3F Cheers Chris
#Über den genauen Unterschied von rising_edge zu clk'event gab es vor #längerer Zeit mal einen Thread. Findest Du unter: Da diese Anfrage immer wieder kommt, haben wir es in die VHDL-FAQ gesetzt: http://www.mikrocontroller.net/articles/VHDL www.mikrocontroller.net hat nicht nur das Forum sondern auch eine Artikelsammlung (wiki). Für programmierbare Logik finden sich die Artikel unter der Navi_leiste oben links unter CPLD,FPGA und Co. Vielleicht sollten wir den Titel zu FPGA,CPLD,VHDL ändern. Zur eigentlichen Frage: mit der ersten taktflanke wird bla auf eins gesetzt, ein FF dahinter ssieht das mit der zweiten Taktflanke, ein Kombinatorische Schaltung (AND,XOR,..) zwischen der ersten und zweiten Flanke. Was daraus synthetisiert wird hängt davon ab welchen Wert bla vor der ersten Flanke hat. Ist es '1' (z.B. bei signal bla :std_logic := '1') könnte das synthese tool das mit einer festen '1' ersetzen also kein FF. Ist dagegen der Initwert auf '0' gesetzt (z.B. bei signal bla :std_logic := '0') wird sicherlich ein FF eingesetzt, das nach der ersten Flanke auf '1' wechselt. Hast du keinen Initwert angegeben, tja wahrscheinlich wird sich die Synthese für ein FF entscheiden und das FF mit '0' vorladen, aber das kann auch anders umgesetz werden.
@FPGA-Küchle - Könntest Du bitte mal in den Thread MOORE / MEALY reinschaun - Danke & Gruss Chris
@FPGA-Küchle: Danke für die ausführliche Antwort. Grund für die Frage ist, dass ich da ein Problem mit einem Block-RAM und ich find einfach irgendwie den Fehler nicht. Und zwar läuft das so: Ich hab einen Prozess, der reagiert auf die steigende Flanke und setzt dann Eine Adresse, das WE-Bit und das Datum. Wenn das jetzt so ist wie du sagst, dann müsste das Schreiben in das RAM erst beim nächsten Taktzyklus wirklich "ausgeführt" werden, weil erst dann WE gleichzeitig mit der steigenden Flanke vom RAM gesehen wird - in dem Fall gibts wohl auch keine Probleme mit der Setup-Zeit. Aber trotzdem haut das nicht hin. Kann es sein, dass das Schreiben in ein BlockRAM länger als 1 Taktzyklus dauert? Oder irgendwelche anderen Ideen was ich noch falsch machen könnte? Mfg Duck
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.