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

Subversion Repositories openrisc_me

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

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 468 julius
Copyright @copyright{} 2010,2011 OpenCores
12 397 julius
 
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 408 julius
* ORDB1A3PE1500::
64 415 julius
* ML501::
65 483 julius
* Generic Designs::
66 468 julius
* Software::
67 397 julius
* GNU Free Documentation License::  The license for this documentation
68
* Index::
69
@end menu
70
 
71 408 julius
@node Document Introduction
72 397 julius
@chapter Introduction
73
 
74
@cindex introduction to this @value{ORPSOC}
75
 
76 425 julius
@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. It also provides systems intended to be synthesized and run on physical hardware.
77 397 julius
 
78 425 julius
The reference system is the least complex implementation and consists of just enough to test the processor's functionality. The board-targeted builds include many additional peripherals.
79 397 julius
 
80 425 julius
The next section in this document outlines the organisation and structure of the project. The section ``@emph{Getting Started}'' goes through getting the project source and setting up any necessary tools. Each following section outlines a particular implementation of an OpenRISC-based system, beginning with the reference system. Each implementation section has an overview of the structure of the project (which probably won't vary much between the implementations), a section on setting up the required tools, running simulation, and if applicable, backend and debugging steps. There may be additional sections on modifying or customising each implementation system.
81 397 julius
 
82
@c ****************************************************************************
83
@c Project Organisation
84
@c ****************************************************************************
85
 
86
@node Project Organisation
87
@chapter Project Organisation
88
@cindex organisation of @value{ORPSOC} project
89
 
90
@menu
91
* Overview::
92
* Software::
93
* RTL::
94
* Testbenches::
95
* Reference And Board Designs::
96
@end menu
97
 
98 408 julius
@node Organisation Overview
99
@section Organisation Overview
100 397 julius
 
101 425 julius
The @value{ORPSOC} project is intended to serve dual purposes. One is to act as a development platform for OpenRISC processors, and as a development platform of OpenRISC-based SoCs targeted at specific hardware.
102 397 julius
 
103 425 julius
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.
104 397 julius
 
105 425 julius
The reference implementation based in the root (base directory) of the project contains enough componenets to create a simple OpenRISC-based SoC. Each board build is intended to implement as fully-featured a system as possible, depending on the targeted hardware.
106
 
107
The project is organised in such a way that each board build can use both the reference implementation's RTL modules and software, as well as its own set of RTL and software. The reference implementation is limited to what is available in the RTL and software directories in the root of the project, and is not technology dependent.
108
 
109 397 julius
The following sections outline the organisation of the software, RTL, and board designs.
110
 
111 408 julius
@node Software Organisation
112 397 julius
@section Software
113
 
114 425 julius
The @code{sw} path contains primarily target software (code intended for cross-compilation and execution on an OpenRISC processor.) Thre is also a path, @code{sw/utils} containing custom tools, intended to be run on the host, for manipulation of binary software images.
115 397 julius
 
116 425 julius
Driver software, implementing access functions for hardware modules, are found under @code{sw/drivers}.
117 397 julius
 
118 425 julius
There is 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}.
119
 
120
All CPU-related functions are made available through the file @code{cpu-utils.h} which is located in @code{sw/lib/include} and depending on the CPU being used, can be used to switch between different CPU driver functions. All CPU drivers are under the @code{sw/drivers} path.
121
 
122 397 julius
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.
123
 
124 425 julius
Under each test directory are two directories, @code{board} and @code{sim}, containing appropriate test software. Code for simulation will produce less printfs and aim to execute within realistic timeframes for RTL simulation. Board targeted test software is obviously written with the opposite considerations in mind.
125 397 julius
 
126 425 julius
@node Software Test Naming
127 397 julius
 
128 425 julius
The rules for naming software tests are important to adhere to, 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}.
129
 
130 468 julius
@xref{Software} for further details.
131
 
132 408 julius
@node RTL Organisation
133 397 julius
@section RTL
134
 
135
The HDL code layout conforms to those outlined in the OpenCores.org coding guidelines. http://cdn.opencores.org/downloads/opencores_coding_guidelines.pdf
136
 
137 425 julius
There are, however, some naming restrictions for this project.
138 397 julius
 
139 425 julius
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 (...}.
140
 
141
This will avoid confusion and help the scripts locate modules.
142
 
143
@subsection Verilog HDL
144
 
145
All RTL included in the project at this point is Verilog HDL, although it would be fine to add VHDL to a board build.
146
 
147 408 julius
@node Testbench Organisation
148
@section Testbench
149 397 julius
 
150 425 julius
For each design in @value{ORPSOC} there will be a testbench instantiating the top level, and any required peripherals.
151 397 julius
 
152 425 julius
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.
153 397 julius
 
154 408 julius
@node Organisation of Reference And Board Designs
155 397 julius
@section Reference And Board Designs
156
 
157
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.
158
 
159 425 julius
@subsection Module Selection
160 397 julius
 
161 425 julius
Typically, a board-targeted design will wish to reuse common components (processor, debug interface, Wishbone arbiters, UART etc.)
162 397 julius
 
163 425 julius
The project has been configured so a board build will use modules in the ``common'' RTL path (@code{rtl/verilog/}) @emph{unless} there is a copy in the board's ``local'' RTL path ( @code{boards/vendor/boardname/rtl/verilog}).
164 397 julius
 
165 425 julius
For example, in the event that modification to a module in the common RTL set is required for it to function correctly in a board build, it's advisable to copy that module to the board's @emph{local} RTL path and modify it there. Simulation and backend scripts should then use this board-specific version instead of the one in the common RTL path.
166
 
167
 
168
 
169 397 julius
@c ****************************************************************************
170
@c Getting started
171
@c ****************************************************************************
172
 
173
@node Getting Started
174
@chapter Getting Started
175
@cindex source files for @value{ORPSOC}, downloading
176
 
177
@menu
178
* Supported Platforms::
179
* Obtaining Project Source::
180
* Required Tools::
181
@end menu
182
 
183 408 julius
@node Getting Started Supported Platforms
184 425 julius
@section Supported Host Platforms
185
@cindex host platforms supported by the @value{ORPSOC} project
186 397 julius
 
187
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.
188
 
189 425 julius
Unless indicated otherwise, support for the project under Cygwin on Microsoft Windows platforms cannot be assumed.
190 397 julius
 
191 408 julius
@node Getting Started Obtaining Project Source
192 397 julius
@section Obtaining Project Source
193
@cindex getting a copy of the @value{ORPSOC} project
194
 
195
The source for @value{ORPSOC} can be obtained from the OpenCores subversion (SVN) server.
196
 
197
@example
198
@kbd{svn export http://opencores.org/ocsvn/openrisc/openrisc/trunk/orpsocv2}
199
@end example
200
 
201 408 julius
@node Getting Started Required Tools
202 397 julius
@section Required Tools
203
@cindex tools and utilities required for @value{ORPSOC}
204
 
205
 
206
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.
207
 
208 415 julius
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 greatly improved productivity.
209 397 julius
 
210
The required tools can be divided into four groups.
211
 
212
@itemize @bullet
213
@item
214
Host system tools - things like gcc, make, texinfo.
215
 
216
@item
217
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.
218
 
219
@item
220
Electronic design automation (EDA) tools - preprocessors, simulators, FPGA tool suites, etc.
221
 
222
@item
223
Debug tools - tools providing control over the system on target
224
@end itemize
225
 
226
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.
227
 
228
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.
229
 
230
Anyone implementing their own board port is encouraged to document, as best they can, any problematic tool installations and contribute them to this document.
231
 
232
 
233
 
234
@c ****************************************************************************
235
@c Reference Design chapter
236
@c ****************************************************************************
237
 
238
@node Reference Design
239
@chapter Reference Design
240
@cindex reference design
241
 
242
@menu
243
* Overview::
244
* Structure::
245
* Tools::
246
* Simulation::
247
* Synthesis::
248
@end menu
249
 
250 408 julius
@node Reference Design Overview
251 468 julius
@section Overview
252 397 julius
 
253 425 julius
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. Very little apart from the processor, memory, debug interface and interconnect modules are instantiated.
254 397 julius
 
255 415 julius
The primary role for this design is to implement a system that an OpenRISC processor can be instantiated 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.
256 397 julius
 
257
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.
258
 
259
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.
260
 
261
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.
262
 
263 408 julius
@node Reference Design Structure
264 468 julius
@section Structure
265 397 julius
 
266
@menu
267
* Overview::
268
* RTL::
269
* Software::
270
* Simulation::
271
@end menu
272
 
273 408 julius
@node Reference Design Overview
274 468 julius
@subsection Overview
275 397 julius
 
276
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.
277
 
278
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}.
279
 
