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

Subversion Repositories encore

[/] [encore/] [trunk/] [fpmult/] [src/] [fpmult_stage23.vhdl] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 aloy.amber
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
use work.fp_generic.all;
5
use work.fpmult_stage23_comp.all;
6
 
7
entity fpmult_stage23 is
8
        port(
9
                clk:in std_logic;
10
                d:in fpmult_stage23_in_type;
11
                q:out fpmult_stage23_out_type
12
        );
13
end;
14
 
15
architecture twoproc of fpmult_stage23 is
16
        type reg_type is record
17
                p_sign:fp_sign_type;
18
                p_exp:fp_exp_type;
19
                p_mantissa:unsigned(47 downto 0);
20
        end record;
21
        signal r,rin:reg_type;
22
begin
23
        comb:process(d,r)
24
                variable v:reg_type;
25
        begin
26
                -- sample register outputs
27
                v:=r;
28
 
29
                -- overload
30
                v.p_sign:=d.p_sign;
31
                v.p_exp:=d.p_exp;
32
                v.p_mantissa:=(resize(fp_mantissa(d.a),48) sll 23) + d.p_mantissa;
33
 
34
                -- Shift down if product >= 2.0
35
                if(v.p_mantissa(47)='1')then
36
                        v.p_mantissa:=v.p_mantissa srl 1;
37
                        v.p_exp:=v.p_exp+1;
38
                end if;
39
 
40
                -- Round mantissa
41
                if(v.p_mantissa(22)='1')then
42
                        v.p_mantissa:=v.p_mantissa+(to_unsigned(1,48) sll 23);
43
                end if;
44
 
45
                -- drive register inputs
46
                rin<=v;
47
 
48
                -- drive outputs
49
                q.p<=std_logic_vector(r.p_sign&r.p_exp&r.p_mantissa(45 downto 23));
50
        end process;
51
 
52
        seq:process(clk,rin)
53
        begin
54
                if rising_edge(clk) then
55
                        r<=rin;
56
                end if;
57
        end process;
58
end;

powered by: WebSVN 2.1.0

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