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

Subversion Repositories fpuvhdl

[/] [fpuvhdl/] [trunk/] [fpuvhdl/] [adder/] [fpadd_single_cycle.vhd] - Blame information for rev 3

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 gmarcus
-- VHDL Entity HAVOC.FPadd.symbol
2
--
3
-- Created by
4
-- Guillermo Marcus, gmarcus@ieee.org
5
-- using Mentor Graphics FPGA Advantage tools.
6
--
7
-- Visit "http://fpga.mty.itesm.mx" for more info.
8
--
9
-- 2003-2004. V1.0
10
--
11
 
12
LIBRARY ieee;
13
USE ieee.std_logic_1164.all;
14
USE ieee.std_logic_arith.all;
15
 
16
ENTITY FPadd IS
17
   PORT(
18
      ADD_SUB : IN     std_logic;
19
      FP_A    : IN     std_logic_vector (31 DOWNTO 0);
20
      FP_B    : IN     std_logic_vector (31 DOWNTO 0);
21
      clk     : IN     std_logic;
22
      FP_Z    : OUT    std_logic_vector (31 DOWNTO 0)
23
   );
24
 
25
-- Declarations
26
 
27
END FPadd ;
28
 
29
--
30
-- VHDL Architecture HAVOC.FPadd.single_cycle
31
--
32
-- Created by
33
-- Guillermo Marcus, gmarcus@ieee.org
34
-- using Mentor Graphics FPGA Advantage tools.
35
--
36
-- Visit "http://fpga.mty.itesm.mx" for more info.
37
--
38
-- Copyright 2003-2004. V1.0
39
--
40
 
41
 
42
LIBRARY ieee;
43
USE ieee.std_logic_1164.all;
44
USE ieee.std_logic_arith.all;
45
 
46
LIBRARY HAVOC;
47
 
48
ARCHITECTURE single_cycle OF FPadd IS
49
 
50
   -- Architecture declarations
51
      -- Non hierarchical truthtable declarations
52
 
53
 
54
      -- Non hierarchical truthtable declarations
55
 
56
 
57
      -- Non hierarchical truthtable declarations
58
 
59
 
60
 
61
   -- Internal signal declarations
62
   SIGNAL A_CS      : std_logic_vector(28 DOWNTO 0);
63
   SIGNAL A_EXP     : std_logic_vector(7 DOWNTO 0);
64
   SIGNAL A_SIG     : std_logic_vector(31 DOWNTO 0);
65
   SIGNAL A_SIGN    : std_logic;
66
   SIGNAL A_in      : std_logic_vector(28 DOWNTO 0);
67
   SIGNAL A_isDN    : std_logic;
68
   SIGNAL A_isINF   : std_logic;
69
   SIGNAL A_isNaN   : std_logic;
70
   SIGNAL A_isZ     : std_logic;
71
   SIGNAL B_CS      : std_logic_vector(28 DOWNTO 0);
72
   SIGNAL B_EXP     : std_logic_vector(7 DOWNTO 0);
73
   SIGNAL B_SIG     : std_logic_vector(31 DOWNTO 0);
74
   SIGNAL B_SIGN    : std_logic;
75
   SIGNAL B_XSIGN   : std_logic;
76
   SIGNAL B_in      : std_logic_vector(28 DOWNTO 0);
77
   SIGNAL B_isDN    : std_logic;
78
   SIGNAL B_isINF   : std_logic;
79
   SIGNAL B_isNaN   : std_logic;
80
   SIGNAL B_isZ     : std_logic;
81
   SIGNAL EXP_base  : std_logic_vector(7 DOWNTO 0);
82
   SIGNAL EXP_diff  : std_logic_vector(8 DOWNTO 0);
83
   SIGNAL EXP_isINF : std_logic;
84
   SIGNAL EXP_norm  : std_logic_vector(7 DOWNTO 0);
85
   SIGNAL EXP_round : std_logic_vector(7 DOWNTO 0);
86
   SIGNAL EXP_selC  : std_logic_vector(7 DOWNTO 0);
87
   SIGNAL OV        : std_logic;
88
   SIGNAL SIG_norm  : std_logic_vector(27 DOWNTO 0);
89
   SIGNAL SIG_norm2 : std_logic_vector(27 DOWNTO 0);
