Programm zur Parität

#5618236
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #5618299
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.
#5618391
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.
Moderator (Firma: Titel) Persönliche Seite #5618502
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren