OpenCores
URL https://opencores.org/ocsvn/dirac/dirac/trunk

Subversion Repositories dirac

[/] [dirac/] [trunk/] [src/] [common/] [ARITHMETIC_UNIT.vhd] - Diff between revs 5 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 10
Line 1... Line 1...
-- ***** BEGIN LICENSE BLOCK *****
-- ***** BEGIN LICENSE BLOCK *****
-- 
-- 
-- $Id: ARITHMETIC_UNIT.vhd,v 1.3 2005-05-27 16:00:28 petebleackley Exp $ $Name: not supported by cvs2svn $
-- $Id: ARITHMETIC_UNIT.vhd,v 1.4 2006-10-05 16:17:11 petebleackley Exp $ $Name: not supported by cvs2svn $
-- *
-- *
-- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
-- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
-- *
-- *
-- * The contents of this file are subject to the Mozilla Public License
-- * The contents of this file are subject to the Mozilla Public License
-- * Version 1.1 (the "License"); you may not use this file except in compliance
-- * Version 1.1 (the "License"); you may not use this file except in compliance
Line 18... Line 18...
-- * The Initial Developer of the Original Code is the British Broadcasting
-- * The Initial Developer of the Original Code is the British Broadcasting
-- * Corporation.
-- * Corporation.
-- * Portions created by the Initial Developer are Copyright (C) 2004.
-- * Portions created by the Initial Developer are Copyright (C) 2004.
-- * All Rights Reserved.
-- * All Rights Reserved.
-- *
-- *
-- * Contributor(s): Peter Bleackley (Original author), Stephan Reichör
-- * Contributor(s): Peter Bleackley (Original author)
-- *
-- *
-- * Alternatively, the contents of this file may be used under the terms of
-- * Alternatively, the contents of this file may be used under the terms of
-- * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
-- * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
-- * Public License Version 2.1 (the "LGPL"), in which case the provisions of
-- * Public License Version 2.1 (the "LGPL"), in which case the provisions of
-- * the GPL or the LGPL are applicable instead of those above. If you wish to
-- * the GPL or the LGPL are applicable instead of those above. If you wish to
Line 33... Line 33...
-- * or LGPL. If you do not delete the provisions above, a recipient may use
-- * or LGPL. If you do not delete the provisions above, a recipient may use
-- * your version of this file under the terms of any one of the MPL, the GPL
-- * your version of this file under the terms of any one of the MPL, the GPL
-- * or the LGPL.
-- * or the LGPL.
-- * ***** END LICENSE BLOCK ***** */
-- * ***** END LICENSE BLOCK ***** */
 
 
 
 
library IEEE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.NUMERIC_STD.ALL;
Line 47... Line 46...
--library UNISIM;
--library UNISIM;
--use UNISIM.VComponents.all;
--use UNISIM.VComponents.all;
 
 
        entity ARITHMETIC_UNIT is
        entity ARITHMETIC_UNIT is
    Port ( DIFFERENCE : in std_logic_vector(15 downto 0);
    Port ( DIFFERENCE : in std_logic_vector(15 downto 0);
           PROB : in std_logic_vector(9 downto 0);
           PROB : in std_logic_vector(7 downto 0);
                          LOW : in std_logic_vector(15 downto 0);
                          LOW : in std_logic_vector(15 downto 0);
           ENABLE : in std_logic;
           ENABLE : in std_logic;
                          RESET :       in std_logic;
                          RESET :       in std_logic;
           CLOCK : in std_logic;
           CLOCK : in std_logic;
           DIFFERENCE_OUT0 : out std_logic_vector(15 downto 0);
           DIFFERENCE_OUT0 : out std_logic_vector(15 downto 0);
Line 62... Line 61...
end ARITHMETIC_UNIT;
end ARITHMETIC_UNIT;
 
 
architecture RTL of ARITHMETIC_UNIT is
architecture RTL of ARITHMETIC_UNIT is
 
 
        signal LOW2 : std_logic_vector(16 downto 0);
        signal LOW2 : std_logic_vector(16 downto 0);
        signal PRODUCT :        std_logic_vector (26 downto 0);
        signal PRODUCT :        std_logic_vector (24 downto 0);
        signal PRODUCT2 :        std_logic_vector (16 downto 0);
        signal PRODUCT2 :        std_logic_vector (16 downto 0);
        signal RESULT : std_logic_vector (16 downto 0);
        signal RESULT : std_logic_vector (16 downto 0);
        signal RESULT0 : std_logic_vector (16 downto 0);
        signal RESULT0 : std_logic_vector (16 downto 0);
        signal DIFFERENCE1 : std_logic_vector (16 downto 0);
        signal DIFFERENCE1 : std_logic_vector (16 downto 0);
        signal DIFFERENCE2 : std_logic_vector(16 downto 0);
        signal DIFFERENCE2 : std_logic_vector(16 downto 0);
        signal DIFFERENCE3 : std_logic_vector(16 downto 0);
        signal DIFFERENCE3 : std_logic_vector(16 downto 0);
        signal DIFFERENCE4 :    std_logic_vector(16 downto 0);
        signal DIFFERENCE4 :    std_logic_vector(16 downto 0);
        signal DELAY1 : std_logic;
        signal DELAY1 : std_logic;
        signal DELAY2 : std_logic;
--      signal DELAY2 : std_logic;
        signal CALCULATE :      std_logic;
        signal CALCULATE :      std_logic;
begin
begin
 
 
-- The arithmetic
-- The arithmetic
        DIFFERENCE2 <= ('0' & DIFFERENCE) + "00000000000000001";
        DIFFERENCE2 <= ('0' & DIFFERENCE) + "00000000000000001";
MULTIPLY : process (CLOCK, DIFFERENCE2, PROB)
MULTIPLY : process (CLOCK)
        begin
        begin
        if CLOCK'event and CLOCK = '1' then
        if CLOCK'event and CLOCK = '1' then
 
                if ENABLE = '1' then
        PRODUCT <= DIFFERENCE2 * PROB;
        PRODUCT <= DIFFERENCE2 * PROB;
        end if;
        end if;
 
        end if;
        end process MULTIPLY;
        end process MULTIPLY;
        PRODUCT2        <= PRODUCT(26 downto 10);
 
 
        PRODUCT2        <= PRODUCT(24 downto 8);
        RESULT <= LOW2 + PRODUCT2;
        RESULT <= LOW2 + PRODUCT2;
        RESULT_OUT1 <= RESULT(15 downto 0);
        RESULT_OUT1 <= RESULT(15 downto 0);
        RESULT0 <= (RESULT - "00000000000000001");
        RESULT0 <= (RESULT - "00000000000000001");
        RESULT_OUT0 <= RESULT0(15 downto 0);
        RESULT_OUT0 <= RESULT0(15 downto 0);
        DIFFERENCE3 <= (PRODUCT2 - "00000000000000001");
        DIFFERENCE3 <= (PRODUCT2 - "00000000000000001");
        DIFFERENCE4 <= (DIFFERENCE1 - PRODUCT2);
        DIFFERENCE4 <= (DIFFERENCE1 - PRODUCT2);
        DIFFERENCE_OUT1 <= DIFFERENCE4(15 downto 0);
        DIFFERENCE_OUT1 <= DIFFERENCE4(15 downto 0);
 
        DIFFERENCE_OUT0 <= DIFFERENCE3(15 downto 0);
 
 
 
 
 
 
-- Control logic
-- Control logic
        CALCULATE <= ENABLE and not RESET;
        CALCULATE <= ENABLE and not RESET;
        DATA_LOAD <= DELAY1 and DELAY2;
        DATA_LOAD <= DELAY1;-- and DELAY2;
 
 
-- Sequential control logic
-- Sequential control logic
 
 
DELAYS: process (CLOCK)
DELAYS: process (CLOCK)
        begin
        begin
        if CLOCK'event and CLOCK = '1' then
        if CLOCK'event and CLOCK = '1' then
                DELAY1 <= CALCULATE;
                DELAY1 <= CALCULATE;
                DELAY2 <= DELAY1;
--              DELAY2 <= DELAY1;
 
                if ENABLE = '1' then
                DIFFERENCE1 <= '0' & DIFFERENCE;
                DIFFERENCE1 <= '0' & DIFFERENCE;
                LOW2 <= '0' & LOW;
                LOW2 <= '0' & LOW;
                DIFFERENCE_OUT0 <= DIFFERENCE3(15 downto 0);
                end if;
 
 
        end if;
        end if;
end process DELAYS;
end process DELAYS;
 
 
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.