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.
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.
((( )) 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
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... :-/
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.