Anwendung der Tabelle zur Darstellung der entsprechenden Dualzahl:
Hexadezimalzahl:
8
B
C
7
Dualzahl:
1000
1011
1100
0111
Darstellung negativer Zahlen
Zweierkomplement
Dezimal- zahl
Dualzahl Zweierkomplement MSB..LSB
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
Dezimal- zahl
Dualzahl Zweierkomplement MSB..LSB
-8
1000
-7
1001
-6
1010
-5
1011
-4
1100
-3
1101
-2
1110
-1
1111
Im Zweierkomplement gibt die linke Stelle das Vorzeichen an.
Bei der Bildung des Zweierkomplements, der zugehörigen negativen Zahl,
werden alle Bits invertiert und 1 zur Zahl addiert.
Rechnen mit dem Zweierkomplement
Bildung einer negativen Zahl:
3: 0011
Invertieren:
1100
1 addieren:
1101: -3
Addition:
4 + (-3) = 1
4:
0
1
0
0
-3:
1
1
0
1
1
1
1
(1)
0
0
0
1
Festkommadarstellung
Dezimal- zahl
Dualzahl MSB..LSB
0.00
00.00
0.25
00.01
0.50
00.10
0.75
00.11
1
01.00
1.25
01.01
1.5
01.10
1.75
01.11
Dezimal- zahl
Dualzahl MSB..LSB
2.00
000010.00
2.25
000010.01
2.5
000010.10
2.75
000010.11
3.0
000011.00
3.25
000011.01
3.5
000011.10
3.75
000011.11
Nur die Interpretation der Wertigkeit ändert sich.
Gleitkommadarstellung
IEEE-754-Gleitkommaformat
Typ: single, 32 Bit, 4 Byte
31
30
29
24
23
22
21
1
0
S
E
E
..
E
E
M
M
..
M
M
V
Exponent
Mantisse
Vorzeichen, sign
\( z = (-1)^{V} \cdot 1.M \cdot 10 ^{(E-127)} \)
Dezimalstellen: 7..8
Kleinste Zahl: 1.175 ⋅ 10-38
Größte Zahl: 3.403 ⋅ 1038
Es ergeben sich beim Rechnen immer aufgrund der beschränkten Genauigkeit Rundungsfehler.
Abkürzung ASCII: Amerikanischer Standard-Code für den Informationsaustausch
Abkürzung UTF-8 (HTML Dokumente): 8-Bit Universal Character Set(UCS) Transformation Format
Das Microsoft Betriebssystem verwendet: UTF-16 Little Endian format.
Weitere Details bei Wikipedia.
Bilder, Zeichen, Sprites, Emoticons
Buchstaben und Zeichen können als 8 x 8 Pixel abgespeichert werden.
Videospiele hatten zu Anfang 8 x 8 Pixel Tiles als Hintergrund und die Figuren sind 16 x 16 Sprites
z. B. Pacman
Gray-Code und Thermometercode
Dezimal- zahl
Dualzahl
Gray Code
Thermometercode
0
000
000
0000000
1
001
001
0000001
2
010
011
0000011
3
011
010
0000111
4
100
110
0001111
5
101
111
0011111
6
110
101
0111111
7
111
100
1111111
Der Gray-Code ist robust und kompakt.
Beim Gray Code wird beim Übergang zwischen zwei aufeinanderfolgenden Codes nur eine Stelle, ein Bit geändert.
Es können nur kleine Fehler auftreten.
Dies ist wichtig bei der Realisierung
Übergang: 101 -> 111
keine Zwischenwerte möglich, keine Fehlposition
Eine Codierscheibe kann die Position eines Motors anhand des Codes bestimmen.
Die Codierscheiben sind hier gezeigt. Ein Photodetektor erzeugt eine 0 (weisse Fläche) oder 1 (schwarze Fläche).
7 Segment Anzeige
Es gibt eine Konfigurationsdatei (.xdc oder .ucf), die
die Verbindungsdaten eines Schaltungsboards beschreibt.
Es wird jedem Pin z.B 'A11' ein Signalname zugeordnet.
Hexadezimalzahlen auf dem 7 Segment Display.
7 Segment Anzeige: Hexadezimalzahlen
7 Segment Anzeige: VHDL
entity HEX2LEDA is
port (
HEX : in std_logic_vector (3 downto 0); -- HEX input signal
LEDN: out std_logic_vector (6 downto 0) -- 7 segment output
); -- inverted
end HEX2LEDA;
architecture HEX2LEDA_BEHAVE of HEX2LEDA is
signal LED: std_logic_vector (6 downto 0);
begin
DECODE_P1: process (HEX) -- process declaration for 7 segment encoding
-- 7 Segment: g, f, e, d, c, b, a
-- LED 6, 5, 4, 3, 2, 1, 0
begin
case HEX is -- 7-segment decoding
when "0001" => LED <= "0000110"; -- 1 segment encoding:
when "0010" => LED <= "1011011"; -- 2 a
-- .... ---
when "1110" => LED <= "1111001"; -- E f | | b
when "1111" => LED <= "1110001"; -- F --- <- g
when others => LED <= "0111111"; -- 0 e | | c
end case; ---
end process DECODE_P1; -- d
LEDN <= NOT(LED); -- concurrent assignment for common anode LED
end HEX2LEDA_BEHAVE;
7 Segment Anzeige: VHDL Praktikum
entity HEX2LEDAX is
port (
HEX : in std_logic_vector (3 downto 0); -- HEX input signal
LEDN: out std_logic_vector (6 downto 0) -- 7 segment output
); -- inverted
end HEX2LEDAX;
architecture HEX2LEDAX_BEHAVE of HEX2LEDAX is
signal LED: std_logic_vector (6 downto 0);
begin
-- segment encoding:
-- a
-- --- g, f, e, d, c, b, a
-- f | | b 6, 5, 4, 3, 2, 1, 0
-- --- <- g
-- e | | c
-- ---
-- d
LED(0) <= ( HEX(3) and not(HEX(2)) and not(HEX(1)) ) or ( not(HEX(3)) and HEX(2) and HEX(0) )
or ( not(HEX(2)) and not(HEX(0)) ) or ( HEX(3) and not(HEX(0)) )
or ( not(HEX(3)) and HEX(1) ) or ( HEX(2) and HEX(1) ) ; -- a
LED(1) <= ( not(HEX(3)) and not(HEX(1)) and not(HEX(0)) )
or ( HEX(3) and not(HEX(1)) and HEX(0) ) or ( not(HEX(3)) and HEX(1) and HEX(0) )
or ( not(HEX(2)) and not(HEX(0)) ) or ( not(HEX(2)) and not(HEX(3)) ) ; -- b
LED(2) <= ( not(HEX(3)) and not(HEX(1)) ) or ( HEX(3) and not(HEX(2)) )
or ( not(HEX(3)) and HEX(2) ) or ( not(HEX(1)) and HEX(0) )
or ( not(HEX(3)) and HEX(0) ) ; -- c
LED(3) <= ( not(HEX(3)) and not(HEX(2)) and not(HEX(0)) )
or ( not(HEX(2)) and HEX(1) and HEX(0) ) or ( HEX(2) and HEX(1) and not(HEX(0)) )
or ( HEX(2) and not(HEX(1)) and HEX(0) ) or ( HEX(3) and not(HEX(1)) ) ; -- d
LED(4) <= '1'; -- e
LED(5) <= ( not(HEX(3)) and HEX(2) and not(HEX(1)) )
or ( not(HEX(1)) and not(HEX(0)) ) or ( HEX(3) and not(HEX(2)) )
or ( HEX(2) and not(HEX(0)) ) or ( HEX(3) and HEX(1) ) ; -- f
LED(6) <= ( not(HEX(3)) and HEX(2) and not(HEX(1)) )
or ( HEX(3) and not(HEX(2)) ) or ( HEX(1) and not(HEX(0)) )
or ( not(HEX(2)) and HEX(1) ) or ( HEX(3) and HEX(0) ) ; -- g
LEDN <= NOT(LED); -- concurrent assignment
-- for common anode LED
end HEX2LEDAX_BEHAVE;
7 Segment Anzeige: VHDL Praktikum
Arbeitsauftrag
Erstellen Sie eine Wahrheitstabelle für die Ansteuerung einer 7 Segment Anzeige.
Fragen und Diskussion
Kann es bei der Zahlenumwandlung Rundungsfehler geben?
Warum umfasst die ASCII Tabelle nur 128 Zeichen?
Warum ist der Gray Code robuster als der Dualcode?
Was ist eine 7 Segment Anzeige?
Wie rechnen Sie am effektivsten eine Dezimalzahl in eine Dualzahl um?