Hardware Reference
In-Depth Information
Divisionsrest:
b =q+ r
a
b
Abbildung 2.85 zeigt eine Beispieldivision. Zur Berechnung wird der Rest
gleich dem Dividenden und der Subtrahend gleich dem um n1 Stellen nach
links verschobenen Divisor gesetzt (n - Bitanzahl des Dividenden). Danach
folgen in einer Schleife für jedes Quotientenbit i beginnend mit dem größten
die Schritte:
• Subtraktion des Subtrahenden vom Rest.
• Wenn die Differenz größer null ist, erfolgt eine Übernahme der Differenz
als neuem Rest und das Quotientenbit wird gesetzt q i = 1. Sonst wird mit
dem bisherigen Rest weitergerechnet und das Quotientenbit zurückgesetzt
q i = 0.
• Vor der nächsten Subtraktion wird der Subtrahend halbiert.
Bitnummer
Rest
Subtrahend
Differenz
Quotient
3 2
1
0
Ergebnis
1
1
0
1
1
1
0
1
1
1
0
1
1
0
10
1
r=0010
0
0
1
0 1
0
1
1
0
0
1
1
0
0
1
negativ
q 3 =0 q 2 =0
negativ
100 10
1
0
0
q 1 =1
q 0 =1
q=0011
Abb. 2.85. Division vorzeichenfreier Binärzahlen
Ein nicht trivialer Zielalgorithmus sollte vor der Hardware-Nachbildung
als Programm aufgeschrieben und getestet werden. Zu Beginn der Division
wird der Variablen für den Rest der Wert des Dividenden und der Variablen
für den Subtrahenden der mit 2 n1 multiplizierte Wert des Divisors zugewie-
sen. Anschließend wird in einer Schleife für alle Quotientenbits beginnend mit
dem größten die Differenz gebildet, der Übertrag ausgewertet, mit einer Fall-
unterscheidung der neue Rest ausgewählt und das Quotientenbit zugewiesen.
Der Beschreibungsrahmen für einen Algorithmus ist in VHDL ein Prozess.
Die Testeingaben und Testausgaben können auch in VHDL im Dialog bereit-
gestellt und ausgegeben werden. Der nachfolgende Testprozess fordert solange
zur Eingabe eines Dividenden und eines Divisors auf und gibt den berechneten
Quotienten und den berechneten Divisionsrest aus, bis die Simulation durch
Eingabe der Zeichenkette »Exit« beendet wird:
Testprozess: process
variable Rest, q: tUnsigned( 3 downto 0 );
variable Subtr, d: tUnsigned( 6 downto 0 );
begin
read( "Eingabe Dividend (4 Bit): " , Rest);
read( "Eingabe Divisor (4 Bit): " , Subtr( 6 downto 3 ));
Subtr( 2 downto 0 ) := "000" ;
 
Search WWH ::




Custom Search