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;
|