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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [orpsocv2/] [doc/] [orpsoc.texi] - Blame information for rev 397

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

Line No. Rev Author Line
1 397 julius
\input texinfo   @c -*-texinfo-*-
2
@c %**start of header
3
@setfilename orpsoc.info
4
@settitle ORPSoC manual 0.1
5
@include config.texi
6
@c %**end of header
7
 
8
@copying
9
This file documents the OpenRISC Reference Platform SoC, @value{ORPSOC}.
10
 
11
Copyright @copyright{} 2010 OpenCores
12
 
13
@quotation
14
Permission is granted to copy, distribute and/or modify this document
15
under the terms of the GNU Free Documentation License, Version 1.2 or
16
any later version published by the Free Software Foundation; with no
17
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
18
Texts.  A copy of the license is included in the section entitled ``GNU
19
Free Documentation License''.
20
@end quotation
21
@end copying
22
 
23
@setchapternewpage on
24
@settitle @value{ORPSOC} User Guide
25
 
26
@syncodeindex fn cp
27
@syncodeindex vr cp
28
 
29
@titlepage
30
@title @value{ORPSOC} User Guide
31
@c @subtitle subtitle-if-any
32
@c @subtitle second-subtitle
33
@author Julius Baxter
34
@author OpenCores
35
@author Issue 1 for @value{ORPSOC}
36
 
37
@c  The following two commands
38
@c  start the copyright page.
39
@page
40
@vskip 0pt plus 1filll
41
@insertcopying
42
 
43
Published by OpenCores
44
@end titlepage
45
 
46
@c So the toc is printed at the start.
47
@contents
48
 
49
@ifnottex
50
@node Top
51
@top Scope of this Document
52
 
53
This document is the user guide for @value{ORPSOC}, the OpenRISC Reference Platform System on Chip project.
54
 
55
@end ifnottex
56
 
57
@menu
58
* Introduction::
59
* Project Organisation::
60
* Getting Started::
61
* Reference Design::
62
* Board Designs::
63
* ordb1a3pe1500::
64
* GNU Free Documentation License::  The license for this documentation
65
* Index::
66
@end menu
67
 
68
@node Introduction
69
@chapter Introduction
70
 
71
@cindex introduction to this @value{ORPSOC}
72
 
73
@value{ORPSOC} is intended to be a reference implementation of processors in the OpenRISC family. It provides a smallest-possible reference system, primarily for testing of the processors, and systems intended to be synthesized and run on physical hardware (boards.) The simple refernce system contains just enough to test the processor's functionality, whereas the board targeted builds will include many additional peripherals.
74
 
75
The reference design will contain a minimal set of resources to create an OpenRISC-based SoC. It is expected the board builds will contain their own set of peripheral modules and software, and still draw upon the resources available in the reference implementation. It is hoped that, with this structure, the project can serve dual roles; to be a development platform for OpenRISC family processors, and to provide a platform for development of complex OpenRISC-based systems on chip.
76
 
77
This document, the user guide, focuses on getting the various designs in @value{ORPSOC} up and running. For matters relating to development of a board port, see the development guide included with this documentation.
78
 
79
@c ****************************************************************************
80
@c Project Organisation
81
@c ****************************************************************************
82
 
83
@node Project Organisation
84
@chapter Project Organisation
85
@cindex organisation of @value{ORPSOC} project
86
 
87
@menu
88
* Overview::
89
* Software::
90
* RTL::
91
* Testbenches::
92
* Reference And Board Designs::
93
@end menu
94
 
95
@node Overview
96
@section Overview
97
 
98
The @value{ORPSOC} project is intended for dual uses. One is to act as a development platform for OpenRISC processors, as well as development of complex OpenRISC-based SoCs. Organising a single project to satisfy these requirements can lead to some confusion. This section is intended to make the organisation of the project clear.
99
 
100
In essense, the reference implementation based in the root of the project contains enough to get a simple OpenRISC-based SoC together, the board builds are intended to implement fully-featured systems. The project is organised in such a way that the board builds can use both the reference implementation's RTL and software, as well as its own set of RTL and software. The reference implementation, however, cannot use any board's modules, software or scripts.
101
 
102
The following sections outline the organisation of the software, RTL, and board designs.
103
 
