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

Subversion Repositories openrisc

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

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

powered by: WebSVN 2.1.0

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