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

Subversion Repositories openrisc

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

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

powered by: WebSVN 2.1.0

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