Forum: FPGA, VHDL & Co. Programm zur Parität


von Julian H. (julian_hartmann)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich lerne gerade VHDL und habe sehr wenig Ahnung bisher.
Meine ersten Programme laufen bisher, aber mit dem einen Programm zur 
Paritätsbestimmung komme ich irgendwie nicht weiter:

An dem AusgangPar_Output soll, wenn der Bit_vectro eine ungerade Parität 
besitzt, eine 1 anliegen.
1
entity Paritaet8 is
2
  port (D_Input    : in  bit_vector (7 downto 0) := "00000000";
3
        Par_Output : out bit);
4
end Paritaet8;
5
6
architecture Behavior of Paritaet8 is
7
signal Par: bit := '0';
8
begin
9
10
  Paritaet: process (D_Input )
11
  begin
12
  Par <= '0';
13
    for i in 7 downto 0 loop
14
    Par <= D_Input(i) xor Par;  
15
    end loop;
16
  end process Paritaet;
17
  Par_Output <= Par;
18
end architecture Behavior;

Ab dem Wert 4 im Eingangsvektor funktioniert das Programm nicht mehr 
(siehe Bild)

Vielen Dank für die Antwort
Gruß
Julian

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Julian H. schrieb:
> Ab dem Wert 4 im Eingangsvektor funktioniert das Programm nicht mehr
Mit welcher Fehlermeldung?

Du solltest für Berechnungen innerhalb eines Prozesses Variablen 
verwenden. Denn der Wert eines Signals ändert sich erst beim nächsten 
wait oder am Ende des Prozesses.

Dazu solltest du also nochmal das Verhalten und die Unterschiede von 
Signalen und Variablen in Prozessen ansehen.

BTW: wenn du mit VHDL "programmierst", dann hast du noch die falsche 
Denkweise. Und dir fehlt vermutlich auch das Gefühl dafür, wie diese 
for-Schleife tatsächlich umgesetzt wird. Ein Tipp: sieh dir auch den RTL 
Schaltplan an, den der Synthesizer erzeugt. Das ist deine Schaltung, die 
der Synthesizer aus deiner Beschreibung gemacht hat.

: Bearbeitet durch Moderator
von Andreas (Gast)


Lesenswert?

Julian H. schrieb:
> Par <= D_Input(i) xor Par;

Als Tipp bitte sich mla den Unterschied zwischen Variable und Signal 
vergegenwärtigen. In deiner Schleife brauchst du ein Signal. Doch Obacht 
der Synthetisierer rollt das dann in eine riesen Kombinatorik für große 
Wortbreien auf.

von Andreas (Gast)


Lesenswert?

Andreas schrieb:
> In deiner Schleife brauchst du ein Signal.

Sorry, meinte Variable.

von Julian H. (julian_hartmann)


Lesenswert?

Vielen Dank für die Antwort :D

Lothar M. schrieb:
> Julian H. schrieb:
>> Ab dem Wert 4 im Eingangsvektor funktioniert das Programm nicht mehr
> Mit welcher Fehlermeldung?
An sich gibt es keine Fehlermeldung. Das Ergebnis stimmt einfach nicht. 
Aus der reinen Logik heraus sollte es aber stimmen, aber wahrscheinlich 
ist es an der Umsetzung gescheitert, weil ich ein Signal anstatt einer 
Variablen verwendet habe.


> Du solltest für Berechnungen innerhalb eines Prozesses Variablen
> verwenden. Denn der Wert eines Signals ändert sich erst beim nächsten
> wait oder am Ende des Prozesses.
>
> Dazu solltest du also nochmal das Verhalten und die Unterschiede von
> Signalen und Variablen in Prozessen ansehen.

Ja, ich werde mir den Unterschied nochmals genauer anschauen.

von Klakx (Gast)


Lesenswert?

Ich seh hier eine potenzielle kombinatorische Schleife, da es kein 
getakteter Process ist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Klakx schrieb:
> Ich seh hier eine potenzielle kombinatorische Schleife, da es kein
> getakteter Process ist.
In der geposteten Beschreibung ist nirgends eine kombinatorische 
Schleife, weil der Ausgang nicht auf den Eingang zurückgeführt wird. 
Das ist lediglich ein üblicher kombinatorischer Prozess, in dem aber 
alle Signale, die das Ergebnis verändern, in der Senstiviliste stehen 
müssen. Das ist hier aber nicht der Fall, weil das Signal Par hier 
falsch am Platz ist. Insofern ist die Simulation doppelt falsch...

Diese "Schleife" hier wird ja auch nicht "nacheinander ausgeführt", 
sondern in parallele Hardware ausgerollt.

: Bearbeitet durch Moderator
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
Noch kein Account? Hier anmelden.