Forum: FPGA, VHDL & Co. Syntax error


von Student (Gast)


Lesenswert?

Hallo,

habe zich varianten versucht, komme aber nicht auch die Lösung. Verstehe 
nicht wo das Problem liegt. Ich klammer die not operation ein, aber 
kriege trotzdem eine error funktion : Line 128. parse error, unexpected 
AND, expecting SEMICOLON mit Xilinix und diese mit ghdl : only one type 
of logical operators may be used to combine relation.


----Funktion für die Bestimmung der Arithmetischen Operation 
Inkrement-----
function Inc( d : std_logic_vector (3 downto 0)) return std_logic is
variable la : std_logic;

begin

la := d(3) xor d(2) xor d(1) xor (not d(0)) xor d(0) and (not (d(1) and 
(not d(2) and (not d(3)))));

return la;

end function;

wäre auf jegliche Hilfe sehr Dankbar.

von ((( )) (Gast)


Lesenswert?

Student schrieb:
> (not d(0)) xor d(0) and (not (d(1) and
> (not d(2) and (not d(3)))))

zähl mal die öffnenden und schließenden Klammern.

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


Lesenswert?

((( )) schrieb:
> Student schrieb:
>> (not d(0)) xor d(0) and (not (d(1) and
>> (not d(2) and (not d(3)))))
> zähl mal die öffnenden und schließenden Klammern.
Passt. Und jetzt?  :-o

von ((( )) (Gast)


Lesenswert?

Mist, hab' mich wohl verzählt. Sah so schön aus, sorry.

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


Lesenswert?

Ich vermute, du besteht ein Problem mit den veschachtelten Operatoren 
und deren Priorität...
Also einfach in der Funktion nicht alles auf einmal machen, sondern 
hübsch nacheinander:
1
function Inc( d : std_logic_vector (3 downto 0)) return std_logic is
2
  variable la,lb,lc : std_logic;
3
begin
4
  la := d(3) xor d(2) xor d(1) xor (not d(0)) xor d(0);
5
  lb := (not (d(1) and (not d(2) and (not d(3)))));
6
  lb := not d(1) and not d(2) and not d(3);  -- alternativ so.
7
  lc := la and lb;
8
return lc;

Woher hast du die Funktion, wie kommst du von d auf den Returnwert?
Wie wäre es, wenn du das Ganze als Lookup-Table machen würdest?

BTW:
>--Funktion für die Bestimmung der Arithmetischen Operation Inkrement--
Diese Beschreibung muss man ja nicht unbedingt kapieren...  :-/

von Student (Gast)


Lesenswert?

Ich zähle 4 klammern hinter d(3). Und 4 öffnenden dazu.

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


Lesenswert?

Lothar Miller schrieb:
> lb := (not (d(1) and (not d(2) and (not d(3)))));
> lb := not d(1) and not d(2) and not d(3);  -- alternativ so.
Hier wäre allerdings anzumerken, dass bei diesen beiden Formeln nicht 
das selbe herauskommt...   :-o
Student schrieb:
> Ich klammer die not operation ein
Du musst also wissen, was du tust...

von Student (Gast)


Lesenswert?

Lothar Miller schrieb :
> Ich vermute, du besteht ein Problem mit den veschachtelten Operatoren
> und deren Priorität...
> Also einfach in der Funktion nicht alles auf einmal machen, sondern
> hübsch nacheinander:function Inc( d : std_logic_vector (3 downto 0)) return 
std_logic is
>   variable la,lb,lc : std_logic;
> begin
>   la := d(3) xor d(2) xor d(1) xor (not d(0)) xor d(0);
>   lb := (not (d(1) and (not d(2) and (not d(3)))));
>   lb := not d(1) and not d(2) and not d(3);  -- alternativ so.
>   lc := la and lb;
> return lc;

Ordnung ist das halbe Leben ! Es funktioniert.

>Woher hast du die Funktion, wie kommst du von d auf den Returnwert?

Die Funktion ist mit Hilfe der Reed Muller logik zu beweisen.

> BTW:
>>--Funktion für die Bestimmung der Arithmetischen Operation Inkrement--
> Diese Beschreibung muss man ja nicht unbedingt kapieren...  :-/

Die Funktion ist zur Bestimmung für die Parität vom Inkrement. Ich 
Vergleiche dann die Parität mit dem Ergebnis von der tatsächliche 
Funktion um Fehler zu erkennen.

Danke für die Hilfe.

von Student (Gast)


Lesenswert?

Lothar Miller schrieb:
> Lothar Miller schrieb:
>> lb := (not (d(1) and (not d(2) and (not d(3)))));
>> lb := not d(1) and not d(2) and not d(3);  -- alternativ so.
> Hier wäre allerdings anzumerken, dass bei diesen beiden Formeln nicht
> das selbe herauskommt...   :-o
> Student schrieb:
>> Ich klammer die not operation ein
> Du musst also wissen, was du tust...

Ja das ist mir klar.
Danke trotzdem.

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.