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

Subversion Repositories special_functions_unit

[/] [special_functions_unit/] [Open_source_SFU/] [log2_vhdl/] [parts/] [log2_ieee.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 divadnauj
-- Log2 IEEE754 case detect
2
library ieee;
3
        use ieee.std_logic_1164.all;
4
        use ieee.numeric_std.all;
5
 
6
entity log2_ieee is
7
        port      (i_data                                       : in    std_logic_vector(31 downto 0);
8
                                o_case                                  : out std_logic_vector(31 downto 0);
9
                                o_case_en                               : out std_logic);
10
end entity;
11
 
12
architecture rtl of log2_ieee is
13
 
14
        signal s_sgn    : std_logic;
15
        signal s_exp    : std_logic_vector(7 downto 0);
16
        signal s_mantis: std_logic_vector(22 downto 0);
17
 
18
begin
19
        s_sgn <= i_data(i_data'left);
20
        s_exp <= i_data(i_data'left-1 downto 23);
21
        s_mantis        <= i_data(22 downto 0);
22
 
23
        process(s_sgn, s_exp, s_mantis)
24
        begin
25
 
26
                if s_exp = X"00" then
27
                        o_case          <= X"FF800000";
28
                        o_case_en       <= '1';
29
 
30
                elsif s_exp = X"FF" then
31
                        o_case_en       <= '1';
32
                        if s_sgn = '0' and s_mantis = "00000000000000000000000" then
33
                                o_case <= X"7F800000";
34
                        else
35
                                o_case <= X"FFFFFFFF";
36
                        end if;
37
 
38
                elsif   s_exp = X"7F" and s_mantis = "00000000000000000000000" and s_sgn = '0' then
39
                        o_case_en       <= '1';
40
                        o_case <= X"00000000";
41
 
42
                elsif s_sgn = '1' then
43
                        o_case_en       <= '1';
44
                        o_case <= X"FFFFFFFF";
45
 
46
                else
47
                        o_case_en       <= '0';
48
                        o_case <= X"00000000";
49
                end if;
50
 
51
        end process;
52
end rtl;
53
 

powered by: WebSVN 2.1.0

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