OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_processor/] [mor1kx-5.0/] [rtl/] [verilog/] [pfpu32/] [pfpu32_top.v] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  pfpu32_top                                                 ////
4
////  32-bit floating point top level                            ////
5
////                                                             ////
6
////  Author: Andrey Bacherov                                    ////
7
////          avbacherov@opencores.org                           ////
8
////                                                             ////
9
/////////////////////////////////////////////////////////////////////
10
////                                                             ////
11
//// Copyright (C) 2014 Andrey Bacherov                          ////
12
////                    avbacherov@opencores.org                 ////
13
////                                                             ////
14
//// This source file may be used and distributed without        ////
15
//// restriction provided that this copyright statement is not   ////
16
//// removed from the file and that any derivative work contains ////
17
//// the original copyright notice and the associated disclaimer.////
18
////                                                             ////
19
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
20
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
21
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
22
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
23
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
24
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
25
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
26
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
27
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
28
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
29
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
30
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
31
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
32
////                                                             ////
33
/////////////////////////////////////////////////////////////////////
34
 
35
// fpu operations:
36
// ==========================
37
// 0000 = add,
38
// 0001 = substract,
39
// 0010 = multiply,
40
// 0011 = divide,
41
// 0100 = i2f
42
// 0101 = f2i
43
// 0110 = unused (rem)
44
// 0111 = reserved
45
// 1xxx = comparison
46
 
47
`include "mor1kx-defines.v"
48
 
49
module pfpu32_top
50
#(
51
  parameter OPTION_OPERAND_WIDTH = 32
52
)
53
(
54
  input clk,
55
  input rst,
56
  input flush_i,
57
  input padv_decode_i,
58
  input padv_execute_i,
59
  input [`OR1K_FPUOP_WIDTH-1:0]    op_fpu_i,
60
  input [`OR1K_FPCSR_RM_SIZE-1:0]  round_mode_i,
61
  input [OPTION_OPERAND_WIDTH-1:0] rfa_i,
62
  input [OPTION_OPERAND_WIDTH-1:0] rfb_i,
63
  output [OPTION_OPERAND_WIDTH-1:0] fpu_result_o,
64
  output fpu_arith_valid_o,
65
  output fpu_cmp_flag_o,
66
  output fpu_cmp_valid_o,
67
  output [`OR1K_FPCSR_WIDTH-1:0] fpcsr_o
68
);
69
 
