Free VHDL library

  • Main Page
  • Related Pages
  • Design Unit List
  • Files
  • File List

general_purpose/MAC.vhd

Go to the documentation of this file.
00001 ------------------------------------------------------------------------------
00002 --  This file is a part of the LPP VHDL IP LIBRARY
00003 --  Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
00004 --
00005 --  This program is free software; you can redistribute it and/or modify
00006 --  it under the terms of the GNU General Public License as published by
00007 --  the Free Software Foundation; either version 3 of the License, or
00008 --  (at your option) any later version.
00009 --
00010 --  This program is distributed in the hope that it will be useful,
00011 --  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 --  GNU General Public License for more details.
00014 --
00015 --  You should have received a copy of the GNU General Public License
00016 --  along with this program; if not, write to the Free Software
00017 --  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
00018 -------------------------------------------------------------------------------
00019 --                    Author : Alexis Jeandet
00020 --                     Mail : alexis.jeandet@lpp.polytechnique.fr
00021 ----------------------------------------------------------------------------
00022 library IEEE;
00023 use IEEE.numeric_std.all;
00024 use IEEE.std_logic_1164.all;
00025 library lpp;
00026 use lpp.general_purpose.all;
00027 --TODO
00028 --terminer le testbensh puis changer le resize dans les instanciations
00029 --par un resize sur un vecteur en combi
00030 
00031 
00032 
00033 
00034 
00035 entity MAC is 
00036 generic(
00037     Input_SZ_A     :   integer := 8;
00038     Input_SZ_B     :   integer := 8
00039 
00040 );
00041 port(
00042     clk     :   in  std_logic;
00043     reset   :   in  std_logic;
00044     clr_MAC :   in  std_logic;
00045     MAC_MUL_ADD :   in  std_logic_vector(1 downto 0);
00046     OP1     :   in  std_logic_vector(Input_SZ_A-1 downto 0);
00047     OP2     :   in  std_logic_vector(Input_SZ_B-1 downto 0);
00048     RES     :   out std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0)
00049 );
00050 end MAC;
00051 
00052 
00053 
00054 
00055 architecture ar_MAC of MAC is
00056 
00057 
00058 
00059 
00060 
00061 signal  add,mult    :   std_logic;
00062 signal  MULTout     :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00063 
00064 signal  ADDERinA    :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00065 signal  ADDERinB    :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00066 signal  ADDERout    :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00067 
00068 
00069 signal  MACMUXsel   :   std_logic;
00070 signal  OP1_D_Resz  :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00071 signal  OP2_D_Resz  :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00072 
00073 
00074 
00075 signal  MACMUX2sel  :   std_logic;
00076 
00077 signal  add_D           :   std_logic;
00078 signal  OP1_D           :   std_logic_vector(Input_SZ_A-1 downto 0);
00079 signal  OP2_D           :   std_logic_vector(Input_SZ_B-1 downto 0);
00080 signal  MULTout_D       :   std_logic_vector(Input_SZ_A+Input_SZ_B-1 downto 0);
00081 signal  MACMUXsel_D     :   std_logic;
00082 signal  MACMUX2sel_D    :   std_logic;
00083 signal  MACMUX2sel_D_D  :   std_logic;
00084 signal  clr_MAC_D       :   std_logic;
00085 signal  clr_MAC_D_D     :   std_logic;
00086 
00087 
00088 
00089 
00090 
00091 begin
00092 
00093 
00094 
00095 
00096 --==============================================================
00097 --=============M A C  C O N T R O L E R=========================
00098 --==============================================================
00099 MAC_CONTROLER1 : MAC_CONTROLER
00100 port map(
00101     ctrl         =>  MAC_MUL_ADD ,
00102     MULT         =>  mult,
00103     ADD          =>  add,
00104     MACMUX_sel   =>  MACMUXsel,
00105     MACMUX2_sel  =>  MACMUX2sel
00106 
00107 );
00108 --==============================================================
00109 
00110 
00111 
00112 
00113 --==============================================================
00114 --=============M U L T I P L I E R==============================
00115 --==============================================================
00116 Multiplieri_nst : Multiplier
00117 generic map(
00118     Input_SZ_A     =>   Input_SZ_A ,
00119     Input_SZ_B     =>   Input_SZ_B 
00120 )
00121 port map(
00122     clk          =>  clk,
00123     reset        =>  reset,
00124     mult         =>  mult,
00125     OP1          =>  OP1,
00126     OP2          =>  OP2,
00127     RES          =>  MULTout 
00128 );
00129 
00130 --==============================================================
00131 
00132 
00133 
00134 
00135 --==============================================================
00136 --======================A D D E R ==============================
00137 --==============================================================
00138 adder_inst : Adder
00139 generic map(
00140     Input_SZ_A     =>   Input_SZ_A+Input_SZ_B ,
00141     Input_SZ_B     =>   Input_SZ_A+Input_SZ_B 
00142 )
00143 port map(
00144     clk          =>  clk,
00145     reset        =>  reset,
00146     clr          =>  clr_MAC_D,
00147     add          =>  add_D,
00148     OP1          =>  ADDERinA ,
00149     OP2          =>  ADDERinB ,
00150     RES          =>  ADDERout 
00151 );
00152 
00153 --==============================================================
00154 
00155 
00156 clr_MACREG1 : MAC_REG 
00157 generic map(size     =>  1 )
00158 port map(
00159     reset    =>  reset ,
00160     clk      =>  clk,
00161     D(0)    =>  clr_MAC,
00162     Q(0)    =>  clr_MAC_D
00163 );
00164 
00165 clr_MACREG2 : MAC_REG 
00166 generic map(size     =>  1 )
00167 port map(
00168     reset    =>  reset ,
00169     clk      =>  clk,
00170     D(0)    =>  clr_MAC_D,
00171     Q(0)    =>  clr_MAC_D_D 
00172 );
00173 
00174 addREG : MAC_REG 
00175 generic map(size     =>  1 )
00176 port map(
00177     reset    =>  reset ,
00178     clk      =>  clk,
00179     D(0)    =>  add,
00180     Q(0)    =>  add_D
00181 );
00182 
00183 OP1REG : MAC_REG 
00184 generic map(size     =>  Input_SZ_A)
00185 port map(
00186     reset    =>  reset ,
00187     clk      =>  clk,
00188     D        =>  OP1,
00189     Q        =>  OP1_D 
00190 );
00191 
00192 
00193 OP2REG : MAC_REG 
00194 generic map(size     =>  Input_SZ_B)
00195 port map(
00196     reset    =>  reset ,
00197     clk      =>  clk,
00198     D        =>  OP2,
00199     Q        =>  OP2_D 
00200 );
00201 
00202 
00203 MULToutREG : MAC_REG 
00204 generic map(size     =>  Input_SZ_A+Input_SZ_B )
00205 port map(
00206     reset    =>  reset ,
00207     clk      =>  clk,
00208     D        =>  MULTout ,
00209     Q        =>  MULTout_D
00210 );
00211 
00212 
00213 MACMUXselREG : MAC_REG 
00214 generic map(size     =>  1 )
00215 port map(
00216     reset    =>  reset,
00217     clk      =>  clk,
00218     D(0)    =>  MACMUXsel,
00219     Q(0)    =>  MACMUXsel_D 
00220 );
00221 
00222 MACMUX2selREG : MAC_REG 
00223 generic map(size     =>  1 )
00224 port map(
00225     reset    =>  reset ,
00226     clk      =>  clk,
00227     D(0)    =>  MACMUX2sel,
00228     Q(0)    =>  MACMUX2sel_D 
00229 );
00230 
00231 MACMUX2selREG2 : MAC_REG 
00232 generic map(size     =>  1 )
00233 port map(
00234     reset    =>  reset ,
00235     clk      =>  clk,
00236     D(0)    =>  MACMUX2sel_D ,
00237     Q(0)    =>  MACMUX2sel_D_D 
00238 );
00239 
00240 --==============================================================
00241 --======================M A C  M U X ===========================
00242 --==============================================================
00243 MACMUX_inst : MAC_MUX 
00244 generic map(
00245     Input_SZ_A     =>   Input_SZ_A+Input_SZ_B ,
00246     Input_SZ_B     =>   Input_SZ_A+Input_SZ_B 
00247 
00248 )
00249 port map(
00250     sel          =>  MACMUXsel_D ,
00251     INA1         =>  ADDERout ,
00252     INA2         =>  OP2_D_Resz ,
00253     INB1         =>  MULTout ,
00254     INB2         =>  OP1_D_Resz ,
00255     OUTA         =>  ADDERinA ,
00256     OUTB         =>  ADDERinB 
00257 );
00258 OP1_D_Resz  <=  std_logic_vector(resize(signed(OP1_D),Input_SZ_A+Input_SZ_B));
00259 OP2_D_Resz  <=  std_logic_vector(resize(signed(OP2_D),Input_SZ_A+Input_SZ_B));
00260 --==============================================================
00261 
00262 
00263 --==============================================================
00264 --======================M A C  M U X2 ==========================
00265 --==============================================================
00266 MAC_MUX2_inst   : MAC_MUX2
00267 generic map(Input_SZ      => Input_SZ_A+Input_SZ_B )
00268 port map(
00269     sel      =>  MACMUX2sel_D_D ,
00270     RES2     =>  MULTout_D,
00271     RES1     =>  ADDERout ,
00272     RES      =>  RES
00273 );
00274 
00275 
00276 --==============================================================
00277 
00278 end ar_MAC;

© Copyright 2011 LPP-CNRS | Design by Alexis Jeandet