Arrays

Een range kan stijgend of dalend gekozen worden:

  • x(2 to 6)
  • y(7 downto 0)

We kunnen verwijzen naar individuele elementen door een index te gebruiken:

  • x(4)
  • y(7)

Voorbeeld:

entity and_or_poort is
    port(   a_vec: in bit_vector(2 downto 0);
            c_vec: out bit_vector(0 to 1));
end and_or_poort;
architecture arch of and_or_poort is
    signal c_intern: bit;
begin
    c_intern <= a_vec(2) and a_vec(1);
    c_vec(1) <= c_intern or a_vec(0);
    c_vec(0) <= c_intern:
end arch;

Toekenning van arrays

Toekenning gebeurt op basis van positie, niet op basis van index.

Voorbeeld:

signal x: bit_vector(2 to 6);
signal y: bit_vector(7 downto 3);
...
x <= y;

Voorbeelden van de toekenning van de individuele elementen van een samengesteld type:

signal y, z: bit_vector(3 downto 0);
signal a, b: bit;
signal byte: bit_vector(7 downto 0);
  • Op basis van positie:
z <= (a, '1', b, '0'); -- z wordt dan a1b0 met a en b een waarde 0 of 1
  • op basis van index:
byte <= (7 => '1', 4 downto 2 => a, 6 => b, others => '0'); -- byte wordt dan 1b0aaa00

Voorbeeld van de toekenning van een waarde:

z <= " 1010" ;

Voorbeelden van samenvoeginstructies:

z <= a & '1' & b & '0';
byte <= y & z;

Voorbeelden van de gedeeltelijke toekenning van een array:

signal a, z: bit_vector(3 downto 0);
signal b: bit;
signal byte: bit_vector(7 downto 0);
...
byte(5 downto 2) <= a;
z(1 downto 0) <= '0' & b;

De richting van de deeltoekenning moet dezelfde zijn als de richting van de declaratie.

  • Correct voorbeeld:
signal a: bit_vector(3 downto 0);
signal byte: bit_vector(7 downto 0);
...
byte(5 downto 2) <= a;
  • Foutief voorbeeld:
signal z: bit_vector(3 downto 0);
signal b: bit;
...
z(0 to 1) <= '0' & b; -- dit geeft een error!

Aliases

Aliases zijn verwijzingen naar reeds gedefinieerde signals, die de code beter begrijpbaar maken.

signal adres: bit_vector(31 downto 0);
alias top_adres: bit_vector(3 downto 0) is adres(31 downto 28);
alias adres_bank: bit_vector(3 downto 0) is adres(27 downto 24);
alias rij_adres: bit_vector(11 downto 0) is adres(24 downto 12);