summaryrefslogtreecommitdiff
path: root/doc/Simulation_and_runtime.rst
diff options
context:
space:
mode:
authorTristan Gingold2015-11-21 05:54:42 +0100
committerTristan Gingold2015-11-24 05:22:09 +0100
commit60fd762fa36f72b9ddad8cda84b6c16c6936d942 (patch)
treebf6fe454ca4ed09519203f188b932408f6ceee5c /doc/Simulation_and_runtime.rst
parent27a4852201a41e7d6f8098cc05b7b0949ebc6af4 (diff)
downloadghdl-60fd762fa36f72b9ddad8cda84b6c16c6936d942.tar.gz
ghdl-60fd762fa36f72b9ddad8cda84b6c16c6936d942.tar.bz2
ghdl-60fd762fa36f72b9ddad8cda84b6c16c6936d942.zip
Convert documentation to sphinx.
Diffstat (limited to 'doc/Simulation_and_runtime.rst')
-rw-r--r--doc/Simulation_and_runtime.rst239
1 files changed, 239 insertions, 0 deletions
diff --git a/doc/Simulation_and_runtime.rst b/doc/Simulation_and_runtime.rst
new file mode 100644
index 0000000..329dca8
--- /dev/null
+++ b/doc/Simulation_and_runtime.rst
@@ -0,0 +1,239 @@
+.. _simulation_and_runtime:
+
+**********************
+Simulation and runtime
+**********************
+
+.. _simulation_options:
+
+Simulation options
+==================
+
+In most system environments, it is possible to pass options while
+invoking a program. Contrary to most programming languages, there is no
+standard method in VHDL to obtain the arguments or to set the exit
+status.
+
+In GHDL, it is impossible to pass parameters to your design. A later version
+could do it through the generics interfaces of the top entity.
+
+However, the GHDL runtime behaviour can be modified with some options; for
+example, it is possible to stop simulation after a certain time.
+
+The exit status of the simulation is :samp:`EXIT_SUCCESS` (0) if the
+simulation completes, or :samp:`EXIT_FAILURE` (1) in case of error
+(assertion failure, overflow or any constraint error).
+
+Here is the list of the most useful options. Some debugging options are
+also available, but not described here. The :option:`--help` options lists
+all options available, including the debugging one.
+
+
+
+.. option:: --assert-level=<LEVEL>
+
+ Select the assertion level at which an assertion violation stops the
+ simulation. `LEVEL` is the name from the `severity_level`
+ enumerated type defined in the `standard` package or the
+ :samp:`none` name.
+
+ By default, only assertion violation of severity level :samp:`failure`
+ stops the simulation.
+
+ For example, if `LEVEL` was :samp:`warning`, any assertion violation
+ with severity level :samp:`warning`, :samp:`error` or :samp:`failure` would
+ stop simulation, but the assertion violation at the :samp:`note` severity
+ level would only display a message.
+
+ Option :option:`--assert-level=none` prevents any assertion violation to stop
+ simulation.
+
+.. option:: --ieee-asserts=<POLICY>
+
+ Select how the assertions from :samp:`ieee` units are
+ handled. `POLICY` can be :samp:`enable` (the default),
+ :samp:`disable` which disables all assertion from :samp:`ieee` packages
+ and :samp:`disable-at-0` which disables only at start of simulation.
+
+ This option can be useful to avoid assertion message from
+ :samp:`ieee.numeric_std` (and other :samp:`ieee` packages).
+
+
+.. option:: --stop-time=<TIME>
+
+ Stop the simulation after :samp:`TIME`. :samp:`TIME` is expressed as a time
+ value, *without* any space. The time is the simulation time, not
+ the real clock time.
+
+ For example::
+
+ $ ./my_design --stop-time=10ns
+ $ ./my_design --stop-time=ps
+
+
+.. option:: --stop-delta=<N>
+
+ Stop the simulation after `N` delta cycles in the same current time.
+
+ .. index:: display time
+
+.. option:: --disp-time
+
+ Display the time and delta cycle number as simulation advances.
+
+
+.. option:: --disp-tree[=<KIND>]
+
+ .. index:: display design hierarchy
+
+ Display the design hierarchy as a tree of instantiated design entities.
+ This may be useful to understand the structure of a complex
+ design. `KIND` is optional, but if set must be one of:
+
+
+ * none
+ Do not display hierarchy. Same as if the option was not present.
+
+ * inst
+ Display entities, architectures, instances, blocks and generates statements.
+
+ * proc
+ Like :samp:`inst` but also display processes.
+
+ * port
+ Like :samp:`proc` but display ports and signals too.
+ If `KIND` is not specified, the hierarchy is displayed with the
+ :samp:`port` mode.
+
+
+.. option:: --no-run
+
+ Do not simulate, only elaborate. This may be used with
+ :option:`--disp-tree` to display the tree without simulating the whole
+ design.
+
+
+.. option:: --vcd=<FILENAME>
+
+.. option:: --vcdgz=<FILENAME>
+
+ .. index:: vcd
+
+ .. index:: value change dump
+
+ .. index:: dump of signals
+
+ Option :option:`--vcd` dumps into the VCD file `FILENAME` the signal
+ values before each non-delta cycle. If `FILENAME` is :samp:`-`,
+ then the standard output is used, otherwise a file is created or
+ overwritten.
+
+ The :option:`--vcdgz` option is the same as the *--vcd* option,
+ but the output is compressed using the `zlib` (`gzip`
+ compression). However, you can't use the :samp:`-` filename.
+ Furthermore, only one VCD file can be written.
+
+ :dfn:`VCD` (value change dump) is a file format defined
+ by the `verilog` standard and used by virtually any wave viewer.
+
+ Since it comes from `verilog`, only a few VHDL types can be dumped. GHDL
+ dumps only signals whose base type is of the following:
+
+
+ * types defined in the :samp:`std.standard` package:
+
+ * :samp:`bit`
+
+ * :samp:`bit_vector`
+
+ * types defined in the :samp:`ieee.std_logic_1164` package:
+
+ * :samp:`std_ulogic`
+
+ * :samp:`std_logic` (because it is a subtype of :samp:`std_ulogic`)
+
+ * :samp:`std_ulogic_vector`
+
+ * :samp:`std_logic_vector`
+
+ * any integer type
+
+ I have successfully used `gtkwave` to view VCD files.
+
+ Currently, there is no way to select signals to be dumped: all signals are
+ dumped, which can generate big files.
+
+ It is very unfortunate there is no standard or well-known wave file
+ format supporting VHDL types. If you are aware of such a free format,
+ please mail me (:ref:`Reporting_bugs`).
+
+
+.. option:: --fst=<FILENAME>
+
+ Write the waveforms into a `fst`, that can be displayed by
+ `gtkwave`. The `fst` files are much smaller than VCD or
+ `GHW` files, but it handles only the same signals as the VCD format.
+
+
+.. option:: --wave=<FILENAME>
+
+ Write the waveforms into a `ghw` (GHdl Waveform) file. Currently, all
+ the signals are dumped into the waveform file, you cannot select a hierarchy
+ of signals to be dumped.
+
+ The format of this file was defined by myself and is not yet completely fixed.
+ It may change slightly. The :samp:`gtkwave` tool can read the GHW files.
+
+ Contrary to VCD files, any VHDL type can be dumped into a GHW file.
+
+
+.. option:: --sdf=<PATH>=<FILENAME>
+
+ Do VITAL annotation on `PATH` with SDF file :file:`FILENAME`.
+
+ `PATH` is a path of instances, separated with :samp:`.` or :samp:`/`.
+ Any separator can be used. Instances are component instantiation labels,
+ generate labels or block labels. Currently, you cannot use an indexed name.
+
+ Specifying a delay::
+
+ --sdf=min=<PATH>=<FILENAME>
+ --sdf=typ=<PATH>=<FILENAME>
+ --sdf=max=<PATH>=<FILENAME>
+
+ If the option contains a type of delay, that is :samp:`min=`,
+ :samp:`typ=` or :samp:`max=`, the annotator use respectively minimum,
+ typical or maximum values. If the option does not contain a type of delay,
+ the annotator use the typical delay.
+
+ See :ref:`Backannotation`, for more details.
+
+
+.. option:: --help
+
+ Display a short description of the options accepted by the runtime library.
+
+Debugging VHDL programs
+=======================
+
+.. index:: debugging
+
+.. index:: `__ghdl_fatal`
+
+Debugging VHDL programs using `GDB` is possible only on GNU/Linux systems.
+
+`GDB` is a general purpose debugger for programs compiled by `GCC`.
+Currently, there is no VHDL support for `GDB`. It may be difficult
+to inspect variables or signals in `GDB`, however, `GDB` is
+still able to display the stack frame in case of error or to set a breakpoint
+at a specified line.
+
+`GDB` can be useful to precisely catch a runtime error, such as indexing
+an array beyond its bounds. All error check subprograms call the
+`__ghdl_fatal` procedure. Therefore, to catch runtime error, set
+a breakpoint like this:
+
+ (gdb) break __ghdl_fatal
+
+When the breakpoint is hit, use the `where` or `bt` command to
+display the stack frames.