----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date: 16.03.2022 20:07:22
-- Design Name: 
-- Module Name: pwm_test_db - Behavioral
-- Project Name: 
-- Target Devices: 
-- Tool Versions: 
-- Description: 
-- 
-- Dependencies: 
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-- 
----------------------------------------------------------------------------------


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;




--use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity pwm_test_db is
--  Port ( );
end pwm_test_db;

architecture Behavioral of pwm_test_db is

component regler is
    Port ( clk : in STD_LOGIC;      --Clk -> Gibt Abtastzeit vor
           w : in integer := 0;     --Sollwert
           y : in integer := 0;     --Istwert
           u : inout integer := 0; --Stellgöße
           KR : in integer := 1;    -- Verstärkung
           T : in integer := 1000;   -- Abtastzeit in us
           TV : integer := 0;     -- Vorhaltezeit   für Differenzierer interesannt
           TN : in integer := 1);   -- Nachstellzeit
end component;

component pt1 is
    Port ( clk : in STD_LOGIC;
           u : in integer;
           y : inout integer := 0; -- muss vielleicht initalisiert werden vorher!?
           a : in integer :=1;
           k : in integer := 1;
           stepWidth : integer := 10); --in us
end component;




signal clk : std_logic := '0';
signal clk_100 : std_logic := '0';

signal w : integer := 1000000;
signal u  : integer := 0;
signal y  : integer := 0;
signal cnt : integer := 0;
signal risingEdge : std_logic := '0';

--Streckenparameter
signal a : integer := 1;
signal k : integer := 1;
signal stepWidth : integer := 10;

--Reglerparameter
signal KR : integer := 1;     -- Verstärkung
signal T : integer := 1000;   -- Abtastzeit in ns = 1ms = 1000000ns
signal TV : integer := 0;     -- Vorhaltezeit   für Differenzierer interesannt
signal TN : integer := 100000;    -- Nachstellzeit in us



begin

uut_regler: regler PORT MAP (
    clk => clk_100,
    w => w,
    y => y,
    u => u,
    KR => KR,
    T => T,
    TV => TV,
    TN => TN
);

uut_pt1: pt1 PORT MAP (
    clk => clk,
    u => u,
    y => y,
    a => a,
    k => k,
    stepWidth => stepWidth
);


--generate clock
clk <= not clk after 5 us;


process 
begin
    w <= 100000000;
    
--    if rising_edge(clk) and ( cnt >= 100) then
--        clk_100 <= not clk_100;
--        cnt <= 0;
--    end if;
    
    if clk = '1' and risingEdge = '0' then
        cnt <= cnt+1;
        risingEdge <= '1';
        clk_100 <= '0';
        
    end if;
    
    if clk = '0' then
        risingEdge <= '0';
    end if;
        
    if cnt >= 99 then
        clk_100 <= '1';
        cnt <= 0;
    end if;
    
    wait for 1 us;
--    cnt <= cnt+1;

end process;


end Behavioral;
