Signed und Unsigned Typen in VHDL meistern: Praktischer Leitfaden
In VHDL sind signed und unsigned spezialisierte Bitvektoren für Arithmetik auf Datenbussen. Im Gegensatz zu std_logic_vector (ideal für Signalrouting, nicht für Berechnungen) interpretiert der Compiler diese Typen als numerische Werte.
Addition von std_logic_vector löst Compile-Fehler aus: No feasible entries for infix operator "+" – Tool kann rohes Bitmuster nicht als Zahl deuten.
Teil der Basic VHDL Tutorials Serie.
Deklaration
signal <name> : signed(<N-1> downto 0) := <initial>;
signal <name> : unsigned(<N-1> downto 0) := <initial>;
Range kann to oder downto nutzen, downto 0 ist üblich. Initialwert optional; Default: alle Bits 'U'.
Warum signed/unsigned statt integer? Digitale Designer brauchen präzise Bitbreitenkontrolle. Diese Vektortypen wrappen bei Überlauf, integer wirft Laufzeitfehler bei Grenzwertüberschreitung. Zudem können Vektoren Metawerte ('U', 'X') führen – Designfehler früh sichtbar.
Video-Demonstration
Video zeigt Verhalten von signed und unsigned – Ähnlichkeiten und Unterschiede.
Beispielcode
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity T12_SignedUnsignedTb is
end entity;
architecture sim of T12_SignedUnsignedTb is
signal UnsCnt : unsigned(7 downto 0) := (others => '0');
signal SigCnt : signed(7 downto 0) := (others => '0');
signal Uns4 : unsigned(3 downto 0) := "1000";
signal Sig4 : signed(3 downto 0) := "1000";
signal Uns8 : unsigned(7 downto 0) := (others => '0');
signal Sig8 : signed(7 downto 0) := (others => '0');
begin
process is
begin
wait for 10 ns;
-- Wrapping Counter
UnsCnt <= UnsCnt + 1;
SigCnt <= SigCnt + 1;
-- Signale addieren
Uns8 <= Uns8 + Uns4;
Sig8 <= Sig8 + Sig4;
end process;
end architecture;
Wellenform-Analyse
ModelSim Wellenform (Zoom auf Schlüsselereignisse), Werte hexadezimal:
- Counter-Beispiel:
UnsCntundSigCntstarten bei 0, inkrementieren bisFF(255), wrappen zu 0 – identisches Wrapping. - 4-Bit Signale
Uns4/Sig4= Binär1000→ Unsigned: 8, Signed: −8 (Zweierkomplement). - Addition auf 8-Bit-Akkumulatoren: Sign-Extension wirkt. Unsigned pad mit Nullen, Signed mit Vorzeichenbit. Ergebnis:
Uns8steigt um 8,Sig8fällt um 8.
Sign-Extension visualisiert:
Kernpunkte
signedundunsignedsind Vektortypen mit Arithmetik-Unterstützung.- Überlauf ist stillschweigend; Werte wrappen gemäß Bitbreite.
- Sign-Extension kann bei Addition ungleicher Längen unterschiedliche Ergebnisse liefern.
Nächstes Tutorial für tiefere Einblicke.
VHDL
- Signed vs. Unsigned in VHDL meistern: Praktische Einblicke
- In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
- Impure Functions in VHDL nutzen: FSM-Lesbarkeit und Wartbarkeit steigern
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
- Prozeduren in VHDL: Wiederverwendbaren Code für einfachere Designs
- Konstanten und Generic Maps in VHDL für flexible Moduldesigns nutzen
- VHDL Port Map Instanziierung meistern: Praktischer Leitfaden
- Kostenloser VHDL-Simulator & Editor: Ein Leitfaden für Studierende
- PIC18 Mikrocontroller: Eigenschaften, Performance & Programmierung
- Referenzbezeichner verstehen: PCB-Bestückungsanschlüsse korrekt kennzeichnen