Lehre.EDS_ProgHA3 (Struktur)


Beispielprogramme zur 3. Hausübung

Felder, Programmierung und Nutzung eines Packages

Package

-- EDS, 3. Hausuebung
-- Package feld_pack.vhd
-- letzte Aenderung: 11.03.2016
-- Autor: G. Kemnitz

package feld_pack is
 type t_element is ('A', 'S', 'D', 'E');
 type t_Feld is array(natural range <>) of t_Element;
 function str(f:t_Feld) return string;
end package;

package body feld_pack is
 function str(f:t_Feld) return string is
  variable s: string(1 to f'length); -- String mit Laenge von Feld f
  variable tmp: string(1 to 3);      -- String Laenge 3
  variable idx: natural := 1;        
 begin
  for w in f'range loop          -- 'range-Attribut liefert Indexbereich
   tmp := t_Element'image(f(w)); -- Zuweisung von 3 Zeichen, z.B. "'A'"
   s(idx) := tmp(2);             -- Uebernahme Zeichen 2, im Bsp. "A"
   idx := idx+1;
  end loop;
  return s;
 end function;
end package body;

Testrahmen für das Package zuvor

-- EDS, 3. Hausuebung
-- Testrahmen test_feld_pack.vdh fuer das Package feld_pack
-- letzte Aenderung: 19.03.2018 durch C. Giesemann
-- Autor: G. Kemnitz

-- Zum Ausprobieren:
-- ghdl -a feld_pack.vhd
-- ghdl -a test_feld_pack.vhd
-- ghdl -m test_feld_pack
-- ghdl -r test_feld_pack

use work.feld_pack.all;           -- Einbindung des eigenen Packages

entity test_feld_pack is end entity;

architecture a of test_feld_pack is
begin

 process
  variable a: t_feld(5 downto 0) := ('A', 'D', 'D', 'E', 'S', 'E');
 begin
  report("a=" & str(a));
  a(2) := 'S';            -- Wertzuweisung an ein Element
  report("a=" & str(a));
  a(5 downto 3) := "DES"; -- Zuweisung an mehrere Elemente
  report("a=" & str(a));
  wait;
 end process;
end architecture;

Erzeugung von Testeingaben

-- EDS, 3. Hausuebung
-- Programm testeingabe.vhd
-- letzte Aenderung: 11.03.2016
-- Autor: G. Kemnitz

-- Zum Ausprobieren
-- ghdl -a slvstr_pack.vhd
-- ghdl -a testeingabe.vhd
-- ghdl -m testeingabe
-- ghdl -r testeingabe --wave=testeingabe.ghw
-- gtkwave testeingabe.ghw testeingabe.sav


library ieee;
use ieee.std_logic_1164.all;

use work.slvstr_pack.all; -- Str-Funktion aus der 
                          -- Aufgabenloesung zuvor

entity testeingabe is end entity;
architecture a of testeingabe is
 type t_testdat is array (natural range <>) of 
      std_logic_vector(7 downto 0);
 constant testdat: t_testdat(0 to 9) := 
      (0 => "01100111", 1 => "01110111",
       2 => "01010111", 3 => "10010101", 
       4 => "11000011", 5 => "10010100",
       6 => "00101011", 7 => "00100011", 
       8 => "00100111", 9 => "00101101");
 signal x: std_logic_vector(7 downto 0);
 signal T: std_logic := '0';
begin

 Eingabeprozess: process
 begin
  for idx in testdat'range loop
    report "x=" & str(x);
    x <= (others=>'X') after 1 ns, testdat(idx) after 3 ns;
    wait for 5 ns; T <= '1';
    wait for 5 ns; T <= '0';
   end loop;
   wait;
  end process;

end architecture;


Autor: gkemnitz, Letzte Änderung: 26.11.2020 16:26:45


 TU Clausthal 2020  Impressum