Commit graph

1819 commits

Author SHA1 Message Date
Yuichi Sugiyama
def205ad76 Add README.md for pointer authentication test 2020-08-04 09:28:31 +02:00
Yuichi Sugiyama
505c9daec1 [rtl] Fix Gift cipher lint errors
- Import::* may pollute global namespace
- Signal width is different
- Signal is not used
- Signal unoptimizable: Feedback to clock or circular logic
2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
719801b938 [rtl] Hook up real Gift cipher core 2020-07-15 17:02:42 +02:00
Flavien Solt
6ae4d3a376 Improved Gift package 2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
6bc3022cc2 [rtl/sw] Add PAC and AUT counters 2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
089016eb74 [rtl] Update tracer for PAC and AUT 2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
efcb049839 [rtl] Fix instr_id_done_o for PAC instruction
PAC instruction writes to the register file twice,
so when not taking stall_pa into consideration,
instr_id_done_o is activated twice during the execution of an PAC.
Unfortunately it interferes with the implementation of counters and
tracers for PAC, so now we are using stall_pa to calculate instr_id_done_o.
2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
46bef34dee [rtl] Fix hazard detection issues for Pointer Authentication
With the writeback stage enabled we execute the PAC/AUT instruction
before the required data is written to the register file.
For example, when the load instruction precedes AUT instruction,
AUT instruction is started before the loaded data is written
to the register file. It is a problem that the hazard detection
(stall_ld_hz) using rf_ren_a/b_o was not active for PAC/AUT instruction.
Also, I change codes not to activate pa_pac_en or pa_aut_en
when load hazard occurs.
2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
268f34530a [sw] Run clang-format on pa_test.c 2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
47be986b74 [rtl] Fix Pointer Authentication lint errors
- Bits of signal are not used
- Case values incompletely covered
- Signal unoptimizable: Feedback to clock or circular logic
2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
bca263f77c [sw] Add Pointer Authentication test 2020-07-15 17:02:42 +02:00
Yuichi Sugiyama
f13ac7b8b9 [rtl] Add Pointer Authentication 2020-07-15 17:02:42 +02:00
Flavien Solt
b1ff52dc67 Input signal injection 2020-07-15 16:38:31 +02:00
Flavien Solt
3a738a2a15 Added Gift cipher for pointer authentication 2020-07-15 16:38:31 +02:00
Tom Roberts
c542edbb1a [rtl] Add register-file ECC checking
- Add SECDED ECC checking to the register file when SecureIbex is
  enabled
- No correction is attempted, but an alert is raised for the system to
  intervene

Signed-off-by: Tom Roberts <tomroberts@lowrisc.org>
2020-07-15 09:50:23 +01:00
Tom Roberts
aae437d75b [rtl] Add alert outputs
- Add a major and minor alert output which can be used by the system to
  react to fault injection attacks

Signed-off-by: Tom Roberts <tomroberts@lowrisc.org>
2020-07-15 09:50:23 +01:00
Tom Roberts
a9642cfb48 [params] Add SecureIbex option to simple system
Signed-off-by: Tom Roberts <tomroberts@lowrisc.org>
2020-07-15 09:50:23 +01:00
Greg Chadwick
6b9165fa66 [doc] Update READMEs with best CoreMark results 2020-07-10 13:49:19 +01:00
Greg Chadwick
adafa73ca8 [sw] Enable choice of -march= string for CoreMark 2020-07-10 13:49:19 +01:00
Dawid Zimonczyk
1dfddee5e6 Value passed to UVM set_timeout is calculated as 1000000000 basing on 1ns/1ps timescale.
But if you are using precompiled UVM it may be compiled with other timescale depending on compilation option used when it was compiled or tools default timescale value (uvm does not set timescale int the code).
In this case for us precompiled UVM timescale is 1ps/1ps - so UVM gets 1000000000 in set timeout but interprets it as ps. As a result timeout is 1000 times smaller that you expect. That is why we are getting timeouts.
It is hard to find perfect solution. One of them is to recompile the UVM with -timescale 1ns/ps (or whatever you will use for your design).
2020-07-10 10:56:03 +01:00
Dawid Zimonczyk
14f85d3ee3 update readme for Riviera-PRO 2020-07-10 10:29:24 +01:00
Dawid Zimonczyk
9208689c21 correct wrong assignment to enum 2020-07-09 18:12:28 +01:00
Philipp Wagner
4223803d22 Lint: Fix some line length warnings
AscentLint complains about lines longer than 100 characters, as seen in
the nightly lint reports. Fix some (all?) of them.
2020-07-09 13:42:33 +01:00
Philipp Wagner
d0923fa5d1 ibex_counter: Use always_ff
Fix a lint error reported by AscentLint:

