Forum: FPGA, VHDL & Co. Addierer und Multiplizierer für zwei 2 Bit-Zahlen


von Gustav S. (exguna)


Lesenswert?

Hallo zusammen ,
ich bin neu im ABEL-Programm und ich versuche so ein Problem zu lösen.
 Hier unten:


Die 2 Bit-Zahlen A und B werden im Zweierkomplement dargestellt.

A besteht aus den Bits A0 und A1. B besteht aus den Bits B0 und B1.

Die Bits A0 und A1 werden mit den Schaltern S1 und S2 erzeugt.

 A1 ist das MSB (S1). Die Bits B0 und B1 werden mit den Schaltern S3 und 
S4 erzeugt.
 B1 ist das MSB (S3).
Das Resultat der Addition ist die Zahl Z, die ebenfalls im 
Zweierkomplement dargestellt wird.

Sie besteht aus den Bits Z0..Z3, die mit den LED's D1..D4 angezeigt 
werden. Z3 ist das MSB (D1).

Erstellen Sie ein ABEL-Programm. Führen Sie die Simulation durch. 
Programmieren Sie das MACH-Demoboard und weisen Sie die Funktion der 
Schaltung nach.

DANKE FÜR EURE HILFE

von Leonard Lebewohl (Gast)


Lesenswert?

Gustav Sunday schrieb:
> Hallo zusammen ,
> ich bin neu im ABEL-Programm und ich versuche so ein Problem zu lösen.
>  Hier unten:

Sei helle -> mach (Wahrheits-)tabelle

http://de.wikipedia.org/wiki/Wahrheitstabelle

(1)für die Multiplikation
a     b     y
1     1     1
1     0     0
0     1     0
...
-1   -1     1

(2)-> jetzt ne neue tabelle aufstellen in der die zahlen binär im 
Zweikomplemment geschrieben sind

(3)jetzt für die 4 bits von y jeweils die logikgleichung aufstellen

also sowas wie

http://de.wikipedia.org/wiki/Boolesche_Algebra

y(0)  =  (a(0)  UND b(0))  oder (a(0) und negiert b(0))

(4) diese Logikleichungen in ABEL beschreiben

http://public.rz.fh-wolfenbuettel.de/~krausea/vl/Labor/DT_I/DISK4/abel_Anl.htm


Folgendes PDF beschreibt auch ganz gut wie man mit ABEL 
Digitalschaltungen bastelt:
http://www.latticesemi.com/~/media/Documents/UserManuals/ABEL-HDLReferenceManual.PDF



> Erstellen Sie ein ABEL-Programm. Führen Sie die Simulation durch.
> Programmieren Sie das MACH-Demoboard und weisen Sie die Funktion der
> Schaltung nach.

Mit Sie bist du gemeint, nicht das Forum.

MfG

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


Lesenswert?

Gustav Sunday schrieb:
> ich versuche so ein Problem zu lösen.
Zeig mal deinen Lösungsanstz für diese Hausaufgabe. Und dann sag wo es 
klemmt. Dann kann dir geholfen werden. Es wird aber keiner deine 
Arbeit machen...

> Erstellen Sie ein ABEL-Programm.
Das ist jetzt aber wirklich erschütternd, dass auf einer Universität so 
etwas verlangt wird. Das ist wie wenn im Deutschunterricht einer 
vorschreibt: "Ritzen sie ihren Aufsatz in eine Steintafel!"...

> Sie besteht aus den Bits Z0..Z3, die mit den LED's D1..D4 angezeigt
> werden. Z3 ist das MSB (D1).
Das treibt die Verwirrung und die Kuriosität nur noch auf die Spitze. 
Wenn ich sowas mache, dann werden die LEDS ebenfalls mit D0..3 
durchnummeriert und so angeordnet, dass das MSB die D3 und in 
Leserichtung links ist...

: Bearbeitet durch Moderator
von Gustav S. (exguna)


Lesenswert?

Also bis Hier bin ich gekommen  aber  es klappt gut nur mit Positive 
Zahlen ....

so sieht mein Programm aus:

MODULE ADDIERER

TITLE 'ADDIERER MIT 2BITZAHLEN'

