www.mikrocontroller.net

Forum: FPGA, VHDL & Co. verständnisfrage process vhdl


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: marco meier (jambaleija)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
hallo
hätte da mal eine anfängerfrage zu folgenden kleinen programmausschnitt

process (run, takt) begin
if run = '0' and rising_edge (takt) then ...


nehmen wir an das run signal hätte seinen wert von 1 auf 0 gewechselt 
daraufhin startete der prozess und bewertet den ersten teil der if 
abfrage mit true was passiert dann bei der zweiten bedingung wenn zu dem 
zeitpunkt zu dem run von 1 auf 0 gewechselt hatte und der process 
deswegen gestartet ist der takt keine änderung aufgewiesen hätte

wird dann

a) die zweite bedingung mit false bewertet und der gesamte process 
bricht ab
also mit anderen worten die if bedingung kann nur true werden wenn run 
von 1 auch 0 wechselt und gleichzeitig auch der takt eine ansteigende 
taktflanke besitzt

oder

b) wird bei der if bedingung einfach so lange gewartet bis der takt eine 
ansteigende flanke aufweist und dann weiter gemacht

Autor: dito (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
marco meier schrieb:
> a) die zweite bedingung mit false bewertet und der gesamte process
> bricht ab

Sofern es keinen else-Zweig gibt oder außerhalb der if-Abfrage keine 
Anweisungen stehen, ja!

> also mit anderen worten die if bedingung kann nur true werden wenn run
> von 1 auch 0 wechselt und gleichzeitig auch der takt eine ansteigende
> taktflanke besitzt

Nicht ganz: Der if-Zweig wird ausgeführt, wenn zum Zeitpunkt der 
steigenden Taktflanke von 'takt' der Wert (Pegel) von 'run' gleich Null 
ist.

Das was du geschrieben ist, ist aber nicht synthesefähig. Richtig müsste 
es heißen:
process (takt) begin
  if rising_edge (takt) then 
    if run = '0' then
       ...

Beachte: 'run' entfällt in der Sensitivliste, da ja alles auf 'takt' 
synchronisiert ist.

Autor: Bernd S. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ich stimme dem Vorposter zu.

Die Sensitivity-List ist nur für Simulationszwecke wichtig, d.h. hier 
startet evtl. ein Prozess wenn sich was in der Sensitivity-List ändert.

Für Hardware usw. gibt es nach der Synthese nur noch Hardware, hier 
starten keine Prozesse. Um nachzuvollziehen was in Hardware passiert 
muss man sich entweder das Ergebnis ansehen, oder noch besser den 
VHDL-Code so schreiben dass er das ausdrückt was man in HW haben möchte.

Autor: marco meier (jambaleija)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
ach so dann bestimmt der ausdruck "rising_edge (takt)" nur den zeitpunkt 
zu dem run abgefragt wird und weil takt periodisch auftritt erfolgt auch 
die abfrage in festen zeiten zueinander

der quellcode müsste allerdings schon synthesefähig sein
stammt aus einer praktikumsanleitung meines professors und wurde bereits 
getestet

vollständiger quellcode
funktion: erzeugung einer zufallszahl

process (run, takt) begin
if run = '0' and rising_edge (takt) then
z <= z(12 downto 1) & (z(13) xnor z(12) xnor z(11) xnor z(8));
end if;
end process;



ist es eigentlich auch möglich einen std_logic_vector als zähler zu 
verwenden

variable Zaehler:std_logic_vector(3 downto 0)

und dann in einem process

Zaehler=Zaehler+`1`;
zu schreiben und damit den Zaehlerstand bei jedem durchlauf zu erhöhen
um am ende eine abfrage zu machen wie: if Zaehler >= "1000" then ...

danke schon mal für die bisherigen antworten

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
marco meier schrieb:
> ist es eigentlich auch möglich einen std_logic_vector als zähler zu
> verwenden

Theoretisch ja. Aber man rechnet in VHDL am besten mit unsigned und 
signed Signalen, oder bei einem Zähler am besten mit integer:
http://www.mikrocontroller.net/articles/Rechnen_in_VHDL

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
marco meier schrieb:
> variable Zaehler:std_logic_vector(3 downto 0)
Eine Variable? Wofür?
Das ist für einen Anfänger ein unnötiges No-Go!
Siehe den Beitrag "Variable vs Signal"

> ist es eigentlich auch möglich einen std_logic_vector als zähler zu
> verwenden
> variable Zaehler:std_logic_vector(3 downto 0)
> und dann in einem process
> Zaehler=Zaehler+`1`;
Man rechnet nicht mit uneingeschränkten Vektoren!
Mehr dazu im Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

> a) die zweite bedingung mit false bewertet und der gesamte process
>    bricht ab
Und fängt an zu rauchen und qualmen?
Im FPGA ist ein Prozess immer da. Es ist reale existierende Hardware, 
da kann nichts abbrechen. Du hast noch eine sehr softwarelastige 
Denkweise, das wird dir noch weitere Probleme bringen...
Als Tipp: sieh dir ab und zu mal den RTL-Schaltplan deiner 
Beschreibungen an. Dann bekommst du ein "Gefühl" für Hardware und 
Hardwarebeschreibung.

dito schrieb:
> Das was du geschrieben ist, ist aber nicht synthesefähig.
Mit ISE (und vermutlich auch anderen Synthesizern) ist es das. Es ist 
nur eine absolut unübliche Schreibweise eine Clock-Enables...
http://www.lothar-miller.de/s9y/archives/1-Clock-E...

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net