90
   SIGNAL SIG_round : std_logic_vector(27 DOWNTO 0);
91
   SIGNAL SIG_selC  : std_logic_vector(27 DOWNTO 0);
92
   SIGNAL Z_EXP     : std_logic_vector(7 DOWNTO 0);
93
   SIGNAL Z_SIG     : std_logic_vector(22 DOWNTO 0);
94
   SIGNAL Z_SIGN    : std_logic;
95
   SIGNAL a_align   : std_logic_vector(28 DOWNTO 0);
96
   SIGNAL a_exp_in  : std_logic_vector(8 DOWNTO 0);
97
   SIGNAL a_inv     : std_logic_vector(28 DOWNTO 0);
98
   SIGNAL add_out   : std_logic_vector(28 DOWNTO 0);
99
   SIGNAL b_align   : std_logic_vector(28 DOWNTO 0);
100
   SIGNAL b_exp_in  : std_logic_vector(8 DOWNTO 0);
101
   SIGNAL b_inv     : std_logic_vector(28 DOWNTO 0);
102
   SIGNAL cin       : std_logic;
103
   SIGNAL cin_sub   : std_logic;
104
   SIGNAL invert_A  : std_logic;
105
   SIGNAL invert_B  : std_logic;
106
   SIGNAL isINF     : std_logic;
107
   SIGNAL isINF_tab : std_logic;
108
   SIGNAL isNaN     : std_logic;
109
   SIGNAL isZ       : std_logic;
110
   SIGNAL isZ_tab   : std_logic;
111
   SIGNAL mux_sel   : std_logic;
112
   SIGNAL zero      : std_logic;
113
 
114
 
115
   -- ModuleWare signal declarations(v1.1) for instance 'I13' of 'mux'
116
   SIGNAL mw_I13din0 : std_logic_vector(7 DOWNTO 0);
117
   SIGNAL mw_I13din1 : std_logic_vector(7 DOWNTO 0);
118
 
119
   -- Component Declarations
120
   COMPONENT FPadd_normalize
121
   PORT (
122
      EXP_in  : IN     std_logic_vector (7 DOWNTO 0);
123
      SIG_in  : IN     std_logic_vector (27 DOWNTO 0);
124
      EXP_out : OUT    std_logic_vector (7 DOWNTO 0);
125
      SIG_out : OUT    std_logic_vector (27 DOWNTO 0);
126
      zero    : OUT    std_logic
127
   );
128
   END COMPONENT;
129
   COMPONENT FPalign
130
   PORT (
131
      A_in  : IN     std_logic_vector (28 DOWNTO 0);
132
      B_in  : IN     std_logic_vector (28 DOWNTO 0);
133
      cin   : IN     std_logic ;
134
      diff  : IN     std_logic_vector (8 DOWNTO 0);
135
      A_out : OUT    std_logic_vector (28 DOWNTO 0);
136
      B_out : OUT    std_logic_vector (28 DOWNTO 0)
137
   );
138
   END COMPONENT;
139
   COMPONENT FPinvert
140
   GENERIC (
141
      width : integer := 29
142
   );
143
   PORT (
144
      A_in     : IN     std_logic_vector (width-1 DOWNTO 0);
145
      B_in     : IN     std_logic_vector (width-1 DOWNTO 0);
146
      invert_A : IN     std_logic ;
147
      invert_B : IN     std_logic ;
148
      A_out    : OUT    std_logic_vector (width-1 DOWNTO 0);
149
      B_out    : OUT    std_logic_vector (width-1 DOWNTO 0)
150
   );
151
   END COMPONENT;
152
   COMPONENT FPnormalize
153
   GENERIC (
154
      SIG_width : integer := 28
155
   );
156
   PORT (
157
      SIG_in  : IN     std_logic_vector (SIG_width-1 DOWNTO 0);
158
      EXP_in  : IN     std_logic_vector (7 DOWNTO 0);
159
      SIG_out : OUT    std_logic_vector (SIG_width-1 DOWNTO 0);
160
      EXP_out : OUT    std_logic_vector (7 DOWNTO 0)
161
   );
162
   END COMPONENT;
163
   COMPONENT FPround
164
   GENERIC (
165
      SIG_width : integer := 28
166
   );
