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

Subversion Repositories pcie_sg_dma

[/] [pcie_sg_dma/] [branches/] [Virtex6/] [ML605_ISE13.3/] [ipcore_dir_ISE13.3/] [v6_pcie_v1_7_x1/] [source/] [gtx_tx_sync_rate_v6.vhd] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 barabba
 
2
-------------------------------------------------------------------------------
3
--
4
-- (c) Copyright 2009-2011 Xilinx, Inc. All rights reserved.
5
--
6
-- This file contains confidential and proprietary information
7
-- of Xilinx, Inc. and is protected under U.S. and
8
-- international copyright and other intellectual property
9
-- laws.
10
--
11
-- DISCLAIMER
12
-- This disclaimer is not a license and does not grant any
13
-- rights to the materials distributed herewith. Except as
14
-- otherwise provided in a valid license issued to you by
15
-- Xilinx, and to the maximum extent permitted by applicable
16
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
17
-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
18
-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
19
-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
20
-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
21
-- (2) Xilinx shall not be liable (whether in contract or tort,
22
-- including negligence, or under any other theory of
23
-- liability) for any loss or damage of any kind or nature
24
-- related to, arising under or in connection with these
25
-- materials, including for any direct, or any indirect,
26
-- special, incidental, or consequential loss or damage
27
-- (including loss of data, profits, goodwill, or any type of
28
-- loss or damage suffered as a result of any action brought
29
-- by a third party) even if such damage or loss was
30
-- reasonably foreseeable or Xilinx had been advised of the
31
-- possibility of the same.
32
--
33
-- CRITICAL APPLICATIONS
34
-- Xilinx products are not designed or intended to be fail-
35
-- safe, or for use in any application requiring fail-safe
36
-- performance, such as life-support or safety devices or
37
-- systems, Class III medical devices, nuclear facilities,
38
-- applications related to the deployment of airbags, or any
39
-- other applications that could lead to death, personal
40
-- injury, or severe property or environmental damage
41
-- (individually and collectively, "Critical
42
-- Applications"). Customer assumes the sole risk and
43
-- liability of any use of Xilinx products in Critical
44
-- Applications, subject only to applicable laws and
45
-- regulations governing limitations on product liability.
46
--
47
-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
48
-- PART OF THIS FILE AT ALL TIMES.
49
--
50
-------------------------------------------------------------------------------
51
-- Project    : Virtex-6 Integrated Block for PCI Express
52
-- File       : gtx_tx_sync_rate_v6.vhd
53
-- Version    : 1.7
54
-- 
55
-- Module TX_SYNC
56
-- 
57
-------------------------------------------------------------------------------
58
library ieee;
59
   use ieee.std_logic_1164.all;
60
   use ieee.std_logic_unsigned.all;
61
 
62
-- Module TX_SYNC
63
 
64
entity GTX_TX_SYNC_RATE_V6 is
65
   generic (
66
      C_SIMULATION                              : integer := 0           -- Set to 1 for simulation
67
 
68
   );
69
   port (
70
      ENPMAPHASEALIGN                           : out std_logic;
71
      PMASETPHASE                               : out std_logic;
72
      SYNC_DONE                                 : out std_logic;
73
      OUT_DIV_RESET                             : out std_logic;
74
      PCS_RESET                                 : out std_logic;
75
      USER_PHYSTATUS                            : out std_logic;
76
      TXALIGNDISABLE                            : out std_logic;
77
      DELAYALIGNRESET                           : out std_logic;
78
      USER_CLK                                  : in std_logic;
79
      RESET                                     : in std_logic;
80
      RATE                                      : in std_logic;
81
      RATEDONE                                  : in std_logic;
82
      GT_PHYSTATUS                              : in std_logic;
83
      RESETDONE                                 : in std_logic
84
   );
85
end GTX_TX_SYNC_RATE_V6;
86
 
87
architecture v6_pcie of GTX_TX_SYNC_RATE_V6 is
88
 
89
   constant   TCQ                                       : integer := 1;
90
 
91
   FUNCTION to_stdlogic (
92
      in_val      : IN boolean) RETURN std_logic IS
93
   BEGIN
94
      IF (in_val) THEN
95
         RETURN('1');
96
      ELSE
97
         RETURN('0');
98
      END IF;
99
   END to_stdlogic;
100
 
101
   constant    IDLE                                     : std_logic_vector(24 downto 0) :=  "0000000000000000000000001";
102
   constant    PHASEALIGN                               : std_logic_vector(24 downto 0) :=  "0000000000000000000000010";
103
   constant    RATECHANGE_DIVRESET                      : std_logic_vector(24 downto 0) :=  "0000000000000000000000100";
104
   constant    RATECHANGE_DIVRESET_POST                 : std_logic_vector(24 downto 0) :=  "0000000000000000000001000";
105
   constant    RATECHANGE_ENPMADISABLE                  : std_logic_vector(24 downto 0) :=  "0000000000000000000010000";
106
   constant    RATECHANGE_ENPMADISABLE_POST             : std_logic_vector(24 downto 0) :=  "0000000000000000000100000";
107
   constant    RATECHANGE_PMARESET                      : std_logic_vector(24 downto 0) :=  "0000000000000000001000000";
108
   constant    RATECHANGE_IDLE                          : std_logic_vector(24 downto 0) :=  "0000000000000000010000000";
109
   constant    RATECHANGE_PCSRESET                      : std_logic_vector(24 downto 0) :=  "0000000000000000100000000";
110
   constant    RATECHANGE_PCSRESET_POST                 : std_logic_vector(24 downto 0) :=  "0000000000000001000000000";
111
   constant    RATECHANGE_ASSERTPHY                     : std_logic_vector(24 downto 0) :=  "0000000000000010000000000";
112
   constant    RESET_STATE                              : std_logic_vector(24 downto 0) :=  "0000000000000100000000000";
113
   constant    WAIT_PHYSTATUS                           : std_logic_vector(24 downto 0) :=  "0000000000010000000000000";
114
   constant    RATECHANGE_PMARESET_POST                 : std_logic_vector(24 downto 0) :=  "0000000000100000000000000";
115
   constant    RATECHANGE_DISABLEPHASE                  : std_logic_vector(24 downto 0) :=  "0000000001000000000000000";
116
   constant    DELAYALIGNRST                            : std_logic_vector(24 downto 0) :=  "0000000010000000000000000";
117
   constant    SETENPMAPHASEALIGN                       : std_logic_vector(24 downto 0) :=  "0000000100000000000000000";
118
   constant    TXALIGNDISABLEDEASSERT                   : std_logic_vector(24 downto 0) :=  "0000001000000000000000000";
119
   constant    RATECHANGE_TXDLYALIGNDISABLE             : std_logic_vector(24 downto 0) :=  "0000010000000000000000000";
120
   constant    GTXTEST_PULSE_1                          : std_logic_vector(24 downto 0) :=  "0000100000000000000000000";
121
   constant    RATECHANGE_DISABLE_TXALIGNDISABLE        : std_logic_vector(24 downto 0) :=  "0001000000000000000000000";
122
   constant    BEFORE_GTXTEST_PULSE1_1024CLKS           : std_logic_vector(24 downto 0) :=  "0010000000000000000000000";
123
   constant    BETWEEN_GTXTEST_PULSES                   : std_logic_vector(24 downto 0) :=  "0100000000000000000000000";
124
   constant    GTXTEST_PULSE_2                          : std_logic_vector(24 downto 0) :=  "1000000000000000000000000";
125
 
126
  function s_idx(
127
    constant C_SIMULATION    : integer)
128
    return integer is
129
     variable sidx_out : integer := 8;
130
  begin  -- s_idx
131
 
132
    if (C_SIMULATION /= 0) then
133
      sidx_out := 0;
134
    else
135
      sidx_out := 2;
136
    end if;
137
    return sidx_out;
138
  end s_idx;
139
 
140
  function pma_idx(
141
    constant C_SIMULATION    : integer)
142
    return integer is
143
     variable pma_idx_out : integer := 8;
144
  begin  -- pma_idx
145
 
146
    if (C_SIMULATION /= 0) then
147
      pma_idx_out := 0;
148
    else
149
      pma_idx_out := 7;
150
    end if;
151
    return pma_idx_out;
152
  end pma_idx;
153
 
154
   constant   SYNC_IDX                            : integer := s_idx(C_SIMULATION);
155
   constant   PMARESET_IDX                        : integer := pma_idx(C_SIMULATION);
156
 
157
   signal ENPMAPHASEALIGN_c                       : std_logic;
158
   signal PMASETPHASE_c                           : std_logic;
159
   signal SYNC_DONE_c                             : std_logic;
160
   signal OUT_DIV_RESET_c                         : std_logic;
161
   signal PCS_RESET_c                             : std_logic;
162
   signal USER_PHYSTATUS_c                        : std_logic;
163
   signal DELAYALIGNRESET_c                       : std_logic;
164
   signal TXALIGNDISABLE_c                        : std_logic;
165
   signal state                                   : std_logic_vector(24 downto 0);
166
   signal nextstate                               : std_logic_vector(24 downto 0);
167
   signal wait_amt                                : std_logic_vector(15 downto 0);
168
   signal wait_c                                  : std_logic_vector(15 downto 0);
169
   signal waitcounter                             : std_logic_vector(7 downto 0);
170
   signal nextwaitcounter                         : std_logic_vector(7 downto 0);
171
   signal waitcounter2                            : std_logic_vector(7 downto 0);
172
   signal waitcounter2_check                      : std_logic_vector(7 downto 0);
173
   signal nextwaitcounter2                        : std_logic_vector(7 downto 0);
174
   signal ratedone_r                              : std_logic;
175
   signal ratedone_r2                             : std_logic;
176
   signal ratedone_pulse_i                        : std_logic;
177
 
178
   signal gt_phystatus_q                          : std_logic;
179
 
180
   -- Declare intermediate signals for referenced outputs
181
   signal state_v6pcie0                           : std_logic_vector(4 downto 0);
182
--   signal waitcounter_v6pcie1                     : std_logic_vector(16 downto 0);
183
 
184
begin
185
 
186
   -- Drive referenced outputs
187
--   state <= state_v6pcie0;
188
--   waitcounter <= waitcounter_v6pcie1;
189
 
190
   process (USER_CLK)
191
   begin
192
      if (USER_CLK'event and USER_CLK = '1') then
193
 
194
         if (RESET = '1') then
195
 
196
            state <= RESET_STATE after (TCQ)*1 ps;
197
            waitcounter <= X"00" after (TCQ)*1 ps;
198
            waitcounter2 <= X"00" after (TCQ)*1 ps;
199
            USER_PHYSTATUS <= GT_PHYSTATUS after (TCQ)*1 ps;
200
            SYNC_DONE <= '0' after (TCQ)*1 ps;
201
            ENPMAPHASEALIGN <= '0' after (TCQ)*1 ps;
202
            PMASETPHASE <= '0' after (TCQ)*1 ps;
203
            OUT_DIV_RESET <= '0' after (TCQ)*1 ps;
204
            PCS_RESET <= '0' after (TCQ)*1 ps;
205
            DELAYALIGNRESET <= '0' after (TCQ)*1 ps;
206
            TXALIGNDISABLE <= '1' after (TCQ)*1 ps;
207
 
208
         else
209
 
210
            state <= nextstate after (TCQ)*1 ps;
211
            waitcounter <= nextwaitcounter after (TCQ)*1 ps;
212
            waitcounter2 <= nextwaitcounter2 after (TCQ)*1 ps;
213
            USER_PHYSTATUS <= USER_PHYSTATUS_c after (TCQ)*1 ps;
214
            SYNC_DONE <= SYNC_DONE_c after (TCQ)*1 ps;
215
            ENPMAPHASEALIGN <= ENPMAPHASEALIGN_c after (TCQ)*1 ps;
216
            PMASETPHASE <= PMASETPHASE_c after (TCQ)*1 ps;
217
            OUT_DIV_RESET <= OUT_DIV_RESET_c after (TCQ)*1 ps;
218
            PCS_RESET <= PCS_RESET_c after (TCQ)*1 ps;
219
            DELAYALIGNRESET <= DELAYALIGNRESET_c after (TCQ)*1 ps;
220
            TXALIGNDISABLE <= TXALIGNDISABLE_c after (TCQ)*1 ps;
221
 
222
         end if;
223
      end if;
224
   end process;
225
 
226
   waitcounter2_check <= waitcounter2 + X"01" when (waitcounter = X"FF") else
227
                        waitcounter2;
228
 
229
   process (state, GT_PHYSTATUS, waitcounter, waitcounter2, waitcounter2_check, ratedone_pulse_i, gt_phystatus_q, RESETDONE)
230
   begin
231
 
232
      -- DEFAULT CONDITIONS
233
 
234
      DELAYALIGNRESET_c <= '0';
235
      SYNC_DONE_c <= '0';
236
      ENPMAPHASEALIGN_c <= '1';
237
      PMASETPHASE_c <= '0';
238
      OUT_DIV_RESET_c <= '0';
239
      PCS_RESET_c <= '0';
240
      TXALIGNDISABLE_c <= '0';
241
      nextstate <= state;
242
      USER_PHYSTATUS_c <= GT_PHYSTATUS;
243
 
244
      nextwaitcounter <= waitcounter + X"01";
245
      nextwaitcounter2 <= waitcounter2_check;
246
 
247
      case state is
248
 
249
        -- START IN RESET
250
         when RESET_STATE =>
251
            TXALIGNDISABLE_c <= '1';
252
            ENPMAPHASEALIGN_c <= '0';
253
            nextstate <= BEFORE_GTXTEST_PULSE1_1024CLKS;
254
            nextwaitcounter <= X"00";
255
            nextwaitcounter2 <= X"00";
256
 
257
         -- Wait 1024 clocks before asseting GTXTEST[1] - Figure 3-9 UG366
258
         when BEFORE_GTXTEST_PULSE1_1024CLKS =>
259
            OUT_DIV_RESET_c <= '0';
260
            TXALIGNDISABLE_c <= '1';
261
            ENPMAPHASEALIGN_c <= '0';
262
            if ((waitcounter2(1)) = '1') then
263
               nextstate <= GTXTEST_PULSE_1;
264
               nextwaitcounter <= X"00";
265
               nextwaitcounter2 <= X"00";
266
            end if;
267
 
268
         -- Assert GTXTEST[1] for 256 clocks - Figure 3-9 UG366
269
         when GTXTEST_PULSE_1 =>
270
            OUT_DIV_RESET_c <= '1';
271
            TXALIGNDISABLE_c <= '1';
272
            ENPMAPHASEALIGN_c <= '0';
273
            if ((waitcounter(7)) = '1') then
274
               nextstate <= BETWEEN_GTXTEST_PULSES;
275
               nextwaitcounter <= X"00";
276
               nextwaitcounter2 <= X"00";
277
            end if;
278
 
279
         -- De-assert GTXTEST[1] for 256 clocks - Figure 3-9 UG366        
280
         when BETWEEN_GTXTEST_PULSES =>
281
            OUT_DIV_RESET_c <= '0';
282
            TXALIGNDISABLE_c <= '1';
283
            ENPMAPHASEALIGN_c <= '0';
284
            if ((waitcounter(7)) = '1') then
285
               nextstate <= GTXTEST_PULSE_2;
286
               nextwaitcounter <= X"00";
287
               nextwaitcounter2 <= X"00";
288
            end if;
289
 
290
         -- Assert GTXTEST[1] for 256 clocks - Figure 3-9 UG366
291
         when GTXTEST_PULSE_2 =>
292
            OUT_DIV_RESET_c <= '1';
293
            TXALIGNDISABLE_c <= '1';
294
            ENPMAPHASEALIGN_c <= '0';
295
            if ((waitcounter(7)) = '1') then
296
               nextstate <= DELAYALIGNRST;
297
               nextwaitcounter <= X"00";
298
               nextwaitcounter2 <= X"00";
299
            end if;
300
 
301
 
302
         -- ASSERT TXDLYALIGNRESET FOR 16 CLOCK CYCLES
303
         when DELAYALIGNRST =>
304
            DELAYALIGNRESET_c <= '1';
305
            ENPMAPHASEALIGN_c <= '0';
306
            TXALIGNDISABLE_c <= '1';
307
            if ((waitcounter(4)) = '1') then
308
               nextstate <= SETENPMAPHASEALIGN;
309
               nextwaitcounter <= X"00";
310
               nextwaitcounter2 <= X"00";
311
            end if;
312
 
313
         -- ASSERT ENPMAPHASEALIGN FOR 32 CLOCK CYCLES
314
         when SETENPMAPHASEALIGN =>
315
            TXALIGNDISABLE_c <= '1';
316
            if ((waitcounter(5)) = '1') then
317
               nextstate <= PHASEALIGN;
318
               nextwaitcounter <= X"00";
319
               nextwaitcounter2 <= X"00";
320
            end if;
321
 
322
         -- ASSERT PMASETPHASE OUT OF RESET for 32K CYCLES
323
         when PHASEALIGN =>
324
            PMASETPHASE_c <= '1';
325
            TXALIGNDISABLE_c <= '1';
326
            if ((waitcounter2(PMARESET_IDX)) = '1') then
327
               nextstate <= TXALIGNDISABLEDEASSERT;
328
               nextwaitcounter <= X"00";
329
               nextwaitcounter2 <= X"00";
330
            end if;
331
 
332
         -- KEEP TXALIGNDISABLE ASSERTED for 64 CYCLES
333
         when TXALIGNDISABLEDEASSERT =>
334
            TXALIGNDISABLE_c <= '1';
335
            if ((waitcounter(6)) = '1') then
336
               nextwaitcounter <= X"00";
337
               nextstate <= IDLE;
338
               nextwaitcounter2 <= X"00";
339
            end if;
340
 
341
         -- NOW IN IDLE, ASSERT SYNC DONE, WAIT FOR RATECHANGE
342
         when IDLE =>
343
            SYNC_DONE_c <= '1';
344
            if (ratedone_pulse_i = '1') then
345
               USER_PHYSTATUS_c <= '0';
346
               nextstate <= WAIT_PHYSTATUS;
347
               nextwaitcounter <= X"00";
348
               nextwaitcounter2 <= X"00";
349
            end if;
350
 
351
         -- WAIT FOR PHYSTATUS
352
         when WAIT_PHYSTATUS =>
353
            USER_PHYSTATUS_c <= '0';
354
            if (gt_phystatus_q = '1') then
355
               nextstate <= RATECHANGE_IDLE;
356
               nextwaitcounter <= X"00";
357
               nextwaitcounter2 <= X"00";
358
            end if;
359
 
360
         -- WAIT 64 CYCLES BEFORE WE START THE RATE CHANGE
361
         when RATECHANGE_IDLE =>
362
            USER_PHYSTATUS_c <= '0';
363
            if ((waitcounter(6)) = '1') then
364
               nextstate <= RATECHANGE_TXDLYALIGNDISABLE;
365
               nextwaitcounter <= X"00";
366
               nextwaitcounter2 <= X"00";
367
            end if;
368
 
369
         -- ASSERT TXALIGNDISABLE FOR 32 CYCLES
370
         when RATECHANGE_TXDLYALIGNDISABLE =>
371
            USER_PHYSTATUS_c <= '0';
372
            TXALIGNDISABLE_c <= '1';
373
            if ((waitcounter(5)) = '1') then
374
               nextstate <= RATECHANGE_DIVRESET;
375
               nextwaitcounter <= X"00";
376
               nextwaitcounter2 <= X"00";
377
            end if;
378
 
379
         -- ASSERT DIV RESET FOR 16 CLOCK CYCLES
380
         when RATECHANGE_DIVRESET =>
381
            OUT_DIV_RESET_c <= '1';
382
            USER_PHYSTATUS_c <= '0';
383
            TXALIGNDISABLE_c <= '1';
384
            if ((waitcounter(4)) = '1') then
385
               nextstate <= RATECHANGE_DIVRESET_POST;
386
               nextwaitcounter <= X"00";
387
               nextwaitcounter2 <= X"00";
388
            end if;
389
 
390
         -- WAIT FOR 32 CLOCK CYCLES BEFORE NEXT STEP
391
         when RATECHANGE_DIVRESET_POST =>
392
            USER_PHYSTATUS_c <= '0';
393
            TXALIGNDISABLE_c <= '1';
394
            if ((waitcounter(5)) = '1') then
395
               nextstate <= RATECHANGE_PMARESET;
396
               nextwaitcounter <= X"00";
397
               nextwaitcounter2 <= X"00";
398
            end if;
399
 
400
         -- ASSERT PMA RESET FOR 32K CYCLES
401
         when RATECHANGE_PMARESET =>
402
            PMASETPHASE_c <= '1';
403
            USER_PHYSTATUS_c <= '0';
404
            TXALIGNDISABLE_c <= '1';
405
            if ((waitcounter2(PMARESET_IDX)) = '1') then
406
               nextstate <= RATECHANGE_PMARESET_POST;
407
               nextwaitcounter <= X"00";
408
               nextwaitcounter2 <= X"00";
409
            end if;
410
 
411
         -- WAIT FOR 32 CYCLES BEFORE DISABLING TXALIGNDISABLE
412
         when RATECHANGE_PMARESET_POST =>
413
            USER_PHYSTATUS_c <= '0';
414
            TXALIGNDISABLE_c <= '1';
415
            if ((waitcounter(5)) = '1') then
416
               nextstate <= RATECHANGE_DISABLE_TXALIGNDISABLE;
417
               nextwaitcounter <= X"00";
418
               nextwaitcounter2 <= X"00";
419
            end if;
420
 
421
         -- DISABLE TXALIGNDISABLE FOR 32 CYCLES
422
         when RATECHANGE_DISABLE_TXALIGNDISABLE =>
423
            USER_PHYSTATUS_c <= '0';
424
            if ((waitcounter(5)) = '1') then
425
               nextstate <= RATECHANGE_PCSRESET;
426
               nextwaitcounter <= X"00";
427
               nextwaitcounter2 <= X"00";
428
            end if;
429
 
430
         -- NOW ASSERT PCS RESET FOR 32 CYCLES
431
         when RATECHANGE_PCSRESET =>
432
            PCS_RESET_c <= '1';
433
            USER_PHYSTATUS_c <= '0';
434
            if ((waitcounter(5)) = '1') then
435
               nextstate <= RATECHANGE_PCSRESET_POST;
436
               nextwaitcounter <= X"00";
437
               nextwaitcounter2 <= X"00";
438
            end if;
439
 
440
         -- WAIT FOR RESETDONE BEFORE ASSERTING PHY_STATUS_OUT
441
         when RATECHANGE_PCSRESET_POST =>
442
            USER_PHYSTATUS_c <= '0';
443
            if (RESETDONE = '1') then
444
               nextstate <= RATECHANGE_ASSERTPHY;
445
            end if;
446
 
447
         -- ASSERT PHYSTATUSOUT MEANING RATECHANGE IS DONE AND GO BACK TO IDLE
448
         when RATECHANGE_ASSERTPHY =>
449
            USER_PHYSTATUS_c <= '1';
450
            nextstate <= IDLE;
451
 
452
         when others =>
453
            nextstate <= IDLE;
454
 
455
      end case;
456
   end process;
457
 
458
 
459
   -- Generate Ratechange Pulse
460
 
461
   process (USER_CLK)
462
   begin
463
      if (USER_CLK'event and USER_CLK = '1') then
464
 
465
         if (RESET = '1') then
466
 
467
            ratedone_r <= '0' after (TCQ)*1 ps;
468
            ratedone_r2 <= '0' after (TCQ)*1 ps;
469
            gt_phystatus_q <= '0' after (TCQ)*1 ps;
470
 
471
         else
472
 
473
            ratedone_r <= RATE after (TCQ)*1 ps;
474
            ratedone_r2 <= ratedone_r after (TCQ)*1 ps;
475
            gt_phystatus_q <= GT_PHYSTATUS after (TCQ)*1 ps;
476
 
477
         end if;
478
 
479
      end if;
480
   end process;
481
 
482
 
483
   ratedone_pulse_i <= to_stdlogic((ratedone_r /= ratedone_r2));
484
 
485
end v6_pcie;
486
 
487
 

powered by: WebSVN 2.1.0

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