280 408 julius
@node Reference Design RTL
281 468 julius
@subsection RTL
282 397 julius
 
283
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.
284
 
285
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.
286
 
287
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.
288
 
289 408 julius
@node Reference Design Software
290 468 julius
@subsection Software
291 397 julius
 
292
The software run on the reference design is found in the @value{ORPSOC} root directory, under the @code{sw} path.
293
 
294
The test software for the or1200 processor is found under @code{sw/tests/or1200/sim}.
295
 
296
A minimal set of drivers is built into @code{liborpsoc}, and they are found under @code{sw/tests/drivers}.
297
 
298
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.
299
 
300 408 julius
@node Reference Design Simulation
301 468 julius
@subsection Simulation
302 397 julius
 
303
The simulation of the reference design is run from the @code{sim/run} path.
304
 
305
The script controlling simulation is the file @code{sim/bin/Makefile}.
306
 
307
The generated output is kept in the @code{sim/out} path, and is cleared away when @kbd{make clean} is run.
308
 
309
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.
310
 
311 408 julius
@node Reference Design Tools
312 468 julius
@section Tools
313 397 julius
 
314
@menu
315
* Host Tools::
316
* Target System Tools::
317
* EDA Tools::
318
* Debug Tools::
319
@end menu
320
 
321 408 julius
@node Reference Design Host Tools
322 468 julius
@subsection Host Tools
323 397 julius
@cindex host tools required
324
 
325
Standard development suite of tools: gcc, make, etc.
326
 
327 408 julius
@node Reference Design Target System Tools
328 468 julius
@subsection Target System Tools
329 397 julius
@cindex target system tools required
330
 
331
OpenRISC GNU toolchain. For installation, see OpenRISC GNU toolchain page on OpenCores.org.
332
 
333 408 julius
@node Reference Design EDA Tools
334 468 julius
@subsection EDA Tools
335 397 julius
@cindex EDA tools required
336
 
337
RTL simulation: Icarus Verilog (also compatible with Mentor Graphics' Modelsim)
338
Cycle Accurate Simulation: Verilator, Verilog-Perl, System-Perl, SystemC
339
 
340 408 julius
@node Reference Design Debug Tools
341 468 julius
@subsection Debug Tools
342 397 julius
@cindex Debug tools required
343
 
344
None. The target is purely simulation, no extra utilities are required to debug.
345
 
346
 
347 408 julius
@node Reference Design Simulation
348 468 julius
@section Simulation
349 397 julius
 
350
@menu
351
* RTL::
352
* Cycle Accurate::
353
* Results::
354
@end menu
355
 
356 408 julius
@node Reference Design RTL
357 468 julius
@subsection RTL
358 397 julius
@cindex rtl simulation of reference design
359
 
360
All simulations of the reference design are run from the @code{sim/run} path.
361
 
362 468 julius
@subheading Running RTL Regression Test
363 397 julius
 
364
The simplest way of starting a run through the regression test, using the default RTL simulator, Icarus Verilog, can be done with:
365
 
366
@example
367
@kbd{make rtl-tests}
368
@end example
369
 
370 408 julius
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{sim/out/@emph{testname}-executed.log}), but VCDs are not.
371 397 julius
 
372 468 julius
@subheading Running An Individual Test
373 397 julius
 
374
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.
375
 
376
@example
377
@kbd{make rtl-test TEST=or1200-basic}
378
@end example
379
 
380 408 julius
@node Running A Set Of Specific Reference Design RTL Tests
381 468 julius
@subheading Running A Set Of Specific Tests
382 397 julius
 
383
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.
384
 
385
@example
386
@kbd{make rtl-tests TESTS="sdram-rows uart-simple or1200-mmu or1200-fp"}
387
@end example
388
 
389 468 julius
@node Providing A Precompiled ELF Executable
390
@subheading Providing A Precompiled ELF Executable
391
 
392
It's possible to specify the path to an OR32 ELF executable to be run in simulation instead of test software. Use the @code{USER_ELF} environment variable to specify the path to the ELF to run.
393
 
394
@example
395
@kbd{make rtl-test USER_ELF=/path/to/myapp.elf}
396
@end example
397
 
398
The ELF will be converted to binary format, and then converted to a VMEM to be
399
loaded into the model for execution at runtime.
400
 
401
@node Providing A Custom VMEM Image
402
@subheading Providing A Custom VMEM Image
403
 
404
It's possible to specify the path to a pre-existing VMEM image to be run in simulation instead of test software. Use the @code{USER_VMEM} environment variable to specify the path to the VMEM image to be run.
405
 
406
@example
407
@kbd{make rtl-test USER_VMEM=/path/to/myapp.vmem}
408
@end example
409
 
410
This VMEM file will be copied into the working directory, and renamed according to what the simulated memory expects.
411
 
412 408 julius
@node Options For Reference Design RTL Tests
413 468 julius
@subheading Options For RTL Tests
414 397 julius
 
415
There are some options, which can be specified through shell environment variables when running the test.
416
 
417
@table @code
418
 
419
@item VCD
420 408 julius
Set to '1' to enable @emph{value change dump} (VCD) creation in @code{sim/out/@emph{testname}.vcd}
421 397 julius
 
422
@item VCD_DELAY
423
Delay VCD creation start time by this number of timesteps (used as a Verilog @code{#delay} in the testbench.)
424
 
425
@item VCD_DELAY_INSNS
426
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.)
427
 
428
@item END_TIME
429
Force simulation end (@code{$finish}) at this time.
430
 
431
@item DISABLE_PROCESSOR_LOGS
432
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.
433
 
434
@item SIMULATOR
435
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.
436
 
437
@end table
438
 
439
 
440
 
441 408 julius
@node Reference Design Cycle Accurate
442 468 julius
@subsection Cycle Accurate
443 397 julius
@cindex cycle accurate simulation of reference design
444
 
445 468 julius
@subheading Running Cycle Accurate Regression Test
446 397 julius
 
447
The simplest way of starting a run through the regression test using the cycle accurate model can be done with:
448
 
449
@example
450
@kbd{make vlt-tests}
451
@end example
452
 
453
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.
454
 
455 468 julius
@subheading Running An Individual Test
456 397 julius
 
457
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.
458
 
459
@example
460
@kbd{make vlt-test TEST=or1200-basic}
461
@end example
462
 
463 468 julius
@subheading Generating Cycle Accurate Simulator Executable
464 397 julius
 
465
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.
466
 
467
@example
468
@kbd{make prepare-vlt}
469
@end example
470
 
471
The resulting executable will be @emph{Vorpsoc_top} in the @code{sim/vlt} path. Run it with the @emph{-h} option for usage instructions.
472
 
473 468 julius
@subheading Generating Automatically Profiled Cycle Accurate Simulator Executable
474 397 julius
 
475
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.
476
 
477
@example
478
@kbd{make prepare-vlt-profiled}
479
@end example
480
 
481 468 julius
@subheading Cycle Accurate Model Executable Usage
482 397 julius
 
483
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.
484
 
485
@example
486
@kbd{Vorpsoc_top --help}
487
@end example
488
 
489
A short list of options is given here.
490
 
491
@table @code
492
 
493
@item -f @var{file}
494
@itemx --program @var{file}
495
@cindex @code{-f}
496
@cindex @code{--program}
497
Load software from OR32 ELF image @var{file}
498
 
499
If unspecified, model attempts to load VMEM file @code{sram.vmem}
500
 
501
@item -v
502
@itemx --vcd
503
@cindex @code{-v}
504
@cindex @code{--vcd}
505
Dump VCD file
506
 
507
@item -e @var{value}
508
@itemx --endtime @var{value}
509
@cindex @code{-e}
510
@cindex @code{--endtime}
511
End simulation after @var{value} simulated ns
512
 
513
@item -l @var{file}
514
@itemx --log @var{file}
515
@cindex @code{-l}
516
@cindex @code{--log}
517
Log processor execution trace to @var{file}
518
 
519
@end table
520
 
521 408 julius
@node Reference Design Results
522 468 julius
@subsection Results
523 397 julius
@cindex output from simulation of reference design
524
 
525 415 julius
The following files are generated from the event driven simulation. For output options of the cycle accurate model, see the section on Cycle Accurate Model Executable Usage.
526 397 julius
 
527 468 julius
@subheading Processor Execution Trace
528 397 julius
 
529
A trace of the processor after each executed instruction is generated by both the event and cycle accurate models.
530
 
531
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}.
532
 
