11.10.2013 Aufrufe

Unterlagen zu Versuch 2

Unterlagen zu Versuch 2

Unterlagen zu Versuch 2

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!