DECLARATIONS
    "Inputs
 A1..A0,B1..B0 pin;
 A = [A1..A0];
  B = [B1..B0];
  I = [B1..B0,A1..A0];

"Outputs
S3..S0,CO pin istype 'com';

 S = [S3..S0];

EQUATIONS
when (( A>0) &( B>0)) then
//@IF (A>0 & B>0)

TRUTH_TABLE ( [ A1,A0, B1,B0] -> [S3,S2,S1,S0] )

[ 0,0,0,0 ] -> [0, 0,0,0 ] ;
[ 0,0,0,1 ] -> [0,0,0,1 ] ;
[ 0,0,1,0 ] -> [0,0,1,0 ] ;
[ 0,0,1,1 ] -> [0,0,1,1 ] ;

[ 0,1, 0,0] -> [0,0,0,1 ] ;
[ 0,1, 0,1 ] -> [0,0,1,0 ] ;
[ 0,1, 1,1] -> [0,1,0,0 ] ;
[ 0,1, 1,0 ] -> [0,0,1, 1 ]
;
[ 1,0,0,1 ] -> [0, 0,1,1 ] ;
[ 1,0,0,0 ] -> [0,0,1, 0 ] ;
[ 1,0,1,1 ] -> [0,1,0,0 ] ;
[ 1,0,1,0 ] -> [0,1,0, 0 ] ;

[ 1,1,0,1 ] -> [0,1,0, 0 ] ;
[ 1,1,0,0 ] -> [0,0,1,1 ] ;
[ 1,1,1,1 ] -> [ 0,1,1, 0 ] ;
[ 1,1,1,0 ] -> [0,1,0, 1 ];


    // S = A + B;
    //when (S < A) # (S < B) then CO = 1;
    // else CO = 0;
else when ((A<0)  #(B<0) )THEN

//[!A1,!A0,!B1,!B0] -> ![S3,S2,S1,S0];

TRUTH_TABLE ( [ A1,A0, B1,B0] -> [S3,S2,S1,S0] )

[ 0,0,0,0 ] -> [0, 0,0,0 ] ;
[ 0,0,0,1 ] -> [0,0,0,1 ] ;
[ 0,0,1,0 ] -> [0,0,1,0 ] ;
[ 0,0,1,1 ] -> [0,0,1,1 ] ;

[ 0,1, 0,0] -> [0,0,0,1 ] ;
[ 0,1, 0,1 ] -> [0,0,1,0 ] ;
[ 0,1, 1,1] -> [0,1,0,0 ] ;
[ 0,1, 1,0 ] -> [0,0,1, 1 ]
;
[ 1,0,0,1 ] -> [0, 0,0,0 ] ;
[ 1,0,0,0 ] -> [0,0,0, 1 ] ;
[ 1,0,1,1 ] -> [0,0,0,0 ] ;
[ 1,0,1,0 ] -> [0,0,1, 1 ] ;

[ 1,1,0,1 ] -> [0,0,1, 1 ] ;
[ 1,1,0,0 ] -> [0,0,1,1] ;
[ 1,1,1,1 ] -> [ 0,0,1, 0 ] ;
[ 1,1,1,0 ] -> [0,0,1, 1 ];


END

 >>> ich kriege so ein Error Message<<<

0028 |[ 0,1, 0,0] -> [0,0,0,1 ] ;
        ^
Syntax Error 1105: In "addierer.abl":28:Signal name expected.

0028 |[ 0,1, 0,0] -> [0,0,0,1 ] ;
                                  ^
Syntax Error 1049: In "addierer.abl":28:Expression element expected.
Fatal Error 1999: Too many errors.
Done: failed with exit code: 0002.

von Kain (Gast)


Lesenswert?

Gustav Sunday schrieb:
> Erstellen Sie ein ABEL-Programm.
Du arme Sau! Ich kenne eine ganze Abteilung, die sich noch mit dem Mist 
abquälen muss und ich danke Gott (genauer meinem Abteilungsleiter) 
dreimal täglich dafür, dass wir das nicht machen müssen.

von Jörg E. (jackfritt)


Lesenswert?

Ich habe keine Ahnung davon aber evtl liegst an deiner

If
Then Else

When Then Else?

Vielleicht gibts bei when.... Kein Else Zweig?

: Bearbeitet durch User
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.