Commit graph

78 commits

Author SHA1 Message Date
Tom Roberts
5bb41957ef [examples] Add timer example to simple system
Not particularly useful in the current system, but gives an example of
how to handle interrupts.
2020-01-10 10:18:09 +00:00
Greg Chadwick
9c6ddae626 [rtl] Don't elaborate unused mhpmcounter flops
Refactors performance counters so only flops that are required from the
given parameters are explicitly elaborated without relying on
optimization to remove unused flops.

Fixes #473
2020-01-07 10:23:12 +00:00
Tom Roberts
0a2ca9a399 [verilator] Modify verilator examples for memutils
- Memory loading utilities are split out into a separate class
- Relates to #317
2019-12-23 21:35:30 +01:00
Tobias Wölfel
6793dc0550 [examples] Fix spelling for description type 2019-12-04 13:59:46 +00:00
Mehrdad Biglari
cead186836 Add Synopsys VCS Support for Ibex Simple System
Add VCS to core description. Add stimuli. Fix compile error for assigmnet from multiple blocks.
2019-12-03 16:41:26 +00:00
Tobias Wölfel
43268b7604 [examples] Add fstream header
The fstream header is needed for `ofstream()` in ibex_simple_system.
2019-12-02 13:20:49 +01:00
Philipp Wagner
82e0faf50b Make VerilatorSimCtrl class a singleton
The VerilatorSimCtrl class was always intended to be used only once in
an application, since it sets up a global signal handler and needs to be
accessible from DPI modules. This accessibility was achieved through a
global variable `simctrl`.

With this commit the VerilatorSimCtrl is switched to a singleton class.
The instance is accessible through `VerilatorSimCtrl::GetInstance()`.
The downside of that approach is that we loose the constructor
arguments, and need to deal with a class which potentially hasn't top or
the clock and reset signals set.
2019-12-02 10:57:24 +00:00
Philipp Wagner
afdee5c596 ibex_simple_system: Remove unused includes 2019-12-02 10:32:16 +00:00
Tobias Wölfel
ce7e38351e [DV] Add Verilator memory initialization from ELF
Support initialization of memory by loading content from ELF files.
All segments of the ELF file with the type `PT_LOAD` are merged into a
temporary buffer and then forwarded to a predefined memory.
This is an addition for setting the memories with VMEM files.

Memories must implement `simutil_verilator_set_mem` to support the
setting of values with a width of 32 bits. A return value of 0 must
indicate a successful operation and 1 an error.

Memories are defined by a call to `RegisterMemoryArea()` before the
execution of the simulation, at which point the arguments are parsed and
the initialization is started. The memories are identified by unique
name. The design specific location is used to set the SystemVerilog
scope.

Registered memories can be printed by using `-l list`. The unique name
is used for `-l name,file.elf` together with the file path.
An optional part of the argument is the type of the file, `elf` or
`vmem`, and if not provided it is attempted to detect the type by
looking at the file extension.
The memory specific arguments which already existed accept now also ELF
files. They use predefined names and are included to keep the interface
stable.

Contents of an ELF segment which has a bigger memory size than file size
are not set. This is typically required for BSS sections for zero-ing
the memory.
2019-11-27 11:35:07 +00:00
Tobias Wölfel
103b7357f0 Update fusesoc usage 2019-11-14 13:20:19 +01:00
Tobias Wölfel
76f6a3d4c3 Use shared code for Arty A7-100T example
Move Xilinx specific code into shared folder so it can be re-used by
different examples.
Use the shared RAM code and make use of byte enable signal.
Fixes lowrisc/ibex#144
2019-11-14 13:20:19 +01:00
Tobias Wölfel
0927f085ee Use gitignore for software directory 2019-11-13 14:30:53 +01:00
Tobias Wölfel
ef96678d65 Update load instruction 2019-11-13 14:30:53 +01:00
Marek Pikuła
9b390c5d4e Fix formatting of table in simple system
Fixes #454
2019-11-13 11:09:05 +00:00
Greg Chadwick
2041f10c69 Added simple system
Simple system is a basic verilator top-level testbench for running
 executables.  It has functionality for outputting text to a log file
 and for the software to terminate the simulation
