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