Syntax error

Gast #2249203
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.
Moderator (Firma: Titel) Persönliche Seite #2249220
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...  :-/
Gast #2249235
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.
Gast #2249236
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.

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