```
E   ALWAYS_SPEC:   ibex_counter.sv:59   Edge triggered block may be more accurately modeled as always_ff                 New
```
2020-07-09 13:42:33 +01:00
Philipp Wagner
3d29e5174c Enforce lint of simple system in CI
The existing setup had a couple mixups in them which failed them to be
effective.
2020-07-07 16:21:48 +01:00
Philipp Wagner
85d0ce36cb Specify data type for all parameters in simple_system
Fixes a lint warning.
2020-07-07 16:21:48 +01:00
Philipp Wagner
f688c79565 Clarifications to the README of the simple system
* Mention the need to install `libelf-dev`. Thanks to Bert Pieters for
  reporting this.
* Guide users to install our Python dependencies, including fusesoc and
  edalize, from `python-requirements.txt`, to ensure they have the
  right version.
* Prefer ELF files for Verilator simulations. This makes it easier to
  use existing ELF files from another software build system.

Fixes #1019
2020-07-07 15:35:55 +01:00
Philipp Wagner
c476329608 Only include necessary LFSR primitive
We previously had a dependency on all primitives in Ibex, even though we
only depend on the LFSR primitive. Now that there's a more fine-grained
dependency available, we can use that.

This has the great benefit of restricting all lint tools to only the
code we're interested in, and not linting all primitives in OpenTitan
together with Ibex. This also helps tools like yosys, which aren't able
to parse all of OpenTitan's code yet.
2020-07-07 15:21:32 +01:00
Philipp Wagner
ee0a1cf2ce Update lowrisc_ip to lowRISC/opentitan@ebf4663b
Update code from upstream repository
https://github.com/lowRISC/opentitan to revision
ebf4663b42a9d81d026db5821b5c8249d54f23a7

* [prim_lfsr] Fix description in core file for FPV (Philipp Wagner)
* [prim_lfsr] Factor out into a separate core file (Philipp Wagner)

Signed-off-by: Philipp Wagner <phw@lowrisc.org>
2020-07-07 15:21:32 +01:00
Udi
75dadb5aef [dv/ibex] Add two new interrupt/debug tests
As a result of lowRISC/opentitan#2405 and lowRISC/ibex#928 (reporting
that interrupts that came in while a load instruction was in the ID
stage caused some incorrect behavior in Ibex), this PR adds some new
directed interrupt and debug tests to check that the core behaves
properly during execution of each supported instruction when some
external irq/debug stimulus comes in.

To do this, we use the two new functions `decode_instr(...)` and
`decode_compressed_instr(...)` in `core_ibex_test_list.sv` to "decode"
every instruction that the `core_ibex_instr_monitor_if` sees in the ID
stage of the pipeline. Once the testbench decodes an instruction that
we have not seen before, it can then drive interrupt or debug stimulus
into the core.

Once any given instruction has been detected by the testbench (and
stimulus driven), it will no longer drive stimulus if this instruction
is seen in the decode pipeline (e.g. if we have previously detected a
`c.addi` instruction in the ID stage and have driven irq/debug stimulus,
we will no longer drive stimulus if we see another `c.addi` instruction,
no matter the operands). This is to avoid driving irq/debug stimulus
after every single instruction as this will add a huge unwanted amount
of simulation latency.

A few notes:

- We drive irq/debug stimulus into the core every time we see a
  `wfi` instruction, as otherwise we will timeout as the core waits
  infinitely for some stimulus from the outside world.
- We ignore some system-level instructions (ebreak/mret/dret) and
  illegal instructionsfor now, as driving stimulus during these
  instructions will result in a nested trap, which requires special
  handling.
- The interrupt agent was modified slightly to drive stimulus by
  default on the falling edge of the clock, so this way we can "catch"
  instructions that are in the ID pipeline for only a single cycle.
- The duration for which the testbench raises `debug_req_i` for the core
  is also increased to avoid edge cases where we lower the debug line
  too early (e.g. while long multicycle instructions like `div` are
  executing in the ID stage).
2020-07-06 17:50:59 -07:00
Pirmin Vogel
414ff7eeb0 [doc] Fix spelling of CoreMark
Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
2020-07-06 12:30:02 +02:00
Rupert Swarbrick
d7284c2cbd Handle --help properly in simple_system top-level 2020-07-06 10:31:58 +01:00
Rupert Swarbrick
45d3790d40 Update lowrisc_ip to lowRISC/opentitan@9ac4f9c8
Update code from upstream repository
https://github.com/lowRISC/opentitan to revision
9ac4f9c8b924b79eb7d3581b29346a612f705751

* Allow verilated top-levels to do work after a simulation completes
  (Rupert Swarbrick)
* Add some missing dependencies on lowrisc:prim:assert (Rupert
  Swarbrick)

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
2020-07-06 10:31:58 +01:00
Philipp Wagner
f98ddabee1 Use the Xilinx primitives for the Arty board
Use Xilinx-specific implementations for primitives, such as RAM and the
clock gate (which will now be implemented using a BUFGCE macro, and no
longer with a latch).

