Forum: FPGA, VHDL & Co. <ABEL> verschiedene Operationen programmieren


von patrick (Gast)


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

von Dussel (Gast)


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.

von patrick (Gast)


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?

von Dussel (Gast)


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.

von patrick (Gast)


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?

von Dussel (Gast)


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.

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.