Commit graph

1406 commits

Author SHA1 Message Date
Rupert Swarbrick
d20281ca1b Allow ibex_log_to_trace_csv.py to run from other directories
The updated sys.path was wrong because it was based on current
directory, rather than __file__.
2020-03-03 09:04:34 +00:00
Rupert Swarbrick
7df14341ef Avoid unneccessary rebuilding in dv/uvm/core_ibex/Makefile
Before this patch, running the Makefile's default target deleted
everything and then ran the whole flow. This sometimes does
unnecessary work (if I've just changed the design, there's no need to
rebuild and re-run the instruction generator). It also definitely
won't work with Make's -j flag, since it depends on the targets being
built in order.

This patch keeps the same stages in the Makefile, but makes each stage
generate a stamp file, adding dependencies between the stages. This
way, you can make a small change to the design and re-run the
simulation without having to generate the random inputs again.

This doesn't make much difference if you're running lots of tests with
no LSF (since VCS is very slow, its runtime for simulation completely
dominates), but it can make a significant difference if you're
debugging a single test, have made a change to the design and want to
re-run.

One significant change is that running 'make' doesn't automatically
delete existing files any more. To make this possible (and useful!),
we generate random data and test results in a directory keyed by the
seed. For example

  make SEED=123

will generate results in out/seed-123/regr.log (rather than
out/regr.log as before).

To make sure we rebuild things properly if you change something like
the number of iterations or the tests to run, we dump some variables
describing the mode in which we were running. If these don't match the
nnext time around, we'll rebuild stuff if necessary.

Advanced (or hurried) users of the existing Makefile might have done
things like change the design and then run

  make SEED=123 compile rtl_sim

Now, the rtl_sim target depends on its logical dependencies. On the
plus side, this means that you won't accidentally simulate out-of-date
code. On the minus side, cunning tricks to avoid having to re-run
stuff after touching a design file won't work. (If you're feeling
really determined to do something like that, it's still possible with
make -t).

The seed-specific stamp files and dumped Make variables go into
$(OUT-SEED)/.metadata directory, rather than $(OUT-SEED)/instr_gen or
$(OUT-SEED)/rtl_sim. This is because of a review comment (to avoid
extra clutter in the output directories).
2020-03-03 09:04:21 +00:00
Rupert Swarbrick
91d7721fa9 Make exiting from simple_system tests work with Spike 2020-03-02 15:45:47 +00:00
Rupert Swarbrick
e9872889bf Split have_instr definition out of always block in if_stage
This should cause no functional change, but avoids a seeming
combinatorial loop reported by Verilator.