Verified in Vivado synthesis to pick up the Xilinx primitive now.
2020-07-06 10:20:39 +01:00
Pirmin Vogel
ede658b92a [doc] Clarify that the supported version of the B extension is a draft
Support for this extension is not experimental (it's fully verified using
RISCV-DV) but the extension might change before being ratified.

Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
2020-07-05 13:52:56 +02:00
Philipp Wagner
0335b69e26 Clean up Verilator sections in core files
- The "PINCONNECTEMPTY" waiver is part of our normal waiver file, no need
  to add it to the tool invocation.
- Recent versions of Verilator choose good defaults for MAKE_OPTS,
  passing it explicitly overrides the settings.
- All Verilator code is now lint clean, we can remove `-Wno-fatal`.
- FST traces are not much slower then VCD traces any more in recent
  Verilator versions, remove the respective comment.
- Align comment about the compile/sim time for tracing with other files
  and OpenTitan.
2020-07-03 17:54:41 +01:00
Philipp Wagner
9e3bec0dc6 Fix and waive Verilator lint errors in tb_cs_registers
Add a waiver for top-level parameters passed in through the command
line, and fix the use within the file.
2020-07-03 17:54:41 +01:00
Philipp Wagner
9bd09c0b74 Remove lowrisc:prim:clock_gating from shared core collections
The clock gating primitive is now a dependency of the
lowrisc:ibex:ibex_core file directly and only used in there, we can
remove it from the simulation or FPGA dependency collections.
2020-07-03 17:08:02 +01:00
Philipp Wagner
465ea2806c Add lint for ibex_simple_system to CI 2020-07-03 16:18:31 +01:00
Philipp Wagner
a10df87daa ibex_simple_system: Add lint target 2020-07-03 16:18:31 +01:00
Philipp Wagner
3bc105492f Simplify lint targets
The only core which needs lint waivers is ibex_core.core; it will then
inherit those waivers to other cores, such as ibex_core_tracing.core,
and higher-up users of these cores (such as the simple system).

Also remove the Verible lint configuration, which happens to be the
default by now. This fixes #736 by making it unnecessary.
2020-07-03 16:18:31 +01:00
Philipp Wagner
c436ea1b1b Remove unrelated files from lint in ibex_core_tracing
The lint target in ibex_core_tracing was used to also lint unrelated
files which are needed for some simulations (e.g. the simple system).
Remove them from there, as they really don't belong there.
2020-07-03 16:18:31 +01:00
Philipp Wagner
89e525ecc8 Add dependency on prim_clock_gating
Ibex depends on a clock gating primitive. This has always been the case;
previously, we have under-specified the dependency list by simply not
including this dependency. This is problematic not only because "IT'S
WRONG!", but also because it breaks self-contained targets, like
Verilator lint, which cannot run on ibex_core or ibex_core_tracing
without having a way to find the clock gating primitive.
2020-07-03 16:18:31 +01:00
Philipp Wagner
a126e4ce98 Fix Ibex description in core file
Ibex has moved on since these descriptions were written.
2020-07-03 16:18:31 +01:00
Philipp Wagner
dbc1f259af icache: Depend on prim_assert
The file ibex_icache.sv is using the assert macros, we need to depend on
them.
2020-07-03 16:18:31 +01:00
Rupert Swarbrick
006617f95a Fix SRAM initialisation for fpga/artya example
This now gets passed to the underlying primitive as a
parameter (instead of a define).
2020-07-03 16:06:48 +01:00
Rupert Swarbrick
7b6ba11a58 Drop SRAM_INIT_FILE from ibex_riscv_compliance.core
This no longer works anyway. It isn't needed for Verilator-based
simulations, and the RISCV compliance suite doesn't support any tool
but Verilator.
2020-07-03 16:06:48 +01:00
Rupert Swarbrick
a8cc0a9ef6 Get simple_system working for VCS
This should probably work for Riviera-PRO too, but that hasn't been
tested.
2020-07-03 15:42:39 +01:00
Rupert Swarbrick
8e9a621f67 Pass MemInitFile parameter from our ram_*p wrappers
Before we changed to vendoring in our RAM primitives from OpenTitan,
there was an SRAM_INIT_FILE define that you could stick in your core
file. That's now gone away, replaced by a parameter (MemInitFile). If
we want to plumb that in, we need to pass it properly through the
wrappers.
2020-07-03 15:42:39 +01:00
Philipp Wagner
711505a17b Update lowrisc_ip to lowRISC/opentitan@976d9b9c
Update code from upstream repository
https://github.com/lowRISC/opentitan to revision
976d9b9c1f563173d9e4571c775b38e70cb1c5d4

* [lint] Add blanket waiver for DECLFILENAME with blackboxes (Philipp
  Wagner)
* [prim_ram_1p_scr] Add a memory scrambling draft implementation
  (Michael Schaffner)
* [prim_subst_perm] Add simple substitution/permutation network
  (Michael Schaffner)
* [dvsim] Fix for lowRISC/opentitan#2686 - missing else (Srikrishna
  Iyer)

Signed-off-by: Philipp Wagner <phw@lowrisc.org>
2020-07-03 15:39:30 +01:00