533 468 julius
@subheading Processor SPR Access Log
534 397 julius
 
535
A list of processor special purpose registers (SPR) accesses is created when processor logging is enabled.
536
 
537
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-sprs.log}.
538
 
539 468 julius
@subheading Processor Instruction Excecution Time Log
540 397 julius
 
541
A list of when each instruction was executed is generated when processor execution logging is enabled.
542
 
543
This is useful when debugging with VCD, and detecting at what time the problematic instructions were executed.
544
 
545
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-lookup.log}.
546
 
547 468 julius
@subheading Processor Report Mechanism Log
548 397 julius
 
549
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.
550
 
551
These values are logged to a file in @code{sim/out} named @code{@emph{test-name}-general.log}. This is not optional.
552
 
553 468 julius
@subheading Value Change Dump (VCD)
554 397 julius
 
555
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}.
556
 
557
 
558 408 julius
@node Reference Design Synthesis
559 468 julius
@section Synthesis
560 397 julius
 
561
The reference design is not intended to be synthesised, and thus no backend scripts are provided. See the sections on the board-specific builds.
562
 
563
 
564
@c ****************************************************************************
565 408 julius
@c ORDB1A3PE1500 board build chapter
566 397 julius
@c ****************************************************************************
567
 
568 408 julius
@node ORDB1A3PE1500
569
@chapter ORDB1A3PE1500
570
@cindex ORDB1A3PE1500 board build information
571 397 julius
 
572
@menu
573
* Overview::
574
* Structure::
575
* Tools::
576
* Simulating::
577 408 julius
* Synthesis and Backend::
578
* Programming File Generation::
579
* Customising::
580 397 julius
@end menu
581
 
582 408 julius
@node ORDB1A3PE1500 Overview
583 468 julius
@section Overview
584 397 julius
 
585 408 julius
The ORDB1 (ORSoC development board 1) with Actel A3PE1500 FPGA is supported by this build.
586 397 julius
 
587 408 julius
As the ORDB1 is intended to be a daughter board for a variety of I/O boards its options for configuration are extensive.
588
 
589
This board port of ORPSoC implements an example of a configurable system, with many cores that can be enabled or disabled as required by the expansion board's capabilities.
590
 
591 415 julius
The port was mainly developed with the ORSoC Ethernet expansion board (OREEB1), and was used with the OpenRISC port of the Linux kernel and BusyBox suite running network applications.
592 408 julius
 
593
This guide will overview how to simulation, synthesize and customise the system.
594
 
595
@node ORDB1A3PE1500 Structure
596 468 julius
@section Structure
597 397 julius
 
598 408 julius
Note that in this chapter the term @emph{board path} refers to the path in the project for this board port; @code{boards/actel/ordb1a3pe1500}.
599 397 julius
 
600 408 julius
The board port's structure is similar to that of a standalone project which accords with the OpenCores coding guidelines. However, all software and RTL that is available in the reference design is also available to the board port, with any local (ie. in the board's @code{rtl} or @code{sw} paths) versions taking precedence over the versions available in the reference design.
601
 
602
The Verilog RTL specific to this board is under @code{rtl/verilog} in the board path. The @code{include} path in there is the place where all required definitions files, configuring the RTL, are found.
603
 
604
Backend files, things such as PLLs and buffers generated by Actel's @emph{smartgen} tool, are found in the board's @code{backend/rtl/verilog} path.
605
 
606
@node ORDB1A3PE1500 Tools
607 468 julius
@section Tools
608 397 julius
 
609
@menu
610
* Host Tools::
611
* Target System Tools::
612
* EDA Tools::
613
* Debug Tools::
614
@end menu
615
 
616 408 julius
@node ORDB1A3PE1500 Host Tools
617 468 julius
@subsection Host Tools
618 408 julius
@cindex host tools required ORDB1A3PE1500
619 397 julius
 
620
Standard development suite of tools: gcc, make, etc.
621
 
622 408 julius
@node ORDB1A3PE1500 Target System Tools
623 468 julius
@subsection Target System Tools
624 408 julius
@cindex target system tools required ORDB1A3PE1500
625 397 julius
 
626
OpenRISC GNU toolchain. For installation, see OpenRISC GNU toolchain page on OpenCores.org.
627
 
628 408 julius
@node ORDB1A3PE1500 EDA Tools
629 468 julius
@subsection EDA Tools
630 408 julius
@cindex EDA tools required ORDB1A3PE1500
631 397 julius
 
632
RTL, gatelevel simulation: Mentor Graphics' Modelsim
633
Synthesis: Synopsys Synplify (included in Actel Libero Suite)
634
Backend: Actel Designer (included in Actel Libero Suite)
635
Programming: Actel FlashPRO (included in Actel Libero Suite)
636
 
637 439 julius
This has been tested with with Libero v8.6 and v9.0sp1 under Ubuntu Linux.
638 408 julius
 
639
@node ORDB1A3PE1500 Debug Tools
640 468 julius
@subsection Debug Tools
641 408 julius
@cindex Debug tools required ORDB1A3PE1500
642 397 julius
 
643
or_debug_proxy, ORPmon
644
 
645 408 julius
@node ORDB1A3PE1500 Simulating
646 468 julius
@section Simulating
647 408 julius
@cindex simulating ORDB1A3PE1500
648 397 julius
 
649 468 julius
@subheading Run RTL Regression Test
650 408 julius
 
651
To run the default set of regression tests for the build, run the following command in the board's @code{sw/run} path.
652
 
653
@example
654
@kbd{make rtl-tests}
655
@end example
656
 
657 425 julius
The same set of options for RTL tests available in the reference design should be available in this build. @xref{Running A Set Of Specific Reference Design RTL Tests}.
658 408 julius
 
659 409 julius
Options specific to the ORDB1A3PE1500 build.
660
 
661
@table @code
662
 
663
@item PRELOAD_RAM
664
Set to '1' to enable loading of the software image into RAM at the beginning of simulation.
665
 
