ITPModul_tb.vhd


1
library IEEE;
2
use IEEE.STD_LOGIC_1164.all;
3
4
entity ITPModul_tb is
5
end entity ITPModul_tb;
6
7
architecture testbench of ITPModul_tb is
8
9
    constant clk_frequency  : integer   := 100_000_000;
10
    constant clk_period     : time      := 1 sec / clk_frequency;
11
    signal simulation_run   : boolean   := true;
12
13
    signal tb_nrst         : std_logic  := '0';
14
    signal tb_clk          : std_logic  := '0';
15
    signal tb_XS           : std_logic_vector(31 downto 0) := (others => '1');  -- Startpunkt Koordinate X
16
    signal tb_YS           : std_logic_vector(31 downto 0) := (others => '1');  -- Startpunkt Koordinate Y
17
    signal tb_ZS           : std_logic_vector(31 downto 0) := (others => '1');  -- Startpunkt Koordinate Z
18
    signal tb_XT           : std_logic_vector(31 downto 0) := (others => '1');  -- Koordinate X relativ (XE-XS)
19
    signal tb_YT           : std_logic_vector(31 downto 0) := (others => '1');  -- Koordinate Y relativ (YE-YS)
20
    signal tb_ZT           : std_logic_vector(31 downto 0) := (others => '1');  -- Koordinate Z  relativ (ZE-ZS)
21
    signal tb_pfrq         : std_logic_vector(23 downto 0) := (others => '1');  --Bahn-Periode in anzahl CLK 
22
    signal tb_L1           : std_logic_vector(15 downto 0) := (others => '1');  -- länge Arm1 in mm
23
    signal tb_L2           : std_logic_vector(15 downto 0) := (others => '1');  -- länge Arm2 in mm
24
    signal tb_L3           : std_logic_vector(15 downto 0) := (others => '1');  -- länge Arm3 in mm
25
    -----------------------
26
    signal tb_Xlin         : std_logic_vector(15 downto 0) := (others => '1');  -- Koord LinStz
27
    signal tb_Ylin         : std_logic_vector(15 downto 0) := (others => '1');  -- Max.Eingabe +/-327.67
28
    signal tb_ebene        : std_logic_vector(3 downto 0) := (others => '1');  --interpolationsebene für LinSatz
29
    signal tb_Xactiv       : std_logic := '0';
30
    signal tb_Yactiv       : std_logic := '0';
31
    signal tb_celin        : std_logic := '0';  ---start interpolation für linstz in einer ebene
32
    ----------------------------------------
33
    signal tb_stopp        : std_logic := '0';  -- stop interpolation,(stopp+) nach  Endlage
34
    signal tb_RampRun      : std_logic := '0';       -- rampe aktiv =1
35
    signal tb_strimp       : std_logic := '0';       -- start interpolation
36
    signal tb_ce           : std_logic := '0';  -- start interpolation von kreis oder XYZ Satz : InversTransf
37
    -------------------------------
38
    signal tb_calcok       : std_logic                     := '0';  -- signalisiert alle berechnungen sind fertig
39
    signal tb_XAout        : std_logic_vector(31 downto 0) := X"00000000";  --virtuelle aktuelle koordinate
40
    signal tb_YAout        : std_logic_vector(31 downto 0) := X"00000000";
41
    signal tb_ZAout        : std_logic_vector(31 downto 0) := X"00000000";
42
    signal tb_ITPmod       : std_logic_vector(2 downto 0)  := "000";  --ITP für Status Meldung an CPU
43
    signal tb_oAXdif       : std_logic_vector(95 downto 0) := (others => '0');  --Sollwertdiff(16Bit) von  inv.Transfer und Lin
44
    signal tb_oImpLk       : std_logic                     := '1';  --impulse von xyz itp
45
    signal tb_enditp       : std_logic                     := '0';  -- ende von Kontur:=0 (enditp-)
46
    signal tb_itprun       : std_logic                     := '0';  -- =1:interpolator läuft,aktuelle Sollwerte in oAXinkr(6x 32bit)
47
    signal tb_testdata     : std_logic_vector(15 downto 0) := X"0000";
48
49
50
begin
51
52
    tb_nrst <= '0', '1' after 10 * clk_period;
53
    tb_clk  <= not tb_clk after clk_period / 2 when simulation_run;