167
   PORT (
168
      SIG_in  : IN     std_logic_vector (SIG_width-1 DOWNTO 0);
169
      EXP_in  : IN     std_logic_vector (7 DOWNTO 0);
170
      SIG_out : OUT    std_logic_vector (SIG_width-1 DOWNTO 0);
171
      EXP_out : OUT    std_logic_vector (7 DOWNTO 0)
172
   );
173
   END COMPONENT;
174
   COMPONENT FPselComplement
175
   GENERIC (
176
      SIG_width : integer := 28
177
   );
178
   PORT (
179
      SIG_in  : IN     std_logic_vector (SIG_width DOWNTO 0);
180
      EXP_in  : IN     std_logic_vector (7 DOWNTO 0);
181
      SIG_out : OUT    std_logic_vector (SIG_width-1 DOWNTO 0);
182
      EXP_out : OUT    std_logic_vector (7 DOWNTO 0)
183
   );
184
   END COMPONENT;
185
   COMPONENT FPswap
186
   GENERIC (
187
      width : integer := 29
188
   );
189
   PORT (
190
      A_in    : IN     std_logic_vector (width-1 DOWNTO 0);
191
      B_in    : IN     std_logic_vector (width-1 DOWNTO 0);
192
      swap_AB : IN     std_logic ;
193
      A_out   : OUT    std_logic_vector (width-1 DOWNTO 0);
194
      B_out   : OUT    std_logic_vector (width-1 DOWNTO 0)
195
   );
196
   END COMPONENT;
197
   COMPONENT PackFP
198
   PORT (
199
      SIGN  : IN     std_logic ;
200
      EXP   : IN     std_logic_vector (7 DOWNTO 0);
201
      SIG   : IN     std_logic_vector (22 DOWNTO 0);
202
      isNaN : IN     std_logic ;
203
      isINF : IN     std_logic ;
204
      isZ   : IN     std_logic ;
205
      FP    : OUT    std_logic_vector (31 DOWNTO 0)
206
   );
207
   END COMPONENT;
208
   COMPONENT UnpackFP
209
   PORT (
210
      FP    : IN     std_logic_vector (31 DOWNTO 0);
211
      SIG   : OUT    std_logic_vector (31 DOWNTO 0);
212
      EXP   : OUT    std_logic_vector (7 DOWNTO 0);
213
      SIGN  : OUT    std_logic ;
214
      isNaN : OUT    std_logic ;
215
      isINF : OUT    std_logic ;
216
      isZ   : OUT    std_logic ;
217
      isDN  : OUT    std_logic
218
   );
219
   END COMPONENT;
220
 
221
   -- Optional embedded configurations
222
   -- pragma synthesis_off
223
   FOR ALL : FPadd_normalize USE ENTITY HAVOC.FPadd_normalize;
224
   FOR ALL : FPalign USE ENTITY HAVOC.FPalign;
225
   FOR ALL : FPinvert USE ENTITY HAVOC.FPinvert;
226
   FOR ALL : FPnormalize USE ENTITY HAVOC.FPnormalize;
227
   FOR ALL : FPround USE ENTITY HAVOC.FPround;
228
   FOR ALL : FPselComplement USE ENTITY HAVOC.FPselComplement;
229
   FOR ALL : FPswap USE ENTITY HAVOC.FPswap;
230
   FOR ALL : PackFP USE ENTITY HAVOC.PackFP;
231
   FOR ALL : UnpackFP USE ENTITY HAVOC.UnpackFP;
232
   -- pragma synthesis_on
233
 
234
 
235
BEGIN
236
   -- Architecture concurrent statements
237
   -- HDL Embedded Text Block 1 eb1
238
   -- eb1 1
239
   cin_sub <= (A_isDN OR A_isZ) XOR
240
   (B_isDN OR B_isZ);
241
 
242
   -- HDL Embedded Text Block 2 eb2
243
   -- eb2 2
244
   Z_SIG <= SIG_norm2(25 DOWNTO 3);
245
 
246
   -- HDL Embedded Block 3 eb3
247
   -- Non hierarchical truthtable
248
   ---------------------------------------------------------------------------
249
   eb3_truth_process: PROCESS(ADD_SUB, A_isINF, A_isNaN, A_isZ, B_isINF, B_isNaN, B_isZ)