666
If the chosen bootROM program (set via a define in software header file in the board's @code{sw/board/include} path) will jump straight to RAM to begin execution, then the software image will need to be in RAM for the simulation to work. This define @emph{must} be used in that case for the simulation to do anything.
667
 
668
 
669
@end table
670
 
671
 
672
 
673 408 julius
@node ORDB1A3PE1500 Synthesis
674 468 julius
@section Synthesis
675 408 julius
 
676
Synthesis of the board port for the Actel technology with the Synplify tool can be run in the board's @code{syn/synplify/run} path with the following command.
677
 
678
@example
679
@kbd{make all}
680
@end example
681
 
682
This will create a EDIF netlist in @code{syn/synplify/out}.
683
 
684
Hopefully it's all automated enough so that, as long as the design is simulating as desired, the correct set of RTL will be picked up and synthesized without any need for customising scripts for the tool.
685
 
686
@node ORDB1A3PE1500 Synthesis Options
687 468 julius
@subsection Options
688 408 julius
 
689
The following can be passed as environment variables when running @kbd{make all}.
690
 
691
@table @code
692
 
693
@item RTL_TOP
694
Default's to the designs top level module, @emph{orpsoc_top}, but if wishing to synthesize a particular module, its name (not instantiated name) should be set here.
695
 
696
@item FPGA_PART
697
Defaults to A3PE1500 but if targeting any other set it with this.
698
 
699
@item FPGA_FAMILY
700
Defaults to the A3PE1500's @emph{ProASIC3E} but if targeting any other set it with this.
701
 
702
@item FPGA_PACKAGE
703
Defaults to PQFP208 but if targeting any other set it with this.
704
 
705
@item FPGA_SPEED_GRADE
706
Defaults to Std but if targeting any other set it with this.
707
 
708
@item FREQ
709
Target frequency for synthesis.
710
 
711
@item MAXFAN
712
Maximum net fanout.
713
 
714
@item MAXFAN_HARD
715
Hard limit on maximum net fanout.
716
 
717
@item GLOBALTHRESH
718
Threshold of fanout before promoting signal to a global routing net.
719
 
720
@item RETIMING
721
Defaults to '1' (on) but set to '0' to disable.
722
 
723
@item RESOURCE_SHARING
724
Defaults to '1' (on) but set to '0' to disable.
725
 
726
@item DISABLE_IO_INSERTION
727
Defaults to '0' (off) but set to '1' to enable. Useful when synthesizing individual modules not intended as a top level.
728
 
729
@end table
730
 
731
@node ORDB1A3PE1500 Synthesis Warnings
732 468 julius
@subsection Checks
733 408 julius
 
734
The following is a list of some considerations before synthesis.
735
 
736
@itemize @bullet
737
@item bootrom.v
738
 
739 415 julius
If the bootROM module is being used to provide the processor with a program at startup, check that board software include file, in the board's @code{sw/board/include} path, is selecting the correct bootROM program.
740 408 julius
 
741 449 julius
Do a @kbd{make distclean} from the synthesis run directory to be sure that the previous bootROM file is cleared away and regenerated when synthesis is run.
742 408 julius
 
743
 
744
@item Clean away old leftovers
745
 
746
If the unwanted files from an old synthesis run are still there before the next run, it's best to clean them away with @kbd{make clean} from the synthesis run directory.
747
 
748
 
749
@item Check Command Line Options
750
 
751
If using any command line settings, they can be checked by passing them to the following make target: @kbd{make print-config}
752
 
753
 
754
@end itemize
755
 
756
@node ORDB1A3PE1500 Place and Route
757 468 julius
@section Place and Route
758 408 julius
 
759
Place and route is run from the board's @code{backend/par/run} path with the following command.
760
 
761
@example
762
@kbd{make all}
763
@end example
764
 
765
This will create a @code{.adb} file in the same path.
766
 
767 439 julius
All steps, up to and including programming file generation are done here. FPGA device programming must be done using the programming FlashPro tool under Windows if using a free license.
768 408 julius
 
769
@node ORDB1A3PE1500 Place and route options
770 468 julius
@subsection Options
771 408 julius
 
772 439 julius
Most of the design's parameters are determined by processing the @code{orpsoc-defines.v} file and extracting, for example, the frequency of the clocks entering the design.
773 408 julius
 
774
The following can be passed as environment variables when running @kbd{make all}.
775
 
776
@table @code
777
 
778
@item FPGA_PART
779
Defaults to A3PE1500 but if targeting any other set it with this.
780
 
781
@item FPGA_FAMILY
782
Defaults to the A3PE1500's @emph{ProASIC3E} but if targeting any other set it with this.
783
 
784
@item FPGA_PACKAGE
785
Defaults to ``208 PQFP'' but if targeting any other set it with this.
786
 
787
 
788
@item FPGA_SPEED_GRADE
789
Defaults to Std but if targeting any other set it with this.
790
 
791
@item FPGA_VOLTAGE
792
Defaults to 1.5 but if targeting any other set it with this.
793
 
794
@item FPGA_TEMP_RANGE
795
Defaults to COM but if targeting any other set it with this.
796
 
797
@item FPGA_VOLT_RANGE
798
Defaults to COM but if targeting any other set it with this.
799
 
800
@item PLACE_INCREMENTAL
801
Defaults to off.
802
 
803
@item ROUTE_INCREMENTAL
804
Defaults to off.
805
 
806
@item PLACER_HIGH_EFFORT
807
Defaults to off.
808
 
809
@item BOARD_CONFIG
810
Defaults to @code{orsoccpuexpio.mkpinassigns}
811
 
812
@end table
813
 
814
@node ORDB1A3PE1500 Constraints
815 468 julius
@subsection Constraints
816 408 julius
 
817
 
818
A @emph{synposys design constraints} (SDC) file, and @emph{physical design constraints} (PDC) file are generated automatically by the scripts. The main Verilog defines file is parsed to detect which modules are included in the design, and generates the appropriate constraints which are embedded in the Makefile.
819
 
820
 
821
The PDC relies on the @code{BOARD_CONFIG} environment variable to indicate which pin assignment file to pull into the Makefile (they live in @code{backend/par/bin}). The PDC also depends on the actual contents of the main place and route Makefile, @code{backend/par/bin/Makefile}.
822
 
823
 
824
By default these should have support for the peripherals included with ORPSoC. Double check, however, that the correct constraints are set, by running the following command before starting place and route.
825
 
826
@example
827
@kbd{make pdc-file sdc-file}
828
@end example
829
 
830
These can be generated and edited and then used when running place and route, they will not get replaced.
831
 
832
@node ORDB1A3PE1500 Programming File Generation
833 468 julius
@section Programming File Generation
834 408 julius
 
835
The @code{.adb} file resulting from place and route can be opened in the Actel @emph{Designer} tool and a programming file generated there.
836
 
837
Once this programming file is created, Actel's @emph{FlashPro} can used to program the ORDB1A3PE1500 board.
838
 
839
@node ORDB1A3PE1500 Customising
840 468 julius
@section Customising
841 408 julius
 
842
The versatile nature of the ORDB1A3PE1500 means the design that goes on it must be equally versatile, if not more so.
843
 
844
The following sections have information on how to configure the design.
845
 
846
@node ORDB1A3PE1500 Customising Enabling Existing Modules
847 468 julius
@subsection Enabling Existing RTL Modules
848 408 julius
 
849
The design relies on the Verilog HDL @emph{define} function to indicate which modules are included.
850
 
851 415 julius
There are only a few modules included by default.
852 408 julius
 
853
@itemize @bullet
854
@item Processor - @emph{or1200}
855
@item Clock and reset generation - @emph{clkgen}
856
@item Bus arbiters - @emph{arbiter_ibus}, @emph{arbiter_dbus}, @emph{arbiter_bytebus}
857
@end itemize
858
 
859
The rest are optional, depending on what is defined in the board's @code{rtl/verilog/include/orpsoc-defines.v} file.
860
 
861
Inspect that file to see which modules are able to be included. At present the list includes USB 1.1 host controller and/or slave interface, I2C master/slave core, and SPI master cores.
862
 
863 415 julius
These cores should be supported and ready to go by just defining them (uncomment in the @code{orspco-defines.v} file.)
864 408 julius
 
865
@node ORDB1A3PE1500 Customising Adding Modules
866 468 julius
@subsection Adding RTL Modules
867 408 julius
 
868
There are a number of steps to take when adding a new module to the design.
869
 
870
@itemize @bullet
871
@item RTL Files
872
 
873
Create a directory under the board's @code{rtl/verilog} directory, and name it the same as the top level of the module.
874
 
875
Ensure the module's top level file and actual name of the module when it will be instantiated are @emph{all the same}.
876
 
877
Place any include files into the board's @code{rtl/verilog/include} path.
878
 
879
@item Instantiate in ORPSoC Top Level File
880
 
881
Instantiate the module in the ORPSoC top level file, @code{rtl/verilog/orpsoc_top/orpsoc_top.v}, and be sure to take care of the following.
882
@itemize @bullet
883
@item Create appropriate @emph{`define} in @code{orpsoc-defines.v} and surround module instantiation with it.
884
@item Add required I/Os (surrounded by appropriate @emph{`ifdef })
885
@item Attach to appropriate bus arbiter, declaring any signals required. Be sure to tie them off if modules is not included.
886
@item Update appropriate bus arbiter (in board's @code{rtl/verilog/arbiters} path) adding (uncommenting) additional ports as needed.
887
@item Update board's @code{rtl/verilog/include/orpsoc-params.v} file with appropriate set of parameters for new module, as well as arbiter memory mapping assignment.
888
@item Attach appropriate clocks and resets, modify the board's @code{rtl/verilog/clkgen/clkgen.v} file generating appropriate clocks if required.
889
@item Attach any interrupts to the processor's PIC vector in, assigned as the last thing in the file.
890
@end itemize
891
 
892
@item Update ORPSoC Testbench
893
 
894
Update the board's @code{bench/verilog/orpsoc_testbench.v} file with appropriate ports (surrounded by appropriate @emph{`ifdef}.)
895
 
896
Add any desired models to help test the module to the board's @code{bench/verilog} path and instantiate it correctly in the testbench.
897
 
898
@item Add Software Drivers and Tests
899
 
900
In a similar fashion to what is already in the board's @code{sw/drivers} and @code{sw/tests} path, create desired driver and test software to be used during simulation (and potentially on target.)
901
 
902
@item Update Backend Scripts
903
 
904 415 julius
If any I/O is added, or special timing specified, the board's backend main Makefile, @code{backend/par/bin/Makefile} and pinout files (in @code{backend/par/bin} will need to be updated.
905 408 julius
 
906
The section in @code{backend/par/bin/Makefile} mapping signals to Makefile variables will need to have these new signals added to them. The section in the file begins with @code{$(PDC_FILE):} and is actually a set of long bash lines.
907
 
908 415 julius
Continuing the format already there should be easy enough. Remember that the @code{orspoc-defines.v} file is parsed and it's possible to tell if the module is included by testing if the variable is defined.
909 408 julius
 
910
For example, to add I/Os for a module called @code{foo}, and in @code{orpsoc-defines.v} a value @code{FOO1} is defined, we can add I/Os @code{foo1_srx_i} and @code{foo1_tx_o[3:0]} with the following.
911
 
912
@example
913
@kbd{   $(Q)if [ ! -z $$FOO1 ]; then \
914
        echo "set_io foo1_srx_i " $(FOO_SRX_BUS_SETTINGS) " \
915 410 julius
        -pinname "$(FOO1_SRX_PIN) >> $@@; \
916 408 julius
        echo "set_io foo1_tx_o\\[0\\] " $(FOO_TX_BUS_SETTINGS) " \
917 410 julius
         -pinname "$(FOO1_TX0_PIN) >> $@@; \
918 408 julius
        echo "set_io foo1_tx_o\\[1\\] " $(FOO_TX_BUS_SETTINGS) "  \
919 410 julius
        -pinname "$(FOO1_TX1_PIN) >> $@@; \
920 408 julius
        echo "set_io foo1_tx_o\\[2\\] " $(FOO_TX_BUS_SETTINGS) "  \
921 410 julius
        -pinname "$(FOO1_TX2_PIN) >> $@@; \
922 408 julius
        echo "set_io foo1_tx_o\\[3\\] " $(FOO_TX_BUS_SETTINGS) "  \
923 410 julius
        -pinname "$(FOO1_TX3_PIN) >> $@@; \
924
fi
925 408 julius
       }
926
@end example
927
 
928
@emph{(ensure there is no whitespace after the trailing backslashes.)}
929
 
930
It's a little hard to follow, but it's essentially one @code{set_io} line for each I/O line.
931
 
932
First the line checks if the module's define was exported (which happens automatically if it's defined in @code{orpsoc-defines.v}.
933
 
934
Note that what is defined can be checked by running @kbd{make print-defines} in the board's @code{backend/par/run} path.
935
 
936
The values of the bus settings variables depend on the desired I/O standards and other examples in the Makefile can be referenced.
937
 
938 415 julius
The pin numbers need to be set in the @code{.mkpinassigns} which is included into the Makefile (according to the @code{BOARD_CONFIG} variable set when running the @code{make} command.)
939 408 julius
 
940
These files are simple assignments of values to variables (and potentially then to other variables) which correspond to the variables finally used in the main Makefile.
941
 
942
The physical constraints file can be generated manually with the @kbd{make pdc-file} command.
943
 
944
@end itemize
945
 
946 415 julius
@c ****************************************************************************
947
@c ML501 board build chapter
948
@c ****************************************************************************
949 408 julius
 
950 415 julius
@node ML501
951
@chapter ML501
952
@cindex ML501 board build information
953 408 julius
 
954 415 julius
@menu
955
* Overview::
956
* Structure::
957
* Tools::
958
* Simulating::
959
* Synthesis and Backend::
960
* Programming File Generation::
961
* Customising::
962
* Running And Debugging Software::
963
@end menu
964 408 julius
 
965 415 julius
@node ML501 Overview
966 468 julius
@section Overview
967 408 julius
 
968 415 julius
The Xilinx ML501 board contains a Virtex LX50 part, varied memories and peripherals. See Xilinx's site for specific details:
969
 
970
http://www.xilinx.com/products/devkits/HW-V5-ML501-UNI-G.htm
971
 
972
Not all peripherals are supported, and adding support for each is a goal.
973
 
974
At present the build contains a memory controller for the DDR2 SDRAM (based around a Xilinx MIG derived controller) and SSRAM. None of the other peripherals (VGA/AC97/PS2/USB/LCD) have controllers in the design yet.
975
 
976
The OpenCores 10/100 Ethernet MAC can be used for Ethernet, but still has some bugs to do with memory access, although it appears to be using the RGMII interface to the 10/10/1000 PHY on the ML501 OK.
977
 
978
The project is configured to generate either a @code{.bit} file for direct programming via JTAG, or a @code{.mcs} file with inbuilt bootloader software for the processor, meaning the board can be powered up and an application like ORPmon loaded without having to reprogram it from iMPACT between power cycles.
979
 
980
This guide is far from complete, but provides the basics on running simulations, and building the design.
981
 
982
@node ML501 Structure
983 468 julius
@section Structure
984 415 julius
 
985
Note that in this chapter the term @emph{board path} refers to the path in the project for this board port; @code{boards/xilinx/ml501}.
986
 
987
The board port's structure is similar to that of a standalone project which accords with the OpenCores coding guidelines. However, all software and RTL that is available in the reference design is also available to the board port, with any local (ie. in the board's @code{rtl} or @code{sw} paths) versions taking precedence over the versions available in the reference design.
988
 
