Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

std_logic_vector in VHDL meistern: Signalvektoren erstellen

Der Typ std_logic_vector ist VHDLs Standard für Signalbusse. Während std_logic den Zustand einer einzelnen Leitung modelliert, erweitert std_logic_vector dies zu einem Array von Leitungen – ermöglicht Repräsentation mehrbitiger Busse.

Im Gegensatz zum Einbit-std_logic ist std_logic_vector ein kompositer Typ – indizierte Sammlung von std_logic Elementen. Er kann beliebig viele Bits halten, ideal für Komponenten, die mehrbitige Daten austauschen.

Teil der Basic VHDL Tutorials Serie.

std_logic_vector Signal deklarieren:

signal <name> : std_logic_vector(<lsb> to <msb>) := <initial>;
signal <name> : std_logic_vector(<msb> downto <lsb>) := <initial>;

<name> = Bezeichner, <initial> optional. <lsb>, <msb> = Indizes least/most significant bit.

to oder downto legt Richtungsrichtung fest (Endianness). Beide funktionieren, aber die meisten Designer bevorzugen downto für Klarheit. Empfehlung: Konsistent downto bei Bitvektoren nutzen.

Byte-weiter Vektor:

signal MySlv : std_logic_vector(7 downto 0);

Ein-Bit-Vektor:

signal MySlv : std_logic_vector(0 downto 0);

Leerer Bereich (null Bits):

signal MySlv : std_logic_vector(-1 downto 0);

Übung

Video: std_logic_vector Signale deklarieren, Initialwerte setzen, For-Loop über Bits iterieren für Schieberegister.

Finaler Code:

library ieee;
use ieee.std_logic_1164.all;

entity T11_StdLogicVectorTb is
end entity;

architecture sim of T11_StdLogicVectorTb is
  signal Slv1 : std_logic_vector(7 downto 0);
  signal Slv2 : std_logic_vector(7 downto 0) := (others => '0');
  signal Slv3 : std_logic_vector(7 downto 0) := (others => '1');
  signal Slv4 : std_logic_vector(7 downto 0) := x"AA";
  signal Slv5 : std_logic_vector(0 to 7) := "10101010";
  signal Slv6 : std_logic_vector(7 downto 0) := "00000001";
begin
  -- Shift Register Prozess
  process is
  begin
    wait for 10 ns;
    for i in Slv6'left downto Slv6'right + 1 loop
      Slv6(i) <= Slv6(i-1);
    end loop;
    Slv6(Slv6'right) <= Slv6(Slv6'left);
  end process;
end architecture;

ModelSim Wellenform nach Run, Zoom auf Timeline:

std_logic_vector in VHDL meistern: Signalvektoren erstellen

Analyse

Sechs 8-Bit std_logic_vector Busse (1 Byte) deklariert.

Prozess nutzt 'left/'right Attribute für generischen Code – Vektorgröße änderbar ohne Code-Änderung.

Weitere Attribute existieren, aber übersteigen Einführungsrahmen.

std_logic_vector in VHDL meistern: Signalvektoren erstellen

Merksätze

Basic VHDL Quiz – Teil 2 »
oder
Nächstes Tutorial »

VHDL

  1. Umfassender Guide zu VHDL Typkonvertierungen mit Numeric_Std & Std_Logic_Arith
  2. Signed vs. Unsigned in VHDL meistern: Praktische Einblicke
  3. String-Listen in VHDL erstellen: Best Practices & Beispiel
  4. Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
  5. VHDL-Testbench-Simulation sauber beenden
  6. PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
  7. Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
  8. Ein robuster VHDL-Ringpuffer-FIFO im Block-RAM entwerfen
  9. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
  10. Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern