diff --git a/libraries/technology/mult/tech_mult.vhd b/libraries/technology/mult/tech_mult.vhd index 02302d50192a9aa4cdf39b42eb9214238e82a9e8..30977a71ea5c904fb96e8c51d1390f53a184ee5f 100644 --- a/libraries/technology/mult/tech_mult.vhd +++ b/libraries/technology/mult/tech_mult.vhd @@ -1,6 +1,6 @@ ------------------------------------------------------------------------------- -- --- Copyright (C) 2009 +-- Copyright (C) 2009-2023 -- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -- @@ -18,6 +18,9 @@ -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- ------------------------------------------------------------------------------- +-- +-- Author : - +-- Changed by : D.F. Brouwer library IEEE, common_lib, technology_lib; use IEEE.std_logic_1164.all; @@ -29,6 +32,7 @@ use work.tech_mult_component_pkg.all; -- Declare IP libraries to ensure default binding in simulation. The IP library clause is ignored by synthesis. library ip_stratixiv_mult_lib; library ip_arria10_mult_lib; +library ip_agi027_xxxx_mult_lib; entity tech_mult is generic ( @@ -146,6 +150,49 @@ begin ); end generate; + gen_ip_agi027_xxxx_ip : if (g_technology = c_tech_agi027_xxxx and g_variant = "IP") generate + u0 : ip_agi027_xxxx_mult + generic map( + g_in_a_w => g_in_a_w, + g_in_b_w => g_in_b_w, + g_out_p_w => g_out_p_w, + g_nof_mult => g_nof_mult, + g_pipeline_input => g_pipeline_input, + g_pipeline_product => g_pipeline_product, + g_pipeline_output => g_pipeline_output, + g_representation => g_representation + ) + port map( + clk => clk, + clken => clken, + in_a => in_a, + in_b => in_b, + out_p => prod + ); + end generate; + + gen_ip_agi027_xxxx_rtl : if (g_technology = c_tech_agi027_xxxx and g_variant = "RTL") generate + u0 : ip_agi027_xxxx_mult_rtl + generic map( + g_in_a_w => g_in_a_w, + g_in_b_w => g_in_b_w, + g_out_p_w => g_out_p_w, + g_nof_mult => g_nof_mult, + g_pipeline_input => g_pipeline_input, + g_pipeline_product => g_pipeline_product, + g_pipeline_output => g_pipeline_output, + g_representation => g_representation + ) + port map( + rst => rst, + clk => clk, + clken => clken, + in_a => in_a, + in_b => in_b, + out_p => prod + ); + end generate; + gen_trunk : for I in 0 to g_nof_mult - 1 generate -- Truncate MSbits, also for signed (common_pkg.vhd for explanation of RESIZE_SVEC) out_p((I + 1) * g_out_p_w - 1 downto I * g_out_p_w) <= RESIZE_SVEC(prod((I + 1) * c_prod_w - 1 downto I * c_prod_w), g_out_p_w) when g_representation = "SIGNED" else