989
The Verilog RTL specific to this board is under @code{rtl/verilog} in the board path. The @code{include} path in there is the place where all required definitions files, configuring the RTL, are found.
990
 
991
Backend files, mainly binary NGC files for mapping, are found in the board's @code{backend/bin} path.
992
 
993 425 julius
@node ML501 XILINX_PATH
994 468 julius
@subsection ML501 XILINX_PATH
995 425 julius
 
996 415 julius
Be sure to set the environment variable @code{XILINX_PATH} to the path of the ISE path on the host machine. This can be done with something like @kbd{export XILINX_PATH=/software/xilinx_11.1/ISE} and additionally a symbolic link to the Verilog simulation library sources will be required - see the simulation section on this. Note that it helps to add the @code{XILINX_PATH} variable to the user's @code{.bashrc} script or similar to save setting it each time a new shell is opened.
997
 
998
If the @code{XILINX_PATH} variable is not set correctly, the makefiles will not run.
999
 
1000
@node ML501 Tools
1001 468 julius
@section Tools
1002 415 julius
 
1003
@menu
1004
* Host Tools::
1005
* Target System Tools::
1006
* EDA Tools::
1007
* Debug Tools::
1008
@end menu
1009
 
1010
@node ML501 Host Tools
1011 468 julius
@subsection Host Tools
1012 415 julius
@cindex host tools required ML501
1013
 
1014
Standard development suite of tools: gcc, make, etc.
1015
 
1016
@node ML501 Target System Tools
1017 468 julius
@subsection Target System Tools
1018 415 julius
@cindex target system tools required ML501
1019
 
1020
OpenRISC GNU toolchain. For installation, see OpenRISC GNU toolchain page on OpenCores.org.
1021
 
1022
@node ML501 EDA Tools
1023 468 julius
@subsection EDA Tools
1024 415 julius
@cindex EDA tools required ML501
1025
 
1026
RTL, gatelevel simulation: Mentor Graphics' Modelsim
1027
Synthesis: XST (from Xilinx ISE)
1028
Backend: ngdbuild/map/par/bitgen/promgen, etc. (from Xilinx ISE)
1029
Programming: iMPACT (from Xilinx ISE)
1030
 