70
// MSB (set by decode stage) indicates FPU instruction
71
// Get rid of top bit - is FPU op valid bit
72
wire   is_op_fpu = op_fpu_i[`OR1K_FPUOP_WIDTH-1];
73
wire [`OR1K_FPUOP_WIDTH-1:0] op_fpu = {1'b0,op_fpu_i[`OR1K_FPUOP_WIDTH-2:0]};
74
wire [2:0] op_arith_conv = op_fpu_i[2:0]; // alias
75
wire a_cmp = op_fpu_i[3]; // alias for compare bit of fpu's opcode
76
 
77
// advance FPU units
78
wire padv_fpu_units = padv_execute_i |
79
                      ((~fpu_arith_valid_o) & (~fpu_cmp_valid_o));
80
 
81
// start logic
82
reg new_data;
83
always @(posedge clk `OR_ASYNC_RST) begin
84
  if (rst)
85
    new_data <= 1'b0;
86
  else if(flush_i)
87
    new_data <= 1'b0;
88
  else if(padv_decode_i)
89
    new_data <= 1'b1;
90
  else if(padv_fpu_units)
91
    new_data <= 1'b0;
92
end // posedge clock
93
 
94
wire new_fpu_data = new_data & is_op_fpu;
95
 
96
 
97
// analysis of input values
98
//   split input a
99
wire        in_signa  = rfa_i[31];
100
wire [7:0]  in_expa   = rfa_i[30:23];
101
wire [22:0] in_fracta = rfa_i[22:0];
102
//   detect infinity a
103
wire in_expa_ff = &in_expa;
104
wire in_infa    = in_expa_ff & (~(|in_fracta));
105
//   signaling NaN: exponent is 8hff, [22] is zero,
106
//                  rest of fract is non-zero
107
//   quiet NaN: exponent is 8hff, [22] is 1
108
wire in_snan_a = in_expa_ff & (~in_fracta[22]) & (|in_fracta[21:0]);
109
wire in_qnan_a = in_expa_ff &   in_fracta[22];
110
//   denormalized/zero of a
111
wire in_opa_0  = ~(|rfa_i[30:0]);
112
wire in_opa_dn = (~(|in_expa)) & (|in_fracta);
113
 
114
//   split input b
115
wire        in_signb  = rfb_i[31];
116
wire [7:0]  in_expb   = rfb_i[30:23];
117
wire [22:0] in_fractb = rfb_i[22:0];
118
//   detect infinity b
119
wire in_expb_ff = &in_expb;
120
wire in_infb    = in_expb_ff & (~(|in_fractb));
121
//   detect NaNs in b
122
wire in_snan_b = in_expb_ff & (~in_fractb[22]) & (|in_fractb[21:0]);
123
wire in_qnan_b = in_expb_ff &   in_fractb[22];
124
//   denormalized/zero of a
125
wire in_opb_0  = ~(|rfb_i[30:0]);
126
wire in_opb_dn = (~(|in_expb)) & (|in_fractb);
127
 
128
// detection of some exceptions
129
//   a nan input -> qnan output
130
wire in_snan = in_snan_a | in_snan_b;
131
wire in_qnan = in_qnan_a | in_qnan_b;
132
//   sign of output nan
133
wire in_anan_sign = (in_snan_a | in_qnan_a) ? in_signa :
134
                                              in_signb;
135
 
136
// restored exponents
137
wire [9:0] in_exp10a = {2'd0,in_expa[7:1],(in_expa[0] | in_opa_dn)};
138
wire [9:0] in_exp10b = {2'd0,in_expb[7:1],(in_expb[0] | in_opb_dn)};
139
// restored fractionals
140
wire [23:0] in_fract24a = {((~in_opa_dn) & (~in_opa_0)),in_fracta};
141
wire [23:0] in_fract24b = {((~in_opb_dn) & (~in_opb_0)),in_fractb};
142
 
143
 
144
// comparator
145
//   inputs & outputs
146
wire op_cmp = a_cmp &
147
              new_fpu_data;
148
wire addsub_agtb_o, addsub_aeqb_o;
149
wire cmp_result, cmp_ready,
150
     cmp_inv, cmp_inf;
151
//   module istance
152
pfpu32_fcmp u_f32_cmp
153
(
154
  .fpu_op_is_comp_i(op_cmp),
155
  .generic_cmp_opc_i(op_fpu[`OR1K_FPUOP_GENERIC_CMP_SELECT]),