250
   ---------------------------------------------------------------------------
251
   BEGIN
252
      -- Block 1
253
      IF (A_isNaN = '1') THEN
254
         isINF_tab <= '0';
255
         isNaN <= '1';
256
         isZ_tab <= '0';
257
      ELSIF (B_isNaN = '1') THEN
258
         isINF_tab <= '0';
259
         isNaN <= '1';
260
         isZ_tab <= '0';
261
      ELSIF (ADD_SUB = '1') AND (A_isINF = '1') AND (B_isINF = '1') THEN
262
         isINF_tab <= '1';
263
         isNaN <= '0';
264
         isZ_tab <= '0';
265
      ELSIF (ADD_SUB = '0') AND (A_isINF = '1') AND (B_isINF = '1') THEN
266
         isINF_tab <= '0';
267
         isNaN <= '1';
268
         isZ_tab <= '0';
269
      ELSIF (A_isINF = '1') THEN
270
         isINF_tab <= '1';
271
         isNaN <= '0';
272
         isZ_tab <= '0';
273
      ELSIF (B_isINF = '1') THEN
274
         isINF_tab <= '1';
275
         isNaN <= '0';
276
         isZ_tab <= '0';
277
      ELSIF (A_isZ = '1') AND (B_isZ = '1') THEN
278
         isINF_tab <= '0';
279
         isNaN <= '0';
280
         isZ_tab <= '1';
281
      ELSE
282
         isINF_tab <= '0';
283
         isNaN <= '0';
284
         isZ_tab <= '0';
285
      END IF;
286
 
287
   END PROCESS eb3_truth_process;
288
 
289
   -- Architecture concurrent statements
290
 
291
 
292
 
293
   -- HDL Embedded Text Block 4 eb4
294
   -- eb4 4 
295
   mux_sel <= EXP_diff(8);
296
 
297
   -- HDL Embedded Block 5 InvertLogic
298
   -- Non hierarchical truthtable
299
   ---------------------------------------------------------------------------
300
   InvertLogic_truth_process: PROCESS(A_SIGN, B_XSIGN, EXP_diff)
301
   ---------------------------------------------------------------------------
302
   BEGIN
303
      -- Block 1
304
      IF (A_SIGN = '0') AND (B_XSIGN = '0') THEN
305
         invert_A <= '0';
306
         invert_B <= '0';
307
      ELSIF (A_SIGN = '1') AND (B_XSIGN = '1') THEN
308
         invert_A <= '0';
309
         invert_B <= '0';
310
      ELSIF (A_SIGN = '0') AND (B_XSIGN = '1') AND (EXP_diff(8) = '0') THEN
311
         invert_A <= '0';
312
         invert_B <= '1';
313
      ELSIF (A_SIGN = '0') AND (B_XSIGN = '1') AND (EXP_diff(8) = '1') THEN
314
         invert_A <= '1';
315
         invert_B <= '0';
316
      ELSIF (A_SIGN = '1') AND (B_XSIGN = '0') AND (EXP_diff(8) = '0') THEN
317
         invert_A <= '1';
318
         invert_B <= '0';
319
      ELSIF (A_SIGN = '1') AND (B_XSIGN = '0') AND (EXP_diff(8) = '1') THEN
320
         invert_A <= '0';
321
         invert_B <= '1';
322
      ELSE
323
         invert_A <= '0';
324
         invert_B <= '0';
325
      END IF;
326
 
327
   END PROCESS InvertLogic_truth_process;
328
 
329
   -- Architecture concurrent statements
330
 
331
 
332
 
333
   -- HDL Embedded Block 6 SignLogic
334
   -- Non hierarchical truthtable
335
   ---------------------------------------------------------------------------
336
   SignLogic_truth_process: PROCESS(A_SIGN, B_XSIGN, add_out)
337
   ---------------------------------------------------------------------------
338
      VARIABLE b1_A_SIGNB_XSIGNadd_out_28 : std_logic_vector(2 DOWNTO 0);
339
   BEGIN
340
      -- Block 1
341
      b1_A_SIGNB_XSIGNadd_out_28 := A_SIGN & B_XSIGN & add_out(28);
342
 
343
      CASE b1_A_SIGNB_XSIGNadd_out_28 IS
344
      WHEN "000" =>
