NOTE this commit includes various changes to align the Ibex repo with changes upstream in OT! Update code from upstream repository https://github.com/lowRISC/opentitan to revision 6cc5c164ba96d339f06cbcede0d17d2c96ce3c05 * [dv] Add SV_FCOV_SVA back (Srikrishna Iyer) * [DV][FCOV] Minor updates to lowRISC/opentitan#5414 (Srikrishna Iyer) * [dvsim] Fix --cov + --build|run-only bugs (Srikrishna Iyer) * [lint] Waivers for rv_core_ibex lint (Greg Chadwick) * [lint] Allow one branch in unique case (Greg Chadwick) * [dv/macros] Add fcov macros from Ibex (Tom Roberts) * [dvsim/verilator] Fix pre-build cmd failure when hw/foundry is absent (Michael Schaffner) * [verilator/otp] Enable OTP preloading in verilator (Michael Schaffner) * [dvsim] Use builtins wherever possible (Srikrishna Iyer) * [prim] Avoid an apparent combinatorial loop in prim_secded_*_dec.sv (Rupert Swarbrick) * [dv/shadow_reg] Fix aes shadow reg error (Cindy Chen) * [lint] Remove comportable waivers from non-comportable IPs (Michael Schaffner) * [dv] Fix VPD dumping (Srikrishna Iyer) * [prim] Waive Verilator lint warning in prim_lfsr.sv (Pirmin Vogel) * [dv] Hard code various dv connections until full hook-up (Timothy Chen) * [tlul] Add payload checker and generator on device side only. (Timothy Chen) * [prim_packer] Silence verilator width warnings (Rupert Swarbrick) * [dvsim] lint fixes to FlowCfg (Srikrishna Iyer) * [dvsim] Minor improvement to FlowCfg (Srikrishna Iyer) * [dvsim] lint fixes to Scheduler (Srikrishna Iyer) * [dvsim] Very small update to Timer. (Srikrishna Iyer) * [lint] Update Verible lint parser to detect Verible syntax errors (Michael Schaffner) * [lint] Spot errors in the lint flow that we weren't expecting (Rupert Swarbrick) * [lint] Remove Fusesoc-related message waivers (Michael Schaffner) * [top / rst] Adjust the way rst_ni is used in design (Timothy Chen) * [dvsim/syn] Update parsing script and area reporting (Michael Schaffner) * [dv/regwen] update REGWEN conventions (Cindy Chen) * [dv/tools] Bug fix to common.tcl tb_top section. (Eitan Shapira) * [dv] Fix stress_all with reset (Weicai Yang) * [prim] Add a new slow to fast clock synchronizer (Tom Roberts) * [prim] Minor lint fix (Tom Roberts) * [tlul] Add instruction type to tlul (Timothy Chen) * [top] Ast updates (Timothy Chen) * [lint] Increase threshold for max number of bits in an array (Michael Schaffner) * [dv] add dv_base_reg_pkg to env_pkg template (Udi Jonnalagadda) * [dv/verilator] Ignore foundry dir (Srikrishna Iyer) * [dv] Provide license diagnostic info for VCS (Srikrishna Iyer) * [prim/otp_ctrl] Fix ECC correctable bug in generic OTP wrapper (Michael Schaffner) * [prim_ram_1p_scr] Make parity and diffusion layer settings more flexible (Michael Schaffner) * [prim] fix flash sram adapter use for configuration space (Timothy Chen) * [dv] Make CSR fields randomizable by default. (Srikrishna Iyer) * [dv/prim] minor updates (Udi Jonnalagadda) * [top] Minor lint fixes (Timothy Chen) * [prim_flash] Flash port alignments (Michael Schaffner) * [prim_util_pkg] Fix DC warning in _clog2() (Philipp Wagner) * Add missing full_o output signal of prim_fifo_sync (Philipp Wagner) * [dv] Gracefully kill simulation (Srikrishna Iyer) * [dv] Minor updates to prim tbs (Srikrishna Iyer) * [flash / top] Minor edits based on reviews (Timothy Chen) * [flash_ctrl / top] Various functional updates to flash (Timothy Chen) * [dv/otp_ctrl] regwen sequence (Cindy Chen) * [prim] Wire up full_o sync fifo output port in prim_sram_arbiter (Rupert Swarbrick) * [dvsim] Generate FUSESOC_IGNORE at top of scratch root (Rupert Swarbrick) * Revert "[lint] Remove Fusesoc-related message waivers" (Michael Schaffner) * Revert "[lint] Rename tool warnings to flow warnings and reduce their severity" (Michael Schaffner) * Revert "[lint] Provision syntax error filter for Verible lint" (Michael Schaffner) * [prim] Update fifo behavior during reset (Timothy Chen) * [dv] Move cip related macros to cip_macros (Weicai Yang) * [dv/dvsim] Fix when next_item does not have dependency (Cindy Chen) * [prim_packer_fifo/rtl] reset to disable output controls (Mark Branstad) * [lint] Provision syntax error filter for Verible lint (Michael Schaffner) * [lint] Rename tool warnings to flow warnings and reduce their severity (Michael Schaffner) * [lint] Remove Fusesoc-related message waivers (Michael Schaffner) * [dv/dvsim] collect coverage in scheduler (Cindy Chen) * [dvsim] Fix Syn class (Michael Schaffner) * [dv/shadow_reg] move get_shadow_regs function to dv_base_ral_block (Cindy Chen) * [lc_ctrl] Switch ECC to standard Hamming code (Michael Schaffner) * [prim_ram_*p_adv/prim_otp] Add option to use standard Hamming ECC (Michael Schaffner) * [secded_gen] Fix template bug that results in lint error (Michael Schaffner) * [prim/fifo_async] Disallow non-power-of-two depths (Tom Roberts) * [dv/alert] update shadow_reg alert naming in DV (Cindy Chen) * [dv] Align csr::reset_asserted to actual reset pin (Weicai Yang) * [prim_secded*_fpv] Generate FPV testbenches (Michael Schaffner) * [prim_secded*] Regenerate all SECDED primitives (Michael Schaffner) * [secded_gen] Add ability to generate FPV TB's and correct Hamming code (Michael Schaffner) * [dvsim] Run cov_merge / cov_report as part of the main set of jobs (Rupert Swarbrick) * [dvsim] Get rid of Deploy's static dispatch_counter (Rupert Swarbrick) * [dvsim] Make the scheduling logic per-target (Rupert Swarbrick) * [dvsim] Remove "status" from Deploy items (Rupert Swarbrick) * [dvsim] Create jobs with dependencies instead of sub-jobs (Rupert Swarbrick) * [dvsim] Simplify SimCfg._gen_results (Rupert Swarbrick) * [dvsim] Factor deploy method out of Deploy object (Rupert Swarbrick) * [dvsim] Move time tracking into its own class in Deploy.py (Rupert Swarbrick) * [dvsim] Fix printing of Deploy objects (Rupert Swarbrick) * [dv] make dv_macros.svh more UVM_agnostic (Srikrishna Iyer) * [dv/prim] reduce smoke test iterations (Udi Jonnalagadda) * [dv/hmac] reduce runtime for sha_vector test in smoke regression (Cindy Chen) * [DV] Enable cov comp creation iff cov is enabled (Srikrishna Iyer) * [prim_alert] Fix xcelium compile error (Cindy Chen) * [alert_rxtx/fpv] Update alert sender FPV testbenches (Michael Schaffner) * [alert_rxtx] Add option to latch fatal alert in alert sender (Michael Schaffner) * [kmac/dv] KMAC smoke test (Udi Jonnalagadda) * [dv/str_utils_pkg] add byte_to_str function (Udi Jonnalagadda) * [prim] - Add new prim_lc_dec (Jacob Levy) * [util] Move design-related helper scripts to util/design (Michael Schaffner) * [prim-flash] Add missing deps (Srikrishna Iyer) * [dv] Define SIMULATION during DV sims (Michael Schaffner) * [dv] Fix a typo in tb.sv.tpl (Weicai Yang) * Cleanup: Remove executable bits from source files (Philipp Wagner) * [dv] Use separate clock for EDN (Weicai Yang) * [dv] Add macro DV_EDN_IF_CONNECT to simplify EDN connect in TB (Weicai Yang) * [dv] Fix typo in clk_rst_if (Weicai Yang) Signed-off-by: Tom Roberts <tomroberts@lowrisc.org> |
||
---|---|---|
.github/ISSUE_TEMPLATE | ||
ci | ||
doc | ||
dv | ||
examples | ||
formal | ||
lint | ||
rtl | ||
shared | ||
syn | ||
util | ||
vendor | ||
.clang-format | ||
.gitignore | ||
.svlint.toml | ||
azure-pipelines.yml | ||
check_tool_requirements.core | ||
CONTRIBUTING.md | ||
CREDITS.md | ||
ibex_configs.yaml | ||
ibex_core.core | ||
ibex_core_tracing.core | ||
ibex_icache.core | ||
ibex_multdiv.core | ||
ibex_pkg.core | ||
ibex_tracer.core | ||
LICENSE | ||
Makefile | ||
python-requirements.txt | ||
README.md | ||
src_files.yml | ||
tool_requirements.py |
Ibex RISC-V Core
Ibex is a small and efficient, 32-bit, in-order RISC-V core with a 2-stage pipeline that implements the RV32IMC instruction set architecture.
This core was initially developed as part of the PULP platform under the name "Zero-riscy" [1], and has been contributed to lowRISC who maintains it and develops it further. It is under active development, with further code cleanups, feature additions, and test and verification planned for the future.
Configuration
Ibex offers several configuration parameters to meet the needs of various application scenarios. The options include different choices for the architecture of the multiplier unit, as well as a range of performance and security features. The table below indicates performance, area and verification status for a few selected configurations. These are configurations on which lowRISC is focusing for performance evaluation and design verification (see supported configs).
Config | "micro" | "small" | "maxperf" | "maxperf-pmp-bmfull" |
---|---|---|---|---|
Features | RV32EC | RV32IMC, 3 cycle mult | RV32IMC, 1 cycle mult, Branch target ALU, Writeback stage | RV32IMCB, 1 cycle mult, Branch target ALU, Writeback stage, 16 PMP regions |
Performance (CoreMark/MHz) | 0.904 | 2.47 | 3.13 | 3.05 |
Area - Yosys (kGE) | 17.44 | 26.06 | 35.64 | 58.74 |
Area - Commercial (estimated kGE) | ~16 | ~24 | ~33 | ~54 |
Verification status | Red | Green | Amber | Amber |
Notes:
- Performance numbers are based on CoreMark running on the Ibex Simple System platform.
Note that different ISAs (use of B and C extensions) give the best results for different configurations.
See the Benchmarks README for more information.
The "maxperf-pmp-bmfull" configuration sets a
SpecBranch
parameter inibex_core.sv
; this helps timing but has a small negative performance impact. - Yosys synthesis area numbers are based on the Ibex basic synthesis flow using the latch-based register file.
- Commercial synthesis area numbers are a rough estimate of what might be achievable with a commercial synthesis flow and technology library.
- For comparison, the original "Zero-riscy" core yields an area of 23.14kGE using our Yosys synthesis flow.
- Verification status is a rough guide to the overall maturity of a particular configuration. Green indicates that verification is close to complete. Amber indicates that some verification has been performed, but the configuration is still experimental. Red indicates a configuration with minimal/no verification. Users must make their own assessment of verification readiness for any tapeout.
- v0.92 of the RISC-V Bit Manipulation Extension is supported. This is not ratified and there may be changes for the v1.0 ratified version. See Standards Compliance in the Ibex documentation for more information.
Documentation
The Ibex user manual can be
read online at ReadTheDocs. It is also contained in
the doc
folder of this repository.
Contributing
We highly appreciate community contributions. To ease our work of reviewing your contributions, please:
- Create your own branch to commit your changes and then open a Pull Request.
- Split large contributions into smaller commits addressing individual changes or bug fixes. Do not mix unrelated changes into the same commit!
- Write meaningful commit messages. For more information, please check out the contribution guide.
- If asked to modify your changes, do fixup your commits and rebase your branch to maintain a clean history.
When contributing SystemVerilog source code, please try to be consistent and adhere to our Verilog coding style guide.
When contributing C or C++ source code, please try to adhere to the OpenTitan C++ coding style
guide.
All C and C++ code should be formatted with clang-format before committing.
Either run clang-format -i filename.cc
or git clang-format
on added files.
To get started, please check out the "Good First Issue" list.
Issues and Troubleshooting
If you find any problems or issues with Ibex or the documentation, please check out the issue tracker and create a new issue if your problem is not yet tracked.
Questions?
Do not hesitate to contact us, e.g., on our public Ibex channel on Zulip!
License
Unless otherwise noted, everything in this repository is covered by the Apache License, Version 2.0 (see LICENSE for full text).
Credits
Many people have contributed to Ibex through the years. Please have a look at the credits file and the commit history for more information.