Unterlagen zu Versuch 2
Unterlagen zu Versuch 2
Unterlagen zu Versuch 2
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Praktikum <strong>zu</strong> RgS 2 <strong>Versuch</strong>2: VHDL-VERHALTENSBESCHREIBUNG<br />
}<br />
return n;<br />
void main(void) {<br />
char x,y;<br />
printf("x := ");<br />
scanf("%c",&x);<br />
y = numbits(x);<br />
printf("Anzahl der gesetzten Bits = %d \n",y);<br />
return;<br />
}<br />
Man beachte, dass in der Hochsprache C auf einen Datentyp char bitweise logische Verknüpfungen<br />
über das gesamte Datenwort (d & 1) und Verschiebeoperationen (d >> 1) möglich sind! Aus der arithmetischen<br />
Sicht entspricht (d & 1) der Abfrage, ob d gerade oder ungerade ist, also (d%2 == 1),<br />
wenn die Zahl auf ungerade <strong>zu</strong> prüfen ist.<br />
Ein Vergleich <strong>zu</strong>r Ada Lösung soll das aufzeigen. Ada ist strenger und lässt bitweise logische Verknüpfungen<br />
wie UND, ODER, usw. nicht einfach <strong>zu</strong>, wie C. Also muss char erst nachgebildet werden. Das<br />
erfolgt in der Typ-Vereinbarung type byte is mod 2**8;, dem sog. Modulartyp. Dieser Typ entspricht<br />
dem char im C-Programm. Modulartypen in Ada erlauben bitweise logische Verknüpfungen, wie im Programm<br />
mit (d and 1) <strong>zu</strong> sehen ist, aber keine Verschiebungen! Hier nutzen wir den Zusammenhang,<br />
dass die Rechtsverschiebung (Verschiebung <strong>zu</strong> kleineren Stellenwertigkeiten) einer ganzzahligen Dualzahl<br />
um eine Stelle der Division durch die Zahl 2 entspricht.<br />
Der Rest des Ada Programmes sollte nicht näher erläutert werden, sondern dient nur der Vollständigkeit,<br />
damit ein ablauffähiges Programm vorliegt. Nur soviel: Das Package ada.text_io.modular_io dient<br />
der Ein- Ausgabe auf dem Bildschirm. Es wird mit dem Typ byte neu erzeugt und mit dem Namen<br />
byte_io versehen, um die Ein- und Ausgabeprozeduren für Daten vom Typ byte bereit<strong>zu</strong>stellen.<br />
with ada.text_io, ada.integer_text_io;<br />
use ada.text_io, ada.integer_text_io;<br />
procedure test is<br />
type byte is mod 2**8; -- new type<br />
package byte_io is new ada.text_io.modular_io(byte);<br />
use byte_io;<br />
a,b : byte;<br />
function numbits(a :in byte) return byte is<br />
n, k, d : byte := 0;<br />
begin<br />
d := a;<br />
for k in 1..8 loop<br />
if (d and 1) = 1 then<br />
n := n + 1;<br />
end if;<br />
d := d / 2;<br />
end loop;<br />
return n;<br />
end numbits;<br />
begin<br />
put("a := ");<br />
get(a);<br />
b:= numbits(a);<br />
put("Anzahl der gesetzten Bits =");<br />
put(b);<br />
new_line;<br />
end test;<br />
Universität Duisburg-Essen; Fakultät 5; Abt. IIMT; Inst. Informationstechnik (IT), Verteilte Systeme (VS) Seite 5