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

Subversion Repositories theia_gpu

[/] [theia_gpu/] [branches/] [beta_1.2/] [rtl/] [Collaterals/] [Module_RadixRMul.v] - Blame information for rev 87

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 diegovalve
`timescale 1ns / 1ps
2
`include "aDefinitions.v"
3
//////////////////////////////////////////////////////////////////////////////////
4
// Company: 
5
// Engineer: 
6
// 
7
// Create Date:    19:49:14 01/13/2009 
8
// Design Name: 
9
// Module Name:    RadixRMul 
10
// Project Name: 
11
// Target Devices: 
12
// Tool versions: 
13
// Description: 
14
//
15
// Dependencies: 
16
//
17
// Revision: 
18
// Revision 0.01 - File Created
19
// Additional Comments: 
20
//
21
//////////////////////////////////////////////////////////////////////////////////
22
 
23
`default_nettype none
24
 
25
 
26
//---------------------------------------------------
27
module MUX_4_TO_1_32Bits_FullParallel
28
(
29
        input wire [31:0] i1,i2,i3,i4,
30
        output reg [31:0] O,
31
        input wire [1:0] Sel
32
);
33
 
34
always @ ( Sel or i1 or i2 or i3 or i4 )
35
begin
36
        case (Sel)
37
                2'b00: O = i1;
38
                2'b01: O = i2;
39
                2'b10: O = i3;
40
                2'b11: O = i4;
41
        endcase
42
 
43
end
44
 
45
endmodule
46
//---------------------------------------------------
47
/*
48
module SHIFTER2_16_BITS
49
(
50
input wire C,
51
input wire[15:0] In,
52
output reg[15:0] Out
53
);
54
 
55
reg [15:0] Temp;
56
always @ (posedge C )
57
begin
58
        Out =  In << 2;
59
 
60
end
61
 
62
endmodule
63
*/
64
//---------------------------------------------------
65
module RADIX_R_MUL_32_FULL_PARALLEL
66
(
67
        input wire Clock,
68
        input wire Reset,
69
        input wire[31:0] A,
70
        input wire[31:0] B,
71
        output wire[63:0] R,
72
        input wire iUnscaled,
73
        input wire iInputReady,
74
        output wire OutputReady
75
 
76
 
77
);
78
 
79
 
80
wire wInputDelay1;
81 70 diegovalve
//-------------------
82
wire [31:0] wALatched,wBLatched;
83
FFD_POSEDGE_SYNCRONOUS_RESET # ( `WIDTH ) FFD1
84
(
85
        .Clock( Clock ),
86
        .Reset( Reset),
87
        .Enable( iInputReady ),
88
        .D( A ),
89
        .Q( wALatched)
90
);
91
FFD_POSEDGE_SYNCRONOUS_RESET # ( `WIDTH ) FFD2
92
(
93
        .Clock( Clock ),
94
        .Reset( Reset),
95
        .Enable( iInputReady ),
96
        .D( B ),
97
        .Q( wBLatched )
98
);
99 39 diegovalve
 
100 70 diegovalve
//-------------------
101
 
102
 
103 39 diegovalve
FFD_POSEDGE_ASYNC_RESET #(1) FFOutputReadyDelay1
104
(
105
        .Clock( Clock ),
106
        .Clear( Reset ),
107
        .D( iInputReady ),
108
        .Q( wInputDelay1 )
109
);
110
 
111
FFD_POSEDGE_ASYNC_RESET #(1) FFOutputReadyDelay2
112
(
113
        .Clock( Clock ),
114
        .Clear( Reset ),
115
        .D(  wInputDelay1 ),
116
        .Q( OutputReady  )
117
);
118
 
119
wire [31:0] wA, w2A, w3A, wB;
120
wire SignA,SignB;
121
 
122 70 diegovalve
assign SignA = wALatched[31];
123
assign SignB = wBLatched[31];
124 39 diegovalve
 
125
 
126 70 diegovalve
assign wB = (SignB == 1) ? ~wBLatched + 1'b1 : wBLatched;
127
assign wA = (SignA == 1) ? ~wALatched + 1'b1 : wALatched;
128 39 diegovalve
 
129
assign w2A = wA << 1;
130
assign w3A = w2A + wA;
131
 