2019-11-09 07:48:47 +00:00
Philipp Wagner
e420688d1c Remove tracer testbench
This testbench was helpful in creating the initial tracer, but is not
fully working any more, and too limited to test the trace fully.
Extending it is inconvenient, as the creation of instruction sequences
through the bus interface is easy to get wrong.
2019-10-02 18:28:26 +01:00
Greg Chadwick
bec84ca2b1 Add core_sleep_o to ibex interface
Signals the core is totally idle (WFI with no outstanding memory
transactions).  Fixes #258
2019-09-06 08:44:48 +01:00
Greg Chadwick
d14312c3cc Replace cluster_id/core_id with hart_id (#29)
If you're migrating from the previous interface you can use

logic [31:0] hart_id;
assign hart_id = {21'b0, cluster_id_i[5:0], 1'b0, core_id_i[3:0]};

...

ibex_core #(
  ...
) u_core (
  ...

  // replace core_id_i and cluster_id_i
  .hart_id_i(hart_id),

  ...
);
2019-09-03 14:18:39 +01:00
Pirmin Vogel
501cc2bb62 ram_1p.sv: Fix rvalid_o generation
This signal must also be set in case of write transactions as it is
a request valid and not a read valid.
2019-08-20 14:59:28 +01:00
Tom Roberts
44b033cf8b [rtl] Add support for instruction fetch errors
- Add required signals to top-level
- Propagate error through fetch stages
- Add new exception type
- Update documentation for new exception type
- Resolves issue #109
2019-08-09 10:44:37 +01:00
Rahul Behl
76ac3ef658 Updates to the sim timescale option
- Updated the timescale option to not include "=" in between the
    timescale directive and the value passed. See #181 for further
    details
2019-07-29 16:00:35 +01:00
Pirmin Vogel
0dee0ff1ec Adapt interrupt IF for Arty example, tracer and TB 2019-07-24 18:58:26 +01:00
Philipp Wagner
62f3573f2b Rework how tracer is instantiated and called
This change is slighly painful, but a necessary cleanup around the
tracer.

- We now provide a separate core file for the tracer, called
  "ibex_tracer.core" (in line with "ibex_tracer.sv"). The core is called
  "lowrisc:ibex:ibex_tracer".
- The toplevel wrapper with tracing enabled got renamed to
  "ibex_core_tracing.sv", and the core file is correspondingly called
  "ibex_core_tracing.core. The core in it is called
  "lowrisc:ibex:ibex_core_tracing".
- Finally to keep symmetry, the toplevel of Ibex itself got renamed in
  the core file from "lowrisc:ibex:ibex" to "lowrisc:ibex:ibex_core".
  This ensures that we have the same name for the core file, the source
  entry point, and the core name.

IMPORTANT NOTE:
If you apply this change and use fusesoc, you need to adjust the name of
the core dependency from "lowrisc:ibex:ibex" to
"lowrisc:ibex:ibex_core".
2019-07-23 19:45:48 +01:00
Tobias Wölfel
b7ef64b62d Extension of example for tracer
Add more input test data.
2019-07-16 12:43:38 +02:00
Tobias Wölfel
ff50ac8c59 Uncompressed instructions for tracer (#154)
The tracer does not support the decoding of compressed instructions.
Forward the internally used decoded instruction and use it for tracer.
2019-07-16 12:43:38 +02:00
Tobias Woelfel
6ebc0001ec Ibex example Arty A7-100T
Simple example of how Ibex can be used to run software on a FPGA target.
2019-07-11 16:09:49 +01:00
Tobias Wölfel
1df87f4400 Add fence instruction to tracer (#134) 2019-07-11 13:25:18 +01:00
Tobias Wölfel
edccb325e4 Example for Ibex tracer usage 2019-07-11 13:25:18 +01:00