------------------------------------------------------------
-- Copyright: 2011 Integrated Sytems Laboratory, ETH Zurich
--            http://www.iis.ee.ethz.ch/~sha3
------------------------------------------------------------
-------------------------------------------------------------------------------
-- Title      : Carry Save Adder
-- Project    : 
-------------------------------------------------------------------------------
-- File       : ethz_csa.vhdl
-- Author     : Köppel Benedikt;Schnydrig Mathias  
-- Company    : Integrated Systems Laboratory, ETH Zurich
-- Created    : 2010-12-16
-- Last update: 2011-08-29
-- Platform   : ModelSim (simulation), Synopsys (synthesis)
-- Standard   : VHDL'87
-------------------------------------------------------------------------------
-- Description: Carry Save Adder
-------------------------------------------------------------------------------
-- Copyright (c) 2010 Integrated Systems Laboratory, ETH Zurich
-------------------------------------------------------------------------------
-- Revisions  :
-- Date        Version  Author  Description
-- 2010-12-16  1.0      sem10h7	Created
-- 2011-08-29  1.1      kgf     renamed the instance to avoid name conflicts
-------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;



-------------------------------------------------------------------------------
-- This is only a Modulo-WIDTH CSA!
-- because we're only interested in Addition-Modulo, we can omit everything
-------------------------------------------------------------------------------




entity ethz_csa is
  
  generic (
    WIDTH : integer := 32);

  port (
    XxDI : in std_logic_vector(WIDTH-1 downto 0);
    YxDI : in std_logic_vector(WIDTH-1 downto 0);
    ZxDI : in std_logic_vector(WIDTH-1 downto 0);

    CxDO : out std_logic_vector(WIDTH-1 downto 0);
    SxDO : out std_logic_vector(WIDTH-1 downto 0)
    );

end ethz_csa;

architecture behave of ethz_csa is
  signal CFULLxDO : std_logic_vector(WIDTH downto 0);

begin  -- behave

  SxDO <= XxDI xor YxDI xor ZxDI;
  
  CFULLxDO <= ( (XxDI and YxDI) or (XxDI and ZxDI) or (YxDI and ZxDI) ) & '0';
  CxDO <= CFULLxDO(WIDTH-1 downto 0);

end behave;

Generated on Tue Nov 22 15:16:34 CET 2011
Home