1 |
2 |
farooq21 |
// This is a verilog File Generated
|
2 |
|
|
// By The C++ program That Generates
|
3 |
|
|
// An Gallios Field Generic
|
4 |
|
|
// Bit Parallel Hardware Multiplier
|
5 |
|
|
|
6 |
|
|
// THIS BLOCK IS THE IMPLEMENTATION OF MODULE A
|
7 |
|
|
module GF8GenMultModA(
|
8 |
|
|
modA_i1, // Generic Multiplier Mod A input 1
|
9 |
|
|
modA_i2, // Generic Multiplier Mod A input 2
|
10 |
|
|
modA_o // Generic Multiplier Mod A output
|
11 |
|
|
);
|
12 |
|
|
// Inputs are declared here
|
13 |
|
|
input [7:0] modA_i1, modA_i2;
|
14 |
|
|
output wire modA_o;
|
15 |
|
|
|
16 |
|
|
// Declaration of Wires And Register are here
|
17 |
|
|
wire xor0_w0, xor0_w1, xor0_w2, xor0_w3;
|
18 |
|
|
wire xor1_w0, xor1_w1;
|
19 |
|
|
wire and_w0, and_w1, and_w2, and_w3, and_w4, and_w5, and_w6, and_w7;
|
20 |
|
|
|
21 |
|
|
//LOGIC STARTS FROM HERE
|
22 |
|
|
|
23 |
|
|
assign and_w0 = modA_i1[0] & modA_i2[0];
|
24 |
|
|
assign and_w1 = modA_i1[1] & modA_i2[1];
|
25 |
|
|
assign and_w2 = modA_i1[2] & modA_i2[2];
|
26 |
|
|
assign and_w3 = modA_i1[3] & modA_i2[3];
|
27 |
|
|
assign and_w4 = modA_i1[4] & modA_i2[4];
|
28 |
|
|
assign and_w5 = modA_i1[5] & modA_i2[5];
|
29 |
|
|
assign and_w6 = modA_i1[6] & modA_i2[6];
|
30 |
|
|
assign and_w7 = modA_i1[7] & modA_i2[7];
|
31 |
|
|
|
32 |
|
|
assign xor0_w0 = and_w0^and_w1;
|
33 |
|
|
assign xor0_w1 = and_w2^and_w3;
|
34 |
|
|
assign xor0_w2 = and_w4^and_w5;
|
35 |
|
|
assign xor0_w3 = and_w6^and_w7;
|
36 |
|
|
|
37 |
|
|
assign xor1_w0 = xor0_w0^xor0_w1;
|
38 |
|
|
assign xor1_w1 = xor0_w2^xor0_w3;
|
39 |
|
|
|
40 |
|
|
assign modA_o = xor1_w0^xor1_w1;
|
41 |
|
|
|
42 |
|
|
endmodule
|
43 |
|
|
|
44 |
|
|
|
45 |
|
|
|
46 |
|
|
// This is a verilog File Generated
|
47 |
|
|
// By The C++ program That Generates
|
48 |
|
|
// An Gallios Field Generic
|
49 |
|
|
// Bit Parallel Hardware Multiplier
|
50 |
|
|
|
51 |
|
|
// THIS BLOCK IS THE IMPLEMENTATION OF MODULE B
|
52 |
|
|
module GF8GenMultModB(
|
53 |
|
|
modB_i, // Generic Multiplier Mod B input 1
|
54 |
|
|
modB_o // Generic Multiplier Mod B output
|
55 |
|
|
);
|
56 |
|
|
// Inputs are declared here
|
57 |
|
|
input [7:0] modB_i;
|
58 |
|
|
output wire [6:0] modB_o;
|
59 |
|
|
|
60 |
|
|
assign modB_o[0] = modB_i[0]^modB_i[2]^modB_i[3]^modB_i[4];
|
61 |
|
|
assign modB_o[1] = modB_i[1]^modB_i[3]^modB_i[4]^modB_i[5];
|
62 |
|
|
assign modB_o[2] = modB_i[2]^modB_i[4]^modB_i[5]^modB_i[6];
|
63 |
|
|
assign modB_o[3] = modB_i[3]^modB_i[5]^modB_i[6]^modB_i[7];
|
64 |
|
|
assign modB_o[4] = modB_i[0]^modB_i[2]^modB_i[3]^modB_i[6]^modB_i[7];
|
65 |
|
|
assign modB_o[5] = modB_i[0]^modB_i[1]^modB_i[2]^modB_i[7];
|
66 |
|
|
assign modB_o[6] = modB_i[0]^modB_i[1]^modB_i[4];
|
67 |
|
|
|
68 |
|
|
endmodule
|
69 |
|
|
|
70 |
|
|
|
71 |
|
|
|
72 |
|
|
// This is a verilog File Generated
|
73 |
|
|
// By The C++ program That Generates
|
74 |
|
|
// An Gallios Field Generic
|
75 |
|
|
// Bit Parallel Hardware Multiplier
|
76 |
|
|
|
77 |
|
|
module GF8GenMult(
|
78 |
|
|
mult_i1, // Gallios Field Generic Multiplier input 1
|
79 |
|
|
mult_i2, // Gallios Field Generic Multiplier input 2
|
80 |
|
|
mult_o // Gallios Field Generic Multiplier output
|
81 |
|
|
);
|
82 |
|
|
// Inputs are declared here
|
83 |
|
|
input [7:0] mult_i1, mult_i2;
|
84 |
|
|
output wire [7:0] mult_o;
|
85 |
|
|
// Declaration of Wires And Register are here
|
86 |
|
|
wire [6:0] modB_o;
|
87 |
|
|
wire [7:0] dual_o, dual_i;
|
88 |
|
|
wire [7:0] modA_w [0:6];
|
89 |
|
|
assign dual_i[0] = mult_i1[1];
|
90 |
|
|
assign dual_i[1] = mult_i1[0];
|
91 |
|
|
assign dual_i[2] = mult_i1[7];
|
92 |
|
|
assign dual_i[3] = mult_i1[6];
|
93 |
|
|
assign dual_i[4] = mult_i1[5];
|
94 |
|
|
assign dual_i[5] = mult_i1[4];
|
95 |
|
|
assign dual_i[6] = mult_i1[3]^mult_i1[7];
|
96 |
|
|
assign dual_i[7] = mult_i1[2]^mult_i1[7]^mult_i1[6];
|
97 |
|
|
|
98 |
|
|
GF8GenMultModB MODB(
|
99 |
|
|
.modB_i(dual_i),
|
100 |
|
|
.modB_o(modB_o));
|
101 |
|
|
|
102 |
|
|
|
103 |
|
|
assign modA_w[0] = {modB_o[0],dual_i[7:1]};
|
104 |
|
|
assign modA_w[1] = {modB_o[1],modB_o[0],dual_i[7:2]};
|
105 |
|
|
assign modA_w[2] = {modB_o[2],modB_o[1],modB_o[0],dual_i[7:3]};
|
106 |
|
|
assign modA_w[3] = {modB_o[3],modB_o[2],modB_o[1],modB_o[0],dual_i[7:4]};
|
107 |
|
|
assign modA_w[4] = {modB_o[4],modB_o[3],modB_o[2],modB_o[1],modB_o[0],dual_i[7:5]};
|
108 |
|
|
assign modA_w[5] = {modB_o[5],modB_o[4],modB_o[3],modB_o[2],modB_o[1],modB_o[0],dual_i[7:6]};
|
109 |
|
|
assign modA_w[6] = {modB_o[6],modB_o[5],modB_o[4],modB_o[3],modB_o[2],modB_o[1],modB_o[0],dual_i[7:7]};
|
110 |
|
|
|
111 |
|
|
GF8GenMultModA MODA0(
|
112 |
|
|
.modA_i1(dual_i), // Generic Multiplier Mod A input 1
|
113 |
|
|
.modA_i2(mult_i2), // Generic Multiplier Mod A input 2
|
114 |
|
|
.modA_o(dual_o[0])); // Generic Multiplier Mod A output
|
115 |
|
|
|
116 |
|
|
genvar j;
|
117 |
|
|
generate
|
118 |
|
|
for (j=1; j < 8; j = j+1) begin:MODABLOCKS
|
119 |
|
|
GF8GenMultModA MODA(
|
120 |
|
|
.modA_i1(modA_w[j-1]), // Generic Multiplier Mod A input 1
|
121 |
|
|
.modA_i2(mult_i2), // Generic Multiplier Mod A input 2
|
122 |
|
|
.modA_o(dual_o[j])); // Generic Multiplier Mod A output
|
123 |
|
|
end
|
124 |
|
|
endgenerate
|
125 |
|
|
|
126 |
|
|
assign mult_o[0] = dual_o[1];
|
127 |
|
|
assign mult_o[1] = dual_o[0];
|
128 |
|
|
assign mult_o[2] = dual_o[7]^dual_o[2]^dual_o[3];
|
129 |
|
|
assign mult_o[3] = dual_o[6]^dual_o[2];
|
130 |
|
|
assign mult_o[4] = dual_o[5];
|
131 |
|
|
assign mult_o[5] = dual_o[4];
|
132 |
|
|
assign mult_o[6] = dual_o[3];
|
133 |
|
|
assign mult_o[7] = dual_o[2];
|
134 |
|
|
endmodule
|