OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [or1ksim/] [doc/] [or1ksim.texi] - Blame information for rev 310

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

Line No. Rev Author Line
1 19 jeremybenn
\input texinfo   @c -*- texinfo -*-
2
@setfilename or1ksim.info
3
@afourpaper
4
@include version.texi
5
@include config.texi
6
@dircategory Embedded development
7
@direntry
8
* Or1ksim: (or32-uclinux-or1ksim).      The OpenRISC 1000 Architectural
9
                                        Simulator
10
@end direntry
11
 
12
@copying
13
This file documents the OpenRISC Architectural Simulator, @value{OR1KSIM}.
14
 
15
Copyright @copyright{} 2008, 2009 Embecosm Limited.
16
 
17
@quotation
18
Permission is granted to copy, distribute and/or modify this document
19
under the terms of the GNU Free Documentation License, Version 1.2 or
20
any later version published by the Free Software Foundation; with no
21
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
22
Texts.  A copy of the license is included in the section entitled ``GNU
23
Free Documentation License''.
24
@end quotation
25
@end copying
26
 
27
@setchapternewpage on
28
@settitle @value{OR1KSIM} User Guide
29
 
30
@syncodeindex fn cp
31
@syncodeindex vr cp
32
 
33
@titlepage
34
@title @value{OR1KSIM} User Guide
35
@author Jeremy Bennett
36
@author Embecosm Limited
37
@author Issue 1 for @value{OR1KSIM} @value{VERSION}
38
 
39
@page
40
@vskip 0pt plus 1filll
41
@insertcopying
42
 
43
Published by Embecosm Limited
44
@end titlepage
45
 
46
@contents
47
 
48
@node Top
49
@c Perhaps this should be the title of the document (but only for info,
50
@c not for TeX).  Existing GNU manuals seem inconsistent on this point.
51
@top Scope of this Document
52
 
53
This document is the user guide for @value{OR1KSIM}, the OpenRISC 1000
54
Architectural Simulator.
55
 
56
@menu
57
* Installation::
58
* Usage::
59
* Configuration::
60
* Interactive Command Line::
61
* Verification API::
62
 
63
* Code Internals::
64
 
65
* GNU Free Documentation License::  The license for this documentation
66
* Index::
67
@end menu
68
 
69
@node Installation
70
@chapter Installation
71
@cindex installing @value{OR1KSIM}
72
 
73
Installation follows standard GNU protocols.
74
 
75
@menu
76
* Preparation::
77
* Configuring the Build::
78
* Build and Install::
79
* Known Issues::
80
@end menu
81
 
82
@node Preparation
83
@section Preparation
84
 
85
Unpack the software and create a @emph{separate} directory in which to
86
build it:
87
 
88
@example
89
@kbd{tar jxf or1ksim-@value{VERSION}.tar.bz2}
90
@kbd{mkdir builddir_or1ksim}
91
@kbd{cd builddir_or1ksim}
92
@end example
93
 
94
@node Configuring the Build
95
@section Configuring the Build
96
 
97
Configure the software using the @command{configure} script in the
98
main directory.
99
 
100
The most significant argument is @code{--target}, which should specify
101 82 jeremybenn
the OpenRISC 1000 32-bit architecture.  If this argument is omitted, it will
102 19 jeremybenn
default to OpenRISC 1000 32-bit with a warning
103
 
104
@example
105
@kbd{../or1ksim-@value{VERSION}/configure --target=or32-uclinux ...}
106
@end example
107
 
108
There are several other options available, many of which are standard
109 82 jeremybenn
to GNU @command{configure} scripts.  Use @kbd{configure --help} to see
110
all the options.  The most useful is @code{--prefix} to specify a
111 19 jeremybenn
directory for installation of the tools.
112
 
113 104 jeremybenn
For testing (using @command{make check}), the @code{--target} parameter
114
@emph{must} be specified, to allow the target tool chain to be
115
selected. If the tools have been installed using the standard OpenRISC
116
script, then this should be set to @code{or32-elf}.
117 19 jeremybenn
 
118 104 jeremybenn
A number of @value{OR1KSIM} specific features in the simulator do
119
require enabling at configuration.  These include
120
 
121 19 jeremybenn
@table @code
122
@item --enable-profiling
123
@cindex @code{--enable-profiling}
124
@itemx --disable-profiling
125
@cindex @code{--disable-profiling}
126
If enabled, @value{OR1KSIM} is compiled for profiling with
127 82 jeremybenn
@command{gprof}.  This is disabled by default.  Only really of value for
128 19 jeremybenn
developers of @value{OR1KSIM}.
129
 
130
@item --enable-execution=simple
131
@itemx --enable-execution=complex
132
@itemx --enable-execution=dynamic
133
@cindex @code{--enable-execution}
134
@cindex simple model
135
@cindex complex model
136
@cindex dynamic model
137
@value{OR1KSIM} has developed to improve functionality and
138 82 jeremybenn
performance.  This feature allows three versions of @value{OR1KSIM} to be built
139 19 jeremybenn
 
140
@table @code
141
 
142
@item --enable-execution=simple
143
Build the original simple interpreting simulator
144
 
145
@item --enable-execution=complex
146 82 jeremybenn
Build a more complex interpreting simulator.  Experiments suggest this
147
is 50% faster than the simple simulator.  This is the default.
148 19 jeremybenn
 
149
@item --enable-execution=dynamic
150 82 jeremybenn
Build a dynamically compiling simulator.  This is the way many modern ISS are
151
built.  This represents a work in progress.  Currently @value{OR1KSIM} will
152 19 jeremybenn
compile, but segfaults if configured with this option.
153
 
154
@end table
155
 
156
The default is @code{--enable-execution=complex}.
157
 
158
@item --enable-ethphy
159
@cindex @code{--enable-ethphy}
160
@itemx --disable-ethphy
161
@cindex @code{--disable-ethphy}
162
@cindex Ethernet via socket, enabling
163
@cindex enabling Ethernet via socket
164
If enabled, this option allows the Ethernet to be simulated by connecting via a
165 82 jeremybenn
socket (the alternative reads and writes, from and to files).  This
166 19 jeremybenn
must then be configured using the relevant fields in the
167 82 jeremybenn
@code{ethernet} section of the configuration file.  @xref{Ethernet
168 19 jeremybenn
Configuration, , Ethernet Configuration}.
169
 
170
The default is for this to be disabled.
171
 
172 127 jeremybenn
@item --enable-unsigned-xori
173
@cindex @code{--enable-unsigned-xori}
174
@itemx --disable-unsigned-xori
175
@cindex @code{--disable-unsigned-xori}
176
@cindex exclusive-OR immediate operand
177
Historically, @code{l.xori}, has sign extended its operand. This is
178
inconsistent with the other logical opcodes (@code{l.andi},
179
@code{l.ori}), but in the absence of @code{l.not}, it allows a register
180
to be inverted in a single instruction using:
181
 
182
@example
183
@code{l.xori  rD,rA,-1}
184
@end example
185
 
186
This flag causes Or1ksim to treat the immediate operand as unsigned (i.e
187
to zero-extend rather than sign-extend).
188
 
189
The default is to sign-extend, so that existing code will continue to
190
work.
191
 
192
@quotation Caution
193
The GNU compiler tool chain makes heavy use of this instruction.  Using
194
unsigned behavior will require the compiler to be modified accordingly.
195
 
196
This option is provided for experimentation.  A future version of
197
OpenRISC may adopt this more consistent behavior and also provide a
198
@code{l.not} opcode.
199
@end quotation
200
 
201 19 jeremybenn
@item --enable-range-stats
202
@cindex @code{--enable-range-stats}
203
@itemx --disable-range-stats
204
@cindex @code{--disable-range-stats}
205
@cindex statistics, register over time
206
@cindex register over time statistics
207
If enabled, this option allows statistics to be collected to analyse
208 82 jeremybenn
register access over time.  The default is for this to be disabled.
209 19 jeremybenn
 
210
@item --enable-debug
211
@cindex @code{--enable-debug}
212
@itemx --disable-debug
213
@cindex @code{--disable-debug}
214
@cindex debugging enabled (Argtable2)
215
@cindex Argtable2 debugging
216 82 jeremybenn
This is a feature of the Argtable2 package used to process arguments.  If
217
enabled, some debugging features are turned on in Argtable2.  It is provided for
218 19 jeremybenn
completeness, but there is no reason why this feature should ever be needed by
219
any @value{OR1KSIM} user.
220
 
221 82 jeremybenn
@item --enable-all-tests
222
@cindex @code{--enable-all-tests}
223
@itemx --disable-all-tests
224
@cindex @code{--disable-all-tests}
225
@cindex all tests enabled
226
@cindex tests, all enabled.
227
Some of the tests (at the time of writing just one) will not compile
228
without error.  If enabled with this flag, all test programs will be
229
compiled with @command{make check}.
230
 
231
This flag is intended for those working on the test package, who wish to
232
get the missing test(s) working.
233
 
234 19 jeremybenn
@end table
235
 
236 112 jeremybenn
A number of configuration flags have been removed since version 0.3.0,
237 124 jeremybenn
because they led to invalid behavior of Or1ksim. Those removed are:
238 112 jeremybenn
 
239
@table @code
240
 
241 124 jeremybenn
@item --enable-arith-flag
242
@cindex @code{--enable-arith-flag}
243
@itemx --disable-arith-flag
244
@cindex @code{--disable-arith-flag}
245
@cindex flag setting by instructions
246
If enabled, this option caused certain instructions to set the flag
247
(@code{F} bit) in the supervision register if the result were zero.
248
The instructions affected by this were @code{l.add}, @code{l.addc},
249
@code{l.addi}, @code{l.and} and @code{l.andi}.
250
 
251
If set, this caused incorrect behavior. Whether or not flags are set is part
252
of the OpenRISC 1000 architectural specification.  The only flags which
253
should set this are the ``set flag'' instructions: @code{l.sfeq},
254
@code{l.sfeqi}, @code{l.sfges}, @code{l.sfgesi}, @code{l.sfgeu},
255
@code{l.sfgeui}, @code{l.sfgts}, @code{l.sfgtsi}, @code{l.sfgtu},
256
@code{l.sfgtui}, @code{l.sfles}, @code{l.sflesi}, @code{l.sfleu},
257
@code{l.sfleui}, @code{l.sflts}, @code{l.sfltsi}, @code{l.sfltu},
258
@code{l.sfltui}, @code{l.sfne} and @code{l.sfnei}.
259
 
260 112 jeremybenn
@item --enable-ov-flag
261
@cindex @code{--enable-ov-flag}
262
@itemx --disable-ov-flag
263
@cindex @code{--disable-ov-flag}
264
@cindex overflow flag setting by instructions
265 124 jeremybenn
This flag caused certain instructions to set the overflow flag.  If not,
266
those instructions would not set the overflow flat.  The instructions
267
affected by this were @code{l.add}, @code{l.addc}, @code{l.addi},
268
@code{l.and}, @code{l.andi}, @code{l.div}, @code{l.divu}, @code{l.mul},
269
@code{l.muli}, @code{l.or}, @code{l.ori}, @code{l.sll}, @code{l.slli},
270
@code{l.srl}, @code{l.srli}, @code{l.sra}, @code{l.srai}, @code{l.sub},
271
@code{l.xor} and @code{l.xori}.
272 112 jeremybenn
 
273
This guaranteed incorrect behavior.  The OpenRISC 1000 architecture
274
specification defines which flags are set by which instructions.
275
 
276
Within the above list, the arithmetic instructions (@code{l.add},
277
@code{l.addc}, @code{l.addi}, @code{l.div}, @code{l.divu}, @code{l.mul},
278
@code{l.muli} and @code{l.sub}), together with @code{l.addic} which is
279
missed out, set the overflow flag.  All the others (@code{l.and},
280
@code{l.andi}, @code{l.or}, @code{l.ori}, @code{l.sll}, @code{l.slli},
281
@code{l.srl}, @code{l.srli}, @code{l.sra}, @code{l.srai}, @code{l.xor}
282
and @code{l.xori}) do not.
283
 
284
@end table
285
 
286 19 jeremybenn
@node Build and Install
287
@section Building and Installing
288 82 jeremybenn
Build the tool with:
289 19 jeremybenn
 
290
@example
291
@kbd{make all}
292 82 jeremybenn
@end example
293
 
294
If you have the OpenRISC tool chain and DejaGNU installed, you can
295
verify the tool as follows (otherwise omit this step):
296
 
297
@example
298
@kbd{make check}
299
@end example
300
 
301
Install the tool with:
302
 
303
@example
304 19 jeremybenn
@kbd{make install}
305
@end example
306
 
307
This will install the three variations of the @value{OR1KSIM} tool,
308
@command{or32-uclinux-sim}, @command{or32-uclinux-psim} and
309
@command{or32-uclinux-mpsim}, the @value{OR1KSIM} library, @file{libsim}, the
310
header file, @file{or1ksim.h} and this documentation in @command{info} format.
311
 
312
@quotation Note
313
Testing @value{OR1KSIM} with @kbd{make check} is not yet supported.
314
@end quotation
315
 
316
The documentation may be created and installed in alternative formats (PDF,
317
Postscript, DVI, HTML) with for example:
318
 
319
@example
320
@kbd{make pdf}
321
@kbd{make install-pdf}
322
@end example
323
 
324
@node Known Issues
325
@section Known Problems and Issues
326
 
