www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL Verständnisproblem


Autor: Duck (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.3...

Cheers Chris

Autor: FPGA-Küchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#Ü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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGA-Küchle - Könntest Du bitte mal in den Thread MOORE / MEALY 
reinschaun - Danke & Gruss Chris

Autor: Duck (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: FPGA-Küchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codeschnipsel bitte.

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.