104
@node Software
105
@section Software
106
 
107
The @code{sw} path contains primarily target software (code intended for cross-compilation and execution on an OpenRISC processor) and a few custom tools for manipulation of binary software images.
108
 
109
Driver software, implementing access functions for hardware modules, are found under @code{sw/drivers}. There is the concept of a CPU library, providing CPU-specific functions, which can be changed to support different versions of OpenRISC processors. There is also a minimal support library under the @code{sw/lib} path. Both drivers and support library are compiled together to create a library called @code{liborpsoc} which is placed in @code{sw/lib}.
110
 
111
Test software is found under @code{sw/tests}. Typically, each is for a specific module, or for a particular capability (eg. tests for the UART capability are under @code{sw/tests/uart}, rather than @code{sw/tests/uart16550} which.) There are no specific rules here.
112
 
113
Under each test directory are two directories, @code{board} and @code{sim}, containing the test software targeted at each. Code for simulation will produce less printfs and perhaps not run as long as tests intended to run at full speed on target.
114
 
115
There are for naming software tests, so the automation scripts can locate them. The test directory name must be a single word (potentially with underscores), and then the tests must be in files of the format @emph{testdirname}-@emph{testname}.extension, eg. @code{uart-simple.c} or @code{or1200-fp.S}.
116
 
117
@node RTL
118
@section RTL
119
 
120
The HDL code layout conforms to those outlined in the OpenCores.org coding guidelines. http://cdn.opencores.org/downloads/opencores_coding_guidelines.pdf
121
 
