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

Subversion Repositories cryptography

[/] [cryptography/] [trunk/] [decryption/] [multiplier.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 marcus.erl
 
2
library IEEE;
3
use IEEE.STD_LOGIC_1164.ALL;
4
use IEEE.STD_LOGIC_ARITH.ALL;
5
use IEEE.STD_LOGIC_UNSIGNED.ALL;
6
 
7
 
8
 
9
entity multiplier is
10
port( B  :in std_logic_vector(15 downto 0);
11
    Product :out std_logic_vector(15 downto 0)
12
    );
13
end multiplier;
14
 
15
architecture Behavioral of multiplier is
16
 
17
signal  P1:std_logic_vector(15 downto 0);
18
signal  P2:std_logic_vector(15 downto 0);
19
signal  P3:std_logic_vector(15 downto 0);
20
signal  P4:std_logic_vector(15 downto 0);
21
signal  P5:std_logic_vector(15 downto 0);
22
signal  P6:std_logic_vector(15 downto 0);
23
signal  P7:std_logic_vector(15 downto 0);
24
signal  P8:std_logic_vector(15 downto 0);
25
signal  P9:std_logic_vector(15 downto 0);
26
 
27
component wallace_structure is
28
port(P1,P2,P3,P4,P5,P6,P7,P8,P9 :in std_logic_vector( 15 downto 0);
29
       product                  :out std_logic_vector( 15 downto 0));
30
end component;
31
 
32
begin
33
-- partial products reduced to 9 from 16 due to the multiplication of B and 2B+1
34
 
35
P1 <= B;
36
 
37
gen1:for i in 13 downto 1 generate
38
p2(i+2) <= B(0) and B(i);   --P2 = {{B[3:15] & {13{B[15]}}},1'd0,B[15],1'd0};
39
end generate;
40
 
41
p2(2 downto 0)<=('0' & B(0) & '0');
42
 
43
 
44
gen2:for i in 12 downto 2 generate
45
p3(i+3) <= B(1) and B(i);   --P3 <= {{B[5:15] & {11{B[14]}}},1'd0,B[14],3'd0};
46
end generate;
47
 
48
p3(4 downto 0)<=( '0' & B(1) & "000");
49
 
50
gen3:for i in 11 downto 3 generate
51
p4(i+4) <= B(2) and B(i);   -- P4 <= {{B[4:12] & {9{B[13]}}},1'd0,B[13],5'd0};
52
end generate;
53
 
54
p4(6 downto 0)<=('0'& B(2) & "00000");
55
 
56
 
57
gen5:for i in 10 downto 4 generate
58
p5(i+5) <= B(3) and B(i);   --  P5 <= {{B[5:11] & {7{B[12]}}},1'd0,B[12],7'd0};
59
end generate;
60
 
61
p5(8 downto 0)<=('0' & B(3) & "0000000");
62
 
63
 
64
gen6:for i in 9 downto 5 generate
65
p6(i+6) <= B(4) and B(i);   --P6 <= {{B[6:10] & {5{B[11]}}},1'd0,B[11],9'd0};  
66
end generate;
67
 
68
p6(10 downto 0)<=( '0' & B(4) & "000000000");
69
 
70
 
71
gen7:for i in 8 downto 6 generate
72
p7(i+7) <= B(5) and B(i);   -- P7 <= {{B[7:9] & {3{B[10]}}},1'd0,B[10],11'd0};
73
end generate;
74
 
75
p7(12 downto 0)<=( '0' & B(5) & "00000000000");
76
 
77
 
78
 P8 <= ((B(7) AND  B(6)) & '0'& B(6) & "0000000000000");
79
 
80
 
81
  P9 <= (B(7) & "000000000000000");
82
 
83
w1: wallace_structure port map (P1,P2,P3,P4,P5,P6,P7,P8,P9,product); --Wallace tree
84
 
85
 
86
 
87
 
88
end Behavioral;
89
 

powered by: WebSVN 2.1.0

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