----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date:    00:28:57 07/10/2006 
-- Design Name: 
-- Module Name:    adder_registered - Behavioral 
-- Project Name: 
-- Target Devices: 
-- Tool versions: 
-- Description: 
--
-- Dependencies: 
--
-- Revision: 
-- Revision 0.01 - File Created
-- Additional Comments: 
--
----------------------------------------------------------------------------------
library IEEE;

use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

library ieee_proposed;
use ieee_proposed.fixed_pkg.all;
use std.textio.all; --  Imports the standard textio package.

library work;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity eval_fixed_ja is
	Generic (
	        nbits : integer := 8;
	        nbits_int : integer := 0
			  );
	Port
	(
		srst			: in std_logic;
		clk			: in std_logic;
		di1			: in std_logic_vector(nbits-1 downto 0);
		di2			: in std_logic_vector(nbits-1 downto 0);
		in_valid		: in std_logic;
		do				: out std_logic_vector(nbits-1 downto 0);
		out_valid	: out std_logic
	);
			  
end eval_fixed_ja;

architecture Behavioral of eval_fixed_ja is
signal op1, op2 : sfixed(nbits_int downto -(nbits-1));
signal result : sfixed(2*nbits_int downto -(2*nbits-1));
begin

op1 <= to_sfixed(di1, op1);
op2 <= to_sfixed(di2, op2);

do <= to_slv(resize(result, op1, false, false));

---------------------------------------------------------------------
process(srst, clk, in_valid, di1, di2)
begin
	if rising_edge(clk) then
		if srst = '1' then
			result <= (others => '0');
		elsif in_valid = '1' then
			result <= op1 * op2;
		end if;
		out_valid <= in_valid;
	end if;	
end process;


---------------------------------------------------------------------
end Behavioral;

