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
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:
1 | process (takt) begin |
2 | if rising_edge (takt) then |
3 | if run = '0' then |
4 | ...
|
Beachte: 'run' entfällt in der Sensitivliste, da ja alles auf 'takt' synchronisiert ist.
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.
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
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
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-Enable-in-einer-ISE-VHDL-Beschreibung.html
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.