54
55
56
    main: process
57
    begin
58
        wait for 10 us;
59
        simulation_run <= false;
60
        wait;
61
    end process;
62
63
    dut: entity work.ITPModul
64
    port map
65
    (
66
        nrst     => tb_nrst,     -- : in  std_logic;
67
        clk      => tb_clk,      -- : in  std_logic;
68
        XS       => tb_XS,       -- : in  std_logic_vector(31 downto 0);  -- Startpunkt Koordinate X
69
        YS       => tb_YS,       -- : in  std_logic_vector(31 downto 0);  -- Startpunkt Koordinate Y
70
        ZS       => tb_ZS,       -- : in  std_logic_vector(31 downto 0);  -- Startpunkt Koordinate Z
71
        XT       => tb_XT,       -- : in  std_logic_vector(31 downto 0);  -- Koordinate X relativ (XE-XS)
72
        YT       => tb_YT,       -- : in  std_logic_vector(31 downto 0);  -- Koordinate Y relativ (YE-YS)
73
        ZT       => tb_ZT,       -- : in  std_logic_vector(31 downto 0);  -- Koordinate Z  relativ (ZE-ZS)
74
        pfrq     => tb_pfrq,     -- : in  std_logic_vector(23 downto 0);  --Bahn-Periode in anzahl CLK 
75
        L1       => tb_L1,       -- : in  std_logic_vector(15 downto 0);  -- länge Arm1 in mm
76
        L2       => tb_L2,       -- : in  std_logic_vector(15 downto 0);  -- länge Arm2 in mm
77
        L3       => tb_L3,       -- : in  std_logic_vector(15 downto 0);  -- länge Arm3 in mm
78
        ----------------------------------
79
        Xlin     => tb_Xlin,     -- : in  std_logic_vector(15 downto 0);  -- Koord LinStz
80
        Ylin     => tb_Ylin,     -- : in  std_logic_vector(15 downto 0);  -- Max.Eingabe +/-327.67
81
        ebene    => tb_ebene,    -- : in  std_logic_vector(3 downto 0);  --interpolationsebene für LinSatz
82
        Xactiv   => tb_Xactiv,   -- : in  std_logic;
83
        Yactiv   => tb_Yactiv,   -- : in  std_logic;
84
        celin    => tb_celin,    -- : in  std_logic;  ---start interpolation für linstz in einer ebene
85
        ---------------------------------------------------
86
        stopp    => tb_stopp,    -- : in  std_logic;  -- stop interpolation,(stopp+) nach  Endlage
87
        RampRun  => tb_RampRun,  -- : in  std_logic;       -- rampe aktiv =1
88
        strimp   => tb_strimp,   -- : in  std_logic;       -- start interpolation
89
        ce       => tb_ce,       -- : in  std_logic;  -- start interpolation von kreis oder XYZ Satz : InversTransf
90
        ------------------------------------------
91
        calcok   => tb_calcok,   -- : out std_logic                     := '0';  -- signalisiert alle berechnungen sind fertig
92
        XAout    => tb_XAout,    -- : out std_logic_vector(31 downto 0) := X"00000000";  --virtuelle aktuelle koordinate
93
        YAout    => tb_YAout,    -- : out std_logic_vector(31 downto 0) := X"00000000";
94
        ZAout    => tb_ZAout,    -- : out std_logic_vector(31 downto 0) := X"00000000";
95
        ITPmod   => tb_ITPmod,   -- : out std_logic_vector(2 downto 0)  := "000";  --ITP für Status Meldung an CPU
96
        oAXdif   => tb_oAXdif,   -- : out std_logic_vector(95 downto 0) := (others => '0');  --Sollwertdiff(16Bit) von  inv.Transfer und Lin
97
        oImpLk   => tb_oImpLk,   -- : out std_logic                     := '1';  --impulse von xyz itp
98
        enditp   => tb_enditp,   -- : out std_logic                     := '0';  -- ende von Kontur:=0 (enditp-)
99
        itprun   => tb_itprun,   -- : out std_logic                     := '0';  -- =1:interpolator läuft,aktuelle Sollwerte in oAXinkr(6x 32bit)
100
        testdata => tb_testdata  -- : out std_logic_vector(15 downto 0) := X"0000"
101
    );
102
103
end architecture testbench;