1031 439 julius
This has been tested with Xilinx ISE 11.1 under Ubuntu Linux.
1032 415 julius
 
1033
 
1034
@node ML501 Debug Tools
1035 468 julius
@subsection Debug Tools
1036 415 julius
@cindex Debug tools required ML501
1037
 
1038
or_debug_proxy, ORPmon
1039
 
1040
@node ML501 Simulating
1041 468 julius
@section Simulating
1042 415 julius
@cindex simulating ML501
1043
 
1044 425 julius
Ensure the @code{XILINX_PATH} environment variable is set correcetly. @xref{ML501 XILINX_PATH} for information.
1045 415 julius
 
1046 425 julius
Note that if this path is not set, simulations will not compile.
1047 415 julius
 
1048 468 julius
@subheading Run RTL Regression Test
1049 415 julius
 
1050
To run the default set of regression tests for the build, run the following command in the board's @code{sw/run} path.
1051
 
1052
@example
1053
@kbd{make rtl-tests}
1054
@end example
1055
 
1056 425 julius
The same set of options for RTL tests available in the reference design should be available in this build. @xref{Running A Set Of Specific Reference Design RTL Tests}.
1057 415 julius
 
1058
Options specific to the ML501 build.
1059
 
1060
@table @code
1061
 
1062
@item PRELOAD_RAM
1063
Set to '1' to enable loading of the software image into RAM at the beginning of simulation.
1064
 
