<ABEL> verschiedene Operationen programmieren

Gast #3037464
Lesenswert?

Hallo,

ich muss in ABEL folgenden Baustein programmieren:
CPLD vom Typ Match M4A5-128/64 ein Modul für die Realisierung einer ALU.

Ich verwende das Programm: "Lattice ispLEVER".

Ich muss folgende Operatoren programmieren: not, and, or, add, addc, rl, 
rr, rrc, rlc und cmp.

Die Eingangsoperatoren sind A und B --> jeweils 4 Bit. Es gibt dann noch 
einen Eingang Carry-in.
Ausgang: O(logischerweise wieder 4bit) und halt noch Carry-out.

Als Status soll Zero geliefert werden, wenn das ALU-Ergebnis Null ist.
Meint man damit einfach einen eigenen Pin machen und wenn O=0 ist, dann 
soll ich das senden? Oder wie ist das gemeint?

Was hat mit diesem Carry in und out aufsich? Welche zweck hat das? Man 
schickt einfach das Carry rein und wenn es sich im Baustein geänderet 
hat dann kommst verändert raus und sonst nicht? Nicht mehr und nicht 
weniger ist das?

Das habe ich bis jetzt gemacht: http://pastebin.com/7skv96rT

Ich denke die Test-Vectoren bei NOT sind richtig, aber bei OR und AND 
bin ich mir nicht sicher.

Denn da habe ich ja nicht alle möglichkeiten von 4Bit-UND-Verknüpfung 
durchprobiert oder?

Ich mache ja nur: 0001 & 0001 und dann 0010 & 0010 etc.
Aber es kann ja 0001 & 0010 auch vorkommen.

Kann mir einer nen Tipp geben wie ich das machen könnte?

Ansonsten ist alles richtig, was ich bisher gemacht habe?

Danke im voraus!

mfg
Gast #3037521
Lesenswert?

>ich muss in ABEL
Wo muss man heute noch ABEL benutzen? Meines Wissens ist das doch 
inzwischen ganz ungebräuchlich.

patrick schrieb:
> Als Status soll Zero geliefert werden, wenn das ALU-Ergebnis Null ist.
> Meint man damit einfach einen eigenen Pin machen und wenn O=0 ist, dann
> soll ich das senden?
Wenn das Ergebnis 0 ist, soll Zero '1' sein, sonst '0'. Das ist mit ganz 
einfacher Logik zu schaffen.

patrick schrieb:
> Was hat mit diesem Carry in und out aufsich? Welche zweck hat das? Man
> schickt einfach das Carry rein und wenn es sich im Baustein geänderet
> hat dann kommst verändert raus und sonst nicht? Nicht mehr und nicht
> weniger ist das?
Was? Carry In und Carry Out haben nichts direkt miteinander zu tun. 
Natürlich hängt das Carry Out auch vom Carry In ab, aber nicht so, dass 
Carry Out nur eine Funktion von Carry In ist. Informiere dich mal, wie 
eine Addition funktioniert, am Besten in Digitaltechnik. Dann wirst du 
verstehen, was das Carry macht.

Im Programm sind die Carries falsch. Wenn ich mich nicht total vertue, 
muss das Carry Out bei allen logischen Operationen '0' sein. Das Carry 
bei der Addition ist auf jeden Fall falsch.

Versuch die Fehler nacheinander zu beheben, dann kommen wir langsam auf 
die Lösung.
Gast #3037688
Lesenswert?

Dussel schrieb:
> Wo muss man heute noch ABEL benutzen?

In der Schule^^, als Übungsaufgabe.

Zum Carry:

Naja ich weiß schon, das ein Carry z.b. bei einer 8Bit Addition 
entstehen kann, also das 9te Bit ist dann das Carry, in dem Fall ist es 
bei mir das 5te Bit, weil ich ja 4Bit Additionen habe.

Bei ADD muss ich das Carry nicht berücksichtigen und bei ADDC schon.

Ja aber was bedeutet dieses Carry in und out jetzt genau?
Gast #3037724
Lesenswert?

Das Carry Out ist ein 1-Bit Signal/Pin/Ausgang, das gesetzt ist, wenn 
bei der 4-Bit Addition ein Überlauf auftritt, also wenn das Ergebnis 
eigentlich fünfstellig ist.
Das Carry In ist entsprechend ein 1-Bit Signal/Pin/Eingang, an den man 
das Carry der vorherigen Berechnung anlegen kann. Praktisch ist es dann 
so, dass bei ADDC, also Addition mit Carry das Carry zum Ergebnis 
addiert wird. ADD ist o=a+b und ADDC ist o=a+b+c. Dabei ist c eben keine 
vollwertige n-Bit-Zahl, sondern nur ein einzelnes Bit, also kann es auch 
nur den Wert 1 oder 0 haben.
Gast #3037944
Lesenswert?

Mh ich verstehe es noch nicht ganz.

Für was brauche ich es dann bei AND und OR, also logische Operationen? 
Ja ok da ist es halt einfach 0, aber warum? Soll ich dann einfach cout=0 
machen?

Oder wie kann ich mir da das vorstellen? cin ist dann was bei den log. 
Operationen?
Gast #3038136
Lesenswert?

patrick schrieb:
> Ja ok da ist es halt einfach 0, aber warum? Soll ich dann einfach cout=0
> machen?
Genau. Bei logischen Operationen wird das Carry nicht benötigt. Deshalb 
wird das Carry In einfach ignoriert und das Carry Out kann beliebig 
sein. Auf '0' setzen ist wohl am Besten.
Wenn die ALU nur logische Operationen ausführen müsste, könntest du 
Carry In und Carry Out ganz weglassen, also auch aus der Definition der 
Ein- und Ausgänge. Da das Carry aber für die Addition (und eventuell 
auch für Vergleiche) benötigt wird, muss es in der Definition vorhanden 
sein, wird aber dann bei logischen Operationen nicht benutzt.

patrick schrieb:
> cin ist dann was bei den log.
> Operationen?
Ein unbenutzter Eingang. Das ist ähnlich, wie bei dem NOT. Da wird auch 
nur der Eingang A benutzt und Eingang B ignoriert. Und genauso wird bei 
allen logischen Operationen das Carry ignoriert, weil es da keine 
Bedeutung hat.

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