345
         OV <= '0';
346
         Z_SIGN <= '0';
347
      WHEN "001" =>
348
         OV <= '1';
349
         Z_SIGN <= '0';
350
      WHEN "010" =>
351
         OV <= '0';
352
         Z_SIGN <= '0';
353
      WHEN "011" =>
354
         OV <= '0';
355
         Z_SIGN <= '1';
356
      WHEN "100" =>
357
         OV <= '0';
358
         Z_SIGN <= '0';
359
      WHEN "101" =>
360
         OV <= '0';
361
         Z_SIGN <= '1';
362
      WHEN "110" =>
363
         OV <= '0';
364
         Z_SIGN <= '1';
365
      WHEN "111" =>
366
         OV <= '1';
367
         Z_SIGN <= '1';
368
      WHEN OTHERS =>
369
         OV <= '0';
370
         Z_SIGN <= '0';
371
      END CASE;
372
 
373
   END PROCESS SignLogic_truth_process;
374
 
375
   -- Architecture concurrent statements
376
 
377
 
378
 
379
   -- HDL Embedded Text Block 7 eb5
380
   -- eb5 7 
381
   A_in <= "00" & A_SIG(23 DOWNTO 0) & "000";
382
 
383
   -- HDL Embedded Text Block 8 eb6
384
   -- eb6 8                      
385
   B_in <= "00" & B_SIG(23 DOWNTO 0) & "000";
386
 
387
   -- HDL Embedded Text Block 9 eb7
388
   -- eb7 9
389
   EXP_isINF <= '1' WHEN (OV='1' OR Z_EXP=X"FF") ELSE '0';
390
 
391
   -- HDL Embedded Text Block 10 eb8
392
   -- eb8 10
393
   a_exp_in <= "0" & A_EXP;
394
 
395
   -- HDL Embedded Text Block 11 eb9
396
   -- eb9 11
397
   b_exp_in <= "0" & B_EXP;
398
 
399
 
400
   -- ModuleWare code(v1.1) for instance 'I4' of 'add'
401
   I4combo: PROCESS (a_inv, b_inv, cin)
402
   VARIABLE mw_I4t0 : std_logic_vector(29 DOWNTO 0);
403
   VARIABLE mw_I4t1 : std_logic_vector(29 DOWNTO 0);
404
   VARIABLE mw_I4sum : signed(29 DOWNTO 0);
405
   VARIABLE mw_I4carry : std_logic;
406
   BEGIN
407
      mw_I4t0 := a_inv(28) & a_inv;
408
      mw_I4t1 := b_inv(28) & b_inv;
409
      mw_I4carry := cin;
410
      mw_I4sum := signed(mw_I4t0) + signed(mw_I4t1) + mw_I4carry;
411
      add_out <= conv_std_logic_vector(mw_I4sum(28 DOWNTO 0),29);
412
   END PROCESS I4combo;
413
 
414
   -- ModuleWare code(v1.1) for instance 'I13' of 'mux'
415
   I13combo: PROCESS(mw_I13din0, mw_I13din1, mux_sel)
416
   VARIABLE dtemp : std_logic_vector(7 DOWNTO 0);
417
   BEGIN
418
      CASE mux_sel IS
419
      WHEN '0'|'L' => dtemp := mw_I13din0;
420
      WHEN '1'|'H' => dtemp := mw_I13din1;
421
      WHEN OTHERS => dtemp := (OTHERS => 'X');
422
      END CASE;
423
      EXP_base <= dtemp;
424
   END PROCESS I13combo;
425
   mw_I13din0 <= A_EXP;
426
   mw_I13din1 <= B_EXP;
427
 
428
   -- ModuleWare code(v1.1) for instance 'I7' of 'or'
429
   isINF <= EXP_isINF OR isINF_tab;
430
 
431
   -- ModuleWare code(v1.1) for instance 'I15' of 'or'
432
   cin <= invert_B OR invert_A;
433
 
434
   -- ModuleWare code(v1.1) for instance 'I17' of 'or'
435
   isZ <= zero OR isZ_tab;
436
 
437
   -- ModuleWare code(v1.1) for instance 'I3' of 'sub'
438
   I3combo: PROCESS (a_exp_in, b_exp_in, cin_sub)
