Maximilian L. schrieb:
> --Zähler mit asynchronem Reset
Wenn da ganz vorne ein wait for rising_edge() steht, dann ist der
komplette nachfolgende Prozess synchron. Egal, ob und wie danach
irgendwelche if-else verschachtelt sind.
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
> Mir ist bewusst, dass es sich nicht um einen vollständigen Code handelt
> sondern nur um ein Fragment des process.
Dieser Prozess wird so bestenfalls vom Simulator irgendwie "gefressen".
Der Synthesizer wird da sehr wahrscheinlich wild den Kopf schütteln.
Denn der Synthesizer muss alles als Flipflop abbilden, was mit einem
rising_edge() oder falling_edge() oder genauer mit einem 'event zu tun
hat. Und das schafft er mit deiner Hardwarebeschreibung garantiert
nicht.
> Mir ist bewusst, dass es sich nicht um einen vollständigen Code handelt
Wenn du konkrete Fragen hast, dann solltest du genau und komplett
den Code posten, den du dem Simulator bzw. dem Synthesizer vorgelegt
hast.
Den Beitrag "Re: Wie funktioniert dieses VHDL Programm?" könntest du dir
da auch kurz mal ansehen.
> wait until rising_edge(clk,reset);
Das hast du dir jetzt aber selbst ausgedacht? Oder wo im Handbuch deines
Synthesizers steht, dass das geht?
> Was ist denn nun richtig?
Lass dir von deiner Hardwarebeschreibung ab&zu einfach mal einen
Schaltplan malen (RTL Schematic) und sieh dir die Komponenten an, die da
drin verwendet werden. Sind das synchrone oder asynchrone Flipflops?
> Darf die Variable "counter" vom Typ std_logic_vector sein?
1. Du verwendest keine Variable "counter", sondern ein Signal "counter".
2. Nimm keine Variablen, wenn du keine brauchst. Hier brauchst du keine.
3. Rechne nicht mit std_logic_vector. Nimm (un)signed oder integer
dafür. Am besten siehst du dir die numeric_std mal ganz genau an. Die
reicht, um später sein Brot damit verdienen zu können.
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
Beitrag "VHDL Grundlagen : Rechnen"
> Muss ich die Variable counter also zu unsigned konvertieren bevor ich
> Inkrementierungen durchführe?
Deklariere das Signal "counter" als unsigned oder integer. Dann sparst
du dir das Umwandeln.
> Ich bin mir nicht sicher ob das Aufnehmen des Resets in die Sensivity
> List gleich für einen asynchronen Reset sorgt.
Ich sehe da nirgends eine Sensitivliste!
Ein "wait until rising_edge(clk);" macht viel, viel mehr als wenn du
einfach nur clk in eine Sensitivliste eintragen würdest. Sieh dir
einfach mal den Code an, der hinter rising_edge() steckt:
https://www.csee.umbc.edu/portal/help/VHDL/packages/std_logic_1164.vhd
https://tams.informatik.uni-hamburg.de/vhdl/doc/faq/FAQ1.html#rising_edge
> ich arbeite mich zurzeit in VHDL rein und versuche viele mögliche
> Variationen für den Zähler im process zu konstruieren.
Vergiss das. Das ist planloses Herumgebastel. Geh besser her und mache
einen einzigen einfachen Zähler. Schau dir den RTL-Schaltplan an und
überleg dir, ob du das wolltest, was der Synthesizer aus deiner
Beschreibung gemacht hat.
Dann mache den Zähler "komplzierter" oder "anders" und schau, ob der
Synthesizer das verstanden hat, was du beschrieben hast.
So ähnlich habe ich das z.B. im
Beitrag "Re: Hardware mit VHDL "richtig" beschreiben." mal mit
einem einzigen Flipflop gemacht.
BTW: bitte nimm die [vhdl] Tags zum Umrahmen des geposteten VHDL Codes.
Einfach mal den Text unter
1 | Antwort schreiben
|
2 | Wichtige Regeln - erst lesen, dann posten!
|
durchlesen
BTW2:
Im Beitrag "Re: Einfacher VHDL Zähler" sind auch noch
ein paar brauchbare Links... ;-)