arctanFP.vhd


1
----------------------------------------------------------------------------------
2
-- test mulFP1
3
-- Company:ak development GmbH 
4
-- Engineer:a.Kurka, 31.8.2024 
5
-- www.akdevelopment.ch
6
-- ursprüngliche ArcTang Berechnung geändert
7
-- zu Testprogramm, so konnte man das bestehende Testbench verwenden
8
----------------------------------------------------------------------------------
9
library IEEE;
10
use IEEE.STD_LOGIC_1164.ALL;
11
12
13
-- synthesis translate_off
14
LIBRARY XilinxCoreLib;
15
-- synthesis translate_on
16
17
18
19
entity arctanFP is
20
  port(  nrst      : in std_logic;
21
      clk       : in std_logic;
22
      ceatan     : in std_logic;-- startimpuls afkt
23
      Xinp      :in std_logic_vector(31 downto 0);-- input X FP FP  format
24
      Yinp      :in std_logic_vector(31 downto 0);-- input Y FP FP  format
25
      atanFPo  :OUT std_logic_vector(31 downto 0):=X"00000000"  -- output Winkel(rad) in FP  format
26
      );
27
end arctanFP;
28
29
architecture Behavioral of arctanFP is
30
31
------------------------------------------------------------
32
------------------------------------------------------------
33
COMPONENT mulFP
34
  port (
35
   a : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
36
    b : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
37
    operation_nd : IN STD_LOGIC;
38
    clk : IN STD_LOGIC;
39
    ce : IN STD_LOGIC;
40
    result : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
41
    rdy : OUT STD_LOGIC
42
  );
43
END COMPONENT;
44
45
-----------------------------------------------
46
47
-----------------------------------------------
48
SIGNAL stateatan  :integer range 0 to 7:= 0;
49
SIGNAL InpA      :std_logic_VECTOR(31 downto 0):= (OTHERS => '0');
50
SIGNAL InpB      :std_logic_VECTOR(31 downto 0):= (OTHERS => '0');
51
SIGNAL TestOutp  :std_logic_VECTOR(31 downto 0);----:= (OTHERS => '0');
52
53
SIGNAL ce1      :std_logic:='0';--
54
SIGNAL nd      :std_logic:='0';--
55
SIGNAL outrdy      :std_logic;--
56
--
57
--==================================================================
58
BEGIN
59
--------------------------------------------------------------
60
patan :PROCESS (clk)
61
BEGIN
62
  IF rising_edge(clk) THEN
63
    IF nrst = '0' THEN
64
      stateatan <= 0;
65
      ce1 <= '0';
66
      nd <= '0';
67
      InpA <= (OTHERS => '0');
68
      InpB <= (OTHERS => '0');
69
      atanFPo <= (OTHERS => '0');
70
      --TestOutp <= (OTHERS => '0');
71
      --(OTHERS => '0');
72
    ELSE
73
      CASE stateatan IS
74
        WHEN 0 =>
75
          IF ceatan = '1' THEN
76
              InpA <= Xinp;
77
              InpB <= Yinp;
78
              ce1 <= '1'; -- clk on
79
              stateatan <= 1;
80
          ELSE
81
            stateatan <= 0;
82
          END IF;
83
        WHEN 1 =>  
84
          nd <= '1'; -- new data,start for MUL Xinp * Yinp
85
          stateatan <= 2;
86
        WHEN 2 => ---wait for result Xinp * Yinp
87
          IF outrdy = '1' THEN
88
            atanFPo <= TestOutp;--mul result ready
89
            stateatan <= 3;
90
          ELSE
91
            nd <= '0'; -- reset
92
            stateatan <= 2;-- 
93
          END IF;
94
        WHEN 3 =>
95
            ce1 <= '0';
96
            stateatan <= 0;--wait for next start
97
        WHEN OTHERS =>
98
          stateatan <= 0;
99
      END CASE;
100
    END IF; -- if nrst/else
101
  END IF; -- clk
102
END PROCESS;--end pacos
103
104
-- Implementation: Mul FP test
105
-- Latency = 8
106
cfuncmul: mulFP port map(a=>InpA,b=>InpB,operation_nd=>nd,clk=>clk,ce=>ce1,result=>Testoutp,rdy=>outrdy);
107
-----------------------------------------------
108
109
110
---------------------------------------------------  
111
112
END Behavioral;