439
   VARIABLE mw_I3t0 : std_logic_vector(9 DOWNTO 0);
440
   VARIABLE mw_I3t1 : std_logic_vector(9 DOWNTO 0);
441
   VARIABLE diff : signed(9 DOWNTO 0);
442
   VARIABLE borrow : std_logic;
443
   BEGIN
444
      mw_I3t0 := a_exp_in(8) & a_exp_in;
445
      mw_I3t1 := b_exp_in(8) & b_exp_in;
446
      borrow := cin_sub;
447
      diff := signed(mw_I3t0) - signed(mw_I3t1) - borrow;
448
      EXP_diff <= conv_std_logic_vector(diff(8 DOWNTO 0),9);
449
   END PROCESS I3combo;
450
 
451
   -- ModuleWare code(v1.1) for instance 'I16' of 'xnor'
452
   B_XSIGN <= NOT(B_SIGN XOR ADD_SUB);
453
 
454
   -- Instance port mappings.
455
   I8 : FPadd_normalize
456
      PORT MAP (
457
         EXP_in  => EXP_selC,
458
         SIG_in  => SIG_selC,
459
         EXP_out => EXP_norm,
460
         SIG_out => SIG_norm,
461
         zero    => zero
462
      );
463
   I6 : FPalign
464
      PORT MAP (
465
         A_in  => A_CS,
466
         B_in  => B_CS,
467
         cin   => cin_sub,
468
         diff  => EXP_diff,
469
         A_out => a_align,
470
         B_out => b_align
471
      );
472
   I14 : FPinvert
473
      GENERIC MAP (
474
         width => 29
475
      )
476
      PORT MAP (
477
         A_in     => a_align,
478
         B_in     => b_align,
479
         invert_A => invert_A,
480
         invert_B => invert_B,
481
         A_out    => a_inv,
482
         B_out    => b_inv
483
      );
484
   I11 : FPnormalize
485
      GENERIC MAP (
486
         SIG_width => 28
487
      )
488
      PORT MAP (
489
         SIG_in  => SIG_round,
490
         EXP_in  => EXP_round,
491
         SIG_out => SIG_norm2,
492
         EXP_out => Z_EXP
493
      );
494
   I10 : FPround
495
      GENERIC MAP (
496
         SIG_width => 28
497
      )
498
      PORT MAP (
499
         SIG_in  => SIG_norm,
500
         EXP_in  => EXP_norm,
501
         SIG_out => SIG_round,
502
         EXP_out => EXP_round
503
      );
504
   I12 : FPselComplement
505
      GENERIC MAP (
506
         SIG_width => 28
507
      )
508
      PORT MAP (
509
         SIG_in  => add_out,
510
         EXP_in  => EXP_base,
511
         SIG_out => SIG_selC,
512
         EXP_out => EXP_selC
513
      );
514
   I5 : FPswap
515
      GENERIC MAP (
516
         width => 29
517
      )
518
      PORT MAP (
519
         A_in    => A_in,
520
         B_in    => B_in,
521
         swap_AB => EXP_diff(8),
522
         A_out   => A_CS,
523
         B_out   => B_CS
524
      );
525
   I2 : PackFP
526
      PORT MAP (
527
         SIGN  => Z_SIGN,
528
         EXP   => Z_EXP,
529
         SIG   => Z_SIG,
530
         isNaN => isNaN,
531
         isINF => isINF,
532
         isZ   => isZ,
533
         FP    => FP_Z
534
      );
535
   I0 : UnpackFP
536
      PORT MAP (
537
         FP    => FP_A,
538
         SIG   => A_SIG,
539
         EXP   => A_EXP,
540
         SIGN  => A_SIGN,
541
         isNaN => A_isNaN,
542
         isINF => A_isINF,
543
         isZ   => A_isZ,
544
         isDN  => A_isDN
545
      );
546
   I1 : UnpackFP
547
      PORT MAP (
548
         FP    => FP_B,
549
         SIG   => B_SIG,
550
         EXP   => B_EXP,
551
         SIGN  => B_SIGN,
552
         isNaN => B_isNaN,
553
         isINF => B_isINF,
554
         isZ   => B_isZ,
555
         isDN  => B_isDN
556
      );
557
 
558
END single_cycle;

powered by: WebSVN 2.1.0

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