122
Beyond that, there are some rules for the naming in modules. The directory name (presumably the name of the module, something like @code{uart16550}) should also be the name of the top level file, eg. @code{uart16550.v}, and the top level module should also be simply this name, eg. @code{module uart16550 (...}.
123
 
124
@node Testbenches
125
@section Testbenches
126
 
127
For each design in @value{ORPSOC} there will be a testbench instantiating the top level, and any peripherals (at least, as many as there are models for.)
128
 
129
Despite this being far from a thorough verification platform, it is considered useful to be able to perform enough simulation to ensure that the fundamental system is correctly assembled and can communicate with the peripherals. However, this is not intended as a platform for peripheral development (although, it very well could be) the board designs are not expected to have thorough peripheral tests. They are expected to have just enough to prove that basic functionality.
130
 
131
@node Reference And Board Designs
132
@section Reference And Board Designs
133
 
134
The goal of the reference design is to provide an environment to develop and test OpenRISC processors (also, potentially, basic components.) The goal of the various board-targeted designs is to provide ready-to-go implementations for hardware.
135
 
136
Typically, a board-targeted design will wish to reuse common components (processor, debug interface, Wishbone arbiters, UART etc.) The project has been configured to allow a board build to use either modules available in the ``common'' RTL path (@code{rtl/verilog/}) as well as those in their ``local'' RTL path (something like @code{boards/vendor/boardname/rtl/verilog}). In the event that some particular modification to a module in the common RTL set is desired for a particular board build, that module can simply be copied into the board's ``local'' RTL path and the scripts will that version instead of the common one.
137
 
138
 
139
 
140
@c ****************************************************************************
141
@c Getting started
142
@c ****************************************************************************
143
 
144
@node Getting Started
145
@chapter Getting Started
146
@cindex source files for @value{ORPSOC}, downloading
147
 
148
@menu
149
* Supported Platforms::
150
* Obtaining Project Source::
151
* Required Tools::
152
@end menu
153
 
154
@node Supported Platforms
155
@section Supported Platforms
156
@cindex platforms supported by the @value{ORPSOC} project
157
 
158
At present the majority of  @value{ORPSOC}'s development occurs with tools that run under the GNU/Linux operating system. All of the tools required to run the basic implementation are free, open source, and easily installable in any modern GNU/Linux distribution.
159
 
160
Unless indicated otherwise, support for the project under Cygwin on Microsoft Windows platforms is not a given.
161
 
162
 
163
@node Obtaining Project Source
164
@section Obtaining Project Source
165
@cindex getting a copy of the @value{ORPSOC} project
166
 
167
The source for @value{ORPSOC} can be obtained from the OpenCores subversion (SVN) server.
168
 
169
@example
170
@kbd{svn export http://opencores.org/ocsvn/openrisc/openrisc/trunk/orpsocv2}
171
@end example
172
 
173
@node Required Tools
174
@section Required Tools
175
@cindex tools and utilities required for @value{ORPSOC}
176
 
177
 
178
Performing the installation of tools required to design, simulate, verify, compile and debug a SoC is not for the faint hearted. The various sets of tools must be first installed, and the user's environment configured to allow them to run correctly.
179
 
180
First the host system must be capable of building and running development tools, next the various compilers, simulators and utilities must be installed, and finally, if required, additional tools to interact with the built design are installed. Once complete, the set up rarely needs to be touched, and results in grealty improved productivity.
181
 
182
The required tools can be divided into four groups.
183
 
184
@itemize @bullet
185
@item
186
Host system tools - things like gcc, make, texinfo.
187
 
188
@item
189
Target system toolchain and software - the OpenRISC GNU toolchain, with gcc crosscompiler, support libraries, the GNU debugger (gdb), OpenRISC port of various OSes and RTOS, etc.
190
 
191
@item
192
Electronic design automation (EDA) tools - preprocessors, simulators, FPGA tool suites, etc.
193
 
194
@item
195
Debug tools - tools providing control over the system on target
196
@end itemize
197
 
198
The first two items are likely to be the same for most of the designs included in @value{ORPSOC}, however the final two can vary greatly depending on the FPGA vendor, part and configuration, and the application of the SoC design.
199
 
200
There will be a section on the tools for each design in @value{ORPSOC}. This section is intended to provide a list of tools required for each particular build. Any lengthy instructions on installing a particular tool will be attached as an appendix, which can be references by several build prerequisite lists in order to save repetition of information.
201
 
202
Anyone implementing their own board port is encouraged to document, as best they can, any problematic tool installations and contribute them to this document.
203
 
204
 
205
 
206
@c ****************************************************************************
207
@c Reference Design chapter
208
@c ****************************************************************************
209
 
210
@node Reference Design
211
@chapter Reference Design
212
@cindex reference design
213
 
214
@menu
215
* Overview::
216
* Structure::
217
* Tools::
218
* Simulation::
219
* Synthesis::
220
@end menu
221
 
222
@node Overview
223
@subsection Overview
224
 
225
The reference design included in @value{ORPSOC} is intended to be the minimal implementation (or thereabouts) of a SoC required to exercise an OpenRISC processor. In this regard, very little apart from the processor, memory, debug interface and interconnect modules are instantiated.
226
 
227
The primary role for this design is to implement a system that an OpenRISC processor can be instaniated in for for development purposes. The automated testing mechanism, capable of compiling, executing and checking software on the design, is used as a method of regression testing for the processor as it is developed. After features are added or modified in the processor, new software tests can be added to the existing suite, checking for the expected functionality and ensuring legacy behavior is also unchanged.
228
 
229
The design can be simulated two ways. The first uses the standard event-driven simulators such as Icarus Verilog and Mentor Graphics' Modelsim. The second method involves creating a cycle accurate (C or SystemC) model from the Verilog HDL description using the Verilator tool.
230
 
231
The simulations begin with the desired software image preloaded in memory. For debugging the design, the models provide an interface to the system allowing the GNU debugger to control the target processor in a manner similar to that of physical hardware.
232
 
233
The design is not intended for implementation on an FPGA or ASIC, rather purely for development and testing in simulation environments. The board targeted builds in the @value{ORPSOC} project, however, are intended for implementation on hardware.
234
 
235
@node Structure
236
@subsection Structure
237
 
238
@menu
239
* Overview::
240
* RTL::
241
* Software::
242
* Simulation::
243
@end menu
244
 
245
@node Overview
246
@subsubsection Overview
247
 
248
The reference design's paths are all based in the root directory of @value{ORPSOC}. This is different from the board-targeted builds, which are based in their specific board paths.
249
 
250
As synthesis and physical implementation is not intended for the reference design there are no @code{syn} or @code{backend} paths in the root directory of @value{ORPSOC}.
251
 
252
@node RTL
253
@subsubsection RTL
254
 
255
At present only Verilog HDL is included in the reference implementation of @value{ORPSOC}, as the open source tools intended to simulate the design do not support VHDL.
256
 
257
The directory structure consists of an @code{rtl} directory in the root, and a @code{verilog} path under that. Within the @code{rtl/verilog} path, each module has its own directory.
258
 
259
A common Verilog include path, @code{rtl/verilog/include} directory is used. The Verilog HDL include files for each module should be moved here. This allows each @value{ORPSOC} implementation (board design) to maintain their own include path, and thus configure the modules for their specific implementation.
260
 
261
@node Software
262
@subsubsection Software
263
 
264
The software run on the reference design is found in the @value{ORPSOC} root directory, under the @code{sw} path.
265
 
266
The test software for the or1200 processor is found under @code{sw/tests/or1200/sim}.
267
 
268
A minimal set of drivers is built into @code{liborpsoc}, and they are found under @code{sw/tests/drivers}.
269
 
270
In addition to these drivers, a set of support C functions is build into @code{liborpsoc}, which are found in the @code{sw/lib} path.
271
 
272
@node Simulation
273
@subsubsection Simulation
274
 
275
The simulation of the reference design is run from the @code{sim/run} path.
276
 
277
The script controlling simulation is the file @code{sim/bin/Makefile}.
278
 
279
The generated output is kept in the @code{sim/out} path, and is cleared away when @kbd{make clean} is run.
280
 
281
When the Verilator-processed cycle accurate model is built, it is done in the @code{sim/vlt} path, which is also cleaned away when @kbd{make clean} is run.
282
 
283
@node Tools
284
@subsection Tools
285
 
286
@menu
287
* Host Tools::
288
* Target System Tools::
289
* EDA Tools::
290
* Debug Tools::
291
@end menu
292
 
293
@node Host Tools
294
@subsubsection Host Tools
295
@cindex host tools required
296
 
297
Standard development suite of tools: gcc, make, etc.
298
 
299
@node Target System Tools
300
@subsubsection Target System Tools
301
@cindex target system tools required
302
 
303
OpenRISC GNU toolchain. For installation, see OpenRISC GNU toolchain page on OpenCores.org.
304
 
305
@node EDA Tools
306
@subsubsection EDA Tools
307
@cindex EDA tools required
308
 
309
RTL simulation: Icarus Verilog (also compatible with Mentor Graphics' Modelsim)
310
Cycle Accurate Simulation: Verilator, Verilog-Perl, System-Perl, SystemC
311
 
312
@node Debug Tools
313
@subsubsection Debug Tools
314
@cindex Debug tools required
315
 
316
None. The target is purely simulation, no extra utilities are required to debug.
317
 
318
 
319
@node Simulation
320
@subsection Simulation
321
 
322
@menu
323
* RTL::
324
* Cycle Accurate::
325
* Results::
326
@end menu
327
 
328
@node RTL
329
@subsubsection RTL
330
@cindex rtl simulation of reference design
331
 
332
All simulations of the reference design are run from the @code{sim/run} path.
333
 
334
@subsubheading Running RTL Regression Test
335
 
336
The simplest way of starting a run through the regression test, using the default RTL simulator, Icarus Verilog, can be done with:
337
 
338
@example
339
@kbd{make rtl-tests}
340
@end example
341
 
342
This will compile the software and RTL, and run a new simulation for each software test. Defining which tests are run is the variable @code{TESTS}, set by default in the @code{sw/bin/Makefile} script. Other default options are that a processor execution log is generated (in @code{sw/out/@emph{testname}-executed.log}), but VCDs are not.
343
 
344
@subsubheading Running An Individual Test
345
 
346
An individual test can be run, by specifying the test name through the @code{TEST} environment variable (which must correspond to a file in @code{sw/tests/@emph{module}/sim/} where @code{@emph{module}} is the name of the module to be tested. In the following example the test @emph{or1200-basic} is run.
347
 
348
@example
349
@kbd{make rtl-test TEST=or1200-basic}
350
@end example
351
 
352
@subsubheading Running A Set Of Specific Tests
353
 
354
A specific set of tests can be run in the same fashion as the regression tests but with the actual tests to run set in the @code{TESTS} environment variable.
355
 
356
@example
357
@kbd{make rtl-tests TESTS="sdram-rows uart-simple or1200-mmu or1200-fp"}
358
@end example
359
 
360
 
361
@subsubheading Options For RTL Tests
362
 
363
There are some options, which can be specified through shell environment variables when running the test.
364
 
365
@table @code
366
 
367
@item VCD
368
Set to '1' to enable @emph{value change dump} (VCD) creation in @code{sw/out/@emph{testname}.vcd}
369
 
370
@item VCD_DELAY
371
Delay VCD creation start time by this number of timesteps (used as a Verilog @code{#delay} in the testbench.)
372
 
373
@item VCD_DELAY_INSNS
374
Delay VCD creation start time until this number of instructions has been executed by the processor. Useful for creating a dump just before a bug exhibited and correlated to an instruction number (from execution trace file.)
375
 
376
@item END_TIME
377
Force simulation end (@code{$finish}) at this time.
378
 
379
@item DISABLE_PROCESSOR_LOGS
380
Turn off processor monitor's execution trace generation. This helps speed up the simulation (less time writing to files) and avoids creating very large execution logs (in the GBs) for very long simulations.
381
 
382
@item SIMULATOR
383
Specify simulator to use. Default is Icarus Verilog, can be set to @code{modelsim} to use Mentor Graphics' Modelsim. No others are supported right now.
384
 
385
@end table
386
 
387
 
388
 
389
@node Cycle Accurate
390
@subsubsection Cycle Accurate
391
@cindex cycle accurate simulation of reference design
392
 
393
@subsubheading Running Cycle Accurate Regression Test
394
 
395
The simplest way of starting a run through the regression test using the cycle accurate model can be done with:
396
 
397
@example
398
@kbd{make vlt-tests}
399
@end example
400
 
401
This will build the cycle accurate model and run a new simulation for each software test. Defining which tests are run is the variable @code{TESTS}, set by default in the @code{sw/bin/Makefile} script.
402
 
403
@subsubheading Running An Individual Test
404
 
405
An individual test can be run, by specifying the test name through the @code{TEST} environment variable (which must correspond to a file in @code{sw/tests/@emph{module}/sim/} where @code{@emph{module}} is the name of the module to be tested. In the following example the test @emph{or1200-basic} is run.
406
 
407
@example
408
@kbd{make vlt-test TEST=or1200-basic}
409
@end example
410
 
411
@subsubheading Generating Cycle Accurate Simulator Executable
412
 
413
The cycle accurate model is somewhat similar to the OpenRISC architectural simulator, in that it can be run as a standalone application, although it is not as configurable at runtime. The standalone application can be built with the following command from the @code{sim/run} path.
414
 
415
@example
416
@kbd{make prepare-vlt}
417
@end example
418
 
419
The resulting executable will be @emph{Vorpsoc_top} in the @code{sim/vlt} path. Run it with the @emph{-h} option for usage instructions.
420
 
421
@subsubheading Generating Automatically Profiled Cycle Accurate Simulator Executable
422
 
423
An automatic profiling and compilation set of commands in the script can be used to create a higher performance cycle accurate model. The following make target will first compile the cycle accurate design to generate profiling outputs, run some software, and recompile using the profiling information.
424
 
425
@example
426
@kbd{make prepare-vlt-profiled}
427
@end example
428
 
429
@subsubheading Cycle Accurate Model Executable Usage
430
 
431
The executable generated by running any of the above commands is in the @code{sim/vlt} path. The usage options can be listed by running it with the @code{--help} switch.
432
 
433
@example
434
@kbd{Vorpsoc_top --help}
435
@end example
436
 
437
A short list of options is given here.
438
 
439
@table @code
440
 
441
@item -f @var{file}
442
@itemx --program @var{file}
443
@cindex @code{-f}
444
@cindex @code{--program}
445
Load software from OR32 ELF image @var{file}
446
 
447
If unspecified, model attempts to load VMEM file @code{sram.vmem}
448
 
449
@item -v
450
@itemx --vcd
451
@cindex @code{-v}
452
@cindex @code{--vcd}
453
Dump VCD file
454
 
455
@item -e @var{value}
456
@itemx --endtime @var{value}
457
@cindex @code{-e}
458
@cindex @code{--endtime}
459
End simulation after @var{value} simulated ns
460
 
461
@item -l @var{file}
462
@itemx --log @var{file}
463
@cindex @code{-l}
464
@cindex @code{--log}
465
Log processor execution trace to @var{file}
466
 
467
@end table
468
 
469
@node Results
470
@subsubsection Results
471
@cindex output from simulation of reference design
472
 
473
The following files are generted from the event driven simulation. For output options of the cycle accurate model, see the section on Cycle Accurate Model Executable Usage.
474
 
475
@subsubheading Processor Execution Trace
476
 
477
A trace of the processor after each executed instruction is generated by both the event and cycle accurate models.
478
 
479
In the event driven simulations, the log is created by default, and is stored in @code{sim/out} and will be named @code{@emph{test-name}-executed.log}.
480
 
481
@subsubheading Processor SPR Access Log
482
 
483
A list of processor special purpose registers (SPR) accesses is created when processor logging is enabled.
484
 
485
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-sprs.log}.
486
 
487
@subsubheading Processor Instruction Excecution Time Log
488
 
489
A list of when each instruction was executed is generated when processor execution logging is enabled.
490
 
491
This is useful when debugging with VCD, and detecting at what time the problematic instructions were executed.
492
 
493
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-lookup.log}.
494
 
495
@subsubheading Processor Report Mechanism Log
496
 
497
The use of the processor's report mechanism is commonplace in the test software, as it allows for the checking of intermediate values after simulation.
498
 
499
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-general.log}. This is not optional.
500
 
501
@subsubheading Value Change Dump (VCD)
502
 
503
When VCD files are generated they are placed in the @code{sim/out} path, and are named @code{@emph{test-name}.vcd}. They should be viewable with programs like @emph{GTKWave}.
504
 
505
 
506
@node Synthesis
507
@subsection Synthesis
508
 
509
The reference design is not intended to be synthesised, and thus no backend scripts are provided. See the sections on the board-specific builds.
510
 
511
 
512
@c ****************************************************************************
513
@c ordb1a3pe1500 board build chapter
514
@c ****************************************************************************
515
 
516
@node ordb1a3pe1500
517
@chapter ordb1a3pe1500
518
@cindex ordb1a3pe1500 board build information
519
 
520
@menu
521
* Overview::
522
* Structure::
523
* Tools::
524
* Simulating::
525
* Synthesis::
526
@end menu
527
 
528
@node Overview
529
@subsection Overview
530
 
531
@c TODO
532
 
533
@node Structure
534
@subsection Structure
535
 
536
@c TODO
537
 
538
@node Tools
539
@subsection Tools
540
 
541
@menu
542
* Host Tools::
543
* Target System Tools::
544
* EDA Tools::
545
* Debug Tools::
546
@end menu
547
 
548
@node Host Tools
549
@subsubsection Host Tools
550
@cindex host tools required
551
 
552
Standard development suite of tools: gcc, make, etc.
553
 
554
@node Target System Tools
555
@subsubsection Target System Tools
556
@cindex target system tools required
557
 
558
OpenRISC GNU toolchain. For installation, see OpenRISC GNU toolchain page on OpenCores.org.
559
 
560
@node EDA Tools
561
@subsubsection EDA Tools
562
@cindex EDA tools required
563
 
564
RTL, gatelevel simulation: Mentor Graphics' Modelsim
565
Synthesis: Synopsys Synplify (included in Actel Libero Suite)
566
Backend: Actel Designer (included in Actel Libero Suite)
567
Programming: Actel FlashPRO (included in Actel Libero Suite)
568
 
569
@node Debug Tools
570
@subsubsection Debug Tools
571
@cindex Debug tools required
572
 
573
or_debug_proxy, ORPmon
574
 
575
 
576
@c ****************************************************************************
577
@c End bits
578
@c ****************************************************************************
579
 
580
@node  GNU Free Documentation License
581
@chapter GNU Free Documentation License
582
@cindex license for @value{ORPSOC}
583
 
584
@include fdl-1.2.texi
585
 
586
@node Index
587
 
588
@unnumbered Index
589
 
590
@printindex cp
591
 
592
@bye
593
 

powered by: WebSVN 2.1.0

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