1065
If the chosen bootROM program (set via a define in software header file in the board's @code{sw/board/include} path) will jump straight to RAM to begin execution, then the software image will need to be in RAM for the simulation to work. This define @emph{must} be used in that case for the simulation to do anything.
1066
 
1067
 
1068
@end table
1069
 
1070
 
1071
 
1072
@node ML501 Synthesis
1073 468 julius
@section Synthesis
1074 415 julius
 
1075
Synthesis of the board port for the Actel technology with the Synplify tool can be run in the board's @code{syn/xst/run} path with the following command.
1076
 
1077
@example
1078
@kbd{make all}
1079
@end example
1080
 
1081
This will create an NGC file in @code{syn/xst/run} named @code{orpsoc.ngc}.
1082
 
1083
Hopefully it's all automated enough so that, as long as the design is simulating as desired, the correct set of RTL will be picked up and synthesized without any need for customising scripts for the tool.
1084
 
1085
@node ML501 Synthesis Options
1086 468 julius
@subsection Options
1087 415 julius
 
1088
Use the following command int the @code{syn/xst/run} path to get a list of the variables used during synthesis. Any can be set on the command line when running @code{make all}.
1089
 
1090
@example
1091
@kbd{make print-config}
1092
@end example
1093
 
1094
 
1095
@node ML501 Synthesis Warnings
1096 468 julius
@subsection Checks
1097 415 julius
 
1098
The following is a list of some considerations before synthesis.
1099
 
1100
@itemize @bullet
1101
@item bootrom.v
1102
 
1103
If the bootROM module is being used to provide the processor with a program at startup (reset address in processor's define file is set to @code{0xf0000100} or similar), check that board software include file, in the board's @code{sw/board/include} path, is selecting the correct bootROM program.
1104
 
1105 449 julius
Do a @kbd{make distclean} from the synthesis run directory to be sure that the previous bootROM file is cleared away and regenerated when synthesis is run.
1106 415 julius
 
1107
 
1108
@item Clean away old leftovers
1109
 
1110
If the unwanted files from an old synthesis run are still there before the next run, it's best to clean them away with @kbd{make clean} from the synthesis run directory.
1111
 
1112
 
1113
 
1114
@end itemize
1115
 
1116
@node ML501 Synthesised Netlist
1117 468 julius
@subsection Netlist generation
1118 415 julius
 
1119
To create a Verilog HDL netlist of the post-synthesis design, run the following in the board's @code{syn/xst/run} path.
1120
 
1121
@example
1122
@kbd{make orpsoc.v}
1123
@end example
1124
 
1125
@node ML501 Place and Route
1126 468 julius
@section Place and Route
1127 415 julius
 
1128
Place and route of the design can be run from the board's @code{backend/par/run} path with the following command.
1129
 
1130
@example
1131
@kbd{make orpsoc.ncd}
1132
@end example
1133
 
1134
@node ML501 Timing Report
1135 468 julius
@section Post-PAR STA Report
1136 415 julius
 
1137
The @code{trce} tool can be used to generate a timing report of the post-place and route design.
1138
 
1139
@example
1140
@kbd{make timingreport}
1141
@end example
1142
 
1143
@node ML501 Back-annotated Netlist
1144 468 julius
@section Back-annotated Netlist
1145 415 julius
 
1146
A post-PAR back-annotated netlist can be generated with the following command.
1147
 
1148
@example
1149
@kbd{make netlist}
1150
@end example
1151
 
1152
This will make a new directory under the board's @code{backend/par/run} path named @code{netlist} and will contain a Verilog netlist and SDF file with timing information.
1153
 
1154
 
1155
@node ML501 Place and route options
1156 468 julius
@subsection Options
1157 415 julius
 
1158
To get a list of options that can be set when running the backend flow, run the following in the board's @code{backend/par/run} path.
1159
 
1160
@example
1161
@kbd{make print-config}
1162
@end example
1163
 
1164
@node ML501 Constraints
1165 468 julius
@subsection Constraints
1166 415 julius
 
1167
A Xilinx User Constraints File (UCF) file is in the board's @code{backend/par/bin} path. It is named @code{ml501.ucf}. It should be edited if any extra I/O or constraints are required.
1168
 
1169
Eventually it would be good to dynamically generated this, based on what is included in the design, but for now this must be hand modified if modules are added ore removed from the design.
1170
 
1171
@node ML501 Programming File Generation
1172 468 julius
@section Programming File Generation
1173 415 julius
 
1174
Programming file generation is run from the board's @code{backend/par/run} path with the following command.
1175
 
1176
@example
1177
@kbd{make orpsoc.bit}
1178
@end example
1179
 
1180
This file can then be loaded into the Xilinx iMPACT program and programmed onto the Virtex 5 part on the ML501.
1181
 
1182
@node ML501 SPI programming file
1183 468 julius
@subsection SPI programming file generation
1184 415 julius
 
1185
To generate a file, which can be programmed into the SPI flash on the board (and thus allowing the FPGA to be configured without using iMPACT each time) run the following command in the board's @code{backend/par/run} path.
1186
 
1187
@example
1188
@kbd{make orpsoc.mcs}
1189
@end example
1190
 
1191
@node ML501 SPI programming file with software
1192 468 julius
@subsection SPI programming file generation with software
1193 415 julius
 
1194
To generate a file, which can be programmed into the SPI flash on the board (and thus allowing the FPGA to be configured without using iMPACT each time) and also has a bootloader the processor can run (such as ORPmon) run the following command in the board's @code{backend/par/run} path.
1195
 
1196
@example
1197
@kbd{make orpsoc.mcs BOOTLOADER_BIN=/path/to/bootloader-binary-file.bin}
1198
@end example
1199
 
1200
The image is allowed to be up to 256KBytes in size.
1201
 
1202
As the SPI flash on the ML501 is only 2MBytes in size, and the FPGA configuration image takes up almost 1.5MBytes, the final 256KBytes are reserved for a software image to be loaded at reset by the processor.
1203
 
1204
This mark (the last 256KBytes of memory) is at hex address @code{0x1c0000}. This value is passed to the @code{promgen} tool when creating the @code{.mcs} file, and is set in the board's @code{board.h} file so the embedded bootloader in the design knows which address to load from.
1205
 
1206
If changing the address of the bootloader, to accommodate a larger image for example, be sure to update the address in the @code{board.h} file and set the environment variable @code{SPI_BOOTLOADER_SW_OFFSET_HEX} to the hex address to embed the binary image at (hexadecimal value without the leading ``@code{0x}''.) Note that changing the address to load from in @code{board.h} will require the entire design is re synthesized.
1207
 
1208
The file pointed to by @code{BOOTLOADER_BIN} should be a binary image with the  size of the image embedded in the first word.
1209
 
1210
The tool @code{bin2binsizeword} in ORPSoC's @code{sw/utils} path can add the sizeword to a binary image. A binary image is something created with the processor toolchains @code{objcopy -O binary} option. A tool like ORPmon is a good candidate for being embedded in the SPI flash as bootloader software - a binary image is automatically created when it's compiled, usually named @code{orpmon.or32.bin}. To embed that, it would simply need to be passed to the @code{bin2binsizeword} like the following:
1211
 
1212
@example
1213
@kbd{bin2binsizeword /path/to/orpmon/orpmon.or32.bin orpmon-sizeword.bin}
1214
@end example
1215
 
1216
This @code{orpmon-sizeword.bin} file should then be passed via the BOOTLOADER_BIN option when creating the @code{.mcs} file to embed it.
1217
 
1218
If once the FPGA configuration image, and a bootloader image is embedded in the SPI flash, the FPGA can be configured with ORPSoC and then the processor can load the bootloader (like ORPmon) with a single press of the board's @code{PROG} button. This makes developing on the board very easy.
1219
 
1220
@node ML501 SPI flash programming
1221 468 julius
@subsection SPI flash programming
1222 415 julius
 
1223
For a guide on how to actually set up the ML501 board to program the SPI flash, see the section under ``@emph{My Own SPI Flash Image Demonstration}'' on page 26 of the Xilinx UG228 document, http://www.xilinx.com/support/documentation/boards_and_kits/ug228.pdf . Follow steps 1 to 4, and then 9 to 16, and supply the @code{.mcs} file generated here.
1224
 
1225
Be sure to set the @emph{CONFIG} switches to @code{00010101} (left-to-right when Xilinx logo in North-West of board) before attempting to program the SPI flash. The be sure to switch them back to @code{00000101} before attempting to boot the image.
1226
 
1227 479 julius
@emph{Note}: SPI flash programming will require fly-leads from the Xilinx programming cable to the the board. See page 6 of XAPP1053 for a picture of this for a @emph{different} board, but to get the idea: http://www.xilinx.com/support/documentation/application_notes/xapp1053.pdf .
1228 415 julius
 
1229 479 julius
@emph{Note}: If leaving the SPI programming fly leads in place and attempting to boot the image, be sure to remove the @code{Vref} (@code{VCC3V3} on JP2) connection before attempting to boot. Be sure the configuration DIP SW15 is set back to the @code{00000101} position!
1230 415 julius
 
1231 479 julius
@emph{Note:} The other cable from the programmer (going to the JP1 header) @emph{must} be unplugged from the board before attempting to program the SPI flash.
1232
 
1233
 
1234 415 julius
Booting from the SPI flash to ORPmon prompt is about 3 to 4 seconds.
1235
 
1236
 
1237
@node ML501 Customising
1238 468 julius
@section Customising
1239 415 julius
 
1240
The large amount of peripherals on the ML501 means that things will want to be added or removed to suit the design.
1241
 
1242
The following sections have information on how to configure the design.
1243
 
1244
@node ML501 Customising Enabling Existing Modules
1245 468 julius
@subsection Enabling Existing RTL Modules
1246 415 julius
 
1247
The design relies on the Verilog HDL @emph{define} function to indicate which modules are included. See the board's @code{rtl/verilog/include/orpsoc-defines.v} file to determine which options are enabled by uncommented @code{`define} values.
1248
 
1249
These @code{`defines} will correspond to defines in the board's top level RTL file @code{boardpath/rtl/verilog/orpsoc_top/orpsoc_top.v}.
1250
 
1251
There are only a few modules included by default.
1252
 
1253
@itemize @bullet
1254
@item Processor - @emph{or1200}
1255
@item Clock and reset generation - @emph{clkgen}
1256
@item Bus arbiters - @emph{arbiter_ibus}, @emph{arbiter_dbus}, @emph{arbiter_bytebus}
1257
@end itemize
1258
 
1259
The rest are optional, depending on what is defined in the board's @code{rtl/verilog/include/orpsoc-defines.v} file.
1260
 
1261
@node ML501 Customising Adding Modules
1262 468 julius
@subsection Adding RTL Modules
1263 415 julius
 
1264
There are a number of steps to take when adding a new module to the design.
1265
 
1266
@itemize @bullet
1267
@item RTL Files
1268
 
1269
Create a directory under the board's @code{rtl/verilog} directory, and name it the same as the top level of the module.
1270
 
1271
Ensure the module's top level file and actual name of the module when it will be instantiated are @emph{all the same}.
1272
 
1273
Place any include files into the board's @code{rtl/verilog/include} path.
1274
 
1275
@item Instantiate in ORPSoC Top Level File
1276
 
1277
Instantiate the module in the ORPSoC top level file, @code{rtl/verilog/orpsoc_top/orpsoc_top.v}, and be sure to take care of the following.
1278
@itemize @bullet
1279
@item Create appropriate @emph{`define} in @code{orpsoc-defines.v} and surround module instantiation with it.
1280
@item Add required I/Os (surrounded by appropriate @emph{`ifdef })
1281
@item Attach to appropriate bus arbiter, declaring any signals required. Be sure to tie them off if modules is not included.
1282
@item Update appropriate bus arbiter (in board's @code{rtl/verilog/arbiters} path) adding (uncommenting) additional ports as needed.
1283
@item Update board's @code{rtl/verilog/include/orpsoc-params.v} file with appropriate set of parameters for new module, as well as arbiter memory mapping assignment.
1284
@item Attach appropriate clocks and resets, modify the board's @code{rtl/verilog/clkgen/clkgen.v} file generating appropriate clocks if required.
1285
@item Attach any interrupts to the processor's PIC vector in, assigned as the last thing in the file.
1286
@end itemize
1287
 
1288
@item Update ORPSoC Testbench
1289
 
1290
Update the board's @code{bench/verilog/orpsoc_testbench.v} file with appropriate ports (surrounded by appropriate @emph{`ifdef}.)
1291
 
1292
Add any desired models to help test the module to the board's @code{bench/verilog} path and instantiate it correctly in the testbench.
1293
 
1294
@item Add Software Drivers and Tests
1295
 
1296
In a similar fashion to what is already in the board's @code{sw/drivers} and @code{sw/tests} path, create desired driver and test software to be used during simulation (and potentially on target.)
1297
 
1298
@item Update Backend Scripts
1299
 
1300
If any I/O is added, or special timing specified, the board's UCF file will need updating - see @code{boardpath/backend/par/bin/ml501.ucf}.
1301
 
1302
@end itemize
1303
 
1304
@node ML501 Running And Debugging Software
1305 468 julius
@section Running And Debugging Software
1306 415 julius
 
1307
@node ML501 Debug Interface
1308 468 julius
@subsection Debug Interface
1309 415 julius
 
1310
The debug interface uses a separate JTAG tap and some fly-leads must be connected from an @emph{ORSoC USB debugger} (http://opencores.com/shop,item,3) to the ML501.
1311
 
1312
From the USB debugger, a fly lead must take the following signals to the following pins on header J4 on the ML501.
1313
 
1314
@itemize @bullet
1315
@item
1316
tdo - HDR2_6
1317
@item
1318
tdi - HDR2_8
1319
@item
1320
tms - HDR2_10
1321
@item
1322
tck - HDR2_12
1323
@end itemize
1324
 
1325
This corresponds to right-most column of pins on the J4 header, starting on the third row going down.
1326
 
1327
Supply and ground pins must also be hooked up for the USB debugger.
1328
 
1329
The left column of pins on J4 are all tied to ground. All pins on J7 (expansion header located adjacent to J4) are all tied to VCC2V5, 2.5V DC, and this is OK for supplying the buffers on the USB debug cable, and can be used. So essentially put the supply leads anywhere on J7 and ground leads anywhere on the left column of J4.
1330
 
1331
Once the debug interface is connected, the @code{or_debug_proxy} application can be used to provide a stub for GDB to connect to. See http://opencores.org/openrisc,debugging_physical for more information.
1332
 
1333
@node ML501 UART
1334 468 julius
@subsection UART
1335 415 julius
 
1336
There are 2 ways of connecting to the UART in the design.
1337
 
1338
One is via the usual serial port connector, P3, on the ML501. This will obviously require a PC with a serial input and appropriate terminal application.
1339
 
1340
There is also a connection available via the USB debugger mentioned in the previous subsection.
1341
 
1342
The following pins are used for RX/TX to/from the design on header J4.
1343
 
1344
@itemize @bullet
1345
@item
1346
UART RX - HDR2_2
1347
@item
1348
UART TX - HDR2_4
1349
@end itemize
1350
 
1351
Again, supply and ground leads for the UART drivers on the USB debugger can be sourced from J7/left-column J4 as per the debug interface subsection.
1352
 
1353
If both UART and debug interface are connected via the ORSoC USB debugger, this ultimately ends up witht he first 2 pins on the right column of J4 as RX/TX for the UART then the JTAG TDO, TDI, TMS and TCK in succession down the right column of J4.
1354
 
1355
See the ML501 schematic (http://www.xilinx.com/support/documentation/boards_and_kits/ml501_20061010_bw.pdf) for more details on these headers, and refer to the pinouts in the ML501 UCF, in the board's @code{backend/par/bin/ml501.ucf} file.
1356
 
1357 483 julius
 
1358 468 julius
@c ****************************************************************************
1359 483 julius
@c Generic Design build chapter
1360
@c ****************************************************************************
1361
 
1362
@node Generic
1363
@chapter Generic
1364
@cindex Generic design information
1365
 
1366
@menu
1367
* Overview::
1368
@end menu
1369
 
1370
 
1371
@node Generic Build Overview
1372
@section Overview
1373
 
1374
The paths under @code{boards/generic} contain designs similar to the reference design, in that they are not technology specific, and used for development of certain features of the processor, or peripherals.
1375
 
1376
An example is the fault tolerance testing build, in @code{boards/generic/ft}, which implements some custom modules in the testbench and ORPSoC top level design, and is in general a very minimal system just for testing.
1377
 
1378
Additional builds, testing certain parts of the technology, can be developed here.
1379
 
1380
@c ****************************************************************************
1381 468 julius
@c Software section
1382
@c ****************************************************************************
1383 415 julius
 
1384 468 julius
 
1385
@node Software
1386
@chapter Software
1387
 
1388
@cindex software use of @value{ORPSOC}
1389
 
1390
This section details the structure of the software library included in @value{ORPSOC}.
1391
 
1392
@node Software Overview
1393
@section Overview
1394
 
1395
The software provided with ORPSoC is intended to be of sufficient functionality to develop and test the designs, with some additional utility programs for board bring up.
1396
 
1397
The bulk of the software library consists of drivers and tests for the included RTL modules, focusing on the processor. A basic C library, implementing basic support functions such as printf, is included. This alleviates the prerequisite of a compiler with supporting C library installed.
1398
 
1399
Each board port may contain additional software drivers and tests in its own software directory, the structure of which mimics that of the main software directory.
1400
 
1401
@node Software Componenets
1402
@section Components
1403
 
1404
This section outlines the different components of the software library in the @code{sw/} path in the root of @value{ORPSOC}.
1405
 
1406
 
1407
@node Software Components Applications
1408
@subsection Applications
1409
 
1410
There are some included applications, which are neither drivers or tests.
1411
 
1412
Typically these will contain a @code{README} file in their directories which contain information on the software and its use.
1413
 
1414
In general, these are to be run on hardware, and thus will need to be compiled for a specific board. Be sure to pass the @code{BOARD} environment variable when compiling to pick up the appropriate board configuration. @xref{Software For Board Ports} for an example.
1415
 
1416
@node Software Components Drivers
1417
@subsection Drivers
1418
 
1419
Each RTL component may have a driver, which will be compiled into the liborpsoc library and be made available to applications and tests that use the library.
1420
 
1421
Each driver path should contain its source and an include path for driver headers.
1422
 
1423
@node Software Components CPU Drivers
1424
@subsection CPU Drivers
1425
 
1426
An attempt has been made to make the interface to basic CPU functions as generic as possible. This can allow different CPUs to be implemented in @value{ORPSOC}.
1427
 
1428
The header file @code{cpu-utils.h} should be included to gain access to the CPU driver functions, such as timers, special purpose registers, memory access macros, etc. This header will, in turn, include the appropriate CPU driver header.
1429
 
1430
@emph{Note:} What is included in the CPU driver, and how it should be interfaced is not documented yet, but in future every effort should be made to ensure a generic interface to CPU functions is used.
1431
 
1432
At present only the OR1200 has a driver, but it is intended that alternate OpenRISC processors can be implemented into ORPSoC and a driver for it to be easily used in the library.
1433
 
1434
The environment variable @code{CPU_DRIVER} is used to specify which driver is the CPU driver to be used at liborpsoc compile time.
1435
 
1436
@node Software Components Tests
1437
@subsection Tests
1438
 
1439
Each test subdirectory contains directories for each target. Usually there's just @code{sim} and @code{board}, the difference between the two being longer run-time and use of UART for board-targeted tests.
1440
 
1441
@emph{Note:} Test directory names should not contain hyphens or underscores. Test software files should be named with the single test directory name first, followed by a single word, eg. @code{or1200-simple.c}.
1442
 
1443
Test names are referenced using this @code{module}-@code{testname} pair. The automated testing mechanism implemented by the Makefile scripts will always search the @code{sim} paths for tests, rather than the @code{board} paths.
1444
 
1445
@emph{Note:} There is no automated testing mechnism for the board-targeted software yet. It is anticipated that a testing harness for these will be developed, and we encourage users to help solve this problem.
1446
 
1447
@node Software Components Library
1448
@subsection Library
1449
 
1450
The @code{lib} path in the root software directory is where the code for the minimal C library is located, and is the location of the @code{liborpsoc} archive file after its compilation.
1451
 
1452
@node Software Components Board
1453
@subsection Board
1454
 
1455
The @code{board} path in the software directory may, in future, contain other board-specific code, but at present its @code{include} path houses just an important header, @code{board.h} used for configuring the software when compiling programs targeted at a specific board port.
1456
 
1457
This file contains mainly defines of things such as the CPU frequency and timer rate, peripheral base addresses, IRQ numbers, and other board-specific defines. Each board port should contain its own, and is one of the reasons for passing the @code{BOARD} environment variable when compiling software targeted at a specific board port - so its board-specific defines will be used instead of the reference design's.
1458
 
1459
@node Software Components Utilities
1460
@subsection Utilities
1461
 
1462
The @code{utils} path contains tools used to help manipulate binary software images for a variety of purposes. All tools are designed to be run on the host machine, and not on ORPSoC.
1463
 
1464
 
1465
@node Software For Board Ports
1466
@section Software For Board Ports
1467
 
1468
Each board port will have its own software directory, if only to keep its @code{board.h} header file, specifying system parameters specific to the board.
1469
 
1470
It may also contain drivers and tests specific to peripherals for that board.
1471
 
1472
@emph{Note:} For any tests or drivers named the same found in both a board's software path and the root software path, the @emph{board's} software will be used instead.
1473
 
1474
@emph{Note:} When compiling any software in the @emph{root} software path (such as in the applications folder) intended to run on a particular board, make use of the @code{BOARD} variable to indicat which board's configuration (@code{board.h} file, and any board-specific drivers) to use. For example:
1475
 
1476
@example
1477
@kbd{orpsoc/sw/apps/app1$ make app1.elf BOARD=xilinx/ml501}
1478
@end example
1479
 
1480
It's also advisable to do a @code{make distclean} prior to clear out any preexisting libraries that may not contain software appropriate for the targeted board port (it may have been built with the reference design's @code{board.h}, for example.)
1481
 
1482
 
1483
 
1484 397 julius
@c ****************************************************************************
1485
@c End bits
1486
@c ****************************************************************************
1487
 
1488
@node  GNU Free Documentation License
1489
@chapter GNU Free Documentation License
1490
@cindex license for @value{ORPSOC}
1491
 
1492
@include fdl-1.2.texi
1493
 
1494
@node Index
1495
 
1496
@unnumbered Index
1497
 
1498
@printindex cp
1499
 
1500
@bye
1501
 

powered by: WebSVN 2.1.0

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