132
wire [31:0] wPartialResult0,wPartialResult1,wPartialResult2,wPartialResult3,wPartialResult4,wPartialResult5;
133
wire [31:0] wPartialResult6,wPartialResult7,wPartialResult8,wPartialResult9,wPartialResult10,wPartialResult11;
134
wire [31:0] wPartialResult12,wPartialResult13,wPartialResult14,wPartialResult15;
135
 
136
MUX_4_TO_1_32Bits_FullParallel MUX0
137
(
138
                .i1( 32'b 0 ),
139
                .i2( wA ),
140
                .i3( w2A ),
141
                .i4( w3A ),
142
                .Sel( {wB[1],wB[0]} ),
143
                .O( wPartialResult0 )
144
);
145
 
146
 
147
MUX_4_TO_1_32Bits_FullParallel MUX1
148
(
149
                .i1( 32'b 0 ),
150
                .i2( wA ),
151
                .i3( w2A ),
152
                .i4( w3A ),
153
                .Sel( {wB[3],wB[2]} ),
154
                .O( wPartialResult1 )
155
);
156
 
157
MUX_4_TO_1_32Bits_FullParallel MUX2
158
(
159
                .i1( 32'b 0 ),
160
                .i2( wA ),
161
                .i3( w2A ),
162
                .i4( w3A ),
163
                .Sel( {wB[5],wB[4]} ),
164
                .O( wPartialResult2 )
165
);
166
 
167
MUX_4_TO_1_32Bits_FullParallel MUX3
168
(
169
                .i1( 32'b 0 ),
170
                .i2( wA ),
171
                .i3( w2A ),
172
                .i4( w3A ),
173
                .Sel( {wB[7],wB[6]} ),
174
                .O( wPartialResult3 )
175
);
176
 
177
MUX_4_TO_1_32Bits_FullParallel MUX4
178
(
179
                .i1( 32'b 0 ),
180
                .i2( wA ),
181
                .i3( w2A ),
182
                .i4( w3A ),
183
                .Sel( {wB[9],wB[8]} ),
184
                .O( wPartialResult4 )
185
);
186
 
187
MUX_4_TO_1_32Bits_FullParallel MUX5
188
(
189
                .i1( 32'b 0 ),
190
                .i2( wA ),
191
                .i3( w2A ),
192
                .i4( w3A ),
193
                .Sel( {wB[11],wB[10]} ),
194
                .O( wPartialResult5 )
195
);
196
 
197
MUX_4_TO_1_32Bits_FullParallel MUX6
198
(
199
                .i1( 32'b 0 ),
200
                .i2( wA ),
201
                .i3( w2A ),
202
                .i4( w3A ),
203
                .Sel( {wB[13],wB[12]} ),
204
                .O( wPartialResult6 )
205
);
206
 
207
MUX_4_TO_1_32Bits_FullParallel MUX7
208
(
209
                .i1( 32'b 0 ),
210
                .i2( wA ),
211
                .i3( w2A ),
212
                .i4( w3A ),
213
                .Sel( {wB[15],wB[14]} ),
214
                .O( wPartialResult7 )
215
);
216
 
217
MUX_4_TO_1_32Bits_FullParallel MUX8
218
(
219
                .i1( 32'b 0 ),
220
                .i2( wA ),
221
                .i3( w2A ),
222
                .i4( w3A ),
223
                .Sel( {wB[17],wB[16]} ),
224
                .O( wPartialResult8 )
225
);
226
 
227
MUX_4_TO_1_32Bits_FullParallel MUX9
228
(
229
                .i1( 32'b 0 ),
230
                .i2( wA ),
231
                .i3( w2A ),
232
                .i4( w3A ),
233
                .Sel( {wB[19],wB[18]} ),
234
                .O( wPartialResult9 )
235
);
236
 
237
MUX_4_TO_1_32Bits_FullParallel MUX10
238
(
239
                .i1( 32'b 0 ),
240
                .i2( wA ),
241
                .i3( w2A ),
242
                .i4( w3A ),
243
                .Sel( {wB[21],wB[20]} ),
244
                .O( wPartialResult10 )
245
);
246
 
247
MUX_4_TO_1_32Bits_FullParallel MUX11
248
(
249
                .i1( 32'b 0 ),
250
                .i2( wA ),
251
                .i3( w2A ),
252
                .i4( w3A ),
253
                .Sel( {wB[23],wB[22]} ),
254
                .O( wPartialResult11 )
255
);
256
 
257
MUX_4_TO_1_32Bits_FullParallel MUX12
258
(
259
                .i1( 32'b 0 ),
260
                .i2( wA ),
261
                .i3( w2A ),
262
                .i4( w3A ),
263
                .Sel( {wB[25],wB[24]} ),
264
                .O( wPartialResult12 )
265
);
266
 
267
MUX_4_TO_1_32Bits_FullParallel MUX13
268
(
269
                .i1( 32'b 0 ),
270
                .i2( wA ),
271
                .i3( w2A ),
272
                .i4( w3A ),
273
                .Sel( {wB[27],wB[26]} ),
274
                .O( wPartialResult13 )
275
);
276
 
277
MUX_4_TO_1_32Bits_FullParallel MUX14
278
(
279
                .i1( 32'b 0 ),
280
                .i2( wA ),
281
                .i3( w2A ),
282
                .i4( w3A ),
283
                .Sel( {wB[29],wB[28]} ),
284
                .O( wPartialResult14 )
285
);
286
 
287
MUX_4_TO_1_32Bits_FullParallel MUX15
288
(
289
                .i1( 32'b 0 ),
290
                .i2( wA ),
291
                .i3( w2A ),
292
                .i4( w3A ),
293
                .Sel( {wB[31],wB[30]} ),
294
                .O( wPartialResult15 )
295
);
296
 
297
 
298
 
299
wire[63:0] wPartialResult1_0,wPartialResult1_1,wPartialResult1_2,wPartialResult1_3,
300
wPartialResult1_4,wPartialResult1_5,wPartialResult1_6,wPartialResult1_7;
301
 
302
 
303
assign wPartialResult1_0 = (wPartialResult0) + (wPartialResult1<<2);
304
assign wPartialResult1_1 = (wPartialResult2 << 4) + (wPartialResult3<<6);
305
assign wPartialResult1_2 = (wPartialResult4 << 8) + (wPartialResult5<<10);
306
assign wPartialResult1_3 = (wPartialResult6 << 12)+ (wPartialResult7<<14);
307
assign wPartialResult1_4 = (wPartialResult8 << 16)+ (wPartialResult9<<18);
308
assign wPartialResult1_5 = (wPartialResult10 << 20) + (wPartialResult11<< 22);
309
assign wPartialResult1_6 = (wPartialResult12 << 24) + (wPartialResult13 << 26);
310
assign wPartialResult1_7 = (wPartialResult14 << 28) + (wPartialResult15 << 30);
311
 
312
 
313
 
314
 
315
wire [63:0] wPartialResult2_0,wPartialResult2_1,wPartialResult2_2,wPartialResult2_3;
316
 
317
assign wPartialResult2_0 = wPartialResult1_0 + wPartialResult1_1;
318
assign wPartialResult2_1 = wPartialResult1_2 + wPartialResult1_3;
319
assign wPartialResult2_2 = wPartialResult1_4 + wPartialResult1_5;
320
assign wPartialResult2_3 = wPartialResult1_6 + wPartialResult1_7;
321
 
322
wire [63:0] wPartialResult3_0,wPartialResult3_1;
323
 
324
assign wPartialResult3_0 = wPartialResult2_0 + wPartialResult2_1;
325
assign wPartialResult3_1 = wPartialResult2_2 + wPartialResult2_3;
326
 
327
wire [63:0] R_pre1,R_pre2;
328
 
329
//assign R_pre1 = (wPartialResult3_0 + wPartialResult3_1);
330
assign R_pre1 = (iUnscaled == 1) ? (wPartialResult3_0 + wPartialResult3_1) : ((wPartialResult3_0 + wPartialResult3_1) >> `SCALE);
331
 
332
assign R_pre2 = ( (SignA ^ SignB) == 1) ? ~R_pre1 + 1'b1 : R_pre1;
333
 
334
//assign R = R_pre2 >> `SCALE;
335
assign R = R_pre2;
336
 
337
endmodule

powered by: WebSVN 2.1.0

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