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 | outvalid :OUT std_logic:= '0';
|
26 | atanFPo :OUT std_logic_vector(31 downto 0):=X"00000000" -- output Winkel(rad) in FP format
|
27 | );
|
28 | end arctanFP;
|
29 |
|
30 | architecture Behavioral of arctanFP is
|
31 |
|
32 | ------------------------------------------------------------
|
33 | --- IP coregen 5.0----------------------
|
34 | --COMPONENT mulFP IS
|
35 | -- port (
|
36 | -- a: IN std_logic_VECTOR(31 downto 0);
|
37 | -- b: IN std_logic_VECTOR(31 downto 0);
|
38 | -- clk: IN std_logic;
|
39 | -- ce: IN std_logic;
|
40 | -- result: OUT std_logic_VECTOR(31 downto 0)
|
41 | -- );
|
42 | --END COMPONENT;
|
43 | ------------------------------------------------
|
44 | -----IP coregen 6.1--------------------
|
45 | COMPONENT mulFP1 IS
|
46 | PORT (
|
47 | aclk : IN STD_LOGIC;
|
48 | s_axis_a_tvalid : IN STD_LOGIC;
|
49 | s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
50 | s_axis_b_tvalid : IN STD_LOGIC;
|
51 | s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
52 | m_axis_result_tvalid : OUT STD_LOGIC;
|
53 | m_axis_result_tdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
|
54 | );
|
55 | END COMPONENT ;
|
56 |
|
57 | -----------------------------------------------
|
58 | SIGNAL resvalid :std_logic;
|
59 |
|
60 | -----------------------------------------------
|
61 | SIGNAL stateatan :integer range 0 to 7:= 0;
|
62 | --SIGNAL InpA :std_logic_VECTOR(31 downto 0):= (OTHERS => '0');
|
63 | --SIGNAL InpB :std_logic_VECTOR(31 downto 0):= (OTHERS => '0');
|
64 | --SIGNAL TestOutp :std_logic_VECTOR(31 downto 0);---:= (OTHERS => '0');
|
65 |
|
66 | SIGNAL ce1 :std_logic:='0';-- Start resdiv^2
|
67 | --
|
68 | --==================================================================
|
69 | BEGIN
|
70 | --------------------------------------------------------------
|
71 | patan :PROCESS (clk)
|
72 | VARIABLE cntrclk : INTEGER RANGE 0 TO 3:= 0;
|
73 | BEGIN
|
74 | IF rising_edge(clk) THEN
|
75 | IF nrst = '0' THEN
|
76 | stateatan <= 0;
|
77 | ce1 <= '0';
|
78 | --InpA <= (OTHERS => '0');
|
79 | ---InpB <= (OTHERS => '0');
|
80 | cntrclk := 0;
|
81 | --(OTHERS => '0');
|
82 | ELSE
|
83 | CASE stateatan IS
|
84 | WHEN 0 =>
|
85 | IF ceatan = '1' THEN
|
86 | stateatan <= 1;
|
87 | --InpA <= Xinp;
|
88 | --InpB <= Yinp;
|
89 | cntrclk := 1;-- time for calculation
|
90 | ELSE
|
91 | stateatan <= 0;
|
92 | END IF;
|
93 | WHEN 1 =>
|
94 | ce1 <= '1'; -- start for MUL Xinp * Yinp
|
95 | stateatan <= 2;
|
96 | WHEN 2 => ---test Xinp * Yinp
|
97 | IF cntrclk > 0 THEN -- wait for calculation
|
98 | cntrclk := cntrclk - 1;
|
99 | stateatan <= 2;
|
100 | ELSE
|
101 | ce1 <= '0'; -- reset
|
102 | stateatan <= 3;--
|
103 | END IF;
|
104 | WHEN 3 =>
|
105 | outvalid <= resvalid;
|
106 | --atanFPo <= TestOutp;
|
107 | stateatan <= 0;--mul result ready ?
|
108 | WHEN OTHERS =>
|
109 | stateatan <= 0;
|
110 | END CASE;
|
111 | END IF; -- if nrst/else
|
112 | END IF; -- clk
|
113 | END PROCESS;--end pacos
|
114 |
|
115 | -- Implementation: Mul FP test
|
116 | -- Latency = 1
|
117 | ---cfuncmul: mulFP port map(a=>InpA,b=>InpB,clk=>clk,ce=>ce1,result=>TestOutp);
|
118 | -----------------------------------------------
|
119 |
|
120 | --SIGNAL resvalid :std_logic;
|
121 | ----------------erste test; mit Internen Signalen---------------------------------
|
122 | --cmulFP1 :mulFP1 port map (
|
123 | -- aclk => clk, ---: IN STD_LOGIC;
|
124 | -- s_axis_a_tvalid => ce1, ---: IN STD_LOGIC;
|
125 | -- s_axis_a_tdata => InpA, --- : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
126 | -- s_axis_b_tvalid=> ce1, --- : IN STD_LOGIC;
|
127 | -- s_axis_b_tdata => InpB, --- : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
128 | -- m_axis_result_tvalid => resvalid, --- : OUT STD_LOGIC;
|
129 | -- m_axis_result_tdata => TestOutp ----: OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
|
130 | -- );
|
131 | -------------zweite test : Direkt auf Entity I/O a------------------------------
|
132 |
|
133 | cmulFP1 :mulFP1 port map (
|
134 | aclk => clk, ---: IN STD_LOGIC;
|
135 | s_axis_a_tvalid => ce1, ---: IN STD_LOGIC;
|
136 | s_axis_a_tdata => Xinp, --- : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
137 | s_axis_b_tvalid=> ce1, --- : IN STD_LOGIC;
|
138 | s_axis_b_tdata => Yinp, --- : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
|
139 | m_axis_result_tvalid => resvalid, --- : OUT STD_LOGIC;
|
140 | m_axis_result_tdata => atanFPo ----: OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
|
141 | );
|
142 |
|
143 | ---------------------------------------------------
|
144 |
|
145 | END Behavioral;
|