123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- ----------------------------------------------------------------------------------
- -- 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.numeric_std.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 signed(63 downto 0) := (others => '0'); --Sollwert
- y : in signed(63 downto 0) := (others => '0'); --Istwert
- u : inout signed(63 downto 0) := (others => '0'); --Stellgöße
- KR : in signed(9 downto 0) := to_signed(1,10); -- Verstärkung
- T : in signed(9 downto 0) := to_signed(1000, 10); -- Abtastzeit in us 1000us
- TV : signed(9 downto 0) := (others => '0'); -- Vorhaltezeit für Differenzierer interesannt
- TN : in signed(9 downto 0) := to_signed(1,10)); -- Nachstellzeit
- end component;
-
- component pt1 is
- Port (
- clk : in STD_LOGIC;
- u : in signed(63 downto 0) := to_signed(1,64);
- y : inout signed(63 downto 0) := to_signed(1,64); -- muss vielleicht initalisiert werden vorher!?
- a : in signed(9 downto 0) := to_signed(1,10);
- k : in signed(9 downto 0) := to_signed(1,10);
- stepWidth : signed(9 downto 0) := to_signed(10,10)); --in us -> 10us
- end component;
-
-
-
-
- signal clk : std_logic := '0';
- signal clk_100 : std_logic := '0';
-
- signal w : signed(63 downto 0) := to_signed(1000000, 64);
- signal u : signed(63 downto 0) := to_signed(0, 64);
- signal y : signed(63 downto 0) := to_signed(0, 64);
- signal cnt : integer := 0;
- signal risingEdge : std_logic := '0';
-
- --Streckenparameter
- signal a : signed(9 downto 0) := to_signed(1, 10);
- signal k : signed(9 downto 0) := to_signed(1, 10);
- signal stepWidth : signed(9 downto 0) := to_signed(10, 10);
-
- --Reglerparameter
- signal KR : signed(9 downto 0) := to_signed(1, 10); -- Verstärkung
- signal T : signed(9 downto 0) := to_signed(1000, 10); -- Abtastzeit in ns = 1ms = 1000000ns
- signal TV : signed(9 downto 0) := to_signed(0, 10); -- Vorhaltezeit für Differenzierer interesannt
- signal TN : signed(9 downto 0) := to_signed(100000, 10); -- 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;
- w <= to_signed(1000000, 64); --muss >= 1000000 sein!
-
- -- 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;
|