327
The following problems and issues are known about with @value{OR1KSIM}
328 82 jeremybenn
@value{VERSION}.  The OpenRISC tracker may be used to see the current
329
state of these issues and to raise new problems and feature requests.  It
330 19 jeremybenn
may be found at @url{http://www.opencores.org/ptracker.cgi/view/or1k/398}.
331
 
332
@itemize @bullet
333
@item
334
The Supervision Register Little Endian Enable (LEE) bit is
335 82 jeremybenn
ignored.  @value{OR1KSIM} can be built for either little endian or big endian
336 19 jeremybenn
use, but that behavior cannot be changed dynamically.
337
 
338
@item
339
The NPC is a read/write register, but after being written it clears the
340 82 jeremybenn
pipeline.  This means that if the processor is stalled, the value should
341 19 jeremybenn
subsequently read back as 0, until the processor is unstalled and able
342 82 jeremybenn
to refill its pipeline.  By default @value{OR1KSIM} always reports back the value
343 19 jeremybenn
of NPC, even when it has been written while stalled.
344
 
345
There is now an option, @code{--strict-npc}, which will enforce this
346 82 jeremybenn
behavior.  At some stage in the future it will become the default
347 19 jeremybenn
behavior, but for now it is an option, since its use will break GDB.
348
 
349
@item
350 82 jeremybenn
The memory components are given names in the configuration file.  However
351 19 jeremybenn
there is currently no way for @value{OR1KSIM} to report that name back to the
352
user (for example to identify which memory block corresponds to a
353
particular access).
354
 
355
@item
356
@value{OR1KSIM} allows the processor to be stalled (from the command
357 82 jeremybenn
line), even if there is no debugger present.  This seems to be a
358 19 jeremybenn
meaningless operation.
359
 
360
@item
361
@value{OR1KSIM} is not reentrant, so a program cannot instantiate
362 82 jeremybenn
multiple instances using the library.  This is clearly a problem when
363
considering multi-core applications.  However it stems from the original
364
design, and can only be fixed by a complete rewrite.  The entire source
365 19 jeremybenn
code uses static global constants liberally!
366
 
367
@item
368 104 jeremybenn
@cindex floating point support
369
There is no support for single precision floating point instructions in
370
@value{OR1KSIM} if configured in the CPU (@pxref{CPU Configuration, ,
371
CPU Configuration}).  These are implemented using the floating point
372
support in the host C library, which will usually be IEEE 745 compliant.
373
There is at present no support for double precision floating point
374
instructions, since these are meaningless with 32-bit registers.
375 19 jeremybenn
 
376 104 jeremybenn
Floating point support within OpenRISC is intended to follow IEEE 745,
377
which offers a degree of configurability. However at present the FPSCR
378
register is not supported, so there is no mechanism for configuring
379
floating point behavior. Thus the default functionality of the host C
380
library will be used.
381
 
382
@item
383
@cindex floating point multiply and add
384
@cindex lf.madd.s
385
The single precision floating point multiply and add instruction,
386
@code{lf.madd.s}, is not clearly specified in the original architectural
387
manual. User should consult the @cite{OpenRISC 1200 version 2
388
Supplementary Programmer's Reference Manual} for a specification of the
389
functionality implemented.
390
 
391 19 jeremybenn
@end itemize
392
 
393
@node Usage
394
@chapter Usage
395
@cindex running @value{OR1KSIM}
396
 
397
@menu
398
* Standalone Simulator::
399
* Profiling Utility::
400
* Memory Profiling Utility::
401
* Simulator Library::
402
@end menu
403
 
404
@node Standalone Simulator
405
@section Standalone Simulator
406
@cindex command line for @value{OR1KSIM} standalone use
407
 
408
The general form the standalone command is:
409
 
410
@example
411
or32-uclinux-sim [-vhi] [-f @var{file}] [--nosrv] [--srv=[@var{n}]] [-d @var{str}]
412
                 [--enable-profile] [--enable-mprofile] [@var{file}]
413
@end example
414
 
415 82 jeremybenn
Many of the options have both a short and a long form.  For example
416 19 jeremybenn
@code{-h} or @code{--help}.
417
 
418
@table @code
419
 
420
@item -v
421
@itemx --version
422
@cindex @code{-v}
423
@cindex @code{--version}
424
Print out the version and copyright notice for @value{OR1KSIM} and
425
exit.
426
 
427
@item -h
428
@itemx --help
429
@cindex @code{-h}
430
@cindex @code{--help}
431
Print out help about the command line options and what they mean.
432
 
433
@item -f @var{file}
434
@itemx --file @var{file}
435
@cindex @code{-f}
436
@cindex @code{--file}
437
Read configuration commands from the specified file, looking first in
438
the current directory, and otherwise in the @file{$HOME/.or1k}
439 82 jeremybenn
directory.  If this argument is not specified, the file @file{sim.cfg}
440
in those two locations is used.  Failure to find the file is a fatal
441
error.  @xref{Configuration, , Configuration}, for detailed information
442 19 jeremybenn
on configuring @value{OR1KSIM}.
443
 
444
@item --nosrv
445
@cindex @code{--nosrv}
446 235 jeremybenn
@cindex Remote Serial Protocol, @code{--nosrv}
447
Do not start up the @dfn{Remote Serial Protocol} debug server.  This
448
overrides any setting specified in the configuration file.  This
449
option may not be specified with @code{--srv}.  If it is, a rude
450
message is printed and the @code{--nosrv} option is ignored.
451 19 jeremybenn
 
452
@item --srv
453
@item --srv=@var{n}
454
@cindex @code{--srv}
455 235 jeremybenn
@cindex Remote Serial Protocol, @code{--srv}
456
Start up the @dfn{Remote Serial Protocol} debug server.  This
457
overrides any setting specified in the configuration file.  If the
458
parameter, @var{n}, is specified, use that as the TCP/IP port for the
459
server, otherwise a random value from the private port range
460
(41920-65535) will be used.  This option may not be specified with
461
@code{--nosrv}.  If it is, a rude message is printed and the
462
@code{--nosrv} option is ignored.
463 19 jeremybenn
 
464
@item -d=@var{config_string}
465
@itemx --debug-config=@var{config_string}
466
@cindex @code{-d}
467
@cindex @code{--debug-config}
468 82 jeremybenn
Enable selected debug messages in @value{OR1KSIM}.  This parameter is
469
for use by developers only, and is not covered further here.  See the
470 19 jeremybenn
source code for more details.
471
 
472
@item -i
473
@itemx --interactive
474
@cindex @code{-i}
475
@cindex @code{--interactive}
476
After starting, drop into the @value{OR1KSIM} interactive command
477
shell.
478
 
479
@item --strict-npc
480
@cindex @code{--strict-npc}
481
In real hardware, setting the next program counter (NPC, SPR 16),
482 82 jeremybenn
flushes the processor pipeline.  The consequence of this is that until
483
the pipeline refills, reading the NPC will return zero.  This is typically
484 19 jeremybenn
the case when debugging, since the processor is stalled.
485
 
486
Historically, @value{OR1KSIM} has always returned the value of the NPC,
487 82 jeremybenn
irrespective of when it is changed.  If the @code{--strict-npc} option is
488
used, then @value{OR1KSIM} will mirror real hardware more accurately.  If the NPC
489 19 jeremybenn
is changed while the processor is stalled, subsequent reads of its value
490
will return 0 until the processor is unstalled.
491
 
492
This is not currently the default behavior, since tools such as GDB have
493 82 jeremybenn
been implemented assuming the historic @value{OR1KSIM} behavior.  However at some
494 19 jeremybenn
time in the future it will become the default.
495
 
496
@item --enable-profile
497
@cindex @code{--enable-profile}
498
Enable instruction profiling.
499
 
500
@item --enable-mprofile
501
@cindex @code{--enable-mprofile}
502
Enable memory profiling.
503
 
504
@end table
505
 
506
@node Profiling Utility
507
@section Profiling Utility
508
@cindex profiling for @value{OR1KSIM}
509
@cindex instruction profiling for @value{OR1KSIM}
510
 
511
This utility analyses instruction profile data generated by
512 82 jeremybenn
@value{OR1KSIM}.  It may be invoked as a standalone command, or from
513
the @value{OR1KSIM} CLI.  The general form the standalone command is:
514 19 jeremybenn
 
515
@example
516
or32-uclinux-profile [-vhcq] [-g=@var{file}]
517
@end example
518
 
519 82 jeremybenn
Many of the options have both a short and a long form.  For example
520 19 jeremybenn
@code{-h} or @code{--help}.
521
 
522
@table @code
523
 
524
@item -v
525
@itemx --version
526
@cindex @code{-v} (profiling utility)
527
@cindex @code{--version} (profiling utility)
528
Print out the version and copyright notice for the @value{OR1KSIM}
529
profiling utility and exit.
530
 
531
@item -h
532
@itemx --help
533
@cindex @code{-h} (profiling utility)
534
@cindex @code{--help} (profiling utility)
535
Print out help about the command line options and what they mean.
536
 
537
@item -c
538
@itemx --cumulative
539
@cindex @code{-c}
540
@cindex @code{--cumulative}
541
Show cumulative sum of cycles in functions
542
 
543
@item -q
544
@itemx --quiet
545
@cindex @code{-q}
546
@cindex @code{--quiet}
547
Suppress messages
548
 
549
@item -g=@var{file}
550
@itemx --generate=@var{file}
551
@cindex @code{-g}
552
@cindex @code{--generate}
553 82 jeremybenn
The data file to analyse.  If omitted, the default file,
554 19 jeremybenn
@file{sim.profile} is used.
555
 
556
@end table
557
 
558
@node Memory Profiling Utility
559
@section Memory Profiling Utility
560
@cindex memory profiling version of @value{OR1KSIM}
561
 
562
This utility analyses memory profile data generated by
563 82 jeremybenn
@value{OR1KSIM}.  It may be invoked as a standalone command, or from
564
the @value{OR1KSIM} CLI.  The general form the standalone command is:
565 19 jeremybenn
 
566
@example
567
or32-uclinux-mprofile  [-vh] [-m=@var{m}] [-g=@var{n}] [-f=@var{file}] @var{from} @var{to}
568
@end example
569
 
570 82 jeremybenn
Many of the options have both a short and a long form.  For example
571 19 jeremybenn
@code{-h} or @code{--help}.
572
 
573
@table @code
574
 
575
@item -v
576
@itemx --version
577
@cindex @code{-v} (memory profiling utility)
578
@cindex @code{--version} (memory profiling utility)
579
Print out the version and copyright notice for the @value{OR1KSIM}
580
memory profiling utility and exit.
581
 
582
@item -h
583
@itemx --help
584
@cindex @code{-h} (memory profiling utility)
585
@cindex @code{--help} (memory profiling utility)
586
Print out help about the command line options and what they mean.
587
 
588
@item -m=@var{m}
589
@itemx --mode=@var{m}
590
@cindex @code{-m}
591
@cindex @code{--mode}
592 82 jeremybenn
Specify the mode out output.  Permitted options are
593 19 jeremybenn
 
594
@table @code
595
 
596
@item detailed
597
@itemx d
598 82 jeremybenn
Detailed output.  This is the default if no mode is specified.
599 19 jeremybenn
 
600
@item pretty
601
@itemx p
602
Pretty printed output.
603
 
604
@item access
605
@itemx a
606
Memory accesses only.
607
 
608
@item width
609
@itemx w
610
Access width only.
611
 
612
@end table
613
 
614
@item -g=@var{n}
615
@itemx --group=@var{n}
616
@cindex @code{-g}
617
@cindex @code{--group}
618
Group @math{2^n} bits of successive addresses together.
619
 
620
@item -f=@var{file}
621
@itemx --filename=@var{file}
622
@cindex @code{-f}
623
@cindex @code{--filename}
624 82 jeremybenn
The data file to analyse.  If not specified, the default,
625 19 jeremybenn
@file{sim.profile} is used.
626
 
627
@item @var{from}
628
@itemx @var{to}
629
@cindex memory profiling start address
630
@cindex memory profiling end address
631
@var{from} and @var{to} are respectively the start and end address of
632
the region of memory to be analysed.
633
 
634
@end table
635
 
636
@node Simulator Library
637
@section Simulator Library
638
@cindex library version of @value{OR1KSIM}
639
 
640
@value{OR1KSIM} may be used as a static of dynamic library,
641 82 jeremybenn
@file{libsim.a} or @file{libsim.so}.  When compiling with the static
642 19 jeremybenn
library, the flag, @code{-lsim} should be added to the link command.
643
 
644
The header file @file{or1ksim.h} contains appropriate declarations of
645 82 jeremybenn
the functions exported by the @value{OR1KSIM} library.  These are:
646 19 jeremybenn
 
647 93 jeremybenn
@deftypefn {@file{or1ksim.h}} int or1ksim_init (const char
648
*@var{config_file}, const char *@var{image_file}, void *@var{class_ptr},
649
int (*@var{upr})(void *@var{class_ptr}, unsigned long int @var{addr},
650
unsigned char @var{mask}[], unsigned char @var{rdata}[], int
651
@var{data_len}), int (*@var{upw})(void *@var{class_ptr}, unsigned long
652
int @var{addr}, unsigned char @var{mask}[], unsigned char @var{wdata}[],
653
int @var{data_len}))
654 19 jeremybenn
 
655
The initialization function is supplied with the name of a
656
configuration file, @var{config_file}, an executable image, @var{image_file}, a pointer to the calling
657
class, @var{class_ptr} (since the library may be used from C++) and
658
two up-call functions, one for reads, @var{upr}, and one for writes,
659
@var{upw}.
660
 
661
@xref{Configuration, , Configuration}, for detailed information on
662
configuring @value{OR1KSIM} and the format of the configuration file.
663
 
664
@var{upw} is called for any write to an address external to the model
665
(determined by a @code{generic} section in the configuration
666 82 jeremybenn
file).  @var{upr} is called for any reads to an external address.  The
667 19 jeremybenn
@var{class_ptr} is passed back with these upcalls, allowing the
668
function to associate the call with the class which originally
669 93 jeremybenn
initialized the library.  Both @var{upw} and @var{upr} should return
670
zero on success and non-zero otherwise.  At the present time the meaning
671
of non-zero values is not defined but this may change in the future.
672 19 jeremybenn
 
673 93 jeremybenn
@var{mask} indicates which bytes in the data are to be written or
674 82 jeremybenn
read.  Bytes to be read/written should have 0xff set in
675 93 jeremybenn
@var{mask}.  Otherwise the byte should be zero.  The adddress,
676
@var{addr}, is the @emph{full} address, since the upcall function must
677
handle all generic devices, using the full address for decoding.
678 19 jeremybenn
 
679 93 jeremybenn
Endianness is not completely transparent, since @value{OR1KSIM} is
680
transferring byte vectors, not multi-byte values.
681 19 jeremybenn
 
682 93 jeremybenn
@quotation Caution
683
This is a change from version 0.3.0. It simplifies the interface, and
684
makes @value{OR1KSIM} more consistent with payload representation in
685
SystemC TLM 2.0.
686
@end quotation
687
 
688
@quotation Note
689
The current implementation of Or1ksim always transfers single words (4
690
bytes), using masks if smaller values are required.  In this it mimcs the
691
behavior of the WishBone bus.
692
@end quotation
693
 
694 19 jeremybenn
@end deftypefn
695
 
696
@deftypefn {@file{or1ksim.h}} int or1ksim_run (double  @var{duration})
697
 
698
Run the simulator for the simulated duration specified (in seconds).
699
 
700
@end deftypefn
701
 
702
@deftypefn {@file{or1ksim.h}} void or1ksim_reset_duration (double @var{duration})
703
 
704
Change the duration of a run specified in an earlier call to
705 82 jeremybenn
@code{or1ksim_run}.  Typically this is called from an upcall, which
706 19 jeremybenn
realizes it needs to change the duration of the run specified in the
707
call to @code{or1ksim_run} that has been interrupted by the upcall.
708
 
709
The time specified is the amount of time that the run must continue
710
for (i.e the duration from @emph{now}, not the duration from the original
711
call to @code{or1ksim_run}).
712
 
713
@end deftypefn
714
 
715
@deftypefn {@file{or1ksim.h}} void  or1ksim_set_time_point ()
716
 
717 82 jeremybenn
Set a timing point.  For use with @code{or1ksim_get_time_period}.
718 19 jeremybenn
 
719
@end deftypefn
720
 
721
@deftypefn {@file{or1ksim.h}} double  or1ksim_get_time_period ()
722
 
723
Return the simulated time (in seconds) that has elapsed since the last
724
call to @code{or1ksim_set_time_point}.
725
 
726
@end deftypefn
727
 
728
@deftypefn {@file{or1ksim.h}} int  or1ksim_is_le ()
729
 
730
Return 1 (logical true) if the @value{OR1KSIM} simulation is
731
little-endian, 0 otherwise.
732
 
733
@end deftypefn
734
 
735
@deftypefn {@file{or1ksim.h}} unsigned long int  or1ksim_clock_rate ()
736
 
737 82 jeremybenn
Return the @value{OR1KSIM} clock rate (in Hz).  This is the value
738 19 jeremybenn
specified in the configuration file.
739
 
740
@end deftypefn
741
 
742
@deftypefn {@file{or1ksim.h}} void or1ksim_interrupt (int  @var{i})
743
 
744 82 jeremybenn
Generate an edge-triggered interrupt on interrupt line @var{i}.  The interrupt
745
is then immediately cleared automatically.  A warning will be generated and the
746 19 jeremybenn
interrupt request ignored if level sensitive interrupts have been configured
747
with the programmable interrupt controller (@pxref{Interrupt Configuration, ,
748
Interrupt Configuration}).
749
 
750
@end deftypefn
751
 
752
@deftypefn {@file{or1ksim.h}} void or1ksim_interrupt_set (int  @var{i})
753
 
754 82 jeremybenn
Assert a level-triggered interrupt on interrupt line @var{i}.  The interrupt
755 19 jeremybenn
must be cleared separately by an explicit call to
756 82 jeremybenn
@code{or1ksim_interrupt_clear}.  A warning will be generated, and the interrupt
757 19 jeremybenn
request ignored if edge sensitive interrupts have been configured with the
758
programmable interrupt controller (@pxref{Interrupt Configuration, , Interrupt
759
Configuration}).
760
 
761
@end deftypefn
762
 
763
@deftypefn {@file{or1ksim.h}} void or1ksim_interrupt_clear (int  @var{i})
764
 
765
Clear a level-triggered interrupt on interrupt line @var{i}, which was
766 82 jeremybenn
previously asserted by a call to @code{or1ksim_interrupt_set}.  A warning will
767 19 jeremybenn
be generated, and the interrupt request ignored if edge sensitive interrupts
768
have been configured with the programmable interrupt controller
769
(@pxref{Interrupt Configuration, , Interrupt Configuration}).
770
 
771
@end deftypefn
772
 
773 104 jeremybenn
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_reset ()
774
 
775
Drive a reset sequence through the JTAG interface. Return the (model)
776
time taken for this action.  Remember that the JTAG has its own clock,
777
which can be an order of magnitude slower than the main clock, so even a
778
reset (5 JTAG cycles) could take 50 processor clock cycles to complete.
779
 
780
@end deftypefn
781
 
782
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_shift_ir (unsigned
783
char *@var{jreg}, int @var{num_bits})
784
 
785
Shift the supplied register through the JTAG instruction
786
register.  Return the (model) time taken for this action. The register is
787
supplied as a byte vector, with the least significant bits in the least
788
significant byte.  If the total number of bits is not an exact number of
789
bytes, then the odd bits are found in the least significant end of the
790
highest numbered byte.
791
 
792
For example a 12-bit register would have bits 0-7 in byte 0 and bits
793
11-8 in the least significant 4 bits of byte 1.
794
 
795
@end deftypefn
796
 
797
@deftypefn {@file{or1ksim.h}} double or1ksim_jtag_shift_dr (unsigned
798
char *@var{jreg}, int @var{num_bits})
799
 
800
Shift the supplied register through the JTAG data register.  Return the
801
(model) time taken for this action. The register is supplied as a byte
802
vector, with the least significant bits in the least significant byte.
803
If the total number of bits is not an exact number of bytes, then the
804
odd bits are found in the least significant end of the highest numbered
805
byte.
806
 
807
For example a 12-bit register would have bits 0-7 in byte 0 and bits
808
11-8 in the least significant 4 bits of byte 1.
809
 
810
@end deftypefn
811
 
812 19 jeremybenn
The libraries will be installed in the @file{lib} sub-directory of the
813
main installation directory (as specified with the @option{--prefix}
814
option to the @command{configure} script).
815
 
816
For example if the main installation directory is @file{/opt/or1ksim},
817 82 jeremybenn
the library will be found in the @file{/opt/or1ksim/lib} directory.  It
818 19 jeremybenn
is available as both a static library (@file{libsim.a}) and a shared
819
object (@file{libsim.so}).
820
 
821
To link against the library add the @option{-lsim} flag when linking
822
and do one of the following:
823
 
824
@itemize @bullet
825
 
826
@item
827
Add the library directory to the @code{LD_LIBRARY_PATH} environment
828 82 jeremybenn
variable during execution.  For example:
829 19 jeremybenn
 
830
@example
831
export LD_LIBRARY_PATH=/opt/or1ksim/lib:$LD_LIBRARY_PATH
832
@end example
833
 
834
@item
835
Add the library directory to the @code{LD_RUN_PATH} environment
836 82 jeremybenn
variable during linking.  For example:
837 19 jeremybenn
 
838
@example
839
export LD_RUN_PATH=/opt/or1ksim/lib:$LD_RUN_PATH
840
@end example
841
 
842
@item
843
Use the linker @option{--rpath} option and specify the library
844 82 jeremybenn
directory when linking your program.  For example
845 19 jeremybenn
 
846
@example
847 82 jeremybenn
gcc ...  -Wl,--rpath -Wl,/opt/or1ksim/lib ...
848 19 jeremybenn
@end example
849
 
850
@item
851
Add the library directory to @file{/etc/ld.so.conf}
852
 
853
@end itemize
854
 
855
@node Configuration
856
@chapter Configuration
857
@cindex configuring @value{OR1KSIM}
858
 
859 82 jeremybenn
@value{OR1KSIM} is configured through a configuration file.  This is specified
860 19 jeremybenn
through the @code{-f} parameter to the @value{OR1KSIM} command, or passed as a
861 82 jeremybenn
string when initializing the @value{OR1KSIM} library.  If no file is specified,
862
the default @file{sim.cfg} is used.  The file is looked for first in the
863 224 jeremybenn
current directory, then in the @file{$HOME/.or1ksim} directory of the user.
864 19 jeremybenn
 
865
@menu
866
* Configuration File Format::
867
* Simulator Configuration::
868
* Core OpenRISC Configuration::
869
* Peripheral Configuration::
870
@end menu
871
 
872
@node Configuration File Format
873
@section Configuration File Format
874
@cindex configuration file structure
875
 
876
The configuration file is a plain text file.
877
 
878
@menu
879
* Configuration File Preprocessing::
880
* Configuration File Syntax::
881
@end menu
882
 
883
@node Configuration File Preprocessing
884
@subsection Configuration File Preprocessing
885
 
886 82 jeremybenn
The configuration file may include C style comments (i.e.  delimited by
887 19 jeremybenn
@code{/*} and @code{*/}).
888
 
889
@node Configuration File Syntax
890
@subsection Configuration File Syntax
891
 
892
The configuration file is divided into a series of sections, with the general
893
form:
894
 
895
@example
896
section @var{section_name}
897
 
898
  <contents>...
899
 
900
end
901
@end example
902
 
903
Sections may also have sub-sections within them (currently only the
904
ATA/ATAPI disc interface uses this).
905
 
906
Within a section, or sub-section are a series of parameter assignments, one
907
per line, withe the general form
908
 
909
@example
910
  @var{parameter} = @var{value}
911
@end example
912
 
913
Depending on the parameter, the value may be a named value (an enumeration),
914
an integer (specified in any format acceptable in C) or a string in doubple
915 82 jeremybenn
quotes.  For flag parameters, the value 1 is used to mean ``true'' or ``on''
916
and the value ``0'' to mean ``false'' or ``off''.  An example from a memory
917 19 jeremybenn
section shows each of these
918
 
919
@example
920
section memory
921
  type    = random
922
  pattern = 0x00
923
  name    = "FLASH"
924
  ...
925
end
926
@end example
927
 
928
Many parameters are optional and take reasonable default values if not
929 82 jeremybenn
specified.  However there are some parameters (for example the
930 19 jeremybenn
@code{ce} parameter in @code{@w{section memory}}) @emph{must} be
931
specified.
932
 
933
Subsections are introduced by a keyword, with a parameter value (no
934
@code{=} sign), and end with the same keyword prefixed by
935 82 jeremybenn
@code{end}.  Thus the ATA/ATAPI inteface (@code{@w{section ata}}) has a
936 19 jeremybenn
@code{device} subsection, thus:
937
 
938
@example
939
section ata
940
  ...
941
  device 0
942
    type    = 1
943
    file = "@var{filename}"
944
    ...
945
  enddevice
946
  ...
947
end
948
@end example
949
 
950
Some sections (for example @code{@w{section sim}}) should appear only
951 82 jeremybenn
once.  Others (for example @code{@w{section memory}} may appear
952 19 jeremybenn
multiple times.
953
 
954
Sections may be omitted, @emph{unless they contain parameters which
955 82 jeremybenn
are non-optional}.  If the section describes a part of the simulator
956 19 jeremybenn
which is optional (for example whether it has a UART), then that
957 82 jeremybenn
functionality will not be provided.  If the section describes a part of
958 19 jeremybenn
the simulator which is not optional (for example the CPU), then all the
959
parameters of that section will take their default values.
960
 
961
All optional parts of the functionality are always described by
962
sections including a @code{enabled} parameter, which can be set to 0
963
to ensure that functionality is explicitly omitted.
964
 
965
Even if a section is disabled, all its parameters will be read and
966 82 jeremybenn
stored.  This is helpful if the section is subsequently enabled from
967 19 jeremybenn
the @value{OR1KSIM} command line (@pxref{Interactive Command Line, ,
968
Interactive Command Line}).
969
 
970
@quotation Tip
971
It generally clearer to have sections describing @emph{all}
972
components, with omitted functionality explicitly indicated by setting
973
the @code{enabled} parameter to 0
974
@end quotation
975
 
976
The following sections describe the various configuration sections and the
977
parameters which may be set in each.
978
 
979
@node Simulator Configuration
980
@section Simulator Configuration
981
 
982
@menu
983
* Simulator Behavior::
984
* Verification API Configuration::
985
* CUC Configuration::
986
@end menu
987
 
988
@node Simulator Behavior
989
@subsection Simulator Behavior
990
@cindex configuring the behavior of @value{OR1KSIM}
991
@cindex simulator configuration
992
@cindex @code{section sim}
993 82 jeremybenn
Simulator behavior is described in @code{section sim}.  This section
994
should appear only once.  The following parameters may be specified.
995 19 jeremybenn
 
996
@table @code
997
 
998
@item verbose = 0|1
999
@cindex @code{verbose} (simulator configuration)
1000 82 jeremybenn
If 1 (true), print extra messages.  Default 0.
1001 19 jeremybenn
 
1002
@item debug = 0-9
1003
@cindex @code{debug} (simulator configuration)
1004 82 jeremybenn
 
1005
value the greater the number of messages.  Default 0.  Negative values
1006
will be treated as 0 (with a warning).  Values that are too large will
1007 19 jeremybenn
be treated as 9 (with a warning).
1008
 
1009
@item profile = 0|1
1010
@cindex @code{profile} (simulator configuration)
1011
If 1 (true) generate a profiling file using the file specified in the
1012 82 jeremybenn
@code{prof_file} parameter or otherwise @file{sim.profile}.  Default 0.
1013 19 jeremybenn
 
1014
@item prof_file = ``@var{filename}''
1015
@cindex @code{prof_file} (simulator configuration)
1016
@cindex @code{prof_fn} (simulator configuration - deprecated)
1017 82 jeremybenn
Specifies the file to be used with the @code{profile} parameter.  Default
1018
@file{sim.profile}.  For backwards compatibility, the alternative name
1019 19 jeremybenn
@code{prof_fn} is supported for this parameter, but deprecated.
1020
 
1021
@item mprofile = 0|1
1022
@cindex @code{mprofile} (simulator configuration)
1023
If 1 (true) generate a memory profiling file using the file specified in the
1024 82 jeremybenn
@code{mprof_file} parameter or otherwise @file{sim.mprofile}.  Default 0.
1025 19 jeremybenn
 
1026
@item mprof_fn = ``@var{filename}''
1027
@cindex @code{mprof_file} (simulator configuration)
1028
@cindex @code{mprof_fn} (simulator configuration - deprecated)
1029 82 jeremybenn
Specifies the file to be used with the @code{mprofile} parameter.  Default
1030
@file{sim.mprofile}.  For backwards compatibility, the alternative name
1031 19 jeremybenn
@code{mprof_fn} is supported for this parameter, but deprecated.
1032
 
1033
@item history = 0|1
1034
@cindex @code{history} (simulator configuration)
1035 82 jeremybenn
If 1 (true) track execution flow.  Default 0.
1036 19 jeremybenn
 
1037
@quotation Note
1038
Setting this parameter seriously degrades performance.
1039
@end quotation
1040
 
1041
@quotation Note
1042
If this execution flow tracking is enabled, then @code{dependstats}
1043
must be enabled in the CPU configuration section (@pxref{CPU
1044
Configuration, , CPU Configuration}).
1045
@end quotation
1046
 
1047
@item exe_log = 0|1
1048
@cindex @code{exe_log} (simulator configuration)
1049 82 jeremybenn
If 1 (true), generate an execution log.  Log is written to the file specified
1050
in parameter @code{exe_log_file}.  Default 0.
1051 19 jeremybenn
 
1052
@quotation Note
1053
Setting this parameter seriously degrades performance.
1054
@end quotation
1055
 
1056
@item exe_log_type = default|hardware|simple|software
1057
@cindex @code{exe_log_type} (simulator configuration)
1058
Type of execution log to produce.
1059
 
1060
@table @code
1061
 
1062
@item default
1063
@cindex @code{exe_log_type=default} (simulator configuration)
1064 82 jeremybenn
Produce default output for the execution log.  In the current implementation
1065 19 jeremybenn
this is the equivalent of @code{hardware}.
1066
 
1067
@item hardware
1068
@cindex @code{exe_log_type=hardware} (simulator configuration)
1069
After each instruction execution, log the number of instructions executed so
1070
far, the next instruction to execute (in hex), the general purpose registers
1071
(GPRs), status register, exception program counter, exception, effective
1072
address register and exception status register.
1073
 
1074
@item simple
1075
@cindex @code{exe_log_type=simple} (simulator configuration)
1076
After each instruction execution, log the number of instructions executed so
1077
far and the next instruction to execute, symbolically disassembled.
1078
 
1079
@item software
1080
@cindex @code{exe_log_type=software} (simulator configuration)
1081
After each instruction execution, log the number of instructions executed so
1082 82 jeremybenn
far and the next instruction to execute, symbolically disassembled.  Also show
1083 19 jeremybenn
the value of each operand to the instruction.
1084
 
1085
@end table
1086
 
1087 82 jeremybenn
Default value @code{hardware}.  Any unrecognized keyword (case
1088 19 jeremybenn
insensitive) will be treated as the default with a warning.
1089
 
1090
@quotation Note
1091
Execution logs can be @emph{very} big.
1092
@end quotation
1093
 
1094
@item exe_log_start = @var{value}
1095
@cindex @code{exe_log_start} (simulator configuration)
1096 82 jeremybenn
Address of the first instruction to start logging.  Default 0.
1097 19 jeremybenn
 
1098
@item exe_log_end = @var{value}
1099
@cindex @code{exe_log_end} (simulator configuration)
1100 82 jeremybenn
Address of the last instruction to log.  Default no limit (i.e once started
1101 19 jeremybenn
logging will continue until the simulator exits).
1102
 
1103
@item exe_log_marker = @var{value}
1104
@cindex @code{exe_log_marker} (simulator configuration)
1105
Specifies the number of instructions between printing horizontal
1106 82 jeremybenn
markers.  Default is to produce no markers.
1107 19 jeremybenn
 
1108
@item exe_log_file = @var{filename}
1109
@cindex @code{exe_log_file} (simulator configuration)
1110
@cindex @code{exe_log_fn} (simulator configuration - deprecated)
1111 82 jeremybenn
Filename for the execution log filename if @code{exe_log} is enabled.  Default
1112
@file{executed.log}.  For backwards compatibility, the alternative name
1113 19 jeremybenn
@code{exe_log_fn} is supported for this parameter, but deprecated.
1114
 
1115 202 julius
@item exe_bin_insn_log = 0|1
1116
@cindex @code{exe_bin_insn_log} (simulator configuration)
1117
Enable logging of executed instructions to a file in binary format. This is
1118
helpful for off-line dynamic execution analysis.
1119
 
1120
@quotation Note
1121
Execution logs can be @emph{very} big. For example, while booting the Linux
1122
kernel, version 2.6.34, a log file 1.2GB in size was generated.
1123
@end quotation
1124
 
1125
@item exe_bin_insn_log_file = @var{filename}
1126
@cindex @code{exe_bin_insn_log_file} (simulator configuration)
1127
Filename for the binary execution log filename if @code{exe_bin_insn_log} is
1128
enabled.  Default @file{exe-insn.bin}.
1129
 
1130
 
1131 19 jeremybenn
@item clkcycle = @var{value}[ps|ns|us|ms]
1132
@cindex @code{clkcycle} (simulator configuration)
1133 82 jeremybenn
Specify the time taken by one clock cycle.  If no units are specified,
1134
@code{ps} is assumed.  Default 4000ps (250MHz).
1135 19 jeremybenn
 
1136
@end table
1137
 
1138
@node Verification API Configuration
1139
@subsection Verification API (VAPI) Configuration
1140
@cindex configuring the Verification API (VAPI)
1141
@cindex Verification API configuration
1142
@cindex VAPI configuration
1143
@cindex @code{section vapi}
1144
The Verification API (VAPI) provides a TCP/IP interface to allow
1145
components of the simulation to be controlled
1146 82 jeremybenn
externally.  @xref{Verification API, , Verification API}, for more
1147 19 jeremybenn
details.
1148
 
1149
Verification API configuration is described in @code{section
1150 82 jeremybenn
vapi}.  This section may appear at most once.  The following parameters
1151 19 jeremybenn
may be specified.
1152
 
1153
@table @code
1154
 
1155
@item enabled = 0|1
1156
@cindex @code{enabled} (verification API configuration)
1157 82 jeremybenn
If 1 (true), verification API is enabled and its server started.  If 0
1158 19 jeremybenn
(the default), it is disabled.
1159
 
1160
@item server_port = @var{value}
1161
@cindex @code{server_port} (verification API configuration)
1162
When VAPI is enabled, communication will be via TCP/IP on the port
1163 82 jeremybenn
specified by @var{value}.  The value must lie in the range 1 to 65535.
1164 19 jeremybenn
The default value is 50000.
1165
 
1166
@quotation Tip
1167
@cindex TCP/IP port range
1168
@cindex port range for TCP/IP
1169
@cindex dynamic ports, use of
1170
@cindex private ports, use of
1171 82 jeremybenn
There is no registered port for @value{OR1KSIM} VAPI.  Good practice
1172 19 jeremybenn
suggests users should adopt port values in the @dfn{Dynamic} or
1173 82 jeremybenn
@dfn{Private} port range, i.e.  49152-65535.
1174 19 jeremybenn
@end quotation
1175
 
1176
@item log_enabled = 0|1
1177
@cindex @code{log_enabled} (verification API configuration)
1178 82 jeremybenn
If 1 (true), all VAPI requests and sent commands will be logged.  If 0
1179
(the default), logging is diabled.  Logs are written to the file
1180 19 jeremybenn
specified by the @code{vapi_log_file} field (see below).
1181
 
1182
@quotation Caution
1183
This can generate a substantial amount of file I/O and seriously
1184
degrade simulator performance.
1185
@end quotation
1186
 
1187
@item hide_device_id = 0|1
1188
@cindex @code{hide_device_id} (verification API configuration)
1189 82 jeremybenn
If 1 (true) don't log the device ID.  If 0 (the default), log the
1190
device ID.  This feature (when set to 1) is provided for backwards
1191 19 jeremybenn
compatibility with an old version of VAPI.
1192
 
1193
@item vapi_log_file = "@var{filename}"
1194
@cindex @code{vapi_log_file} (verification API configuration)
1195
@cindex @code{vapi_log_fn} (verification API configuration - deprecated)
1196
Use @file{filename} as the file for logged data is logging is enabled
1197 82 jeremybenn
(see @code{log_enabled} above).  The default is @code{"vapi.log"}.  For
1198 19 jeremybenn
backwards compatibility, the alternative name @code{vapi_log_fn} is
1199
supported for this parameter, but deprecated.
1200
 
1201
@end table
1202
 
1203
@node CUC Configuration
1204
@subsection Custom Unit Compiler (CUC) Configuration
1205
@cindex configuring the Custom Unit Compiler (CUC)
1206
@cindex Custom Unit Compiler Configuration
1207
@cindex CUC configuration
1208
@cindex @code{section cuc}
1209
The Custom Unit Compiler (CUC) was a project by Marko Mlinar to generate
1210 82 jeremybenn
Verilog from ANSI C functions.  The project seems to not have progressed
1211
beyond the initial prototype phase.  The configuration parameters are
1212 19 jeremybenn
described here for the record.
1213
 
1214 82 jeremybenn
CUC configuration is described in @code{@w{section cuc}}.  This section
1215
may appear at most once.  The following parameters may be specified.
1216 19 jeremybenn
 
1217
@table @code
1218
 
1219
@item memory_order = none|weak|strong|exact
1220
@cindex @code{memory_order} (CUC configuration)
1221
This parameter specifies the memory ordering required:
1222
 
1223
@table @code
1224
 
1225
@item memory_order=none
1226
@cindex @code{memory_order=none} (CUC configuration)
1227 82 jeremybenn
Different memory ordering, even if there are dependencies.  Bursts can
1228 19 jeremybenn
be made, width can change.
1229
 
1230
@cindex @code{memory_order=weak} (CUC configuration)
1231 82 jeremybenn
Different memory ordering, even if there are dependencies.  If
1232 19 jeremybenn
dependencies cannot occur, then bursts can be made, width can change.
1233
 
1234
@cindex @code{memory_order=strong} (CUC configuration)
1235 82 jeremybenn
Same memory ordering.  Bursts can be made, width can change.
1236 19 jeremybenn
 
1237
@cindex @code{memory_order=exact} (CUC configuration)
1238
Exactly the same memory ordering and widths.
1239
 
1240
@end table
1241
 
1242 82 jeremybenn
The default value is @code{memory_order=exact}.  Invalid memory
1243 19 jeremybenn
orderings are ignored with a warning.
1244
 
1245
@item calling_convention = 0|1
1246
@cindex @code{calling_convention} (CUC configuration)
1247 82 jeremybenn
If 1 (true), programs follow OpenRISC calling conventions.  If 0 (the
1248 19 jeremybenn
default), they may use other convenitions.
1249
 
1250
@item enable_bursts = 0 | 1
1251
@cindex @code{enable_bursts} (CUC configuration)
1252 82 jeremybenn
If 1 (true), bursts are detected.  If 0 (the default), bursts are not
1253 19 jeremybenn
detected.
1254
 
1255
@item no_multicycle = 0 | 1
1256
@cindex @code{no_multicycle} (CUC configuration)
1257 82 jeremybenn
If 1 (true), no multicycle logic paths will be generated.  If 0 (the
1258 19 jeremybenn
default), multicycle logic paths will be generated.
1259
 
1260
@item timings_file = "@var{filename}"
1261
@cindex @code{timings_file} (CUC configuration)
1262
@cindex @code{timings_fn} (CUC configuration - deprecated)
1263 82 jeremybenn
@var{filename} specifies a file containing timing information.  The
1264
default value is @code{"virtex.tim"}.  For backwards compatibility, the
1265 19 jeremybenn
alternative name @code{timings_fn} is supported for this parameter,
1266
but deprecated.
1267
 
1268
@end table
1269
 
1270
@node Core OpenRISC Configuration
1271
@section Configuring the OpenRISC Architectural Components
1272
 
1273
@menu
1274
* CPU Configuration::
1275
* Memory Configuration::
1276
* Memory Management Configuration::
1277
* Cache Configuration::
1278
* Interrupt Configuration::
1279
* Power Management Configuration::
1280
* Branch Prediction Configuration::
1281
* Debug Interface Configuration::
1282
@end menu
1283
 
1284
@node CPU Configuration
1285
@subsection CPU Configuration
1286
@cindex configuring the CPU
1287
@cindex configuring the processor
1288
@cindex CPU configuration
1289
@cindex processor configuration
1290
@cindex @code{section cpu}
1291 82 jeremybenn
CPU configuration is described in @code{section cpu}.  This section
1292
should appear only once.  At present @value{OR1KSIM} does not model multi-CPU
1293
systems.  The following parameters may be specified.
1294 19 jeremybenn
 
1295
@table @code
1296
 
1297
@item ver = @var{value}
1298
@item cfg = @var{value}
1299
@item rev = @var{value}
1300
@cindex @code{ver} (CPU configuration)
1301
@cindex @code{rev} (CPU configuration)
1302
The values are used to form the corresponding fields in the @code{VR}
1303 82 jeremybenn
Special Purpose Register (SPR 0).  Default values 0.  A warning is given
1304 19 jeremybenn
and the value truncated if it is too large (8 bits for @code{ver} and
1305
@code{cfg}, 6 bits for @code{rev}).
1306
 
1307
@item upr = @var{value}
1308
@cindex @code{upr} (CPU configuration)
1309
Used as the value of the Unit Present Register (UPR) Special Purpose Register
1310 82 jeremybenn
(SPR 1) to @var{value}.  Default value is 0x0000075f, i.e.
1311 19 jeremybenn
@itemize @bullet
1312
@item
1313
UPR present (0x00000001)
1314
@item
1315
Data cache present (0x00000002)
1316
@item
1317
Instruction cache present (0x00000004)
1318
@item
1319
Data MMY present (0x00000008)
1320
@item
1321
Instruction MMU present (0x00000010)
1322
@item
1323
Debug unit present (0x00000040)
1324
@item
1325
Power management unit present (0x00000100)
1326
@item
1327
Programmable interrupt controller present (0x00000200)
1328
@item
1329
Tick timer present (0x00000400)
1330
@end itemize
1331
 
1332
However, with the exection of the UPR present (0x00000001) and tick
1333
timer present, the various
1334
fields will be modified with the values specified in their corresponding
1335
configuration sections.
1336
 
1337
@item cfgr = @var{value}
1338
@cindex @code{cfgr} (CPU configuration)
1339
Sets the CPU configuration register (Special Purpose Register 2) to
1340 82 jeremybenn
@var{value}.  Default value is 0x00000020, i.e.  support for the ORBIS32
1341
instruction set.  Attempts to set any other value are accepted, but
1342 19 jeremybenn
issue a warning that there is no support for the instruction set.
1343
 
1344
@item sr = @var{value}
1345
@cindex @code{sr} (CPU configuration)
1346
Sets the supervision register Special Purpose Register (SPR 0x11) to
1347 82 jeremybenn
@var{value}.  Default value is 0x00008001, i.e.  start in supervision
1348 19 jeremybenn
mode (0x00000001) and set the ``Fixed One'' bit (0x00008000).
1349
 
1350 98 jeremybenn
@quotation Note
1351
This is particularly useful when an image is held in Flash at high
1352
memory (0xf0000000).  The EPH  bit can be set, so that interrupt
1353
vectors are basedf at 0xf0000000, rather than 0x0.
1354
@end quotation
1355
 
1356 19 jeremybenn
@item superscalar = 0|1
1357
@cindex @code{superscalar} (CPU configuration)
1358 82 jeremybenn
If 1, the processor operates in superscalar mode.  Default value is
1359 19 jeremybenn
0.
1360
 
1361
In the current simulator, the only functional effect of superscalar
1362
mode is to affect the calculation of the number of cycles taken to
1363
execute an instruction.
1364
 
1365
@quotation Caution
1366
The code for this does not appear to be complete or well tested, so
1367
users are advised not to use this option.
1368
@end quotation
1369
 
1370
@item hazards = 0|1
1371
@cindex @code{hazards} (CPU configuration)
1372 82 jeremybenn
If 1, data hazards are tracked in a superscalar CPU.  Default value is
1373 19 jeremybenn
0.
1374
 
1375
In the current simulator, the only functional effect is to cause
1376
logging of hazard waiting information if the CPU is
1377 82 jeremybenn
superscalar.  However nowhere in the simulator is this data actually
1378 19 jeremybenn
computed, so the net result is probably to have no effect.
1379
 
1380
if harzards are tracked, current hazards can be displayed using the
1381
simulator's @command{r} command.
1382
 
1383
@quotation Caution
1384
The code for this does not appear to be complete or well tested, so
1385
users are advised not to use this option.
1386
@end quotation
1387
 
1388
@item dependstats = 0|1
1389
@cindex @code{dependstats} (CPU configuration)
1390 82 jeremybenn
If 1, inter-instruction dependencies are calculated.  Default value 0.
1391 19 jeremybenn
 
1392
If these values are calculated, the depencies can be displayed using
1393
the simulator's @command{stat} command.
1394
 
1395
@quotation Note
1396
This field must be enabled, if execution execution flow tracking
1397
(field @code{history}) has been requested in the simulator
1398
configuration section (@pxref{Simulator Behavior, , Simulator
1399
Behavior}).
1400
@end quotation
1401
 
1402
@item sbuf_len = @var{value}
1403
@cindex @code{sbuf_len} (CPU configuration)
1404
The length of the store buffer is set to @var{value}, which must be no
1405 82 jeremybenn
greater than 256.  Larger values will be truncated to 256 with a
1406
warning.  Negative values will be treated as 0 with a warning.  Use 0 to
1407 19 jeremybenn
disable the store buffer.
1408
 
1409
When the store buffer is active, stores are accumulated and committed
1410
when I/O is idle.
1411
 
1412 100 julius
@item hardfloat = 0|1
1413
@cindex @code{hardfloat} (CPU configuration)
1414
If 1, hardfloat instructions are enabled. Default value 0.
1415 101 jeremybenn
 
1416 19 jeremybenn
@end table
1417
 
1418
@node Memory Configuration
1419
@subsection Memory Configuration
1420
@cindex configuring memory
1421
@cindex memory configuration
1422
@cindex @code{section memory}
1423 82 jeremybenn
Memory configuration is described in @code{section memory}.  This
1424 19 jeremybenn
section may appear multiple times, specifying multiple blocks of
1425 98 jeremybenn
memory.
1426 19 jeremybenn
 
1427 98 jeremybenn
@quotation Caution
1428
The user may choose whether or not to enable a memory controller. If a
1429
memory controller is enabled, then the standard OpenRISC C libraries
1430
will initialize it to expect 64MB memory blocks, and any memory
1431
declarations @emph{must} reflect this.  The section describing memory
1432
controller configuration describes the steps necessary for using
1433
smaller or larger memory sections (@pxref{Memory Controller
1434
Configuration, , Memory Controller Configuration}).
1435
 
1436
If a memory controller is @emph{not} enabled, then the standard C
1437
library code will generate memory access errors.  The solution is to
1438
declare an additional writable memory block, mimicing the memory
1439
controller's register bank as follows.
1440
 
1441
@example
1442
section memory
1443
  pattern = 0x00
1444
  type = unknown
1445
  name = "MC shadow"
1446
  baseaddr = 0x93000000
1447
  size     = 0x00000080
1448
  delayr = 2
1449
  delayw = 4
1450
end
1451
@end example
1452
 
1453
@end quotation
1454
 
1455
 
1456
The following parameters may be specified.
1457
 
1458 19 jeremybenn
@table @code
1459
 
1460
@item type=random|pattern|unknown|zero
1461
@cindex @code{type} (memory configuration)
1462 82 jeremybenn
Specifies the values to which memory should be initialized.  The
1463 19 jeremybenn
default value is @code{unknown}.
1464
 
1465
@table @code
1466
 
1467
@item random
1468
@cindex @code{type=random} (memory configuration)
1469 82 jeremybenn
Set the memory values to be a random value.  A seed for the random
1470 19 jeremybenn
generator may be set using the @code{random_seed} field in this
1471
section (see below), thus ensuring the same ``random'' values are used
1472
each time.
1473
 
1474
@item pattern
1475
@cindex @code{type=pattern} (memory configuration)
1476
Set the memory values to be a pattern value, which is set using the
1477
@code{pattern} field in this section (see below).
1478
 
1479
@item unknown
1480
@cindex @code{type=unknown} (memory configuration)
1481 82 jeremybenn
The memory values are not initialized (i.e.  left ``unknown'').  This
1482 19 jeremybenn
option will yield faster initialization of the simulator.
1483
 
1484
@item zero
1485
@cindex @code{type=zero} (memory configuration)
1486 82 jeremybenn
Set the memory values to be 0.  This is the equivalent of
1487 19 jeremybenn
@code{type=pattern} and a @code{pattern} value of 0, and implemented
1488
as such.
1489
 
1490
@quotation Note
1491
As a consequence, if the @code{pattern} field is @emph{subsequently}
1492
specified in this section, the value in that field will be used
1493
instead of zero to initialize the memory.
1494
@end quotation
1495
 
1496
@end table
1497
 
1498
@item random_seed = @var{value}
1499
@cindex @code{random_seed} (memory configuration)
1500 82 jeremybenn
Set the seed for the random number generator to @var{value}.  This only
1501 19 jeremybenn
has any effect for memory type @code{random}.
1502
 
1503
The default value is -1,
1504
which means the seed will be set from a call to the @code{time}
1505
function, thus ensuring different random values are used on each
1506 82 jeremybenn
run.  The simulator prints out the seed used in this case, allowing
1507 19 jeremybenn
repeat runs to regenerate the same random values used in any
1508
particular run.
1509
 
1510
@item pattern = @var{value}
1511
@cindex @code{pattern} (memory configuration)
1512
Set the pattern to be used when initializing memory to
1513 82 jeremybenn
@var{value}.  The default value is 0.  This only has any effect for
1514
memory type @code{pattern}.  The least significant 8 bits of this value
1515
is used to initialize each byte.  More than 8 bits can be specified,
1516 19 jeremybenn
but will ignored with a warning.
1517
 
1518
@quotation Tip
1519
The default value, is equivalent to setting the memory @code{type} to
1520 82 jeremybenn
be @code{zero}.  If that is what is intended, then using
1521 19 jeremybenn
@code{type=zero} explicitly is better than using @code{type=pattern}
1522
and not specifying a value for @code{pattern}.
1523
@end quotation
1524
 
1525
@item baseaddr = @var{value}
1526
@cindex @code{baseaddr} (memory configuration)
1527 82 jeremybenn
Set the base address of the memory to @var{value}.  It should be
1528 19 jeremybenn
aligned to a multiple of the memory size rounded up to the nearest
1529 82 jeremybenn
@math{2^n}.  The default value is 0.
1530 19 jeremybenn
 
1531
@item size = @var{value}
1532
@cindex @code{size} (memory configuration)
1533 82 jeremybenn
Set the size of the memory block to be @var{value} bytes.  This should be a
1534
multiple of 4 (i.e.  word aligned).  The default value is 1024.
1535 19 jeremybenn
 
1536
@quotation Note
1537
When allocating memory, the simulator will allocate the nearest
1538
@math{2^n} bytes greater than or equal to @var{value}, and will not
1539
notice memory misses in any part of the memory between @var{value} and
1540
the amount allocated.
1541
 
1542
As a consequence users are strongly recommended to specify memory
1543 82 jeremybenn
sizes that are an exact power of 2.  If some other amount of memory is
1544 19 jeremybenn
required, it should be specified as separate, contiguous blocks, each
1545
of which is a power of 2 in size.
1546
@end quotation
1547
 
1548
@item name = "@var{text}"
1549
@cindex @code{name} (memory configuration)
1550 82 jeremybenn
Name the block.  Typically these describe the type of memory being
1551
modeled (thus @code{"SRAM"} or @code{"Flash"}.  The default is
1552 19 jeremybenn
@code{@w{"anonymous memory block"}}.
1553
 
1554
@quotation Note
1555
It is not clear that this information is currently ever used in normal
1556 82 jeremybenn
operation of the simulator.  Even the @command{info} command of the simulator
1557 19 jeremybenn
ignores it.
1558
@end quotation
1559
 
1560
@item ce = @var{value}
1561
@cindex @code{ce} (memory configuration)
1562 82 jeremybenn
Set the chip enable index of the memory instance.  Each memory instance
1563 19 jeremybenn
should have a unique chip enable index, which should be greater
1564 82 jeremybenn
than or equal to zero.  This is used by the memory controller when
1565 19 jeremybenn
identifying different memory instances.
1566
 
1567 98 jeremybenn
There is no requirement to set  @code{ce} if a memory controller is
1568
not enabled. The default value is -1 (invalid).
1569 19 jeremybenn
 
1570
@item mc = @var{value}
1571
@cindex @code{mc} (memory configuration)
1572 82 jeremybenn
Specifies the memory controller this memory is connected to.  It should
1573 19 jeremybenn
correspond to the @code{index} field specified in a @code{@w{section
1574
mc}} for a memory controller (@pxref{Memory Controller Configuration,
1575
, Memory Controller Configuration}).
1576
 
1577 98 jeremybenn
There is no requirement to set  @code{mc} if a memory controller is
1578
not enabled. Default value is 0, which is also the default value of a memory
1579 82 jeremybenn
controller @code{index} field.  This is suitable therefore for designs
1580 19 jeremybenn
with just one memory controller.
1581
 
1582
@item delayr = @var{value}
1583
@cindex @code{delayr} (memory configuration)
1584 82 jeremybenn
The number of cycles required for a read access.  Set to -1 if the
1585
memory does not support reading.  Default value 1.  The simulator will
1586 19 jeremybenn
add this number of cycles to the total instruction cycle count when
1587
reading from main memory.
1588
 
1589
@item delayw = @var{value}
1590
@cindex @code{delayw} (memory configuration)
1591 82 jeremybenn
The number of cycles required for a write access.  Set to -1 if the
1592
memory does not support writing.  Default value 1.  The simulator will
1593 19 jeremybenn
add this number of cycles to the total instruction cycle count when
1594
writing to main memory.
1595
 
1596
@item log = "@var{file}"
1597
@cindex @code{log} (memory configuration)
1598
If specified, @file{file} names a file for all memory accesses to be
1599 82 jeremybenn
logged.  If not specified, the default value, NULL is used, meaning
1600 19 jeremybenn
that the memory is not logged.
1601
 
1602
@end table
1603
 
1604
@node Memory Management Configuration
1605
@subsection Memory Management Configuration
1606
@cindex configuring data & instruction MMUs
1607
@cindex MMU configuration
1608
@cindex DMMU configuration
1609
@cindex data MMU configuration
1610
@cindex IMMU configuration
1611
@cindex instruction MMU configuration
1612
@cindex @code{section dmmu}
1613
@cindex @code{section immu}
1614
Memory Management Unit (MMU) configuration is described in
1615
@code{section dmmu} (for the data MMU) and @code{section immu} (for
1616 82 jeremybenn
the instruction MMU).  Each section should appear at most once.  The
1617 19 jeremybenn
following parameters may be specified.
1618
 
1619
@table @code
1620
 
1621
@item enabled = 0|1
1622
@cindex @code{enabled} (MMU configuration)
1623
If 1 (true), the data or instruction (as appropriate) MMU is
1624 82 jeremybenn
enabled.  If 0 (the default), it is disabled.
1625 19 jeremybenn
 
1626
@item nsets = @var{value}
1627
@cindex @code{nsets} (MMU configuration)
1628
Sets the number of data or instruction (as appropriate) TLB sets to
1629 82 jeremybenn
@var{value}, which must be a power of two, not exceeding 128.  Values
1630
which do not fit these criteria are ignored with a warning.  The
1631
default value is 1.
1632 19 jeremybenn
 
1633
@item nways = @var{value}
1634
@cindex @code{nways} (MMU configuration)
1635
Sets the number of data or instruction (as appropriate) TLB ways to
1636 82 jeremybenn
@var{value}.  The value must be in the range 1 to 4.  Values outside
1637
this range are ignored with a warning.  The default value is 1.
1638 19 jeremybenn
 
1639
@item pagesize = @var{value}
1640
@cindex @code{pagesize} (MMU configuration)
1641
The data or instruction (as appropriate) MMU page size is set to
1642 82 jeremybenn
@var{value}, which must be a power of 2.  Values which are not a power
1643
of 2 are ignored with a warning.  The default is 8192 (0x2000).
1644 19 jeremybenn
 
1645
@item entrysize = @var{value}
1646
@cindex @code{entrysize} (MMU configuration)
1647
The data or instruction (as appropriate) MMU entry size is set to
1648 82 jeremybenn
@var{value}, which must be a power of 2.  Values which are not a power
1649
of 2 are ignored with a warning.  The default value is 1.
1650 19 jeremybenn
 
1651
@quotation Note
1652
@value{OR1KSIM} does not appear to use the @code{entrysize} parameter
1653 82 jeremybenn
in its simulation of the MMUs.  Thus setting this value does not seem
1654 19 jeremybenn
to matter.
1655
@end quotation
1656
 
1657
@item ustates = @var{value}
1658
@cindex @code{ustates} (MMU configuration)
1659
The number of instruction usage states for the data or instruction (as
1660
appropriate) MMU is set to @var{value}, which must be 2, 3 or
1661 82 jeremybenn
4.  Values outside this range are ignored with a warning.  The default
1662 19 jeremybenn
value is 2.
1663
 
1664
@quotation Note
1665
@value{OR1KSIM} does not appear to use the @code{ustates} parameter in
1666 82 jeremybenn
its simulation of the MMUs.  Thus setting this value does not seem to
1667 19 jeremybenn
matter.
1668
@end quotation
1669
 
1670
@item hitdelay = @var{value}
1671
@cindex @code{hitdelay} (MMU configuration)
1672
Set the number of cycles a data or instruction (as appropriate) MMU
1673 82 jeremybenn
hit costs.  Default value 1.
1674 19 jeremybenn
 
1675
@item missdelay = @var{value}
1676
@cindex @code{missdelay} (MMU configuration)
1677
Set the number of cycles a data or instruction (as appropriate) MMU
1678 82 jeremybenn
miss costs.  Default value 1.
1679 19 jeremybenn
 
1680
@end table
1681
 
1682
@node Cache Configuration
1683
@subsection Cache Configuration
1684
@cindex configuring data & instruction caches
1685
@cindex cache configuration
1686
@cindex data cache configuration
1687
@cindex instruction cache configuration
1688
@cindex @code{section dc}
1689
@cindex @code{section ic}
1690
Cache configuration is described in @code{section dc} (for the data
1691 82 jeremybenn
cache) and @code{seciton ic} (for the instruction cache).  Each section
1692
should appear at most once.  The following parameters may be specified.
1693 19 jeremybenn
 
1694
@table @code
1695
 
1696
@item enabled = 0|1
1697
@cindex @code{enabled} (cache configuration)
1698
If 1 (true), the data or instruction (as appropriate) cache is
1699 82 jeremybenn
enabled.  If 0 (the default), it is disabled.
1700 19 jeremybenn
 
1701
@item nsets = @var{value}
1702
@cindex @code{nsets} (cache configuration)
1703
Sets the number of data or instruction (as appropriate) cache sets to
1704
@var{value}, which must be a power of two, not exceeding
1705
@code{MAX_DC_SETS} (for the data cache) or @code{MAX_IC_SETS} (for the
1706 82 jeremybenn
instruction cache).  At the time of writing, these constants are
1707
both defined in the code to be 1024).  The default value is 1.
1708 19 jeremybenn
 
1709
@item nways = @var{value}
1710
@cindex @code{nways} (cache configuration)
1711
Sets the number of data or instruction (as appropriate) cache ways to
1712
@var{value}, which must be a power of two, not exceeding
1713
@code{MAX_DC_WAYS} (for the data cache) or @code{MAX_IC_WAYS} (for the
1714 82 jeremybenn
instruction cache).  At the time of writing, these constants are both
1715
defined in the code to be 32).  The default value is 1.
1716 19 jeremybenn
 
1717
@item blocksize = @var{value}
1718
@cindex @code{blocksize} (cache configuration)
1719
The data or instruction (as appropriate) cache block size is set to
1720 82 jeremybenn
@var{value} bytes, which must be either 16 or 32.  The default is 16.
1721 19 jeremybenn
 
1722
@item ustates = @var{value}
1723
@cindex @code{ustates} (cache configuration)
1724
The number of instruction usage states for the data or instruction (as
1725 82 jeremybenn
appropriate) cache is set to @var{value}, which must be 2, 3 or 4.  The
1726 19 jeremybenn
default value is 2.
1727
 
1728
@item hitdelay = @var{value}
1729
@cindex @code{hitdelay} (instruction cache configuration)
1730 82 jeremybenn
@emph{Instruction cache only}.  Set the number of cycles an instruction
1731
cache hit costs.  Default value 1.
1732 19 jeremybenn
 
1733
@item missdelay = @var{value}
1734
@cindex @code{missdelay} (instruction cache configuration)
1735 82 jeremybenn
@emph{Instruction cache only}.  Set the number of cycles an instruction
1736
cache miss costs.  Default value 1.
1737 19 jeremybenn
 
1738
@item load_hitdelay = @var{value}
1739
@cindex @code{load_hitdelay} (data cache configuration)
1740 82 jeremybenn
@emph{Data cache only}.  Set the number of cycles a data load cache hit
1741
costs.  Default value 2.
1742 19 jeremybenn
 
1743
@item load_missdelay = @var{value}
1744
@cindex @code{load_missdelay} (data cache configuration)
1745 82 jeremybenn
@emph{Data cache only}.  Set the number of cycles a data load cache
1746
miss costs.  Default value 2.
1747 19 jeremybenn
 
1748
@item store_hitdelay = @var{value}
1749
@cindex @code{store_hitdelay} (data cache configuration)
1750 82 jeremybenn
@emph{Data cache only}.  Set the number of cycles a data store cache hit
1751
costs.  Default value 0.
1752 19 jeremybenn
 
1753
@item store_missdelay = @var{value}
1754
@cindex @code{store_missdelay} (data cache configuration)
1755 82 jeremybenn
@emph{Data cache only}.  Set the number of cycles a data store cache
1756
miss costs.  Default value 0.
1757 19 jeremybenn
 
1758
@end table
1759
 
1760
@node Interrupt Configuration
1761
@subsection Interrupt Configuration
1762
@cindex configuring the interrupt controller
1763
@cindex interrupt controller configuration
1764
@cindex programmable interrupt controller configuration
1765
@cindex PIC configuration
1766
@cindex @code{section pic}
1767
Programmable Interrupt Controller (PIC) configuration is described in
1768 82 jeremybenn
@code{section pic}.  This section may appear at most
1769 19 jeremybenn
once---@value{OR1KSIM} has no mechanism for handling multiple
1770 82 jeremybenn
interrupt controllers.  The following parameters may be specified.
1771 19 jeremybenn
 
1772
@table @code
1773
 
1774
@item enabled = 0|1
1775
@cindex @code{enabled} (interrupt controller)
1776 82 jeremybenn
If 1 (true), the programmable interrupt controller is enabled.  If 0
1777 19 jeremybenn
(the default), it is disabled.
1778
 
1779
@item edge_trigger = 0|1
1780
@cindex @code{edge_trigger} (interrupt controller)
1781
If 1 (true, the default), the programmable interrupt controller is
1782 82 jeremybenn
edge triggered.  If 0 (false), it is level triggered.
1783 19 jeremybenn
 
1784
@end table
1785
 
1786
@node Power Management Configuration
1787
@subsection Power Management Configuration
1788
@cindex configuring power management
1789
@cindex power management configuration
1790
@cindex PMU configuration
1791
@cindex @code{section pmu}
1792 82 jeremybenn
Power management implementation is incomplete.  At present the effect
1793 19 jeremybenn
(which only happens when the power management unit is enabled) of
1794
setting the different bits in the power management Special Purpose
1795
Register (PMR, SPR 0x4000) is
1796
 
1797
@table @code
1798
 
1799
@item SDF (bit mask 0x0000000f)
1800
@cindex SDF (power management register)
1801
@cindex slow down factor (power management register)
1802
@cindex power management register, SDF
1803
@cindex PMR - SDF
1804
No effect - these bits are ignored
1805
 
1806
@item DME (bit mask 0x00000010)
1807
@cindex DME (power management register)
1808
@cindex doze mode (power management register)
1809
@cindex power management register, DME
1810
@cindex PMR - DME
1811
@itemx SME (bit mask 0x00000020)
1812
@cindex SME (power management register)
1813
@cindex sleep mode (power management register)
1814
@cindex power management register, SME
1815
@cindex PMR - SME
1816
Both these bits cause the processor to stop executing
1817 82 jeremybenn
instructions.  However all other functions (debug interaction, CLI,
1818 19 jeremybenn
VAPI etc) carry on as normal.
1819
 
1820
@item DCGE (bit mask 0x00000004)
1821
@cindex DCGE (power management register)
1822
@cindex dynamic clock gating (power management register)
1823
@cindex power management register, DGCE
1824
@cindex PMR - DGCE
1825
No effect - this bit is ignored
1826
 
1827
@item SUME (bit mask 0x00000008)
1828
@cindex SUME (power management register)
1829
@cindex suspend mode (power management register)
1830
@cindex power management register, SUME
1831
@cindex PMR - SUME
1832
Enabling this bit causes a message to be printed, advising that the
1833
processor is suspending and the simulator exits.
1834
 
1835
@end table
1836
 
1837
On reset all bits are cleared.
1838
 
1839 82 jeremybenn
Power management configuration is described in @code{section pm}.  This
1840
section may appear at most once.  The following parameter may be specified.
1841 19 jeremybenn
 
1842
@table @code
1843
 
1844
@item enabled = 0|1
1845
@cindex @code{enabled} (power management configuration)
1846 82 jeremybenn
If 1 (true), power management is enabled.  If 0 (the default), it is
1847 19 jeremybenn
disabled.
1848
 
1849
@end table
1850
 
1851
@node Branch Prediction Configuration
1852
@subsection Branch Prediction Configuration
1853
@cindex configuring branch prediction
1854
@cindex branch prediction configuration
1855
@cindex BPB configuration
1856
@cindex @code{section bpb}
1857
From examining the code base, it seems the branch prediction function
1858 82 jeremybenn
is not fully implemented.  At present the functionality seems
1859 19 jeremybenn
restricted to collection of statistics.
1860
 
1861 82 jeremybenn
Branch prediction configuration is described in @code{section bpb}.  This
1862
section may appear at most once.  The following parameters may be specified.
1863 19 jeremybenn
 
1864
@table @code
1865
 
1866
@item enabled = 0|1
1867
@cindex @code{enabled} (branch prediction configuration)
1868 82 jeremybenn
If 1 (true), branch prediction is enabled.  If 0 (the default), it is
1869 19 jeremybenn
disabled.
1870
 
1871
@item btic = 0|1
1872
@cindex @code{btic} (branch prediction configuration)
1873 82 jeremybenn
If 1 (true), the branch target instruction cache model is enabled.  If
1874 19 jeremybenn
 
1875
 
1876
@item sbp_bf_fwd = 0|1
1877
@cindex @code{sbp_bf_fwd} (branch prediction configuration)
1878 82 jeremybenn
If 1 (true), use forward prediction for the @code{l.bf} instruction.  If
1879 19 jeremybenn
 
1880
 
1881
@item sbp_bnf_fwd = 0|1
1882
@cindex @code{sbp_bnf_fwd} (branch prediction configuration)
1883 82 jeremybenn
If 1 (true), use forward prediction for the @code{l.bnf} instruction.  If
1884 19 jeremybenn
 
1885
 
1886
@item hitdelay = @var{value}
1887
@cindex @code{hitdelay} (branch prediction configuration)
1888 82 jeremybenn
Set the number of cycles a branch prediction hit costs.  Default value
1889 19 jeremybenn
0.
1890
 
1891
@item missdelay = @var{value}
1892
@cindex @code{missdelay} (branch prediction configuration)
1893 82 jeremybenn
Set the number of cycles a branch prediction miss costs.  Default value
1894 19 jeremybenn
0.
1895
 
1896
@end table
1897
 
1898
@node Debug Interface Configuration
1899
@subsection Debug Interface Configuration
1900
@cindex configuring the debug unit and interface to external debuggers
1901
@cindex debug unit configuration
1902
@cindex debug interface configuration
1903
@cindex @code{section debug}
1904
The debug unit and debug interface configuration is described in
1905 82 jeremybenn
@code{@w{section debug}}.  This section may appear at most once.  The
1906 19 jeremybenn
following parameters may be specified.
1907
 
1908
@table @code
1909
 
1910
@item enabled = 0|1
1911
@cindex @code{enabled} (debug interface configuration)
1912 82 jeremybenn
If 1 (true), the debug unit is enabled.  If 0 (the default), it is disabled.
1913 19 jeremybenn
 
1914
@quotation Note
1915
This enables the functionality of the debug unit (its registers etc) within
1916 82 jeremybenn
the mode.  It does not provide any external interface to the debug unit.
1917
For
1918 235 jeremybenn
that, see @code{rsp_enabled} below.
1919 19 jeremybenn
@end quotation
1920
 
1921
@item rsp_enabled = 0|1
1922
@cindex @code{rsp_enabled} (debug interface configuration)
1923
@cindex Remote Serial Protocol
1924
If 1 (true), the GDB @dfn{Remote Serial Protocol} server is started, provding
1925
an interface to an external GNU debugger, using the port specified in the
1926
@code{rsp_port} field (see below), or the @code{or1ksim-rsp} TCP/IP
1927 82 jeremybenn
service.  If 0 (the default), the server is not started, and no external
1928 19 jeremybenn
interface is provided.
1929
 
1930
For more detailed information on the interface to the GNU Debugger see
1931
Embecosm Application Note 2, @cite{Howto: Porting the GNU Debugger Practical
1932
Experience with the OpenRISC 1000 Architecture}, by Jeremy Bennett, published
1933
by Embecosm Limited (@url{www.embecosm.com}).
1934
 
1935
@item rsp_port = @var{value}
1936
@cindex @code{rsp_port} (debug interface configuration)
1937
@var{value} specifies the port to be used for the GDB @dfn{Remote Serial
1938 82 jeremybenn
Protocol} interface to the GNU Debugger (GDB).  Default value 51000.  If
1939 19 jeremybenn
the value 0 is specified, @value{OR1KSIM} will instead look for a TCP/IP
1940
service named @code{or1ksim-rsp}.
1941
 
1942
@quotation Tip
1943
@cindex TCP/IP port range for @code{or1ksim-rsp} service
1944
There is no registered port for @value{OR1KSIM} @dfn{Remote Serial Protocol}
1945 82 jeremybenn
service @code{or1ksim-rsp}.  Good practice suggests users should adopt port
1946
values in the @dfn{Dynamic} or @dfn{Private} port range, i.e.  49152-65535.
1947 19 jeremybenn
@end quotation
1948
 
1949
@item vapi_id = @var{value}
1950
@cindex @code{vapi_id} (debug interface configuration)
1951
@var{value} specifies the value of the Verification API (VAPI) base
1952 82 jeremybenn
address to be used with the debug unit.  @xref{Verification API, ,
1953 19 jeremybenn
Verification API}, for more details.
1954
 
1955
If this is specified and @var{value} is non-zero, all OpenRISC Remote
1956
JTAG protocol transactions will be logged to the VAPI log file, if
1957 82 jeremybenn
enabled.  This is the only functionality associated with VAPI for the
1958
debug unit.  No VAPI commands are sent, nor requests handled.
1959 19 jeremybenn
 
1960
@end table
1961
 
1962
@node Peripheral Configuration
1963
@section Configuring Memory Mapped Peripherals
1964
 
1965 82 jeremybenn
All peripheral components are optional.  If they are specified, then
1966 19 jeremybenn
(unlike other components) by default they are enabled.
1967
 
1968
@menu
1969
* Memory Controller Configuration::
1970
* UART Configuration::
1971
* DMA Configuration::
1972
* Ethernet Configuration::
1973
* GPIO Configuration::
1974
* Display Interface Configuration::
1975
* Frame Buffer Configuration::
1976
* Keyboard Configuration::
1977
* Disc Interface Configuration::
1978
* Generic Peripheral Configuration::
1979
@end menu
1980
 
1981
@node Memory Controller Configuration
1982
@subsection Memory Controller Configuration
1983
@cindex configuring the memory controller
1984
@cindex memory controller configuration
1985
@cindex @code{section mc}
1986
The memory controller used in @value{OR1KSIM} is the component
1987 98 jeremybenn
implemented at OpenCores, and found in the top level SVN directory,
1988 82 jeremybenn
@file{mem_ctrl}.  It is described in the document @cite{Memory
1989 19 jeremybenn
Controller IP Core} by Rudolf Usselmann, which can be found in the
1990 82 jeremybenn
@file{doc} subdirectory.  It is a memory mapped component, which
1991 19 jeremybenn
resides on the main OpenRISC Wishbone data bus.
1992
 
1993
The memory controller configuration is described in @code{@w{section
1994 82 jeremybenn
mc}}.  This section may appear multiple times, specifying multiple
1995 98 jeremybenn
memory controllers.
1996 19 jeremybenn
 
1997 98 jeremybenn
@quotation Caution
1998
The standard OpenRISC C libraries will initialize the memory
1999
controller to expect 64MB memory blocks, and any memory declarations
2000
@emph{must} reflect this.
2001
 
2002
If smaller memory blocks are declared with a memory controller, then
2003
sufficient memory will not be allocated by @value{OR1KSIM}, but out of
2004
range memory accesses will not be trapped. For example declaring a
2005
memory section from 0-4MB with a memory controller enabled would mean
2006
that accesses between 4MB and 64MB would be permitted, but having no
2007
allocated memory would likely cause a segmentation fault.
2008
 
2009
If the user is determined to use smaller memories with the memory
2010
controller, then custom initialization code must be provided, to
2011
ensure the memory controller traps out-of-memory accesses.
2012
@end quotation
2013
 
2014
The following parameters may be specified.
2015
 
2016 19 jeremybenn
@table @code
2017
 
2018
@item enabled = 0|1
2019
@cindex @code{enabled} (memory controller configuration)
2020 82 jeremybenn
If 1 (true, the default), this memory controller is enabled.  If 0, it is
2021 19 jeremybenn
disabled.
2022
 
2023
@quotation Note
2024
The memory controller can effectively also be disabled by setting an
2025 82 jeremybenn
appropriate power on control register value (see below).  However this
2026 19 jeremybenn
should only be used if it is desired to specifically model this
2027
behavior of the memory controller, not as a way of disabling the
2028
memory controller in general.
2029
@end quotation
2030
 
2031
@item baseaddr = @var{value}
2032
@cindex @code{baseaddr} (memory controller configuration)
2033
Set the base address of the memory controller's memory mapped
2034 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2035 19 jeremybenn
sensible value.
2036
 
2037
The memory controller has a 7 bit address bus, with a total of 19
2038
32-bit registers, at addresses 0x00 through 0x4c (address 0x0c and
2039
addresses 0x50 through 0x7c are not used).
2040
 
2041
@item poc = @var{value}
2042
@cindex @code{poc} (memory controller configuration)
2043
Specifies the value of the power on control register, The least
2044
signficant two bits specify the bus width (use 0 for an 8-bit bus, 1
2045
for a 16-bit bus and 2 for a 32-bit bus) and the next two bits the
2046
type of memory connected (use 0 for a disabled interface, 1 for SSRAM,
2047
2 for asyncrhonous devices and 3 for synchronous devices).
2048
 
2049
If other bits are specified, they are ignored with a warning.
2050
 
2051
@quotation Caution
2052
The default value, 0, corresponds to a disabled 8-bit bus, and
2053
is likely not the most suitable value
2054
@end quotation
2055
 
2056
@item index = @var{value}
2057
@cindex @code{index} (memory controller configuration)
2058
Specify the index of this memory controller amongst all the memory
2059 82 jeremybenn
controllers.  This value should be unique for each memory controller,
2060 19 jeremybenn
and is used to associate specific memories with the controller,
2061
through the @code{mc} field in the @code{@w{section memory}}
2062
configuration (@pxref{Memory Configuration, , Memory Configuration}).
2063
 
2064
The default value, 0, is suitable when there is only one memory controller.
2065
 
2066
@end table
2067
 
2068
@node UART Configuration
2069
@subsection UART Configuration
2070
@cindex configuring the UART
2071
@cindex UART configuration
2072
@cindex @code{section uart}
2073
The UART implemented in @value{OR1KSIM} follows the specification of the
2074 82 jeremybenn
National Semiconductor 16450 and 16550 parts.  It is a memory mapped
2075 19 jeremybenn
component, which resides on the main OpenRISC Wishbone data bus.
2076
 
2077
The component provides a number of interfaces to emulate the behavior
2078
of an external terminal connected to the UART.
2079
 
2080 82 jeremybenn
UART configuration is described in @code{section uart}.  This section
2081
may appear multiple times, specifying multiple UARTs.  The following
2082 19 jeremybenn
parameters may be specified.
2083
 
2084
@table @code
2085
 
2086
@item enabled = 0|1
2087
@cindex @code{enabled} (UART configuration)
2088 82 jeremybenn
If 1 (true, the default), this UART is enabled.  If 0, it is disabled.
2089 19 jeremybenn
 
2090
@item baseaddr = @var{value}
2091
@cindex @code{baseaddr} (UART configuration)
2092
Set the base address of the UART's memory mapped
2093 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2094 19 jeremybenn
sensible value.
2095
 
2096
The UART has a 3 bit address bus, with a total of 8 8-bit registers,
2097
at addresses 0x0 through 0x7.
2098
 
2099
@item channel = "@var{type}:@var{args}"
2100
@cindex @code{channel} (UART configuration)
2101
Specify the channel representing the terminal connected to the UART
2102
Rx & Tx pins.
2103
 
2104
@table @code
2105
 
2106
@item channel="file:@file{rxfile},@file{txfile}"
2107
@cindex UART I/O from/to files
2108
Read input characters from the file @file{rxfile} and write output
2109
characters to the file @file{txfile} (which will be created if
2110
required).
2111
 
2112
@item channel="xterm:@var{args}"
2113
@cindex UART I/O from/to an @command{xterm}
2114
Create an xterm on startup, write UART Tx traffic to the xterm and
2115
take Rx traffic from the keyboard when the xterm window is
2116 82 jeremybenn
selected.  Additional arguments to the xterm command (for example
2117 19 jeremybenn
specifying window size may be specified in @var{args}, or this may be
2118
left blank.
2119
 
2120
@item channel="tcp:@var{value}"
2121
@cindex UART I/O from/to TCP/IP
2122
Open the TCP/IP port specified by @var{value} and read and write UART
2123
traffic from and to it.
2124
 
2125
Typically a telnet session is connected to the other end of this port.
2126
 
2127
@quotation Tip
2128
There is no registered port for @value{OR1KSIM} telnet UART
2129 82 jeremybenn
connection.  Priviledged access is required to read traffic on the
2130
registered ``well-known'' telnet port (23).  Instead users should use
2131 19 jeremybenn
port values in the @dfn{Dynamic} or @dfn{Private} port range,
2132 82 jeremybenn
i.e.  49152-65535.
2133 19 jeremybenn
@end quotation
2134
 
2135
@item channel="fd:@code{rxfd},@code{txfd}"
2136
@cindex UART I/O from/to open file descriptors
2137
Read and write characters from and to the existing open numerical file
2138
descriptors, file @code{rxfd} and @code{txfd}.
2139
 
2140
@item channel="tty:device=/dev/ttyS0,baud=9600"
2141
@cindex UART I/O from/to a physical serial port
2142 82 jeremybenn
Read and write characters from and to a physical serial port.  The
2143 19 jeremybenn
precise device (shown here as @code{/dev/ttyS0}) may vary from machine
2144
to machine.
2145
 
2146
@end table
2147
 
2148
The default value for this field is @code{"xterm:"}.
2149
 
2150
@item irq = @var{value}
2151
@cindex @code{irq} (UART configuration)
2152 82 jeremybenn
Use @var{value} as the IRQ number of this UART.  Default value 0.
2153 19 jeremybenn
 
2154
@item 16550 = 0|1
2155
@cindex @code{16550} (UART configuration)
2156 82 jeremybenn
If 1 (true), the UART has the functionality of a 16550.  If 0 (the
2157
default), it has the functionality of a 16450.  The principal
2158 19 jeremybenn
difference is that the 16550 can buffer multiple characters.
2159
 
2160
@item jitter = @var{value}
2161
@cindex @code{jitter} (UART configuration)
2162
Set the jitter, modeled as a time to block, to @var{value}
2163 82 jeremybenn
milliseconds.  Set to -1 to disable jitter modeling.  Default value 0.
2164 19 jeremybenn
 
2165
@quotation Note
2166
This functionality has yet to be implemented, so this parameter has no
2167
effect.
2168
@end quotation
2169
 
2170
@item vapi_id = @var{value}
2171
@cindex @code{vapi_id} (UART configuration)
2172
@var{value} specifies the value of the Verification API (VAPI) base
2173 82 jeremybenn
address to be used with the UART.  @xref{Verification API, ,
2174 19 jeremybenn
Verification API}, for more details, which details the use of the VAPI
2175
with the UART.
2176
 
2177
@end table
2178
 
2179
@node DMA Configuration
2180
@subsection DMA Configuration
2181
@cindex configuring DMA
2182
@cindex DMA configuration
2183
@cindex @code{section dma}
2184
The DMA controller used in @value{OR1KSIM} is the component
2185 98 jeremybenn
implemented at OpenCores, and found in the top level SVN directory,
2186 82 jeremybenn
@file{wb_dma}.  It is described in the document @cite{Wishbone
2187 19 jeremybenn
DMA/Bridge IP Core} by Rudolf Usselmann, which can be found in the
2188 82 jeremybenn
@file{doc} subdirectory.  It is a memory mapped component, which
2189
resides on the main OpenRISC Wishbone data bus.  The present
2190 19 jeremybenn
implementation is incomplete, intended only to support the Ethernet
2191
interface (@pxref{Ethernet Configuration}), although the Ethernet
2192
interface is not yet completed.
2193
 
2194 82 jeremybenn
DMA configuration is described in @code{@w{section dma}}.  This section
2195
may appear multiple times, specifying multiple DMA controllers.  The
2196 19 jeremybenn
following parameters may be specified.
2197
 
2198
@table @code
2199
 
2200
@item enabled = 0|1
2201
@cindex @code{enabled} (DMA configuration)
2202 82 jeremybenn
If 1 (true, the default), this DMA controller is enabled.  If 0, it is disabled.
2203 19 jeremybenn
 
2204
@item baseaddr = @var{value}
2205
@cindex @code{baseaddr} (DMA configuration)
2206
Set the base address of the DMA's memory mapped
2207 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2208 19 jeremybenn
sensible value.
2209
 
2210
The DMA controller has a 10 bit address bus, with a total of 253
2211 82 jeremybenn
32-bit registers.  The first 5 registers at addresses 0x000 through
2212
0x010 control the overall behavior of the DMA controller.  There are
2213 19 jeremybenn
then 31 blocks of 8 registers, controlling each of the 31 DMA channels
2214 82 jeremybenn
available.  Addresses 0x014 through 0x01c are not used.
2215 19 jeremybenn
 
2216
@item irq = @var{value}
2217
@cindex @code{irq} (DMA configuration)
2218 82 jeremybenn
Use @var{value} as the IRQ number of this DMA controller.  Default value 0.
2219 19 jeremybenn
 
2220
@item vapi_id = @var{value}
2221
@cindex @code{vapi_id} (DMA configuration)
2222
@var{value} specifies the value of the Verification API (VAPI) base
2223 82 jeremybenn
address to be used with the DMA controller.  @xref{Verification API, ,
2224 19 jeremybenn
Verification API}, for more details, which details the use of the VAPI
2225
with the DMA controller.
2226
 
2227
@end table
2228
 
2229
@node Ethernet Configuration
2230
@subsection Ethernet Configuration
2231
@cindex configuring the Ethernet interface
2232
@cindex Ethernet configuration
2233
@cindex @code{section ethernet}
2234
The Ethernet MAC used in @value{OR1KSIM} is the component implemented
2235 98 jeremybenn
at OpenCores, and found in the top level SVN directory, @file{ethmac}.
2236
It also forms part of the OpenRISC SoC, ORPSoC.  It is described in
2237
the document @cite{Ethernet IP Core Specification} by Igor Mohor,
2238
which can be found in the @file{doc} subdirectory.  It is a memory
2239
mapped component, which resides on the main OpenRISC Wishbone data
2240
bus.
2241 19 jeremybenn
 
2242 82 jeremybenn
Ethernet configuration is described in @code{section ethernet}.  This
2243 19 jeremybenn
section may appear multiple times, specifying multiple Ethernet
2244 82 jeremybenn
interfaces.  The following parameters may be specified.
2245 19 jeremybenn
 
2246
@table @code
2247
 
2248
@item enabled = 0|1
2249
@cindex @code{enabled} (Ethernet configuration)
2250 82 jeremybenn
If 1 (true, the default), this Ethernet MAC is enabled.  If 0, it is
2251 19 jeremybenn
disabled.
2252
 
2253
@item baseaddr = @var{value}
2254
@cindex @code{baseaddr} (Ethernet configuration)
2255
Set the base address of the MAC's memory mapped registers to
2256 82 jeremybenn
@var{value}.  The default is 0, which is probably not a sensible value.
2257 19 jeremybenn
 
2258
The Ethernet MAC has a 7-bit address bus, with a total of 21
2259 82 jeremybenn
32-bit registers.  Addresses 0x54 through 0x7c are not used.
2260 19 jeremybenn
 
2261
@quotation Note
2262
The Ethernet specification describes a Tx control register,
2263 82 jeremybenn
@code{TXCTRL}, at address 0x50.  However this register is not
2264 19 jeremybenn
implemented in the @value{OR1KSIM} model.
2265
@end quotation
2266
 
2267
@item dma = @var{value}
2268
@cindex @code{dma} (Ethernet configuration)
2269
@var{value} specifies the DMA controller with which this Ethernet is
2270 82 jeremybenn
associated.  The default value is 0.
2271 19 jeremybenn
 
2272
@quotation Note
2273
Support for external DMA is not provided in the current
2274 82 jeremybenn
implementation, and this value is ignored.  In any case there is no
2275 19 jeremybenn
equivalent field to which this can be matched in the current DMA
2276
component implementation (@pxref{DMA Configuration, , DMA
2277
Configuration}).
2278
@end quotation
2279
 
2280
@item irq = @var{value}
2281
@cindex @code{dma} (Ethernet configuration)
2282 82 jeremybenn
Use @var{value} as the IRQ number of this Ethernet MAC.  Default value 0.
2283 19 jeremybenn
 
2284
@item rtx_type = 0|1
2285
@cindex @code{rtx_type} (Ethernet configuration)
2286
If 1 (true) use a socket interface to the Ethernet (see parameter
2287 82 jeremybenn
@code{sockif} below).  If 0 (the default), use a file interface,
2288 19 jeremybenn
reading and writing from and to the files specified in the
2289
@code{rxfile} and @code{txfile} parameters (see below).
2290
 
2291
@quotation Note
2292 82 jeremybenn
By default the socket interface is not provided in @value{OR1KSIM}.  If
2293 19 jeremybenn
it is required, this must be requested when configuring, by use of the
2294
@code{--enable-ethphy} option to @command{configure}.
2295
 
2296
@example
2297
configure --target=or32-uclinux --enable-ethphy ...
2298
@end example
2299
@end quotation
2300
 
2301
@item rx_channel = @var{rxvalue}
2302
@cindex @code{rx_channel} (Ethernet configuration)
2303
@itemx tx_channel = @var{txvalue}
2304
@cindex @code{tx_channel} (Ethernet configuration)
2305
@var{rxvalue} specifies the DMA channel to use for receive and
2306 82 jeremybenn
@var{txvalue} the DMA channel to use for transmit.  Both default to 0.
2307 19 jeremybenn
 
2308
@quotation Note
2309
As noted above, support for external DMA is not provided in the
2310
current implementation, and so these values are ignored.
2311
@end quotation
2312
 
2313
@item rxfile = "@var{rxfile}"
2314
@cindex @code{rxfile} (Ethernet configuration)
2315
@itemx txfile = "@var{txfile}"
2316
@cindex @code{txfile} (Ethernet configuration)
2317
When @code{rtx_type} is 0 (see above), @var{rxfile} specifies the file
2318
to use as input and @var{txfile} specifies the fie to use as
2319
output.
2320
 
2321 82 jeremybenn
The file contains a sequence of packets.  Each packet consists of a
2322
packet length (32 bits), followed by that many bytes of data.  Once the
2323 19 jeremybenn
input file is empty, the Ethernet MAC behaves as though there were no
2324 82 jeremybenn
data on the Ethernet.  The default values of these parameters are
2325 19 jeremybenn
@code{"eth_rx"} and @code{"eth_tx"} respectively.
2326
 
2327 82 jeremybenn
The input file must exist and be readable.  The output file must be
2328
writable and will be created if necessary.  If either of these
2329 19 jeremybenn
conditions is not met, a warning will be given.
2330
 
2331
@item sockif = "@var{service}"
2332
@cindex @code{sockif} (Ethernet configuration)
2333
When @code{rtx_type} is 1 (see above), @var{service} specifies the
2334 82 jeremybenn
service to use for communication.  This may be TCP/IP or UDP/IP.  The
2335 19 jeremybenn
default value of this parameter is @code{"or1ksim_eth"}.
2336
 
2337
@item vapi_id = @var{value}
2338
@cindex @code{vapi_id} (DMA configuration)
2339
@var{value} specifies the value of the Verification API (VAPI) base
2340 82 jeremybenn
address to be used with the Ethernet PHY.  @xref{Verification API, ,
2341 19 jeremybenn
Verification API}, for more details, which details the use of the VAPI
2342
with the DMA controller.
2343
 
2344
@end table
2345
 
2346
@node GPIO Configuration
2347
@subsection GPIO Configuration
2348
@cindex configuring the GPIO
2349
@cindex GPIO configuration
2350
@cindex @code{section cpio}
2351
The GPIO used in @value{OR1KSIM} is the component implemented at
2352 98 jeremybenn
OpenCores, and found in the top level SVN directory, @file{gpio}.  It
2353 19 jeremybenn
is described in the document @cite{GPIO IP Core Specification} by
2354
Damjan Lampret and Goran Djakovic, which can be found in the
2355 82 jeremybenn
@file{doc} subdirectory.  It is a memory mapped component, which
2356 19 jeremybenn
resides on the main OpenRISC Wishbone data bus.
2357
 
2358 82 jeremybenn
GPIO configuration is described in @code{@w{section gpio}}.  This section
2359
may appear multiple times, specifying multiple GPIO devices.  The
2360 19 jeremybenn
following parameters may be specified.
2361
 
2362
@table @code
2363
 
2364
@item enabled = 0|1
2365
@cindex @code{enabled} (GPIO configuration)
2366 82 jeremybenn
If 1 (true, the default), this GPIO is enabled.  If 0, it is disabled.
2367 19 jeremybenn
 
2368
@item baseaddr = @var{value}
2369
@cindex @code{baseaddr} (GPIO configuration)
2370
Set the base address of the GPIO's memory mapped
2371 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2372 19 jeremybenn
sensible value.
2373
 
2374
The GPIO has a 6 bit address bus, with a total of 10 32-bit registers,
2375 82 jeremybenn
although the number of bits that are actively used varies.  Addresses
2376 19 jeremybenn
0x28 through 0x3c are not used.
2377
 
2378
@item irq = @var{value}
2379
@cindex @code{irq} (GPIO configuration)
2380 82 jeremybenn
Use @var{value} as the IRQ number of this GPIO.  Default value 0.
2381 19 jeremybenn
 
2382
@item vapi_id = @var{value}
2383
@cindex @code{vapi_id} (GPIO configuration)
2384
@cindex @code{base_vapi_id} (GPIO configuration - deprecated)
2385
@var{value} specifies the value of the Verification API (VAPI) base
2386 82 jeremybenn
address to be used with the GPIO.  @xref{Verification API, ,
2387 19 jeremybenn
Verification API}, for more details, which details the use of the VAPI
2388 82 jeremybenn
with the GPIO controller.  For backwards compatibility, the
2389 19 jeremybenn
alternative name @code{base_vapi_id} is supported for this parameter,
2390
but deprecated.
2391
 
2392
@end table
2393
 
2394
@node Display Interface Configuration
2395
@subsection Display Interface Configuration
2396
@cindex configuring the VGA interface
2397
@cindex display interface configuration
2398
@cindex VGA configuration
2399
@cindex @code{section vga}
2400
@value{OR1KSIM} models a VGA interface to an external monitor.  The
2401
VGA controller used in @value{OR1KSIM} is the component implemented at
2402 98 jeremybenn
OpenCores, and found in the top level SVN directory, @file{vga_lcd},
2403 82 jeremybenn
with no support for the optional hardware cursors.  It is described in
2404 19 jeremybenn
the document @cite{VGA/LCD Core v2.0 Specifications} by Richard
2405 82 jeremybenn
Herveille, which can be found in the @file{doc} subdirectory.  It is a
2406 19 jeremybenn
memory mapped component, which resides on the main OpenRISC Wishbone
2407
data bus.
2408
 
2409
The current implementation provides only functionality to dump the
2410
screen to a file at intervals.
2411
 
2412
VGA controller configuration is described in @code{@w{section
2413 82 jeremybenn
vga}}.  This section may appear multiple times, specifying multiple
2414
VGA controllers.  The following parameters may be specified.
2415 19 jeremybenn
 
2416
@table @code
2417
 
2418
@item enabled = 0|1
2419
@cindex @code{enabled} (VGA configuration)
2420 82 jeremybenn
If 1 (true, the default), this VGA is enabled.  If 0, it is disabled.
2421 19 jeremybenn
 
2422
@item baseaddr = @var{value}
2423
@cindex @code{baseaddr} (VGA configuration)
2424
Set the base address of the VGA controller's memory mapped
2425 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2426 19 jeremybenn
sensible value.
2427
 
2428
The VGA controller has a 12-bit address bus, with 7 32-bit registers, at
2429
addresses 0x000 through 0x018, and two color lookup tables at
2430 82 jeremybenn
addresses 0x800 through 0xfff.  The hardware cursor registers are not
2431 19 jeremybenn
implemented, so addresses 0x01c through 0x7fc are not used.
2432
 
2433
@item irq = @var{value}
2434
@cindex @code{irq} (VGA configuration)
2435 82 jeremybenn
Use @var{value} as the IRQ number of this VGA controller.  Default
2436 19 jeremybenn
value 0.
2437
 
2438
@item refresh_rate = @var{value}
2439
@cindex @code{refresh_rate} (VGA configuration)
2440 82 jeremybenn
@var{value} specifies number of cycles between screen dumps.  Default
2441 19 jeremybenn
value is derived from the simulation clock cycle time
2442
(@pxref{Simulator Behavior, , Simulator Behavior}), to correspond
2443
to dumping 50 times per simulated second.
2444
 
2445
@item txfile = "@var{file}"
2446
@cindex @code{txfile} (VGA configuration)
2447
@cindex @code{filename} (VGA configuration - deprecated)
2448
@var{file} specifies the base of the filename for screen
2449 82 jeremybenn
dumps.  Successive screen dumps will be in BMP format, in files with
2450 19 jeremybenn
the name @file{@var{file}@var{nnnn}.bmp}, where @var{nnnn} is a
2451 82 jeremybenn
sequential count of the screen dumps starting at zero.  The default
2452
value is @code{"vga_out"}.  For backwards compatibility, the
2453 19 jeremybenn
alternative name @code{filename} is supported for this parameter,
2454
but deprecated.
2455
 
2456
@end table
2457
 
2458
@node Frame Buffer Configuration
2459
@subsection Frame Buffer Configuration
2460
@cindex configuring the frame buffer
2461
@cindex frame buffer configuration
2462
@cindex @code{section fb}
2463
@quotation Caution
2464 82 jeremybenn
The frame buffer is only partially implemented.  Its configuration
2465 19 jeremybenn
fields are described here, but the component should not be used at
2466 82 jeremybenn
this time.  Like the VGA controller, it is designed to make screen
2467 19 jeremybenn
dumps to file.
2468
@end quotation
2469
 
2470 82 jeremybenn
Frame buffer configuration is described in @code{section fb}.  This
2471 19 jeremybenn
section may appear multiple times, specifying multiple frame
2472 82 jeremybenn
buffers.  The following parameters may be specified.
2473 19 jeremybenn
 
2474
@table @code
2475
 
2476
@item enabled = 0|1
2477
@cindex @code{enabled} (frame buffer configuration)
2478 82 jeremybenn
If 1 (true, the default), this frame buffer is enabled.  If 0, it is disabled.
2479 19 jeremybenn
 
2480
@item baseaddr = @var{value}
2481
@cindex @code{baseaddr} (frame buffer configuration)
2482
Set the base address of the frame buffer's memory mapped registers to
2483 82 jeremybenn
@var{value}.  The default is 0, which is probably not a sensible value.
2484 19 jeremybenn
 
2485
The frame buffer has an 121-bit address bus, with 4 32-bit registers,
2486
at addresses 0x000 through 0x00c, and a PAL lookup table at addresses
2487 82 jeremybenn
0x400 through 0x4ff.  Addresses 0x010 through 0x3fc and addresses 0x500
2488 19 jeremybenn
through 0x7ff are not used.
2489
 
2490
@item refresh_rate = @var{value}
2491
@cindex @code{refresh_rate} (frame buffer configuration)
2492 82 jeremybenn
@var{value} specifies number of cycles between screen dumps.  Default
2493 19 jeremybenn
value is derived from the simulation clock cycle time
2494
(@pxref{Simulator Behavior, , Simulator Behavior}), to correspond to
2495
dumping 50 times per simulated second.
2496
 
2497
@item txfile = "@var{file}"
2498
@cindex @code{txfile} (frame buffer configuration)
2499
@cindex @code{filename} (frame buffer configuration - deprecated)
2500
@var{file} specifies the base of the filename for screen
2501 82 jeremybenn
dumps.  Successive screen dumps will be in BMP format, in files with
2502 19 jeremybenn
the name @file{@var{file}@var{nnnn}.bmp}, where @var{nnnn} is a
2503 82 jeremybenn
sequential count of the screen dumps starting at zero.  The default
2504
value is @code{"fb_out"}.  For backwards compatibility, the
2505 19 jeremybenn
alternative name @code{filename} is supported for this parameter,
2506
but deprecated.
2507
 
2508
@end table
2509
 
2510
@node Keyboard Configuration
2511
@subsection Keyboard Configuration (PS2)
2512
@cindex configuring the keyboard interface
2513
@cindex configuring the PS2 interface
2514
@cindex keyboard configuration
2515
@cindex PS2 configuration
2516
@cindex @code{section kb}
2517 82 jeremybenn
The PS2 interface provided by @value{OR1KSIM} is not documented.  It
2518 19 jeremybenn
may be based on the PS2 project at OpenCores, and found in
2519 98 jeremybenn
the top level SVN directory, @file{ps2}.  However this project lacks
2520 82 jeremybenn
any documentation beyond its project webpage.  Since most PS2
2521 19 jeremybenn
interfaces follow the Intel i8042 standard, this is presumably what is
2522
expected with this device.
2523
 
2524
The implementation only provides for keyboard support, which is
2525 82 jeremybenn
modelled as a file of keystrokes.  There is no mouse support.
2526 19 jeremybenn
 
2527
@quotation Caution
2528
A standard i8042 device has two registers at addresses 0x60 (command)
2529 82 jeremybenn
and 0x64 (status).  Inspection of the code, suggests that the
2530 19 jeremybenn
@value{OR1KSIM} component places these registers at addresses 0x00 and
2531
0x04.
2532
 
2533
The port of Linux for the OpenRISC 1000, which runs on @value{OR1KSIM}
2534
implements the i8042 device driver, anticipating these registers
2535 82 jeremybenn
reside at their conventional address.  It seems unlikel that this code
2536 19 jeremybenn
will work.
2537
 
2538
This component should be used with caution.
2539
@end quotation
2540
 
2541 82 jeremybenn
Keyboard configuration is described in @code{section kbd}.  This
2542 19 jeremybenn
section may appear multiple times, specifying multiple keyboard
2543 82 jeremybenn
interfaces.  The following parameters may be specified.
2544 19 jeremybenn
 
2545
@table @code
2546
 
2547
@item enabled = 0|1
2548
@cindex @code{enabled} (keyboard configuration)
2549 82 jeremybenn
If 1 (true, the default), this keyboard is enabled.  If 0, it is disabled.
2550 19 jeremybenn
 
2551
@item baseaddr = @var{value}
2552
@cindex @code{baseaddr} (keyboard configuration)
2553
Set the base address of the keyboard's memory mapped registers to
2554 82 jeremybenn
@var{value}.  The default is 0, which is probably not a sensible value.
2555 19 jeremybenn
 
2556
The keyboard PS/2 interface has an 3-bit address bus, with 2 8-bit registers,
2557
at addresses 0x000 and 0x004.
2558
 
2559
@quotation Caution
2560
As noted above, a standard Intel 8042 interface would expect to find
2561
these registers at locations 0x60 and 0x64, thus requiring at least a
2562
7-bit bus.
2563
@end quotation
2564
 
2565
@item irq = @var{value}
2566
@cindex @code{irq} (keyboard configuration)
2567 82 jeremybenn
Use @var{value} as the IRQ number of this Keyboard interface.  Default
2568 19 jeremybenn
value 0.
2569
 
2570
@item rxfile = "@var{file}"
2571
@cindex @code{file} (keyboard configuration)
2572
@file{file} specifies a file containing raw key stroke data, which
2573 82 jeremybenn
models the input from a physical keyboard.  The default value is
2574 19 jeremybenn
@code{"kbd_in"}.
2575
 
2576
@end table
2577
 
2578
@node Disc Interface Configuration
2579
@subsection Disc Interface Configuration
2580
@cindex configuring the ATA/ATAPI interfaces
2581
@cindex disc interface configuration
2582
@cindex ATA/ATAPI configuration
2583
@cindex @code{section ata}
2584
The ATA/ATAPI disc controller used in @value{OR1KSIM} is the OCIDEC
2585
(OpenCores IDE Controller) component implemented at OpenCores, and
2586 98 jeremybenn
found in the top level SVN directory, @file{ata}.  It is described in
2587 19 jeremybenn
the document @cite{ATA/ATAPI-5 Core Specification} by Richard
2588 82 jeremybenn
Herveille, which can be found in the @file{doc} subdirectory.  It is a
2589 19 jeremybenn
memory mapped component, which resides on the main OpenRISC Wishbone
2590
data bus.
2591
 
2592 82 jeremybenn
ATA/ATAPI configuration is described in @code{@w{section ata}}.  This section
2593
may appear multiple times, specifying multiple disc controllers.  The
2594 19 jeremybenn
following parameters may be specified.
2595
 
2596
@table @code
2597
 
2598
@item enabled = 0|1
2599
@cindex @code{enabled} (ATA/ATAPI configuration)
2600 82 jeremybenn
If 1 (true, the default), this ATA/ATAPI interface is enabled.  If 0,
2601 19 jeremybenn
it is disabled.
2602
 
2603
@item baseaddr = @var{value}
2604
@cindex @code{baseaddr} (ATA/ATAPI configuration)
2605
Set the base address of the ATA/ATAPI interface's memory mapped
2606 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2607 19 jeremybenn
sensible value.
2608
 
2609
The ATA/ATAPI PS/2 interface has an 5-bit address bus, with 8 32-bit
2610 82 jeremybenn
registers.  Depending on the version of the OCIDEC ATA/ATAPI interface
2611 19 jeremybenn
selected (see @code{dev_id} below), not all registers will be available.
2612
 
2613
@item irq = @var{value}
2614
@cindex @code{irq} (ATA/ATAPI configuration)
2615 82 jeremybenn
Use @var{value} as the IRQ number of this ATA/ATAPI interface.  Default
2616 19 jeremybenn
value 0.
2617
 
2618
@item dev_id = 1|2|3
2619
@cindex @code{dev_id} (ATA/ATAPI configuration)
2620
This parameter specifies which version of the OCIDEC ATA/ATAPI
2621 82 jeremybenn
interface to model.  The default value is 1.
2622 19 jeremybenn
 
2623
Version 1 supports only the @code{CTRL}, @code{STAT} and @code{PCTR}
2624 82 jeremybenn
registers.  Versions 2 & 3 add the @code{FCTR} registers, Version 3
2625 19 jeremybenn
adds the @code{DTR} registers and the @code{RXD}/@code{TXD} registers.
2626
 
2627
@item rev = @var{value}
2628
@cindex @code{rev} (ATA/ATAPI configuration)
2629
Set the @var{value} as the revision of the OCIDEC ATA/ATAPI
2630 82 jeremybenn
interface.  The default value is 1.  The default value is 0.  Its value
2631
should be in the range 0-15.  Larger values are truncated with a
2632
warning.  This only affects the reset value of the @code{STAT}
2633 19 jeremybenn
register, where it forms bits 24-27.
2634
 
2635
@item pio_mode0_t1 = @var{value}
2636
@cindex @code{pio_mode0_t1} (ATA/ATAPI configuration)
2637
@itemx pio_mode0_t2 = @var{value}
2638
@cindex @code{pio_mode0_t2} (ATA/ATAPI configuration)
2639
@itemx pio_mode0_t4 = @var{value}
2640
@cindex @code{pio_mode0_t4} (ATA/ATAPI configuration)
2641
@itemx pio_mode0_teoc = @var{value}
2642
@cindex @code{pio_mode0_teoc} (ATA/ATAPI configuration)
2643
These parameters specify the timings for use with Programmed
2644 82 jeremybenn
Input/Output (PIO) transfers.  They are specified as the number of
2645 19 jeremybenn
clock cycles - 2, rounded up to the next highest integer, or zero if
2646 82 jeremybenn
that would be negative.  The values should not exceed 255.  If they do,
2647 19 jeremybenn
they will be ignored with a warning.
2648
 
2649
See the ATA/ATAPI-5 specification for explanations of each of these
2650 82 jeremybenn
timing parameters.  The default values are:
2651 19 jeremybenn
 
2652
@example
2653
pio_mode0_t1   =  6
2654
pio_mode0_t2   = 28
2655
pio_mode0_t4   =  2
2656
pio_mode0_teoc = 23
2657
@end example
2658
 
2659
@item dma_mode0_tm = @var{value}
2660
@cindex @code{dma_mode0_tm} (ATA/ATAPI configuration)
2661
@itemx dma_mode0_td = @var{value}
2662
@cindex @code{dma_mode0_td} (ATA/ATAPI configuration)
2663
@itemx dma_mode0_teoc = @var{value}
2664
@cindex @code{dma_mode0_teoc} (ATA/ATAPI configuration)
2665 82 jeremybenn
These parameters specify the timings for use with DMA transfers.  They
2666 19 jeremybenn
are specified as the number of clock cycles - 2, rounded up to the
2667 82 jeremybenn
next highest integer, or zero if that would be negative.  The values
2668
should not exceed 255.  If they do, they will be ignored with a
2669 19 jeremybenn
warning.
2670
 
2671
See the ATA/ATAPI-5 specification for explanations of each of these
2672 82 jeremybenn
timing parameters.  The default values are:
2673 19 jeremybenn
 
2674
@example
2675
dma_mode0_tm   =  4
2676
dma_mode0_td   = 21
2677
dma_mode0_teoc = 21
2678
@end example
2679
 
2680
@end table
2681
 
2682
@subsubsection ATA/ATAPI Device Configuration
2683
@cindex disc interface device configuration
2684
@cindex ATA/ATAPI device configuration
2685
Within the @code{@w{section ata}}, each device is specified
2686 82 jeremybenn
separately.  The device subsection is introduced by
2687 19 jeremybenn
 
2688
@example
2689
device @var{value}
2690
@end example
2691
 
2692 82 jeremybenn
@var{value} is the device number, which should be 0 or 1.  The
2693
subsection ends with @code{enddevice}.  Note that if the same device
2694 19 jeremybenn
number is specified more than once, the previous values will be
2695 82 jeremybenn
overwritten.  Within the @code{device} subsection, the following
2696 19 jeremybenn
parameters may appear:
2697
 
2698
@table @code
2699
 
2700
@item type = @var{value}
2701
@cindex @code{type} (ATA/ATAPI device configuration)
2702
@var{value}specifies the type of device: 0 (the default) for ``not
2703
connected'', 1 for hard disk simulated in a file and 2 for local system
2704
hard disk.
2705
 
2706
@item file = "@var{filename}"
2707
@cindex @code{file} (ATA/ATAPI device configuration)
2708
@file{filename} specifies the file to be used for a simulated ATA
2709 82 jeremybenn
device if the file type (see @code{type} above) is 1.  Default value
2710 19 jeremybenn
@code{"ata-File@var{n}"}, where @var{n} is the device number.
2711
 
2712
@item size = @var{value}
2713
@cindex @code{size} (ATA/ATAPI device configuration)
2714
@var{value} specifies the size of a simulated ATA device if the file
2715 82 jeremybenn
type (see @code{type} above) is 1.  The default value is zero.
2716 19 jeremybenn
 
2717
@item packet = 0|1
2718
@cindex @code{packet} (ATA/ATAPI device configuration)
2719 82 jeremybenn
If 1 (true), implement the PACKET command feature set.  If 0 (the
2720 19 jeremybenn
default), do not implement the PACKET command feature set.
2721
 
2722
@item firmware = "@var{str}"
2723
@cindex @code{firmware} (ATA/ATAPI device configuration)
2724
Firmware to report in response to the ``Identify Device''
2725 82 jeremybenn
command.  Default @code{"02207031"}.
2726 19 jeremybenn
 
2727
@item heads = @var{value}
2728
@cindex @code{heads} (ATA/ATAPI device configuration)
2729 82 jeremybenn
Number of heads in the device.  Default 7, use -1 to disable all heads.
2730 19 jeremybenn
 
2731
@item sectors = @var{value}
2732
@cindex @code{sectors} (ATA/ATAPI device configuration)
2733 82 jeremybenn
Number of sectors per track in the device.  Default 32.
2734 19 jeremybenn
 
2735
@item mwdma = 0|1|2|-1
2736
@cindex @code{mwdma} (ATA/ATAPI device configuration)
2737 82 jeremybenn
Highest multi-word DMA mode supported.  Default 2, use -1 to disable.
2738 19 jeremybenn
 
2739
@item pio = 0|1|2|3|4
2740
@cindex @code{pio} (ATA/ATAPI device configuration)
2741 82 jeremybenn
Highest PIO mode supported.  Default 4.
2742 19 jeremybenn
 
2743
@end table
2744
 
2745
@node Generic Peripheral Configuration
2746
@subsection Generic Peripheral Configuration
2747
@cindex generic peripheral configuration
2748
@cindex configuration of generic peripherals
2749
@cindex @code{section generic}
2750
When used as a library (@pxref{Simulator Library, , Simulator
2751
Library}), @value{OR1KSIM} makes provision for any additional peripheral to be
2752 82 jeremybenn
implemented externally.  Any read or write access to this peripheral's
2753
memory map generates @dfn{upcall}s to an external handler.  This
2754 19 jeremybenn
interface can support either C or C++, and was particularly designed
2755
to facilitate support for OSCI SystemC (see @url{http://www.systemc.org}).
2756
 
2757
Generic peripheral configuration is described in @code{@w{section
2758 82 jeremybenn
generic}}.  This section may appear multiple times, specifying multiple
2759
external peripherals.  The following parameters may be specified.
2760 19 jeremybenn
 
2761
@table @code
2762
 
2763
@item enabled = 0|1
2764
@cindex @code{enabled} (generic peripheral configuration)
2765 82 jeremybenn
If 1 (true, the default), this ATA/ATAPI interface is enabled.  If 0,
2766 19 jeremybenn
it is disabled.
2767
 
2768
@item baseaddr = @var{value}
2769
@cindex @code{baseaddr} (generic peripheral configuration)
2770
Set the base address of the generic peripheral's memory mapped
2771 82 jeremybenn
registers to @var{value}.  The default is 0, which is probably not a
2772 19 jeremybenn
sensible value.
2773
 
2774
The size of the memory mapped register space is controlled by the
2775
@code{size} paramter, described below.
2776
 
2777
@item size = @var{value}
2778
@cindex @code{size} (generic peripheral configuration)
2779
Set the size of the generic peripheral's memory mapped register space
2780 82 jeremybenn
to @var{value} bytes.  Any read or write accesses to addresses with
2781 19 jeremybenn
offsets of 0 to @var{value}-1 bytes from the base address specified in
2782
parameter @code{baseaddr} (see above) will be directed to the external
2783
interface.
2784
 
2785 82 jeremybenn
@var{value} will be rounded up the nearest power of 2.  It's default
2786
value is zero.  If @var{value} is not an exact power of two, accesses
2787 19 jeremybenn
to address offsets of @var{value} or above up to the next power of 2
2788
will generate a warning, and have no effect (reads will return zero).
2789
 
2790
@item name = "@var{str}"
2791
@cindex @code{name} (generic peripheral configuration)
2792 82 jeremybenn
This gives the peripheral the name @code{"@var{str}"}.  This is used to
2793 19 jeremybenn
identify the peripheral in error messages and warnings, and when
2794 82 jeremybenn
reporting its status.  The default value is @code{@w{"anonymous
2795 19 jeremybenn
external peripheral"}}.
2796
 
2797
@item byte_enabled = 0|1
2798
@cindex @code{byte_enabled} (generic peripheral configuration)
2799
@itemx hw_enabled = 0|1
2800
@cindex @code{hw_enabled} (generic peripheral configuration)
2801
@itemx word_enabled = 0|1
2802
@cindex @code{word_enabled} (generic peripheral configuration)
2803
If 1 (true, the default), these parameters respectively enable the
2804 82 jeremybenn
device for byte wide, half-word wide and word wide accesses.  If 0,
2805 19 jeremybenn
accesses of that width will fail.
2806
 
2807
@end table
2808
 
2809
@node Interactive Command Line
2810
@chapter Interactive Command Line
2811
 
2812
If started with the @code{-f} flag, or if interrupted with
2813
@kbd{ctrl-C}, @value{OR1KSIM} provides the user with an interactive
2814 82 jeremybenn
command line.  The commands available, which may not be abbreviated, are:
2815 19 jeremybenn
 
2816
@table @code
2817
 
2818
@item q
2819
@cindex @code{q} (Interactive CLI)
2820
@cindex quitting (Interactive CLI)
2821
Exit the simulator
2822
 
2823
@item r
2824
@cindex @code{r} (Interactive CLI)
2825
@cindex displaying registers (Interactive CLI)
2826
@cindex register display (Interactive CLI)
2827 82 jeremybenn
Display all the General Purpose Registers (GPRs).  Also shows the just
2828 19 jeremybenn
executed and next to be executed instructions symbolically and the
2829
state of the flag in the Supervision Register.
2830
 
2831
@item t
2832
@cindex @code{t} (Interactive CLI)
2833
@cindex stepping code (Interactive CLI)
2834
Execute the next instruction and then display register/instruction
2835
information as with the @code{r} command (see above).
2836
 
2837
@item run @var{num} [ hush ]
2838
@cindex @code{run} (Interactive CLI)
2839
@cindex running code (Interactive CLI)
2840
@cindex executing code (Interactive CLI)
2841 82 jeremybenn
Execute @var{num} instructions.  The register/instruction information
2842 19 jeremybenn
is displayed after each instruction, as with the @code{r} command (see
2843
above) @emph{unless} @code{hush} is specified.
2844
 
2845
@item pr @var{reg} @var{value}
2846
@cindex @code{pr} (Interactive CLI)
2847
@cindex patching registers (Interactive CLI)
2848
@cindex register patching (Interactive CLI)
2849
Patch register @var{reg} with @var{value}.
2850
 
2851
@item dm @var{fromaddr} [ @var{toaddr} ]
2852
@cindex @code{dm} (Interactive CLI)
2853
@cindex displaying memory (Interactive CLI)
2854
@cindex memory display (Interactive CLI)
2855 82 jeremybenn
Display memory bytes between @var{fromaddr} and @var{toaddr}.  If
2856 19 jeremybenn
@var{toaddr} is not given, 64 bytes are displayed, starting at
2857
@var{fromaddr}.
2858
 
2859
@quotation Caution
2860 82 jeremybenn
The output from this command is broken (a bug).  @value{OR1KSIM}
2861
attempts to print out 16 bytes per row.  However, instead of printing
2862 19 jeremybenn
out the address at the start of each row, it prints the address (of
2863
the first of the 16 bytes) before @emph{each} byte.
2864
@end quotation
2865
 
2866
@item de @var{fromaddr} [ @var{toaddr} ]
2867
@cindex @code{dm} (Interactive CLI)
2868
@cindex disassemble (Interactive CLI)
2869 82 jeremybenn
Disassemble code between @var{fromaddr} and @var{toaddr}.  If
2870 19 jeremybenn
@var{toaddr} is not given, 16 instructions are disassembled.
2871
 
2872
The disassembly is entirely numerical, and gives no symbolic
2873
information.
2874
 
2875
@item pm @var{addr} @var{value}
2876
@cindex @code{pm} (Interactive CLI)
2877
@cindex patching memory (Interactive CLI)
2878
@cindex memory patching (Interactive CLI)
2879
Patch the 4 bytes in memory starting at @var{addr} with the 32-bit
2880
@var{value}.
2881
 
2882
@item pc @var{value}
2883
@cindex @code{pc} (Interactive CLI)
2884
@cindex patching the program counter (Interactive CLI)
2885
@cindex program counter patching (Interactive CLI)
2886
Patch the program counter with @var{value}.
2887
 
2888
@item cm @var{fromaddr} @var{toaddr} @var{size}
2889
@cindex @code{cm} (Interactive CLI)
2890
@cindex copying memory (Interactive CLI)
2891
@cindex memory copying (Interactive CLI)
2892
Copy @var{size} bytes in memory from @var{fromaddr} to @var{toaddr}.
2893
 
2894
@item break @var{addr}
2895
@cindex @code{break} (Interactive CLI)
2896
@cindex breakpoint set/clear (Interactive CLI)
2897
@cindex set breakpoint (Interactive CLI)
2898
@cindex clear breakpoint (Interactive CLI)
2899
@cindex toggle breakpoint (Interactive CLI)
2900
Toggle the breakpoint set at @var{addr}.
2901
 
2902
@item breaks
2903
@cindex @code{breaks} (Interactive CLI)
2904
@cindex breakpoint list (Interactive CLI)
2905
@cindex list breakpoints (Interactive CLI)
2906
List all set breakpoints
2907
 
2908
@item reset
2909
@cindex @code{reset} (Interactive CLI)
2910
@cindex simulator reset (Interactive CLI)
2911
@cindex reset the simulator (Interactive CLI)
2912 82 jeremybenn
Reset the simulator.  Includes modeling a reset of the processor, so
2913 19 jeremybenn
execution will restart from the reset vector location, 0x100.
2914
 
2915
@item hist
2916
@cindex @code{hist} (Interactive CLI)
2917
@cindex execution history (Interactive CLI)
2918
@cindex history of execution (Interactive CLI)
2919
If saving the execution history has been configured (@pxref{Simulator
2920
Behavior, , Simulator Behavior}), display the execution history.
2921
 
2922
@item stall
2923
@cindex @code{stall} (Interactive CLI)
2924
@cindex processor stall (Interactive CLI)
2925
@cindex stall the processor (Interactive CLI)
2926 82 jeremybenn
Stall the processor, so that control is passed to the debug unit.  When
2927
stalled, the processor can execute no instructions.  This command is
2928 19 jeremybenn
useful when debugging the JTAG interface, used by debuggers such as
2929
GDB.
2930
 
2931
@item unstall
2932
@cindex @code{unstall} (Interactive CLI)
2933
@cindex processor unstall (Interactive CLI)
2934
@cindex unstall the processor (Interactive CLI)
2935 82 jeremybenn
Unstall the processor, so that normal execution can continue.  This command is
2936 19 jeremybenn
useful when debugging the JTAG interface, used by debuggers such as GDB.
2937
 
2938
@item stats @var{category} | clear
2939
@cindex @code{stats} (Interactive CLI)
2940
@cindex simulator statistics (Interactive CLI)
2941
@cindex statistics, simulation (Interactive CLI)
2942
Print the statistics for the given @var{category}, if available, or
2943 82 jeremybenn
clear if @code{clear} is specified.  The categories are:
2944 19 jeremybenn
 
2945
@table @asis
2946
 
2947
@item 1
2948
Miscellaneous statistics: branch predictions (if branch predictions
2949
are enabled), branch target cache model (if enabled), cache (if
2950
enbaled), MMU (if enabled) and number of addtional load & store
2951
cycles.
2952
 
2953
@xref{Core OpenRISC Configuration, , Configuring the OpenRisc
2954
Achitectural Components}, for details of how to enable these various
2955
features.
2956
 
2957
@item 2
2958 82 jeremybenn
Instruction usage statistics.  Requires hazard analysis to be enabled
2959 19 jeremybenn
(@pxref{CPU Configuration, ,CPU Configuration}).
2960
 
2961
@item 3
2962 82 jeremybenn
Instruction dependency statistics.  Requires hazard analysis to be enabled
2963 19 jeremybenn
(@pxref{CPU Configuration, ,CPU Configuration}).
2964
 
2965
@item 4
2966 82 jeremybenn
Functional unit dependency statistics.  Requires hazard analysis to be enabled
2967 19 jeremybenn
(@pxref{CPU Configuration, ,CPU Configuration}).
2968
 
2969
@item 5
2970 82 jeremybenn
Raw register usage over time.  Requires hazard analysis to be enabled
2971 19 jeremybenn
(@pxref{CPU Configuration, ,CPU Configuration}).
2972
 
2973
@item 6
2974 82 jeremybenn
Store buffer statistics.  Requires the store buffer to be enabled
2975 19 jeremybenn
(@pxref{CPU Configuration, ,CPU Configuration}).
2976
 
2977
@end table
2978
 
2979
@item info
2980
@cindex @code{info} (Interactive CLI)
2981
@cindex simulator configuration info (Interactive CLI)
2982
@cindex configuration info (Interactive CLI)
2983 82 jeremybenn
Display detailed information about the simulator configuration.  This
2984 19 jeremybenn
is quite a lengthy about, because all MMU TLB information is displayed.
2985
 
2986
@item dv @var{fromaddr} [ @var{toaddr} ] [ @var{module} ]
2987
@cindex @code{dv} (Interactive CLI)
2988
@cindex Verilog memory dump (Interactive CLI)
2989
@cindex memory dump, Verilog (Interactive CLI)
2990
Dump the area of memory between @var{fromaddr} and @var{toaddr} as
2991
Verilog code for a synchronous, 23-bit wide SRAM module, named
2992 82 jeremybenn
@var{module}.  If @var{toaddr} is not specified, then 64 bytes are
2993
dumped (as 16 32-bit words).  If @var{module} is not specified,
2994 19 jeremybenn
@code{or1k_mem} is used.
2995
 
2996
To save to a file, use the redirection function (described after this
2997
table, below).
2998
 
2999
@item dh @var{fromaddr} [ @var{toaddr} ]
3000
@cindex @code{dv} (Interactive CLI)
3001
@cindex hexadecimal memory dump (Interactive CLI)
3002
@cindex memory dump, hexadecimal (Interactive CLI)
3003
Dump the area of memory between @var{fromaddr} and @var{toaddr} as
3004 82 jeremybenn
32-bit hex numbers (no @code{0x}, or @code{32'h} prefix).  If
3005 19 jeremybenn
@var{toaddr} is not specified, then 64 bytes are dumped (as 16 32-bit
3006
words).
3007
 
3008
To save to a file, use the redirection function (described after this
3009
table, below).
3010
 
3011
@item setdbch
3012
@cindex @code{setdbch} (Interactive CLI)
3013
@cindex debug channel toggle (Interactive CLI)
3014
@cindex toggle debug channels (Interactive CLI)
3015 82 jeremybenn
Toggle debug channels on/off.  @xref{Standalone Simulator, , Standalone
3016 19 jeremybenn
Simulator}, for a description of specifying debug channels on the
3017
command line.
3018
 
3019
@item set @var{section} @var{param} = @var{value}
3020
@cindex @code{set} (Interactive CLI)
3021
@cindex configuration parameter setting (Interactive CLI)
3022
Set the configuration parameter @var{para} in section @var{section} to
3023 82 jeremybenn
@var{value}.  @xref{Configuration, , Configuration}, for details of
3024 19 jeremybenn
configuration parameters and their settings.
3025
 
3026
@item debug
3027
@cindex @code{debug} (Interactive CLI)
3028
@cindex debug mode toggle (Interactive CLI)
3029
@cindex toggle debug mode (Interactive CLI)
3030 82 jeremybenn
Toggle the simulator debug mode.  @xref{Debug Interface Configuration,
3031 19 jeremybenn
, Debug Interface Configuration}, for information on this parameter.
3032
 
3033
@quotation Caution
3034 82 jeremybenn
This is effectively enabling or disabling the debug unit.  It does not
3035
effect the remote GDB debug interface.  However using the remote debug
3036 19 jeremybenn
interface while the debug unit is disabled will lead to undefined
3037
behavior and likely crash @value{OR1KSIM}
3038
@end quotation
3039
 
3040
@item cuc
3041
@cindex @code{debug} (Interactive CLI)
3042
@cindex Custom Unit Compiler (Interactive CLI)
3043
Enter the the Custom Unit Compiler command prompt (@pxref{CUC
3044
Configuration, , CUC Configuration}).
3045
 
3046
@quotation Caution
3047 82 jeremybenn
The CUC must be properly configured, for this to succeed.  In
3048
particular a timing file must be available and readable.  Otherwise
3049 19 jeremybenn
@value{OR1KSIM} will crash.
3050
@end quotation
3051
 
3052
@item help
3053
@cindex @code{help} (Interactive CLI)
3054
@cindex Custom Unit Compiler (Interactive CLI)
3055
Print out brief information about each command available.
3056
 
3057
@item mprofile [-vh] [-m @var{m}] [-g @var{n}] [-f @var{file}] @var{from} @var{to}
3058
@cindex @code{mprofile} (Interactive CLI)
3059
@cindex memory profiling utility (Interactive CLI)
3060 82 jeremybenn
Run the memory profiling utility.  This follows the same usage as the
3061 19 jeremybenn
standalone command (@pxref{Memory Profiling Utility, , Memory
3062
Profiling Utility}).
3063
 
3064
@item profile [-vhcq] [-g @var{file}]
3065
@cindex @code{mprofile} (Interactive CLI)
3066
@cindex profiling utility (Interactive CLI)
3067
@cindex instruction profiling utility (Interactive CLI)
3068 82 jeremybenn
Run the instruction profiling utility.  This follows the same usage as the
3069 19 jeremybenn
standalone command (@pxref{Profiling Utility, , Profiling Utility}).
3070
 
3071
@end table
3072
 
3073
For all commands, it is possible to redirect the output to a file, by
3074
using the redirection operator, @code{>}.
3075
 
3076
@example
3077
@var{command} > @var{filename}
3078
@end example
3079
 
3080
This is particularly useful for commands dumping a large amount of
3081
output, such as @code{dv}.
3082
 
3083
@quotation Caution
3084 82 jeremybenn
Unfortunately there is a serious bug with the redirection operator.  It
3085 19 jeremybenn
does not return output to standard output after the command
3086 82 jeremybenn
completes.  Until this bug is fixed, file redirection should not be
3087 19 jeremybenn
used.
3088
@end quotation
3089
 
3090
@node Verification API
3091
@chapter Verification API (VAPI)
3092
 
3093
The Verification API (VAPI) provides a TCP/IP interface to allow
3094 82 jeremybenn
components of the simulation to be controlled externally.  The
3095 19 jeremybenn
interface is polled for new requests on each simulated clock
3096 82 jeremybenn
cycle.  Components within the simulator may send responses to such
3097 19 jeremybenn
requests.
3098
 
3099 82 jeremybenn
The inteface is an asynchronous duplex protocol.  On the request side
3100 19 jeremybenn
it provides for simple commands, known as VAPI IDs (a 32 bit integer),
3101 82 jeremybenn
with a single piece of data (also a 32 bit integer).  On the send side,
3102
it provides for sending a single VAPI ID and data.  However there is no
3103
explicit command-response structure.  Some components just accept
3104
requests (e.g.  to set values), some just generate sends (to report
3105 19 jeremybenn
values), and some do both.
3106
 
3107
Each component has a base ID (32 bit) and its commands will start from
3108 82 jeremybenn
that base ID.  This provides a simple partitioning of the command space
3109
amongst components.  Request commands will be directed to the component with
3110 19 jeremybenn
the closest base ID lower than the VAPI ID of the command.
3111
 
3112
Thus if there are two components with base IDs of 0x200 and 0x300, and
3113
a request with VAPI ID of 0x203 is received, it will be directed to
3114
the first component as its command #3.
3115
 
3116
The results of VAPI interactions are logged (by default in
3117
@file{vapi.log} unless an alternative is specified in @code{@w{section
3118
vapi}}).
3119
 
3120
Currently the following components support VAPI:
3121
 
3122
@table @asis
3123
 
3124
@item Debug Unit
3125
@cindex Debug Unit verification (VAPI)
3126
@cindex VAPI for Debug Unit
3127
Although the Debug Unit can specify a base VAPI ID, it is not used to
3128
send commands or receive requests.
3129
 
3130
Instead, if the base VAPI ID is set, all remote JTAG protocol exchanges are
3131
logged in the VAPI log file.
3132
 
3133
@item UART
3134
@cindex UART verification (VAPI)
3135
@cindex VAPI for UART
3136
If a base VAPI ID is specified, the UART sends details of any chars or
3137
break characters sent, with dteails of the line control register etc
3138
encoded in the data packet sent.
3139
 
3140
This supports a single VAPI command request, but encodes a sub-command in the
3141
top 8 bits of the associated data.
3142
 
3143
@table @code
3144
 
3145
@item 0x00
3146
@cindex 0x00 UART VAPI sub-command (UART verification)
3147
This stuffs the least significant 8 bits of the data into the serial
3148
register of the UART and the next 8 bits into the line control
3149
register, effectively providing control of the next character to be
3150
sent or received.
3151
 
3152
@item 0x01
3153
@cindex 0x01 UART VAPI sub-command (UART verification)
3154
The divisor latch bytes are set from the least significant 16 bits of
3155
the data.
3156
 
3157
@item 0x02
3158
@cindex 0x02 UART VAPI sub-command (UART verification)
3159
The line control register is set from bits 15-8 of the data.
3160
 
3161
@item 0x03
3162
@cindex 0x03 UART VAPI sub-command (UART verification)
3163
The UART skew is set from the least significant 16 bits of the data
3164
 
3165
@item 0x04
3166
@cindex 0x04 UART VAPI sub-command (UART verification)
3167
If the 16th most significant bit of the data is 1, start sending
3168 82 jeremybenn
breaks, otherwise stop sending breaks.  The breaks are sent or cleared
3169 19 jeremybenn
after the number of UART clock divider ticks specified by the data
3170
(immediately if the data is zero).
3171
 
3172
@end table
3173
 
3174
@item DMA
3175
@cindex DMA verification (VAPI)
3176
@cindex VAPI for DMA
3177
Although the DMA unit supports a base VAPI ID in its configuration
3178
(@code{@w{section dma}}), no VAPI data is sent, nor VAPI requests
3179
currently implemented.
3180
 
3181
@item Ethernet
3182
@cindex Ethernet verification (VAPI)
3183
@cindex VAPI for Ethernet
3184 82 jeremybenn
The following requests are handled by the Ethernet.  Specified
3185 19 jeremybenn
symbolically, these are the increments from the base VAPI ID of the
3186 82 jeremybenn
Ethernet.  At present no implementation is provided behind these VAPI
3187 19 jeremybenn
requests.
3188
 
3189
@table @code
3190
 
3191
@item ETH_VAPI_DATA (0)
3192
@cindex @code{ETH_VAPI_DATA} (Ethernet verification)
3193
 
3194
@item ETH_VAPI_CTRL (0)
3195
@cindex @code{ETH_VAPI_CTRL} (Ethernet verification)
3196
 
3197
@end table
3198
 
3199
@item GPIO
3200
@cindex GPIO verification (VAPI)
3201
@cindex VAPI for GPIO
3202
If a base VAPI ID is specified, the GPIO sends out on its base VAPI ID
3203
(symbolically, GPIO_VAPI_DATA (0) offset from the base VAPI ID) any
3204
changes in outputs.
3205
 
3206 82 jeremybenn
The following requests are handled by the GPIO.  Specified
3207 19 jeremybenn
symbolically, these are the increments from the VAPI base ID of the
3208
GPIO.
3209
 
3210
@table @code
3211
 
3212
@item GPIO_VAPI_DATA (0)
3213
@cindex @code{GPIO_VAPI_DATA} (GPIO verification)
3214
Set the next input to the commands data field
3215
 
3216
@item GPIO_VAPI_AUX (1)
3217
@cindex @code{GPIO_VAPI_AUX} (GPIO verification)
3218
Set the GPIO auxiliary inputs to the data field
3219
 
3220
@item GPIO_VAPI_CLOCK (2)
3221
@cindex @code{GPIO_VAPI_CLOCK} (GPIO verification)
3222
Add an external GPIO clock trigger of period specified in the data field.
3223
 
3224
@item GPIO_VAPI_RGPIO_OE (3)
3225
@cindex @code{GPIO_VAPI_RGPIO} (GPIO verification)
3226
Set the GPIO output enable to the data field
3227
 
3228
@item GPIO_VAPI_RGPIO_INTE (4)
3229
@cindex @code{GPIO_VAPI_INTE} (GPIO verification)
3230
Set the next interrupt to the data field
3231
 
3232
@item GPIO_VAPI_RGPIO_PTRIG (5)
3233
@cindex @code{GPIO_VAPI_PTRIG} (GPIO verification)
3234
Set the next trigger to the data field
3235
 
3236
@item GPIO_VAPI_RGPIO_AUX (6)
3237
@cindex @code{GPIO_VAPI_AUX} (GPIO verification)
3238
Set the next auxiliary input to the data field
3239
 
3240
@item GPIO_VAPI_RGPIO_CTRL (7)
3241
@cindex @code{GPIO_VAPI_CTRL} (GPIO verification)
3242
Set th next control input to the data field
3243
 
3244
@end table
3245
 
3246
@end table
3247
 
3248
@node Code Internals
3249
@chapter A Guide to @value{OR1KSIM} Internals
3250
 
3251 82 jeremybenn
These are notes to help those wanting to extend @value{OR1KSIM}.  This
3252 19 jeremybenn
section assumes the use of a tag file, so file locations of entities'
3253 82 jeremybenn
definitions are not in general provided.  For more on tags, see the
3254
Linux manual page for @command{etags}.  A tag file can be created
3255 19 jeremybenn
with:
3256
 
3257
@example
3258
make tags
3259
@end example
3260
 
3261
@menu
3262
* Coding Conventions::
3263
* Global Data Structures::
3264
* Concepts::
3265
* Internal Debugging::
3266 104 jeremybenn
* Regression Testing::
3267 19 jeremybenn
@end menu
3268
 
3269
@node Coding Conventions
3270
@section Coding Conventions for @value{OR1KSIM}
3271
 
3272
This chapter provides some guidelines for coding, to facilitate
3273
extensions to @value{OR1KSIM}
3274
 
3275
@table @emph
3276
 
3277
@item GNU Coding Standard
3278
Code should follow the GNU coding standard for C
3279 82 jeremybenn
(@url{http://www.gnu.org/prep/standards/}.  If in doubt, put your code
3280 19 jeremybenn
through the @command{indent} program.
3281
 
3282
@item @code{#include} headers
3283
All C source code files should include @file{config.h} before any
3284
other file.
3285
 
3286
This should be followed by inclusion of any system headers (but see
3287
the comments about portability and @file{port.h} below) and then by
3288
any @value{OR1KSIM} package headers.
3289
 
3290
If @file{port.h} is required, it should be the first package header to
3291
be included after the system headers.
3292
 
3293
All C source code and header files should directly include any system
3294 82 jeremybenn
or package header they depend on, i.e.  not rely on any other header
3295
having already included it.  The two exceptions are
3296 19 jeremybenn
 
3297
@enumerate
3298
@item
3299
All header files may assume that @file{config.h} has already been
3300
included.
3301
 
3302
@item
3303
System headers which impose portability problems should be included by
3304
using the package header @file{port.h}, rather than the system headers
3305 82 jeremybenn
themselves.  This is the case for code requiring
3306 19 jeremybenn
 
3307
@itemize @bullet
3308
 
3309
@item
3310
@code{strndup} (from @file{string.h})
3311
 
3312
@item
3313
Integer types (@code{int@var{n}_t}, @code{uint@var{n}_t}) (from
3314
@file{inttypes.h}).
3315
 
3316
@item
3317
@code{isblank} (from @file{ctype.h})
3318
 
3319
@end itemize
3320
 
3321
@end enumerate
3322
 
3323
@item @code{#include} files once only
3324
All include files should be protected by @code{#ifndef} to ensure
3325 82 jeremybenn
their definitions are only included once.  For instance a header file
3326 19 jeremybenn
@file{@var{x-y.h}} should surround its contents with:
3327
 
3328
@example
3329
#ifndef X_Y__H
3330
#define X_Y__H
3331
 
3332
<body of the include file>
3333
 
3334
#endif  /* X_Y__H */
3335
@end example
3336
 
3337
@item Avoid @code{typedef}
3338
The GNU coding style for C does not have a clear way to distinguish
3339 82 jeremybenn
between user type name and user variables.  For this reason
3340 19 jeremybenn
@code{typedef} should be avoided except for the most ubiquitous user
3341 82 jeremybenn
defined types.  This makes the code much easier to read.
3342 19 jeremybenn
 
3343
There are some @code{typedef} declarations in the @command{argtable2}
3344
library and the @acronym{ELF} and @acronym{COFF} headers, because this
3345
code is taken from other places.
3346
 
3347
Within @value{OR1KSIM} legacy uses of @code{typedef} have largely been
3348
purged, except in the Custom Unit Compiler (@pxref{CUC Configuration,
3349
, Custom Unit Compiler (CUC) Configuration}).
3350
 
3351
The remaining uses of @code{typedef} occur in two places:
3352
 
3353
@itemize @bullet
3354
 
3355
@item
3356
@file{port/port.h} defines types to replace those in header files that
3357
are not available (character functions, string duplication, integer
3358
types).
3359
 
3360
@file{cpu/or1k/arch.h} defines types for the key @value{OR1KSIM}
3361
entities: addresses (@code{oraddr_t}), unsigned register values
3362
(@code{uorreg_t}) and signed register (@code{orreg_t}) values.
3363
 
3364
@end itemize
3365
 
3366
Where new types are defined, they should appear in one of these two
3367 82 jeremybenn
files as appropriate.  @value{OR1KSIM} specific types appearing in
3368 19 jeremybenn
@file{arch.h} should always have the suffix @file{_h}.
3369
 
3370
@item Don't begin names with underscore
3371
Names beginning with @code{_} are intended to be part of the C
3372 82 jeremybenn
infrastructure.  They should not be used in the simulator code.
3373 19 jeremybenn
 
3374
@item Keep Non-global top level entities static
3375
All top level entities (functions, variables), which are not
3376 82 jeremybenn
explicitly part of a global interface should be declared static.  This
3377 19 jeremybenn
ensures that unwanted connections are not inadvertently built across
3378
the program.
3379
 
3380
@item Use of @code{inline}
3381 82 jeremybenn
Code should not be declared @code{inline}.  Modern compilers can work
3382 19 jeremybenn
out for themselves what is best in this respect.
3383
 
3384
@item Initialization
3385 82 jeremybenn
All data structures should be explicitly initialized.  In particular
3386 19 jeremybenn
code should not rely on static data structures being initialized to
3387
zero.
3388
 
3389
The rationale is that in future static data structures may become
3390 82 jeremybenn
dynamic.  This has been a particular source of bugs in @value{OR1KSIM}
3391 19 jeremybenn
historically.
3392
 
3393
A specific case is with new peripherals, which should always include a
3394
@code{start} function to pre-initialize all configuration parameters
3395
to sensible defaults
3396
 
3397
@item Configuration Validation
3398
All configuration values should be validated, preferably when
3399
encountered, if not when the @code{section} is closed, or otherwise
3400
at run time when the parameter is first used.
3401
 
3402
@end table
3403
 
3404
@node Global Data Structures
3405
@section Global Data Structures
3406
 
3407
@table @code
3408
 
3409
@item config
3410
@cindex configuration global structure
3411
@vindex config
3412
The global variable @code{config} of type @code{struct config} holds
3413
the configuration data for some of the @value{OR1KSIM} components which
3414 82 jeremybenn
are always present.  At present the components are:
3415 19 jeremybenn
 
3416
@itemize @bullet
3417
 
3418
@item
3419
@vindex config.sim
3420
The simulator defined in @code{@w{section sim}} (@pxref{Simulator
3421
Configuration, , Simulator Configuration}).
3422
 
3423
@item
3424
@vindex config.vapi
3425
The Verification API (VAPI) defined  in @code{@w{section vapi}}
3426
(@pxref{Verification API Configuration, , Verification API (VAPI)
3427
Configuration}).
3428
 
3429
@item
3430
@vindex config.cuc
3431
The Custom Unit Compiler (CUC), defined in @code{@w{section cuc}}
3432
(@pxref{CUC Configuration, , Custom Unit Compiler (CUC)
3433
Configuration}).
3434
 
3435
@item
3436
@vindex config.cpu
3437
The CPU, defined in @code{@w{section cpu}} (@pxref{CPU Configuration,
3438
, CPU Configuration}).
3439
 
3440
@item
3441
@vindex config.dc
3442
The data cache (but not the instruction cache), defined in
3443
@code{@w{section dc}} (@pxref{Cache Configuration, , Cache
3444
Configuration}).
3445
 
3446
@item
3447
@vindex config.pm
3448
The power management unit, defined in @code{@w{section pm}}
3449
(@pxref{Power Management Configuration, , Power Management
3450
Configuration}).
3451
 
3452
@item
3453
@vindex config.pic
3454
The programmable interrupt controller, defined in @code{@w{section pic}}
3455
(@pxref{Interrupt Configuration, , Interrupt Configuration}).
3456
 
3457
@item
3458
@vindex config.bpb
3459
Branch prediciton, defined in @code{@w{section bpb}} (@pxref{Branch
3460
Prediction Configuration, , Branch Prediction Configuration}).
3461
 
3462
@item
3463
@vindex config.debug
3464
The debug unit, defined in @code{@w{section debug}} (@pxref{Debug
3465
Interface Configuration, , Debug Interface Configuration}).
3466
 
3467
@end itemize
3468
 
3469
This struct is made of a collection of structs, one for each
3470 82 jeremybenn
component.  For example the simulator configuration is held in
3471 19 jeremybenn
@code{config.sim}.
3472
 
3473
@item config
3474
@cindex configuration dynamic structure
3475
@vindex sections
3476
This is a linked list of data structures holding configuration data
3477
for all sections which are not held in the main @code{config} data
3478 82 jeremybenn
structure.  In general these are components (such as peripherals and
3479
memory) which may occur multiple times.  However it also handles some
3480 19 jeremybenn
architectural components which may occur only once, such as the memory
3481
management units, the instruction cache, the interrupt controller and
3482
branch prediction.
3483
 
3484
@item runtime
3485
@cindex runtime global structure
3486
@vindex runtime
3487
The global variable @code{runtime} of type @code{struct runtime} holds
3488 82 jeremybenn
all the runtime information about the simulation.  To access this
3489 19 jeremybenn
variable, @file{sim-config.h} must be included.
3490
 
3491
@vindex runtime.cpu
3492
@vindex runtime.vapi
3493
@vindex runtime.cuc
3494
This struct is itself made of 3 other structs, @code{cpu} (for CPU run
3495
time state), @code{vapi} (for Verification API state) and @code{cuc}
3496
(for Custom Unit Compiler state).
3497
 
3498
@end table
3499
 
3500
@node Concepts
3501
@section Concepts
3502
 
3503
@table @emph
3504
 
3505
@anchor{Output Redirection}
3506
@item Output Redirection
3507
@cindex output rediretion
3508
@vindex runtime.cpu.fout
3509 82 jeremybenn
The current output stream is held in @code{runtime.cpu.fout}.  Output
3510 19 jeremybenn
should be explicitly written to this stream, or may use the
3511
@code{PRINTF} macro, which will write its arguments to this output stream.
3512
 
3513
@item Reset Hooks
3514
@cindex reset hooks
3515
@findex reg_sim_reset
3516
Any peripheral may register a routine to be called when the the
3517
processor is reset by calling @code{reg_sim_reset}, providing a
3518 82 jeremybenn
function and pointer to a data structure as arguments.  On reset that
3519 19 jeremybenn
function will be called with the data stucture pointer as argument.
3520
 
3521
@end table
3522
 
3523
@node Internal Debugging
3524
@section Internal Debugging
3525
@cindex internal debugging
3526
 
3527
The function @code{debug} is like @code{printf}, but with an extra
3528 82 jeremybenn
first argument, which is the debug level.  If the debug level specified
3529 19 jeremybenn
in the simulator configuration (@pxref{Simulator Behavior, , Simulator
3530
Behavior}) is greater than or equal to this value, the remaining
3531
arguments are printed to the current output stream (@pxref{Output
3532
Redirection, , Output Redirection}).
3533
 
3534 104 jeremybenn
@node Regression Testing
3535
@section Regression Testing
3536
@cindex regression testing
3537
@cindex testing
3538
@value{OR1KSIM} now includes a regression test suite for both standalone
3539
and library usage as described earlier (@pxref{Build and Install,
3540
, Building and Installing}).  Running the tests requires that the
3541
OpenRISC toolchain and DejaGNU are both installed.
3542
 
3543
Tests are written using @command{expect}, a derivative of TCL.
3544
Documentation of DejaGnu, @command{expect} and TCL are freely available
3545
on the Web.  The Embecosm Application Note 8, @cite{Howto: Using DejaGnu
3546
for Testing: A Simple Introduction}
3547
(@uref{http://www.embecosm.com/download/ean8.html}) provides a concise
3548
introduction.
3549
 
3550
All test code is found in the @file{testsuite} directory.  The key
3551
files and directories used are as follows.
3552
 
3553
@table @code
3554
@item global-conf.exp
3555
@cindex DejaGnu configuration
3556
This is the global DejaGNU configuration file used to set up parameters
3557
common to all tests.  If the user has the environment varialbe
3558
@env{DEJAGNU} defined, it will be used instead, but this is not
3559
recommended.
3560
 
3561
@item Makefile.am
3562
@cindex test make file
3563
@cindex make file for tests
3564
This is the top level @command{automake} file for the testsuite.  The
3565
only changes likely to be needed here is additional local cleanup of
3566
files created by new tests.
3567
 
3568
@item README
3569
@cindex test README
3570
This contains details of all the tests
3571
 
3572
@item config
3573
@cindex DejaGnu board configurations
3574
This contains DejaGnu board configurations.  Since the tests are
3575
generally run on a Unix host, this should just contain @file{Unix.exp}.
3576
 
3577
@item lib
3578
@cindex DejaGnu tool specific configuration
3579
This contains DejaGnu tool specific configurations.  ``Tool'' has a
3580
specific meaning in DejaGNU, referring just to a grouping of tests.  In
3581
this case there are two such ``tools'', ``or1ksim'' and ``libsim''
3582
for tests of the standalone tool and tests of the library.
3583
 
3584
Corresponding to this, there are two tool specific configuration files,
3585
@file{or1ksim.exp} and @file{libsim.exp}.  These contain @command{expect}/TCL
3586
procedures for common use among the tests.
3587
 
3588
@item libsim.tests
3589
@itemx or1ksim.tests
3590
@cindex DejaGNU tests directories
3591
These are the directories of tests of the Or1ksim library.  They also include
3592
@value{OR1KSIM} configuration files and each has a @file{Makefile.am} file.
3593
@file{Makefile.am} should be updated whenever files are added to this
3594
directory, to ensure they are included in the distribution.
3595
 
3596
@item test-code
3597
@cindex host test code
3598
@cindex test code for host
3599
These are all the test programs to be compiled on the host (each in its
3600
own directory).  In general these are programs to support testing of the
3601
library, and build various programs linking in the library.
3602
 
3603
@item test-code
3604
@cindex target test code
3605
@cindex test code for target
3606
These are all the test programs to be compiled with the OpenRISC tool
3607
chain to run with either standalone @value{OR1KSIM} or the library. This
3608
directory includes its own @file{configure.ac}, since it must set up a
3609
separate tool chain based on the target, not the host.
3610
 
3611
@end table
3612
 
3613
To add a new test needs the following steps.
3614
 
3615
@itemize @bullet
3616
 
3617
@item
3618
Put new host C code in its own directory within @file{test-code}. Add
3619
the directory to the existing @file{Makefile.am} in the @file{test-code}
3620
directory and create a @file{Makefile.am} in the new directory to
3621
drive building the test program(s). Don't forget to add the new
3622
@file{Makefile} to the top level @file{configure.ac} so it gets generated. Not
3623
all tests require code here.
3624
 
3625
@item
3626
Put new target C code in its own directory within
3627
@file{test-code-or1k}. Once again modify & create
3628
@file{Makefile.am}. this time though modify the @file{configure.ac} in
3629
the @file{test-code-or1k} so the @file{Makefile} gets generated. The
3630
existing programs provide examples to start from, including custom
3631
linker scripts where needed.
3632
 
3633
@item
3634
Add one or more tests and configuration files to the relevant ``tool''
3635
test directory. Use the existing tests as templates. They make heavy use
3636
of the @command{expect}/TCL procedures in the @file{config} directory to
3637
facilitate driving the tests.
3638
 
3639
@end itemize
3640
 
3641 19 jeremybenn
@node  GNU Free Documentation License
3642
@chapter GNU Free Documentation License
3643
@cindex license for @value{OR1KSIM}
3644
 
3645
@include fdl-1.2.texi
3646
 
3647
@node Index
3648
 
3649
@unnumbered Index
3650
 
3651
@printindex cp
3652
 
3653
@bye

powered by: WebSVN 2.1.0

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