156
  .unordered_cmp_bit_i(op_fpu[`OR1K_FPUOP_UNORDERED_CMP_BIT]),
157
  // operand 'a' related inputs
158
  .signa_i(in_signa),
159
  .exp10a_i(in_exp10a),
160
  .fract24a_i(in_fract24a),
161
  .snana_i(in_snan_a),
162
  .qnana_i(in_qnan_a),
163
  .infa_i(in_infa),
164
  .zeroa_i(in_opa_0),
165
  // operand 'b' related inputs
166
  .signb_i(in_signb),
167
  .exp10b_i(in_exp10b),
168
  .fract24b_i(in_fract24b),
169
  .snanb_i(in_snan_b),
170
  .qnanb_i(in_qnan_b),
171
  .infb_i(in_infb),
172
  .zerob_i(in_opb_0),
173
  // support addsub
174
  .addsub_agtb_o(addsub_agtb_o),
175
  .addsub_aeqb_o(addsub_aeqb_o),
176
  // outputs
177
  .cmp_flag_o(cmp_result),
178
  .inv_o(cmp_inv),
179
  .inf_o(cmp_inf),
180
  .ready_o(cmp_ready)
181
);
182
 
183
 
184
// addition / substraction
185
//   inputs & outputs
186
wire the_sub   = (op_arith_conv == 3'd1);
187
wire op_add    = (~a_cmp) & ((op_arith_conv == 3'd0) | the_sub);
188
wire add_start = op_add &
189
                 new_fpu_data;
190
wire        add_rdy_o;       // add/sub is ready
191
wire        add_sign_o;      // add/sub signum
192
wire        add_sub_0_o;     // flag that actual substruction is performed and result is zero
193
wire  [4:0] add_shl_o;       // do left shift in align stage
194
wire  [9:0] add_exp10shl_o;  // exponent for left shift align
195
wire  [9:0] add_exp10sh0_o;  // exponent for no shift in align
196
wire [27:0] add_fract28_o;   // fractional with appended {r,s} bits
197
wire        add_inv_o;       // add/sub invalid operation flag
198
wire        add_inf_o;       // add/sub infinity output reg
199
wire        add_snan_o;      // add/sub signaling NaN output reg
200
wire        add_qnan_o;      // add/sub quiet NaN output reg
201
wire        add_anan_sign_o; // add/sub signum for output nan
202
//   module istance
203
pfpu32_addsub u_f32_addsub
204
(
205
  .clk           (clk),
206
  .rst           (rst),
207
  .flush_i       (flush_i),        // flushe pipe
208
  .adv_i         (padv_fpu_units), // advance pipe
209
  .start_i       (add_start),
210
  .is_sub_i      (the_sub),        // 1: substruction, 0: addition
211
  // input 'a' related values
212
  .signa_i       (in_signa),
213
  .exp10a_i      (in_exp10a),
214
  .fract24a_i    (in_fract24a),
215
  .infa_i        (in_infa),
216
  // input 'b' related values
217
  .signb_i       (in_signb),
218
  .exp10b_i      (in_exp10b),
219
  .fract24b_i    (in_fract24b),
220
  .infb_i        (in_infb),
221
  // 'a'/'b' related
222
  .snan_i        (in_snan),
223
  .qnan_i        (in_qnan),
224
  .anan_sign_i   (in_anan_sign),
225
  .addsub_agtb_i (addsub_agtb_o),
226
  .addsub_aeqb_i (addsub_aeqb_o),
227
  // outputs
228
  .add_rdy_o       (add_rdy_o),       // add/sub is ready
229
  .add_sign_o      (add_sign_o),      // add/sub signum
230
  .add_sub_0_o     (add_sub_0_o),     // flag that actual substruction is performed and result is zero
231
  .add_shl_o       (add_shl_o),       // do left shift in align stage
232
  .add_exp10shl_o  (add_exp10shl_o),  // exponent for left shift align
233
  .add_exp10sh0_o  (add_exp10sh0_o),  // exponent for no shift in align
234
  .add_fract28_o   (add_fract28_o),   // fractional with appended {r,s} bits
235
  .add_inv_o       (add_inv_o),       // add/sub invalid operation flag
236
  .add_inf_o       (add_inf_o),       // add/sub infinity output reg
237
  .add_snan_o      (add_snan_o),      // add/sub signaling NaN output reg
238
  .add_qnan_o      (add_qnan_o),      // add/sub quiet NaN output reg
239
  .add_anan_sign_o (add_anan_sign_o)  // add/sub signum for output nan
240
);
241
 
242
// MUL/DIV combined pipeline
243
//   inputs & outputs
244
wire op_mul    = (~a_cmp) & (op_arith_conv == 3'd2);
245
wire op_div    = (~a_cmp) & (op_arith_conv == 3'd3);
246
wire mul_start = (op_mul | op_div) &
247
                 new_fpu_data;
248
// MUL/DIV common outputs
249
wire        mul_rdy_o;       // mul is ready
250
wire        mul_sign_o;      // mul signum
251
wire  [4:0] mul_shr_o;       // do right shift in align stage
252
wire  [9:0] mul_exp10shr_o;  // exponent for right shift align
253
wire        mul_shl_o;       // do left shift in align stage
254
wire  [9:0] mul_exp10shl_o;  // exponent for left shift align
255
wire  [9:0] mul_exp10sh0_o;  // exponent for no shift in align
256
wire [27:0] mul_fract28_o;   // fractional with appended {r,s} bits
257
wire        mul_inv_o;       // mul invalid operation flag
258
wire        mul_inf_o;       // mul infinity output reg
259
wire        mul_snan_o;      // mul signaling NaN output reg
260
wire        mul_qnan_o;      // mul quiet NaN output reg
261
wire        mul_anan_sign_o; // mul signum for output nan
262
// DIV additional outputs
263
wire        div_op_o;        // operation is division
264
wire        div_sign_rmnd_o; // signum or reminder for IEEE compliant rounding
265
wire        div_dbz_o;       // division by zero flag
266
//   module istance
267
pfpu32_muldiv u_f32_muldiv
268
(
269
  .clk         (clk),
270
  .rst         (rst),
271
  .flush_i     (flush_i),        // flushe pipe
272
  .adv_i       (padv_fpu_units), // advance pipe
273
  .start_i     (mul_start),
274
  .is_div_i    (op_div),
275
  // input 'a' related values
276
  .signa_i     (in_signa),
277
  .exp10a_i    (in_exp10a),
278
  .fract24a_i  (in_fract24a),
279
  .infa_i      (in_infa),
280
  .zeroa_i     (in_opa_0),
281
  // input 'b' related values
282
  .signb_i     (in_signb),
283
  .exp10b_i    (in_exp10b),
284
  .fract24b_i  (in_fract24b),
285
  .infb_i      (in_infb),
286
  .zerob_i     (in_opb_0),
287
  // 'a'/'b' related
288
  .snan_i      (in_snan),
289
  .qnan_i      (in_qnan),
290
  .anan_sign_i (in_anan_sign),
291
  // MUL/DIV common outputs
292
  .muldiv_rdy_o       (mul_rdy_o),       // mul is ready
293
  .muldiv_sign_o      (mul_sign_o),      // mul signum
294
  .muldiv_shr_o       (mul_shr_o),       // do right shift in align stage
295
  .muldiv_exp10shr_o  (mul_exp10shr_o),  // exponent for right shift align
296
  .muldiv_shl_o       (mul_shl_o),       // do left shift in align stage
297
  .muldiv_exp10shl_o  (mul_exp10shl_o),  // exponent for left shift align
298
  .muldiv_exp10sh0_o  (mul_exp10sh0_o),  // exponent for no shift in align
299
  .muldiv_fract28_o   (mul_fract28_o),   // fractional with appended {r,s} bits
300
  .muldiv_inv_o       (mul_inv_o),       // mul invalid operation flag
301
  .muldiv_inf_o       (mul_inf_o),       // mul infinity output reg
302
  .muldiv_snan_o      (mul_snan_o),      // mul signaling NaN output reg
303
  .muldiv_qnan_o      (mul_qnan_o),      // mul quiet NaN output reg
304
  .muldiv_anan_sign_o (mul_anan_sign_o), // mul signum for output nan
305
  // DIV additional outputs
306
  .div_op_o(div_op_o),                  // operation is division
307
  .div_sign_rmnd_o(div_sign_rmnd_o),    // signum of reminder for IEEE compliant rounding
308
  .div_dbz_o(div_dbz_o)                 // division by zero flag
309
);
310
 
311
// convertor
312
//   i2f signals
313
wire op_i2f_cnv = (~a_cmp) & (op_arith_conv == 3'd4);
314
wire i2f_start  = op_i2f_cnv &
315
                  new_fpu_data;
316
wire        i2f_rdy_o;       // i2f is ready
317
wire        i2f_sign_o;      // i2f signum
318
wire  [3:0] i2f_shr_o;
319
wire  [7:0] i2f_exp8shr_o;
320
wire  [4:0] i2f_shl_o;
321
wire  [7:0] i2f_exp8shl_o;
322
wire  [7:0] i2f_exp8sh0_o;
323
wire [31:0] i2f_fract32_o;
324
//   i2f module instance
325
pfpu32_i2f u_i2f_cnv
326
(
327
  .clk         (clk),
328
  .rst         (rst),
329
  .flush_i     (flush_i),        // flush pipe
330
  .adv_i       (padv_fpu_units), // advance pipe
331
  .start_i     (i2f_start),      // start conversion
332
  .opa_i       (rfa_i),
333
  .i2f_rdy_o     (i2f_rdy_o),     // i2f is ready
334
  .i2f_sign_o    (i2f_sign_o),    // i2f signum
335
  .i2f_shr_o     (i2f_shr_o),
336
  .i2f_exp8shr_o (i2f_exp8shr_o),
337
  .i2f_shl_o     (i2f_shl_o),
338
  .i2f_exp8shl_o (i2f_exp8shl_o),
339
  .i2f_exp8sh0_o (i2f_exp8sh0_o),
340
  .i2f_fract32_o (i2f_fract32_o)
341
);
342
//   f2i signals
343
wire op_f2i_cnv = (~a_cmp) & (op_arith_conv == 3'd5);
344
wire f2i_start  = op_f2i_cnv &
345
                  new_fpu_data;
346
wire        f2i_rdy_o;       // f2i is ready
347
wire        f2i_sign_o;      // f2i signum
348
wire [23:0] f2i_int24_o;     // f2i fractional
349
wire  [4:0] f2i_shr_o;       // f2i required shift right value
350
wire  [3:0] f2i_shl_o;       // f2i required shift left value   
351
wire        f2i_ovf_o;       // f2i overflow flag
352
wire        f2i_snan_o;      // f2i signaling NaN output reg
353
//    f2i module instance
354
pfpu32_f2i u_f2i_cnv
355
(
356
  .clk         (clk),
357
  .rst         (rst),
358
  .flush_i     (flush_i),        // flush pipe
359
  .adv_i       (padv_fpu_units), // advance pipe
360
  .start_i     (f2i_start),      // start conversion
361
  .signa_i     (in_signa),       // input 'a' related values
362
  .exp10a_i    (in_exp10a),
363
  .fract24a_i  (in_fract24a),
364
  .snan_i      (in_snan),        // 'a'/'b' related
365
  .qnan_i      (in_qnan),
366
  .f2i_rdy_o   (f2i_rdy_o),       // f2i is ready
367
  .f2i_sign_o  (f2i_sign_o),      // f2i signum
368
  .f2i_int24_o (f2i_int24_o),     // f2i fractional
369
  .f2i_shr_o   (f2i_shr_o),       // f2i required shift right value
370
  .f2i_shl_o   (f2i_shl_o),       // f2i required shift left value   
371
  .f2i_ovf_o   (f2i_ovf_o),       // f2i overflow flag
372
  .f2i_snan_o  (f2i_snan_o)       // f2i signaling NaN output reg
373
);
374
 
375
 
376
// multiplexing and rounding
377
pfpu32_rnd  u_f32_rnd
378
(
379
  // clocks, resets and other controls
380
  .clk             (clk),
381
  .rst             (rst),
382
  .flush_i         (flush_i),         // flush pipe
383
  .adv_i           (padv_fpu_units),  // advance pipe
384
  .rmode_i         (round_mode_i),    // rounding mode
385
  // from add/sub
386
  .add_rdy_i       (add_rdy_o),       // add/sub is ready
387
  .add_sign_i      (add_sign_o),      // add/sub signum
388
  .add_sub_0_i     (add_sub_0_o),     // flag that actual substruction is performed and result is zero
389
  .add_shl_i       (add_shl_o),       // do left shift in align stage
390
  .add_exp10shl_i  (add_exp10shl_o),  // exponent for left shift align
391
  .add_exp10sh0_i  (add_exp10sh0_o),  // exponent for no shift in align
392
  .add_fract28_i   (add_fract28_o),   // fractional with appended {r,s} bits
393
  .add_inv_i       (add_inv_o),       // add/sub invalid operation flag
394
  .add_inf_i       (add_inf_o),       // add/sub infinity
395
  .add_snan_i      (add_snan_o),      // add/sub signaling NaN
396
  .add_qnan_i      (add_qnan_o),      // add/sub quiet NaN
397
  .add_anan_sign_i (add_anan_sign_o), // add/sub signum for output nan
398
  // from mul
399
  .mul_rdy_i       (mul_rdy_o),       // mul is ready
400
  .mul_sign_i      (mul_sign_o),      // mul signum
401
  .mul_shr_i       (mul_shr_o),       // do right shift in align stage
402
  .mul_exp10shr_i  (mul_exp10shr_o),  // exponent for right shift align
403
  .mul_shl_i       (mul_shl_o),       // do left shift in align stage
404
  .mul_exp10shl_i  (mul_exp10shl_o),  // exponent for left shift align
405
  .mul_exp10sh0_i  (mul_exp10sh0_o),  // exponent for no shift in align
406
  .mul_fract28_i   (mul_fract28_o),   // fractional with appended {r,s} bits
407
  .mul_inv_i       (mul_inv_o),       // mul invalid operation flag
408
  .mul_inf_i       (mul_inf_o),       // mul infinity 
409
  .mul_snan_i      (mul_snan_o),      // mul signaling NaN
410
  .mul_qnan_i      (mul_qnan_o),      // mul quiet NaN
411
  .mul_anan_sign_i (mul_anan_sign_o), // mul signum for output nan
412
  .div_op_i        (div_op_o),         // MUL/DIV output is division
413
  .div_sign_rmnd_i (div_sign_rmnd_o),  // signum or reminder for IEEE compliant rounding
414
  .div_dbz_i       (div_dbz_o),        // division by zero flag
415
  // from i2f
416
  .i2f_rdy_i       (i2f_rdy_o),       // i2f is ready
417
  .i2f_sign_i      (i2f_sign_o),      // i2f signum
418
  .i2f_shr_i       (i2f_shr_o),
419
  .i2f_exp8shr_i   (i2f_exp8shr_o),
420
  .i2f_shl_i       (i2f_shl_o),
421
  .i2f_exp8shl_i   (i2f_exp8shl_o),
422
  .i2f_exp8sh0_i   (i2f_exp8sh0_o),
423
  .i2f_fract32_i   (i2f_fract32_o),
424
  // from f2i
425
  .f2i_rdy_i       (f2i_rdy_o),       // f2i is ready
426
  .f2i_sign_i      (f2i_sign_o),      // f2i signum
427
  .f2i_int24_i     (f2i_int24_o),     // f2i fractional
428
  .f2i_shr_i       (f2i_shr_o),       // f2i required shift right value
429
  .f2i_shl_i       (f2i_shl_o),       // f2i required shift left value   
430
  .f2i_ovf_i       (f2i_ovf_o),       // f2i overflow flag
431
  .f2i_snan_i      (f2i_snan_o),      // f2i signaling NaN
432
   // from cmp
433
  .cmp_rdy_i       (cmp_ready),       // cmp is ready
434
  .cmp_res_i       (cmp_result),      // cmp result
435
  .cmp_inv_i       (cmp_inv),         // cmp invalid flag
436
  .cmp_inf_i       (cmp_inf),         // cmp infinity flag
437
  // outputs
438
  .fpu_result_o      (fpu_result_o),
439
  .fpu_arith_valid_o (fpu_arith_valid_o),
440
  .fpu_cmp_flag_o    (fpu_cmp_flag_o),
441
  .fpu_cmp_valid_o   (fpu_cmp_valid_o),
442
  .fpcsr_o           (fpcsr_o)
443
);
444
 
445
endmodule // pfpu32_top

powered by: WebSVN 2.1.0

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