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

Subversion Repositories openrisc

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

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

powered by: WebSVN 2.1.0

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