The seeming loop is because the always_comb process that contained
have_instr is sensitive to if_id_pipe_reg_we but that process wrote
the have_instr signal, which is used in the continuous assignment to
if_id_pipe_reg_we later on.
2020-03-02 12:42:17 +00:00
Rupert Swarbrick
1679d00cb7 Waive verilator warning about unused addr bits in timer.sv 2020-03-02 12:42:17 +00:00
Rupert Swarbrick
ec993fc6e9 Waive verilator warnings about unused addr bits in simulator_ctrl.sv 2020-03-02 12:42:17 +00:00
Rupert Swarbrick
debc8e1379 Add Verilator waivers to the non-lint target in ibex_core.core
We want to hide Verilator warnings from actual builds as well as just
linting.
2020-03-02 12:42:17 +00:00
Rupert Swarbrick
96f95df23d Fix typo in signal declaration in timer.sv 2020-03-02 12:42:17 +00:00
Stefan Wallentowitz
5aa1585f63 Switch Verilator linter to matches
Verilator will soon support the configuration file syntax of wildcard
matches for linter warnings to waive. Switch to the new syntax that
avoids line-based rule settings.
2020-03-02 12:01:10 +00:00
Greg Chadwick
5a208a044b [dv] Increase timeouts to fix failures 2020-03-02 09:34:09 +00:00
udinator
8f24ce120a
[dv] fix qrun compile warnings (#639)
Signed-off-by: Udi <udij@google.com>
2020-02-29 15:16:24 -08:00
Rupert Swarbrick
629c0cbab1 Make sim.py less chatty when just compiling the testbench
The process_regression_list function from riscv-dv is really chatty.
When we're just compiling the testbench, we don't actually need to
figure out what tests we're running, since we'll never run them
anyway. So don't call it.
2020-02-29 12:13:15 +00:00
udinator
eee026abec
[dv] remove usage of 0x from sim flow (#638)
Signed-off-by: Udi <udij@google.com>
2020-02-28 17:03:29 -08:00
udinator
d8b9737039
update riscv_core_setting (#633)
Signed-off-by: Udi <udij@google.com>
2020-02-28 17:02:07 -08:00
Rupert Swarbrick
59b3f7f476 Set the ELF entry point in simple system linker script
This is part of work to run binaries created for the simple system
under Spike. Spike's default behaviour (after a weird 'rom' trampoline
at 0x1000) is to obey the entry point given in the ELF file. So let's
set it correctly.
2020-02-28 10:02:56 +00:00
Rupert Swarbrick
38d6932a6a Improve docs for getting started in verification.rst
The important change is that we now tell the user to configure spike
with --enable-misaligned. This is needed because Ibex handles
misaligned loads and stores rather than jumping to a trap handler (the
default behaviour in spike).

There's also a little more information about where you can find the
various tools and how to set them up.

Note that the existing deep links to riscv-dv's documentation
bit-rotted at the start of February.
2020-02-28 09:47:38 +00:00
Rupert Swarbrick
ade643001b
Dump to VPD in dv/uvm if Verdi is not available (#630)
If VERDI_HOME is not set, calling fsdbDumpfile makes VCS hang with an
error message. This patch checks whether we think FSDB dumping is
actually going to work and, if not, dumps with the default VCD+
format (also called VPD) instead.
2020-02-28 09:46:13 +00:00
Rupert Swarbrick
03efdaaf9e Tiny docs fix in examples/simple_system
Missing "can" (which sounds a bit like a pirate!) and full stop.
2020-02-27 11:26:57 +00:00
Rupert Swarbrick
77ecffc335 Fix previous gitignore change for uvm directory rejig
I'd written the original patch (b157573) on a branch that didn't
include commit 2431551 (which moves stuff that was in dv/uvm into
dv/uvm/core_ibex). Apparently, I'd fixed up the rule for the output
directory, but I'd missed the ucli.key file.
2020-02-27 10:06:08 +00:00
Rupert Swarbrick
b1575739b0 Add .gitignore rules for auto-generated files 2020-02-26 17:32:23 +00:00
dawidzim
fde40564a2
Tracer: Mark all functions "automatic"
By default, variables in functions are static in SystemVerilog. This caused `string desc = "";` in `get_fence_description` to be executed only once, i.e. the text was continuously extended from the last call.

Mark all functions `automatic` to get behavior as one would expect from normal functions.
2020-02-21 10:31:05 +00:00
udinator
24315515f6
Reorganize ibex dv files (#618)
Signed-off-by: Udi <udij@google.com>
2020-02-20 15:56:40 -08:00
udinator
0af48120ba
VCS compile fix (#616)
Signed-off-by: Udi <udij@google.com>
2020-02-20 15:12:50 -08:00
udinator
f98cd607af
Update google_riscv-dv to google/riscv-dv@6bd3233 (#617)
Update code from upstream repository https://github.com/google/riscv-
dv to revision 6bd323385d454858ea5e50dedd42a563b37931fe

* VCS compile option fix (Udi Jonnalagadda)
* Improve pmp config object - enable cmdline args (Udi Jonnalagadda)
* Fix ovpsim setting (google/riscv-dv#478) (taoliug)
* IUS - enable rand structs in simulation (google/riscv-dv#477)
  (udinator)
* fix macro definition compile issue (Udi Jonnalagadda)
* add ISS command line options (google/riscv-dv#474) (udinator)
* Add style check (Weicai Yang)

Signed-off-by: Udi <udij@google.com>
2020-02-20 15:07:12 -08:00
Tobias Wölfel
77c93f1e54 [doc] Fix reference link 2020-02-20 15:50:53 +00:00
Philipp Wagner
aab15bc922 CI: Pin riscv-compliance repo to specific commit
Recently changes in the RISC-V compliance repo have caused our tests to
fail. That indicent highlighted the issue that we use the latest master
version of the compliance suite without pinning the version.

This PR fixes that by pinning to a specific version where our tests
still succeeded.

Upstream PR to fix actual failure: https://github.com/riscv/riscv-compliance/pull/92
Works around #608
2020-02-20 15:45:51 +00:00
Tobias Wölfel
7c9c7599d2 [rtl] Change misa for RV32E
Following RISC-V privileged architecture version 1.11,
the "E" bit of misa should return the complement of the "I" bit.

Set the "I" bit only if RV32E is not used.

Closes lowRISC/ibex#612.
2020-02-20 14:29:32 +00:00
Greg Chadwick
f90faa6ca3 [rtl] Alter multdiv to better match style guide
Use of case inside in always_ff block does not meet style guide
recomendations. Refactored to remove this.

Signed-off-by: Greg Chadwick <gac@lowrisc.org>
2020-02-17 13:41:55 +00:00
Philipp Wagner
dfd7f9e437 Doc: Fix broken table in integration docs 2020-02-12 15:57:40 +00:00
Philipp Wagner
b1af9174dc Doc: Documented supported tool versions
Add a section on supported tools to the Ibex documentation. Populate it
with my knowledge about tools we've tried. That's a starting point: we
need to add more version numbers and other information as we collect
more data points.

The Verilator version is taken from the new tool_requirements.py file
and inserted into Sphinx.
2020-02-12 15:57:40 +00:00
Philipp Wagner
3a078865c8 Check for supported tool versions
Define supported tool versions in tool_requirements.py, and check them
in a fusesoc run. If an unsupported tool version is found, fusesoc
outputs an error like this:

```
$ fusesoc --cores-root . run --target=lint lowrisc:ibex:ibex_core
INFO: Preparing lowrisc:ibex:check_tool_requirements:0.1
INFO: Preparing lowrisc:prim:assert:0.1
INFO: Preparing lowrisc:ibex:sim_shared:0
INFO: Preparing lowrisc:ibex:ibex_core:0.1
INFO: Setting up project

INFO: Running pre_build script check_tool_requirements
ERROR: verilator is too old: found version 4.010, need at least 4.028
ERROR: Tool requirements not fulfilled. Please update the tools and retry.
ERROR: Failed to build lowrisc:ibex:ibex_core:0.1 : pre_build script 'check_tool_requirements' exited with error code 1
```

The only version checked at this point is Verilator, which is set
somewhat arbitrarily to the version used by me (and I know it works). CI
uses a slightly newer version. As we are about to merge changes soon
which require a newer Verilator version, there's not much point in
finding the oldest supported version right now.
2020-02-12 15:57:40 +00:00
Philipp Wagner
db62f5b0c2 Doc: Cleanup Sphinx config file
- Add a license header
- Explicitly specify language
- Remove unused HTML help section
- Reorganize some commands around the version number generation
2020-02-12 15:57:40 +00:00
ganoam
48c4b6a5ea [rtl] Add Single Cycle Multiplier targeting FPGA
* Integrate option to implement a multiplier using 3 parallel 17 bit
        multipliers in order to compute MUL instructions in 1 cycle
        MULH in 2 cycles.

* Add parameter SingleCycleMultiply to select single cycle
        multiplication.

The single cycle multiplication capability is intended for FPGA
targets. Using three parallel multiplication units improves performance
of multiplication operations at the cost of DSP primitives. For ASIC
targets, the area consumed by the multiplication structure will grow
approximately 3-4x.

The functionality is selected within the module using the parameter
`SingleCycleMultiply`. From the top level it can be chosen by setting
the parameter `MultiplierImplementation` to 'single_cc'.

Signed-off-by: ganoam <gnoam@live.com>
2020-02-11 16:09:41 +01:00
Stefan Mach
ba2240f138 Reduce latency of slow multiplier
- The slow multiplier is modified to terminate iterations early instead
  of always going the full 32 iterations for `MUL` instructions.
- Multiplications now terminate early after clog2(`op_b`) iterations.
- The slow multiplier can be further optimized by swapping the smaller
  operand into `op_b` when in the `MD_IDLE` state.
2020-02-10 18:28:14 +01:00
udinator
fc2fb22a7d
[dv] add command line PMP option configurability (#599)
Signed-off-by: Udi <udij@google.com>
2020-02-10 09:24:06 -08:00
Greg Chadwick
8e28ba0b9e [syn] Fix synthesis script
* prim_assert now an include so add appropriate include dir
* remove FPGA reg file from synthesised files
2020-02-10 17:01:50 +00:00
Greg Chadwick
24cbc32249 [rtl] Fix assertion issues
Fixes #548
2020-02-10 17:01:38 +00:00
Philipp Wagner
f24ffa5657 Update setuptools and pip to parse more metadata
The Ubuntu xenial-provided versions of setuptools and pip don't parse
all metadata present in Python packages, especially not the "minimum
required Python version" bit. More and more packages are using this
information to limit Python 3.5-support to older versions of their
packages. In this case, the problem was caused by the "zipp" package,
which is a very remote dependency of fusesoc.

Fixes #597
2020-02-10 15:10:57 +00:00
Greg Chadwick
5d16a5b104 [rtl] Introduce default clk/reset to prim_assert
This mirrors the change made in OpenTitan
(https://github.com/lowRISC/opentitan/pull/1485)
2020-02-10 09:42:52 +00:00
udinator
c914ec5e6a
update testlist typo (#593)
Signed-off-by: Udi <udij@google.com>
2020-02-07 11:27:53 -08:00
udinator
a97b7b7b15
Update google_riscv-dv to google/riscv-dv@6e2bc2e (#589)
Update code from upstream repository https://github.com/google/riscv-
dv to revision 6e2bc2e01fb20799c9eff29a26852eb1917b977a

* fix a missed syntax error in pmp_cfg (Udi Jonnalagadda)

Signed-off-by: Udi <udij@google.com>
2020-02-06 13:37:00 -08:00
udinator
d4cb1a30ae
[dv] enable PMP (#588)
Signed-off-by: Udi <udij@google.com>
2020-02-06 11:54:56 -08:00
udinator
2be7413ac8
Update google_riscv-dv to google/riscv-dv@e63c542 (#587)
Update code from upstream repository https://github.com/google/riscv-
dv to revision e63c5427b0bf543aebb9c62bba8217065b029a76

* Add pmp configuration object (Udi Jonnalagadda)
* add path for the prebuilt document (google/riscv-dv#469) (taoliug)
* Update document for directed assembly/C test (google/riscv-dv#467)
  (taoliug)
* Fix broken document link (google/riscv-dv#466) (taoliug)
* Add a runtime option to fix stack pointer (google/riscv-dv#465)
  (taoliug)
* Fix LR/SC instruction issue for RV32A (google/riscv-dv#464)
  (taoliug)

Signed-off-by: Udi <udij@google.com>
2020-02-06 11:03:22 -08:00
Greg Chadwick
3f0b730d57 [doc] Riviera-PRO instructions for Simple System
Fixes #578

Signed-off-by: Greg Chadwick <gac@lowrisc.org>
2020-02-05 11:40:01 +00:00
Pirmin Vogel
2a42c23eaf [rtl] Decouple mip and mie CSRs
This commit modifies the `mip` CSR to not depend on the `mie` CSR. While
the values of both these CSRs are combined to decide whether an
interrupt shall be handled, the RISC-V spec does not state that the
content of of `mip` should depend on `mie`. This commit better aligns
Ibex with other open-source RISC-V cores.

This resolves lowRISC/ibex#567 reported by @pfmooney.

Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
2020-02-04 16:15:38 +01:00
Tobias Wölfel
6708ba62ac Extend riscv-compliance description
Include all tests in the description which can be executed for Ibex and
riscv-compliance.
2020-02-04 14:56:40 +00:00
dalance
36eec8e41a Fix incdirs of src_files.yml 2020-02-03 08:33:11 +00:00
Luís Marques
ed8bcc0d33 [verilator] Fix ELF loading
In `VerilatorMemUtil::WriteElfToMem`, the verilator memory is written
with the ELF segment data, 4 bytes at a time . If the segment size isn't
a multiple of 4 (e.g. when using the RISC-V C extension) the last word
wouldn't be written. This patch rounds the size up to a multiple of 4,
solving that issue.
2020-02-03 08:32:13 +00:00
Stephano Cetola
bfba13bbf3 Fix FPGA part number for Arty A7-100T
For some reason the part number between the Arty A7-35T and the Arty
A7-100T differs by 1 letter (TICSG vs TCSG). This patch fixes the part
number for the Arty A7-100T to remove the "i".

Signed-off-by: Stephano Cetola <scetola@linuxfoundation.org>
2020-02-02 11:47:59 +01:00
Pirmin Vogel
b22fca7bbe Ignore all interrupts in NMI mode, clarify interrupt documentation
This is related to lowRISC/ibex#557, lowRISC/ibex#469 and
lowRISC/ibex#434.

Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
2020-01-31 13:09:09 +01:00