Line 1... |
Line 1... |
|
--------------------------------------------------------------------------------
|
|
-- mips_alu.vhdl -- integer arithmetic ALU, excluding mult/div functionality.
|
|
--
|
|
--------------------------------------------------------------------------------
|
|
-- Copyright (C) 2010 Jose A. Ruiz
|
|
--
|
|
-- This source file may be used and distributed without
|
|
-- restriction provided that this copyright statement is not
|
|
-- removed from the file and that any derivative work contains
|
|
-- the original copyright notice and the associated disclaimer.
|
|
--
|
|
-- This source file is free software; you can redistribute it
|
|
-- and/or modify it under the terms of the GNU Lesser General
|
|
-- Public License as published by the Free Software Foundation;
|
|
-- either version 2.1 of the License, or (at your option) any
|
|
-- later version.
|
|
--
|
|
-- This source is distributed in the hope that it will be
|
|
-- useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
-- PURPOSE. See the GNU Lesser General Public License for more
|
|
-- details.
|
|
--
|
|
-- You should have received a copy of the GNU Lesser General
|
|
-- Public License along with this source; if not, download it
|
|
-- from http://www.opencores.org/lgpl.shtml
|
|
--------------------------------------------------------------------------------
|
|
|
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;
|
|
|
Line 10... |
Line 38... |
clk : in std_logic;
|
clk : in std_logic;
|
reset : in std_logic;
|
reset : in std_logic;
|
|
|
-- function selection
|
-- function selection
|
ac : in t_alu_control;
|
ac : in t_alu_control;
|
|
-- comparison result flags
|
flags : out t_alu_flags;
|
flags : out t_alu_flags;
|
|
|
-- '1' when inp1 is zero
|
|
--flags.inp1_eq_zero : out std_logic;
|
|
-- '1' when inp1 is < 0 (bit 31 set)
|
|
--flags.inp1_lt_zero : out std_logic;
|
|
-- '1' when (inp1 + ac.neg_sel(inp2) + ac.cy_in) < 0
|
|
--flags.inp1_lt_inp2 : out std_logic;
|
|
-- '1' when (inp1 + ac.neg_sel(inp2) + ac.cy_in) == 0
|
|
--flags.inp1_eq_inp2 : out std_logic;
|
|
|
|
-- data inputs
|
-- data inputs
|
inp1 : in std_logic_vector(31 downto 0);
|
inp1 : in std_logic_vector(31 downto 0);
|
inp2 : in std_logic_vector(31 downto 0);
|
inp2 : in std_logic_vector(31 downto 0);
|
-- data result output
|
-- data result output
|
outp : out std_logic_vector(31 downto 0)
|
outp : out std_logic_vector(31 downto 0)
|