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

Subversion Repositories generic_booth_multipler

[/] [generic_booth_multipler/] [trunk/] [rtl/] [modules/] [01.BoothDatapath.vhd] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alimpk
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
 
4
entity BoothDatapath is
5 6 alimpk
        generic(
6
                size: integer := 4
7
        );
8 2 alimpk
        port(
9
                clock :in       std_logic;
10
                reset :in std_logic;
11
                load :in std_logic;
12
                shift :in std_logic;
13 6 alimpk
                X       : in std_logic_vector(size-1 downto 0);
14
                Y       : in std_logic_vector(size-1 downto 0);
15
                P       : out std_logic_vector(2*size-1 downto 0));
16 2 alimpk
end BoothDatapath;
17
 
18
architecture Behavioral of BoothDatapath is
19
 
20
        component Regeister is
21 6 alimpk
                generic (
22
                        size: integer := 4
23
                );
24 2 alimpk
                port(
25 6 alimpk
                        clock :in       std_logic;
26 2 alimpk
                        enable :in      std_logic;
27 6 alimpk
                        reset :in       std_logic;
28
                        din      :in    std_logic_vector(size-1 downto 0);
29
                        dout :out std_logic_vector(size-1 downto 0));
30 2 alimpk
        end component;
31
 
32
        component LeftShiftReg is
33 6 alimpk
                generic(
34
                        size : integer:= 4
35
                );
36
                port(
37
                        clock    :in    std_logic;
38
                        enable :in      std_logic;
39
                        shift    :in    std_logic;
40
                        din      :in    std_logic_vector(size-1 downto 0);
41
                        dout     :out std_logic_vector(size-1 downto 0));
42 2 alimpk
        end component;
43
 
44
        component RightShiftReg is
45 6 alimpk
                generic(
46
                        size : integer := 4
47
                );
48
                port(
49
                        clock    :in    std_logic;
50
                        enable :in      std_logic;
51
                        shift    :in    std_logic;
52
                        din      :in    std_logic_vector(size-1 downto 0);
53
                        dout     :out std_logic_vector(1 downto 0));
54 2 alimpk
        end component;
55
        component BoothEncoder is
56
                port(
57
                        input1  : in    std_logic;
58
                        input0  : in    std_logic;
59
                        operator        : out std_logic;
60
                        product : out   std_logic
61
                        );
62
        end component;
63
 
64
        component Alu is
65 6 alimpk
                generic(
66
                        size : integer:= 4
67
                );
68 2 alimpk
                port(
69 6 alimpk
                        A       : in  std_logic_vector(size-1 downto 0);
70
                        B       : in  std_logic_vector(size-1 downto 0);
71 2 alimpk
                        op      : in  std_logic;
72 6 alimpk
                        S       : out std_logic_vector(size-1 downto 0));
73 2 alimpk
        end component;
74
        component Ander is
75 6 alimpk
                generic(
76
                        size : integer:= 4
77
                );
78 2 alimpk
                port(
79
                        input1 : in      std_logic;
80 6 alimpk
                        input2 : in  std_logic_vector(size-1 downto 0);
81
                        result : out std_logic_vector(size-1 downto 0));
82 2 alimpk
        end component;
83
        signal sign_extended_x,andout,alu_out,p_out,X_reg_dout: std_logic_vector(2*X'length -1 downto 0);
84
        signal lessTwoBits : std_logic_vector(1 downto 0);
85
        signal operator,product : std_logic;
86
        signal Y_concat_zero : std_logic_vector(y'length downto 0);
87
begin
88
        Y_concat_zero <= Y & '0';
89
        sign_extended_x(X'range) <= X;
90
        sign_extended_x(sign_extended_x'length - 1 downto X'length) <= (others=> X(X'length-1));
91
 
92
  Booth_ENC: BoothEncoder
93
    port map(input1 => lessTwoBits(1),
94
      input0=>lessTwoBits(0),
95
      operator => operator,
96
      product => product);
97
 
98
        Y_REG           : RightShiftReg
99 6 alimpk
        generic map(size => size+1)
100 2 alimpk
        port map(
101
    clock => clock,
102
    enable => load,
103
    shift =>shift,
104
    din => Y_concat_zero,
105
    dout => lessTwoBits);
106
 
107
  X_REG : LeftShiftReg
108 6 alimpk
  generic map(size => 2*size)
109 2 alimpk
  port map(
110
    clock => clock,
111
    enable => load,
112
    shift => shift,
113
    din => sign_extended_x,
114
    dout => X_reg_dout);
115
 
116
  ANDing : Ander
117 6 alimpk
  generic map(size => 2*size)
118 2 alimpk
  port map(
119
    input1 => product,
120
    input2 => X_reg_dout,
121
    result => AndOut);
122
 
123
  Add_Sub : ALU
124 6 alimpk
  generic map(size => 2*size)
125 2 alimpk
  port map(
126
    A => P_out,
127
    B => AndOut,
128
    op => operator,
129
    S => ALU_Out);
130
 
131
  P_REG : Regeister
132 6 alimpk
  generic map(size => 2*size)
133 2 alimpk
    port map(
134
      clock => clock,
135
      enable => shift,
136
      reset => reset,
137
      din => ALU_Out,
138
      dout => P_out);
139
  P <= P_out;
140
 
141
end Behavioral;
142
 

powered by: WebSVN 2.1.0

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