Berufsakademie Berlin
- Informatik -
2. Semester
Digitaltechnik
Belegarbeit:
4-Bit-ALU in FPGA Implementierung
Mitglieder der Arbeitsgruppe:
Michael Kuss
Thomas Jüngel
Matthias Buchhorn
Andreas Spiller
Inhalt:
1. Aufgabenstellung
2. Tastaturdecoder (ABEL)
3. Register
29141mfh97jxh5b
29141mfh97jxh5b Befehlsregister
29141mfh97jxh5b Operandenregister
29141mfh97jxh5b Hilfsregister
4. Bus fx141m9297jxxh
5. ALU-KI-Einheit (ABEL)
6. ALU-Control-Einheit (ABEL)
7. Display
Anhang: 29141mfh97jxh5b
29141mfh97jxh5b 29141mfh97jxh5b - ABEL Dateien
29141mfh97jxh5b 29141mfh97jxh5b - Verwendete Macros aus der XILINX-Bibliothek
29141mfh97jxh5b 29141mfh97jxh5b - Schematik der Gesamtschaltung
1. Aufgabenstellung:
Entwurf einer 4-Bit-ALU in FPGA-Implementierung
Mindestanforderungen:
29141mfh97jxh5b - 4-Bit-ALU
29141mfh97jxh5b - 2 Operanden-Register (A=Akku, B)
29141mfh97jxh5b - Befehls- und Direktwerteingabe über die Tastatur
29141mfh97jxh5b - Akku-Inhaltsausgabe auf 7-Segmentanzeige permanent
29141mfh97jxh5b - Datenformat: vorzeichenlose Integerwerte von 0 bis 9 (auch Ergebnis)
29141mfh97jxh5b - Befehlssatz:
29141mfh97jxh5b 29141mfh97jxh5b 29141mfh97jxh5b
Befehl |
Erklärung |
mov A,c |
lädt die Konstante c von Tastatur in Register A=Akku; A:=const |
mov B,c |
lädt die Konstante c von Tastatur in Register B; B:=const |
add A,B |
addiert die Inhalte der Register A und B,
Ergebnis wird nach A=Akku zurückgeschrieben; A:=(A+B) |
sub A,B |
subtrahiert den Inhalt des Reg. B vom Inhalt des Reg. A, Ergebnis wird nach A zurückgeschrieben ; A:=(A-B) |
inc A |
inkrementiert den Inhalt von A um 1; A:= (A+1) |
dec A |
dekrementiert den Inhalt von A um 1; A:= (A-1) |
shr A |
verschieben des Inhalts von A nach rechts; ai:=ai+1 |
shl A |
verschieben des Inhalts von B nach links; ai+1:=ai |
Realisierung / Funktionsnachweis:
29141mfh97jxh5b - Auf dem XILINX Schaltkreis XC 4003
Entwurfsanforderungen:
29141mfh97jxh5b - Gesamtschaltung mit dem Schematic-Editor des XILINX Design Managers entwerfen
29141mfh97jxh5b - Mindestens zwei Teilblöcke in HDL-Eingabe (ABEL)
Geforderte Tastaturbelegung :
29141mfh97jxh5b 29141mfh97jxh5b 29141mfh97jxh5b
Befehl |
Taste |
add A,B |
3 |
sub A,B |
4 |
inc A |
5 |
dec A |
6 |
shr |
7 |
shl |
8 |
mov A,c |
· |
mov B,c |
C |
Tastatur-Decoder:
(ABEL-Datei siehe Anhang)
Der Tastatur-Decoder setzt die von der Tastatur kommenden Signale (12) in einen Binärcode (4) um.
Taste |
dezimale Kodierung |
binäre Kodierung |
0 |
0 |
0000 |
1 |
1 |
0001 |
2 |
2 |
0010 |
3 |
3 |
0011 |
4 |
4 |
0100 |
5 |
5 |
0101 |
6 |
6 |
0110 |
7 |
7 |
0111 |
8 |
8 |
1000 |
9 |
9 |
1001 |
· |
10 |
1010 |
Der TE-Ausgang (Tastatur Enable) am Tastaur-Decoder wird immer dann HI, wenn eine beliebige Taste auf der Tastatur gedrückt wird. Mit diesem Signal wird der CE-Eingang des Befehlsregisters (Typ RD4, siehe Anhang) gesetzt. Der an den Ausgängen (xA3, xA2, xA1, xA0) des Tastatur-Decoders liegende Binärcode wird dann im Befehlsregister gespeichert.
3. Register:
In der Schaltung werden 5 Register verwendet. Basis ist immer das Register vom Typ RD4 aus der XILINX-Bibliothek (siehe Anhang). Es gibt ein Befehlregister, zwei Operandenregister A (Akku) und B und zwei Hilfsregister für A und B. Die Signale zur Steuerung der Registerfunktionen kommen von der ALU-Control-Einheit.
Befehlsregister (Typ RD4):
Das Befehlsregister speichert die an der Tastatur getätigten Eingaben. Der CE-Eingang muß hierfür auf HI liegen (kommt vom TE-Ausgang des Tastaturdecoders) am C-Eingang muß der Systemtakt anliegen.
Die Ausgänge des Befehlsregisters liegen über Tristate-Buffer (TBUF siehe Anhang) am BUS und außerdem direkt an der ALU-Control.
Operandenregister A (Akku) und B:
Die Operandenregister speichern die Operanden für die arithmetischen und logischen Funktionen der ALU.
Im Register A werden auch die Ergebnisse der Berechnungen gespeichert. Die Eingänge beider Register sind direkt auf den BUS geschaltet. Die Ausgänge sind an BCD-Decoder angeschlossen, so daß der Inhalt des Registers auf einer 7-Segment-Anzeige dargestellt werden kann. Außerdem sind die Ausgänge über Tristate-Buffer(TBUF siehe Anhang) auf den BUS geschaltet.
Hilfsregister:
Die Hilfsregister für die Register A und B speichern den Inhalt der Operandenregister. Die Eingänge der Hilfsregister sind direkt auf den BUS geschaltet, die Ausgänge führen direkt zur ALU-KI (Rechenwerk).
So wird gewährleistet, das innerhalb eines Zustandes beide Operanden verfügbar sind.
4. Bus fx141m9297jxxh :
Der BUS besteht aus vier parallelen Leitungen (4-Bit Busbreite), die alle Funktionsgruppen miteinander verbinden. Damit nicht mehrere Funktionsgruppen gleichzeitig ihre Signale auf den BUS senden (Buskonflikte), sind die Ausgänge der entsprechenden Gruppen mit Tristate-Buffern vom BUS entkoppelt. Die Freischaltung des Ausgangs einer Funktionsgruppe erfolgt durch ein Signal der ALU-Control-Einheit an die Tristate-Buffer. Soll eine Funktionsgruppe (Register) vom BUS lesen, so wird auch hier ein entsprechendes Signal von der ALU-Control benötigt.
5. ALU-KI (Rechenwerk):
Das Rechenwerk besteht aus einer kombinatorischen Schaltung und einem 4-Bit-Adder (ADD4 siehe Anhang) mit Carry-In/Out. Alle Berechnungen werden in eine Addition umgesetzt, die kombinatorische Schaltung wandelt die Operanden in die erforderliche Form um.
Die folgende Tabelle stellt die Ausgangsvariablen in Abhängigkeit von den Eingangsvariablen dar:
Befehl |
Binär |
xA4 |
xA3 |
xA2 |
xA1 |
xB4 |
xB3 |
xB2 |
xB1 |
CarryIn |
add |
0011 |
A4 |
A3 |
A2 |
A1 |
B4 |
B3 |
B2 |
B1 |
0 |
sub |
0100 |
A4 |
A3 |
A2 |
A1 |
!B4 |
!B3 |
!B2 |
!B1 |
1 |
inc |
0101 |
A4 |
A3 |
A2 |
A1 |
0 |
0 |
0 |
0 |
1 |
dec |
0110 |
A4 |
A3 |
A2 |
A1 |
1 |
1 |
1 |
1 |
0 |
shr |
0111 |
0 |
A4 |
A3 |
A2 |
0 |
0 |
0 |
0 |
0 |
shl |
1000 |
A4 |
A3 |
A2 |
A1 |
A4 |
A3 |
A2 |
A1 |
0 |
Aus der Tabelle ergeben sich folgende Gleichungen für die Ausgangszustände:
(Die Kodierung der Befehle in den Gleichungen ist unterstrichen)
XA1= 29141mfh97jxh5b (!X3&!X2&X1&X0&A1)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&A1)# 29141mfh97jxh5b (!X3&X2&!X1&X0&A1)#
29141mfh97jxh5b (!X3&X2&X1&!X0&A1)# 29141mfh97jxh5b (!X3&X2&X1&X0&A2)# 29141mfh97jxh5b (X3&!X2&!X1&!X0&A1);
XB1= 29141mfh97jxh5b (!X3&!X2&X1&X0&B1)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&!B1)#
29141mfh97jxh5b (!X3&X2&X1&!X0)# 29141mfh97jxh5b 29141mfh97jxh5b (X3&!X2&!X1&!X0&A1);
XA2= 29141mfh97jxh5b (!X3&!X2&X1&X0&A2)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&A2)# 29141mfh97jxh5b (!X3&X2&!X1&X0&A2)#
29141mfh97jxh5b (!X3&X2&X1&!X0&A2)# 29141mfh97jxh5b (!X3&X2&X1&X0&A3)# 29141mfh97jxh5b (X3&!X2&!X1&!X0&A2);
XB2= 29141mfh97jxh5b (!X3&!X2&X1&X0&B2)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&!B2)#
29141mfh97jxh5b (!X3&X2&X1&!X0)# 29141mfh97jxh5b 29141mfh97jxh5b (X3&!X2&!X1&!X0&A2);
XA3= 29141mfh97jxh5b (!X3&!X2&X1&X0&A3)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&A3)# 29141mfh97jxh5b (!X3&X2&!X1&X0&A3)#
29141mfh97jxh5b (!X3&X2&X1&!X0&A3)# 29141mfh97jxh5b (!X3&X2&X1&X0&A4)# 29141mfh97jxh5b (X3&!X2&!X1&!X0&A3);
XB3= 29141mfh97jxh5b (!X3&!X2&X1&X0&B3)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&!B3)#
29141mfh97jxh5b (!X3&X2&X1&!X0)# 29141mfh97jxh5b 29141mfh97jxh5b (X3&!X2&!X1&!X0&A3);
XA4= 29141mfh97jxh5b (!X3&!X2&X1&X0&A4)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&A4)# 29141mfh97jxh5b (!X3&X2&!X1&X0&A4)#
29141mfh97jxh5b (!X3&X2&X1&!X0&A4)# 29141mfh97jxh5b (X3&!X2&!X1&!X0&A4);
XB4= 29141mfh97jxh5b (!X3&!X2&X1&X0&B4)# 29141mfh97jxh5b (!X3&X2&!X1&!X0&!B4)#
29141mfh97jxh5b (!X3&X2&X1&!X0)# 29141mfh97jxh5b 29141mfh97jxh5b (X3&!X2&!X1&!X0&A4);
Carry= 29141mfh97jxh5b (!X3&X2&!X1);
Schematisches Bild der ALU-Control-Einheit
A_IE 29141mfh97jxh5b Register A - Input enable
A_OE 29141mfh97jxh5b Register A - Output enable
B_IE 29141mfh97jxh5b Register B - Input enable
B_OE 29141mfh97jxh5b Register B - Output enable
A_t_IE 29141mfh97jxh5b Zwischenregister A - Input enable
B_t_IE 29141mfh97jxh5b Zwischenregister B - Input enable
ALU_OE ALU - Output enable
BR_OE 29141mfh97jxh5b Befehlsregister - Output enable
BR_IE 29141mfh97jxh5b Befehlsregister - Input enable
BR-reset Befehlsregister löschen
6. ALU-Control-Einheit:
Die Alu-Control-Einheit läßt sich als Zustandsgraph mit neun inneren Zuständen darstellen.
Jeder dieser inneren