Rename all modules to cve2 (#25)

* rename files and modules to cve2

Signed-off-by: Szymon Bieganski <szymon.bieganski@oss.nxp.com>

* updated tb files

Signed-off-by: Szymon Bieganski <szymon.bieganski@oss.nxp.com>

* remaining references to ibex: gitignore, examples, etc.

Signed-off-by: Szymon Bieganski <szymon.bieganski@oss.nxp.com>

Signed-off-by: Szymon Bieganski <szymon.bieganski@oss.nxp.com>
Co-authored-by: Szymon Bieganski <szymon.bieganski@oss.nxp.com>
This commit is contained in:
christian-herber-nxp 2023-01-05 10:27:24 +01:00 committed by GitHub
parent bbe47ea66b
commit 932db14619
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
118 changed files with 722 additions and 722 deletions

10
.gitignore vendored
View file

@ -19,18 +19,18 @@ ibex_simple_system_pcount.csv
__pycache__ __pycache__
# This is generated by VCS when running DV simulations with WAVE=1. # This is generated by VCS when running DV simulations with WAVE=1.
/dv/uvm/core_ibex/ucli.key /dv/uvm/core_cve2/ucli.key
# This is generated by UVM when running simulations and doesn't seem # This is generated by UVM when running simulations and doesn't seem
# to be something you can disable. # to be something you can disable.
/dv/uvm/core_ibex/tr_db.log /dv/uvm/core_cve2/tr_db.log
# This is the default output directory in dv/uvm/core_ibex and # This is the default output directory in dv/uvm/core_cve2 and
# contains auto-generated files from building and running tests. # contains auto-generated files from building and running tests.
/dv/uvm/core_ibex/out /dv/uvm/core_cve2/out
# This is generated by Questa tool when running DV simulations # This is generated by Questa tool when running DV simulations
modelsim.ini modelsim.ini
# This is generated by Xcelium when running DV simulations, even with WAVE=0 # This is generated by Xcelium when running DV simulations, even with WAVE=0
/dv/uvm/core_ibex/waves.shm /dv/uvm/core_cve2/waves.shm

View file

@ -1,6 +1,6 @@
IBEX_CONFIG ?= small CVE2_CONFIG ?= small
FUSESOC_CONFIG_OPTS = $(shell ./util/ibex_config.py $(IBEX_CONFIG) fusesoc_opts) FUSESOC_CONFIG_OPTS = $(shell ./util/cve2_config.py $(CVE2_CONFIG) fusesoc_opts)
all: help all: help
@ -19,7 +19,7 @@ build-all: build-riscv-compliance build-simple-system build-arty-100 \
.PHONY: build-riscv-compliance .PHONY: build-riscv-compliance
build-riscv-compliance: build-riscv-compliance:
fusesoc --cores-root=. run --target=sim --setup --build \ fusesoc --cores-root=. run --target=sim --setup --build \
lowrisc:ibex:ibex_riscv_compliance \ lowrisc:cve2:cve2_riscv_compliance \
$(FUSESOC_CONFIG_OPTS) $(FUSESOC_CONFIG_OPTS)
@ -30,7 +30,7 @@ build-riscv-compliance:
.PHONY: build-simple-system .PHONY: build-simple-system
build-simple-system: build-simple-system:
fusesoc --cores-root=. run --target=sim --setup --build \ fusesoc --cores-root=. run --target=sim --setup --build \
lowrisc:ibex:ibex_simple_system \ lowrisc:cve2:cve2_simple_system \
$(FUSESOC_CONFIG_OPTS) $(FUSESOC_CONFIG_OPTS)
simple-system-program = examples/sw/simple_system/hello_test/hello_test.vmem simple-system-program = examples/sw/simple_system/hello_test/hello_test.vmem
@ -40,15 +40,15 @@ sw-simple-hello: $(simple-system-program)
$(simple-system-program): $(simple-system-program):
cd examples/sw/simple_system/hello_test && $(MAKE) cd examples/sw/simple_system/hello_test && $(MAKE)
Vibex_simple_system = \ Vcve2_simple_system = \
build/lowrisc_ibex_ibex_simple_system_0/sim-verilator/Vibex_simple_system build/lowrisc_cve2_cve2_simple_system_0/sim-verilator/Vcve2_simple_system
$(Vibex_simple_system): $(Vcve2_simple_system):
@echo "$@ not found" @echo "$@ not found"
@echo "Run \"make build-simple-system\" to create the dependency" @echo "Run \"make build-simple-system\" to create the dependency"
@false @false
run-simple-system: sw-simple-hello | $(Vibex_simple_system) run-simple-system: sw-simple-hello | $(Vcve2_simple_system)
build/lowrisc_ibex_ibex_simple_system_0/sim-verilator/Vibex_simple_system \ build/lowrisc_cve2_cve2_simple_system_0/sim-verilator/Vcve2_simple_system \
--raminit=$(simple-system-program) --raminit=$(simple-system-program)
@ -67,23 +67,23 @@ $(arty-sw-program):
.PHONY: build-arty-35 .PHONY: build-arty-35
build-arty-35: sw-led build-arty-35: sw-led
fusesoc --cores-root=. run --target=synth --setup --build \ fusesoc --cores-root=. run --target=synth --setup --build \
lowrisc:ibex:top_artya7 --part xc7a35ticsg324-1L lowrisc:cve2:top_artya7 --part xc7a35ticsg324-1L
.PHONY: build-arty-100 .PHONY: build-arty-100
build-arty-100: sw-led build-arty-100: sw-led
fusesoc --cores-root=. run --target=synth --setup --build \ fusesoc --cores-root=. run --target=synth --setup --build \
lowrisc:ibex:top_artya7 --part xc7a100tcsg324-1 lowrisc:cve2:top_artya7 --part xc7a100tcsg324-1
.PHONY: program-arty .PHONY: program-arty
program-arty: program-arty:
fusesoc --cores-root=. run --target=synth --run \ fusesoc --cores-root=. run --target=synth --run \
lowrisc:ibex:top_artya7 lowrisc:cve2:top_artya7
# Lint check # Lint check
.PHONY: lint-core-tracing .PHONY: lint-core-tracing
lint-core-tracing: lint-core-tracing:
fusesoc --cores-root . run --target=lint lowrisc:ibex:ibex_core_tracing \ fusesoc --cores-root . run --target=lint lowrisc:cve2:cve2_core_tracing \
$(FUSESOC_CONFIG_OPTS) $(FUSESOC_CONFIG_OPTS)
@ -94,9 +94,9 @@ lint-core-tracing:
.PHONY: build-csr-test .PHONY: build-csr-test
build-csr-test: build-csr-test:
fusesoc --cores-root=. run --target=sim --setup --build \ fusesoc --cores-root=. run --target=sim --setup --build \
--tool=verilator lowrisc:ibex:tb_cs_registers --tool=verilator lowrisc:cve2:tb_cs_registers
Vtb_cs_registers = \ Vtb_cs_registers = \
build/lowrisc_ibex_tb_cs_registers_0/sim-verilator/Vtb_cs_registers build/lowrisc_cve2_tb_cs_registers_0/sim-verilator/Vtb_cs_registers
$(Vtb_cs_registers): $(Vtb_cs_registers):
@echo "$@ not found" @echo "$@ not found"
@echo "Run \"make build-csr-test\" to create the dependency" @echo "Run \"make build-csr-test\" to create the dependency"
@ -105,9 +105,9 @@ $(Vtb_cs_registers):
.PHONY: run-csr-test .PHONY: run-csr-test
run-csr-test: | $(Vtb_cs_registers) run-csr-test: | $(Vtb_cs_registers)
fusesoc --cores-root=. run --target=sim --run \ fusesoc --cores-root=. run --target=sim --run \
--tool=verilator lowrisc:ibex:tb_cs_registers --tool=verilator lowrisc:cve2:tb_cs_registers
# Echo the parameters passed to fusesoc for the chosen IBEX_CONFIG # Echo the parameters passed to fusesoc for the chosen CVE2_CONFIG
.PHONY: test-cfg .PHONY: test-cfg
test-cfg: test-cfg:
@echo $(FUSESOC_CONFIG_OPTS) @echo $(FUSESOC_CONFIG_OPTS)

View file

@ -49,10 +49,10 @@ jobs:
# Verible format is experimental so only run on default config for now, # Verible format is experimental so only run on default config for now,
# will eventually become part of the per-config CI # will eventually become part of the per-config CI
- bash: | - bash: |
fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:ibex:ibex_top_tracing fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:cve2:cve2_top_tracing
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Verilog format with Verible failed. Run 'fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:ibex:ibex_top_tracing' to check and fix all errors." echo "Verilog format with Verible failed. Run 'fusesoc --cores-root . run --no-export --target=format --tool=veribleformat lowrisc:cve2:cve2_top_tracing' to check and fix all errors."
echo "This flow is currently experimental and failures can be ignored." echo "This flow is currently experimental and failures can be ignored."
fi fi
# Show diff of what verilog_format would have changed, and then revert. # Show diff of what verilog_format would have changed, and then revert.
@ -78,7 +78,7 @@ jobs:
- bash: | - bash: |
# Build and run CSR testbench, chosen Ibex configuration does not effect # Build and run CSR testbench, chosen Ibex configuration does not effect
# this so doesn't need to be part of per-config CI # this so doesn't need to be part of per-config CI
fusesoc --cores-root=. run --target=sim --tool=verilator lowrisc:ibex:tb_cs_registers fusesoc --cores-root=. run --target=sim --tool=verilator lowrisc:cve2:tb_cs_registers
displayName: Build and run CSR testbench with Verilator displayName: Build and run CSR testbench with Verilator
- bash: | - bash: |
@ -96,7 +96,7 @@ jobs:
# Run Ibex RTL CI per supported configuration # Run Ibex RTL CI per supported configuration
- template : ci/ibex-rtl-ci-steps.yml - template : ci/ibex-rtl-ci-steps.yml
parameters: parameters:
ibex_configs: cve2_configs:
# Note: Try to keep the list of configurations in sync with the one used # Note: Try to keep the list of configurations in sync with the one used
# in Private CI. # in Private CI.
- small - small
@ -107,19 +107,19 @@ jobs:
# Run lint on simple system # Run lint on simple system
- bash: | - bash: |
fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_simple_system fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:cve2:cve2_simple_system
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Verilog lint with Verilator failed. Run 'fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_simple_system' to check and fix all errors." echo "Verilog lint with Verilator failed. Run 'fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:cve2:cve2_simple_system' to check and fix all errors."
exit 1 exit 1
fi fi
displayName: Run Verilator lint on simple system displayName: Run Verilator lint on simple system
- bash: | - bash: |
fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_simple_system fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:cve2:cve2_simple_system
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Verilog lint with Verible failed. Run 'fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_simple_system' to check and fix all errors." echo "Verilog lint with Verible failed. Run 'fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:cve2:cve2_simple_system' to check and fix all errors."
exit 1 exit 1
fi fi
displayName: Run Verible lint on simple system displayName: Run Verible lint on simple system

View file

@ -1,39 +1,39 @@
parameters: parameters:
ibex_configs: [] cve2_configs: []
steps: steps:
- ${{ each config in parameters.ibex_configs }}: - ${{ each config in parameters.cve2_configs }}:
# ibex_config.py will exit with error code 1 on any error which will cause # cve2_config.py will exit with error code 1 on any error which will cause
# the CI to fail if there's an issue with the configuration file or an # the CI to fail if there's an issue with the configuration file or an
# incorrect configuration name being used # incorrect configuration name being used
- bash: | - bash: |
set -e set -e
IBEX_CONFIG_OPTS=`./util/ibex_config.py ${{ config }} fusesoc_opts` CVE2_CONFIG_OPTS=`./util/cve2_config.py ${{ config }} fusesoc_opts`
echo $IBEX_CONFIG_OPTS echo $CVE2_CONFIG_OPTS
echo "##vso[task.setvariable variable=ibex_config_opts]" $IBEX_CONFIG_OPTS echo "##vso[task.setvariable variable=cve2_config_opts]" $CVE2_CONFIG_OPTS
displayName: Test and display fusesoc config for ${{ config }} displayName: Test and display fusesoc config for ${{ config }}
- bash: | - bash: |
fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_top_tracing $IBEX_CONFIG_OPTS fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:cve2:cve2_top_tracing $CVE2_CONFIG_OPTS
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Verilog lint failed. Run 'fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:ibex:ibex_top_tracing $IBEX_CONFIG_OPTS' to check and fix all errors." echo "Verilog lint failed. Run 'fusesoc --cores-root . run --target=lint --tool=verilator lowrisc:cve2:cve2_top_tracing $CVE2_CONFIG_OPTS' to check and fix all errors."
exit 1 exit 1
fi fi
displayName: Lint Verilog source files with Verilator for ${{ config }} displayName: Lint Verilog source files with Verilator for ${{ config }}
- bash: | - bash: |
fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_top_tracing $IBEX_CONFIG_OPTS fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:cve2:cve2_top_tracing $CVE2_CONFIG_OPTS
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Verilog lint failed. Run 'fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:ibex:ibex_top_tracing $IBEX_CONFIG_OPTS' to check and fix all errors." echo "Verilog lint failed. Run 'fusesoc --cores-root . run --target=lint --tool=veriblelint lowrisc:cve2:cve2_top_tracing $CVE2_CONFIG_OPTS' to check and fix all errors."
exit 1 exit 1
fi fi
displayName: Lint Verilog source files with Verible Verilog Lint for ${{ config }} displayName: Lint Verilog source files with Verible Verilog Lint for ${{ config }}
- bash: | - bash: |
# Build simulation model of Ibex # Build simulation model of Ibex
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_riscv_compliance $IBEX_CONFIG_OPTS fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_riscv_compliance $CVE2_CONFIG_OPTS
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Unable to build Verilator model of Ibex for compliance testing." echo "Unable to build Verilator model of Ibex for compliance testing."
@ -41,7 +41,7 @@ steps:
fi fi
# Run compliance test suite # Run compliance test suite
export TARGET_SIM=$PWD/build/lowrisc_ibex_ibex_riscv_compliance_0.1/sim-verilator/Vibex_riscv_compliance export TARGET_SIM=$PWD/build/lowrisc_cve2_cve2_riscv_compliance_0.1/sim-verilator/Vcve2_riscv_compliance
export RISCV_PREFIX=riscv32-unknown-elf- export RISCV_PREFIX=riscv32-unknown-elf-
export RISCV_TARGET=ibex export RISCV_TARGET=ibex
export RISCV_DEVICE=rv32imc export RISCV_DEVICE=rv32imc
@ -68,18 +68,18 @@ steps:
- bash: | - bash: |
# Setup environment to use cosim with Simple System # Setup environment to use cosim with Simple System
export IBEX_COSIM_ISS_ROOT=/opt/spike-cosim export CVE2_COSIM_ISS_ROOT=/opt/spike-cosim
export LD_LIBRARY_PATH=/opt/spike-cosim/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/opt/spike-cosim/lib:$LD_LIBRARY_PATH
# Build simple system with co-simulation # Build simple system with co-simulation
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_simple_system_cosim $IBEX_CONFIG_OPTS fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_simple_system_cosim $CVE2_CONFIG_OPTS
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Build Simple System with co-simulation failed. Run fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_simple_system_cosim $IBEX_CONFIG_OPTS to check and fix all errors." echo "Build Simple System with co-simulation failed. Run fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_simple_system_cosim $CVE2_CONFIG_OPTS to check and fix all errors."
fi fi
build/lowrisc_ibex_ibex_simple_system_cosim_0/sim-verilator/Vibex_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf build/lowrisc_cve2_cve2_simple_system_cosim_0/sim-verilator/Vcve2_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf
if [ $? != 0 ]; then if [ $? != 0 ]; then
echo -n "##vso[task.logissue type=error]" echo -n "##vso[task.logissue type=error]"
echo "Running CoreMark failed co-simulation testing" echo "Running CoreMark failed co-simulation testing"

View file

@ -33,37 +33,37 @@
+incdir+${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl +incdir+${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl
+incdir+${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/dv/sv/dv_utils +incdir+${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/dv/sv/dv_utils
${DESIGN_RTL_DIR}/ibex_pkg.sv ${DESIGN_RTL_DIR}/cve2_pkg.sv
${DESIGN_RTL_DIR}/ibex_tracer_pkg.sv ${DESIGN_RTL_DIR}/cve2_tracer_pkg.sv
${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl/prim_secded_pkg.sv ${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl/prim_secded_pkg.sv
${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl/prim_ram_1p_pkg.sv ${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim/rtl/prim_ram_1p_pkg.sv
${DESIGN_RTL_DIR}/ibex_alu.sv ${DESIGN_RTL_DIR}/cve2_alu.sv
${DESIGN_RTL_DIR}/ibex_branch_predict.sv ${DESIGN_RTL_DIR}/cve2_branch_predict.sv
${DESIGN_RTL_DIR}/ibex_compressed_decoder.sv ${DESIGN_RTL_DIR}/cve2_compressed_decoder.sv
${DESIGN_RTL_DIR}/ibex_controller.sv ${DESIGN_RTL_DIR}/cve2_controller.sv
${DESIGN_RTL_DIR}/ibex_cs_registers.sv ${DESIGN_RTL_DIR}/cve2_cs_registers.sv
${DESIGN_RTL_DIR}/ibex_csr.sv ${DESIGN_RTL_DIR}/cve2_csr.sv
${DESIGN_RTL_DIR}/ibex_counter.sv ${DESIGN_RTL_DIR}/cve2_counter.sv
${DESIGN_RTL_DIR}/ibex_decoder.sv ${DESIGN_RTL_DIR}/cve2_decoder.sv
${DESIGN_RTL_DIR}/ibex_ex_block.sv ${DESIGN_RTL_DIR}/cve2_ex_block.sv
${DESIGN_RTL_DIR}/ibex_fetch_fifo.sv ${DESIGN_RTL_DIR}/cve2_fetch_fifo.sv
${DESIGN_RTL_DIR}/ibex_id_stage.sv ${DESIGN_RTL_DIR}/cve2_id_stage.sv
${DESIGN_RTL_DIR}/ibex_if_stage.sv ${DESIGN_RTL_DIR}/cve2_if_stage.sv
${DESIGN_RTL_DIR}/ibex_load_store_unit.sv ${DESIGN_RTL_DIR}/cve2_load_store_unit.sv
${DESIGN_RTL_DIR}/ibex_multdiv_fast.sv ${DESIGN_RTL_DIR}/cve2_multdiv_fast.sv
${DESIGN_RTL_DIR}/ibex_multdiv_slow.sv ${DESIGN_RTL_DIR}/cve2_multdiv_slow.sv
${DESIGN_RTL_DIR}/ibex_prefetch_buffer.sv ${DESIGN_RTL_DIR}/cve2_prefetch_buffer.sv
${DESIGN_RTL_DIR}/ibex_pmp.sv ${DESIGN_RTL_DIR}/cve2_pmp.sv
${DESIGN_RTL_DIR}/ibex_register_file_ff.sv ${DESIGN_RTL_DIR}/cve2_register_file_ff.sv
${DESIGN_RTL_DIR}/ibex_wb_stage.sv ${DESIGN_RTL_DIR}/cve2_wb_stage.sv
${DESIGN_RTL_DIR}/ibex_dummy_instr.sv ${DESIGN_RTL_DIR}/cve2_dummy_instr.sv
${DESIGN_RTL_DIR}/ibex_core.sv ${DESIGN_RTL_DIR}/cve2_core.sv
${DESIGN_RTL_DIR}/ibex_top.sv ${DESIGN_RTL_DIR}/cve2_top.sv
${DESIGN_RTL_DIR}/ibex_top_tracing.sv ${DESIGN_RTL_DIR}/cve2_top_tracing.sv
${DESIGN_RTL_DIR}/ibex_tracer.sv ${DESIGN_RTL_DIR}/cve2_tracer.sv
${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_buf.sv ${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_buf.sv
${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_clock_gating.sv ${DESIGN_RTL_DIR}/../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_clock_gating.sv
${DESIGN_RTL_DIR}/../dv/uvm/core_ibex/common/prim/prim_pkg.sv ${DESIGN_RTL_DIR}/../dv/uvm/core_cve2/common/prim/prim_pkg.sv
${DESIGN_RTL_DIR}/../dv/uvm/core_ibex/common/prim/prim_clock_gating.sv ${DESIGN_RTL_DIR}/../dv/uvm/core_cve2/common/prim/prim_clock_gating.sv
${DESIGN_RTL_DIR}/../dv/uvm/core_ibex/common/prim/prim_buf.sv ${DESIGN_RTL_DIR}/../dv/uvm/core_cve2/common/prim/prim_buf.sv

View file

@ -9,9 +9,9 @@
# (4 cycles for mulh), resulting in 2 stall cycles for mul (3 for mulh) # (4 cycles for mulh), resulting in 2 stall cycles for mul (3 for mulh)
small: small:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MFast" RV32M : "cve2_pkg::RV32MFast"
RV32B : "ibex_pkg::RV32BNone" RV32B : "cve2_pkg::RV32BNone"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 0 BranchTargetALU : 0
WritebackStage : 0 WritebackStage : 0
ICache : 0 ICache : 0
@ -20,15 +20,15 @@ small:
PMPEnable : 0 PMPEnable : 0
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 4 PMPNumRegions : 4
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# Configuration to match that used in the OpenTitan project # Configuration to match that used in the OpenTitan project
opentitan: opentitan:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BOTEarlGrey" RV32B : "cve2_pkg::RV32BOTEarlGrey"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 1 ICache : 1
@ -37,7 +37,7 @@ opentitan:
PMPEnable : 1 PMPEnable : 1
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 16 PMPNumRegions : 16
SecureIbex : 1 SecureCVE2 : 1
ICacheScramble : 0 ICacheScramble : 0
# =============================== # ===============================
@ -49,9 +49,9 @@ opentitan:
# maximum performance configuration. # maximum performance configuration.
experimental-maxperf: experimental-maxperf:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BNone" RV32B : "cve2_pkg::RV32BNone"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 0 ICache : 0
@ -60,15 +60,15 @@ experimental-maxperf:
PMPEnable : 0 PMPEnable : 0
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 4 PMPNumRegions : 4
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# experimental-maxperf config above plus PMP enabled with 16 regions. # experimental-maxperf config above plus PMP enabled with 16 regions.
experimental-maxperf-pmp: experimental-maxperf-pmp:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BNone" RV32B : "cve2_pkg::RV32BNone"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 0 ICache : 0
@ -77,15 +77,15 @@ experimental-maxperf-pmp:
PMPEnable : 1 PMPEnable : 1
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 16 PMPNumRegions : 16
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# experimental-maxperf-pmp config above with balanced bitmanip extension # experimental-maxperf-pmp config above with balanced bitmanip extension
experimental-maxperf-pmp-bmbalanced: experimental-maxperf-pmp-bmbalanced:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BBalanced" RV32B : "cve2_pkg::RV32BBalanced"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 0 ICache : 0
@ -94,15 +94,15 @@ experimental-maxperf-pmp-bmbalanced:
PMPEnable : 1 PMPEnable : 1
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 16 PMPNumRegions : 16
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# experimental-maxperf-pmp config above with full bitmanip extension # experimental-maxperf-pmp config above with full bitmanip extension
experimental-maxperf-pmp-bmfull: experimental-maxperf-pmp-bmfull:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BFull" RV32B : "cve2_pkg::RV32BFull"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 0 ICache : 0
@ -111,15 +111,15 @@ experimental-maxperf-pmp-bmfull:
PMPEnable : 1 PMPEnable : 1
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 16 PMPNumRegions : 16
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# experimental-maxperf-pmp-bmfull config above with icache enabled # experimental-maxperf-pmp-bmfull config above with icache enabled
experimental-maxperf-pmp-bmfull-icache: experimental-maxperf-pmp-bmfull-icache:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BFull" RV32B : "cve2_pkg::RV32BFull"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 1 ICache : 1
@ -128,7 +128,7 @@ experimental-maxperf-pmp-bmfull-icache:
PMPEnable : 1 PMPEnable : 1
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 16 PMPNumRegions : 16
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0
# experimental-maxperf with branch predictor switched on. This exists to allow # experimental-maxperf with branch predictor switched on. This exists to allow
@ -137,9 +137,9 @@ experimental-maxperf-pmp-bmfull-icache:
# development. # development.
experimental-branch-predictor: experimental-branch-predictor:
RV32E : 0 RV32E : 0
RV32M : "ibex_pkg::RV32MSingleCycle" RV32M : "cve2_pkg::RV32MSingleCycle"
RV32B : "ibex_pkg::RV32BNone" RV32B : "cve2_pkg::RV32BNone"
RegFile : "ibex_pkg::RegFileFF" RegFile : "cve2_pkg::RegFileFF"
BranchTargetALU : 1 BranchTargetALU : 1
WritebackStage : 1 WritebackStage : 1
ICache : 0 ICache : 0
@ -148,6 +148,6 @@ experimental-branch-predictor:
PMPEnable : 0 PMPEnable : 0
PMPGranularity : 0 PMPGranularity : 0
PMPNumRegions : 4 PMPNumRegions : 4
SecureIbex : 0 SecureCVE2 : 0
ICacheScramble : 0 ICacheScramble : 0

View file

@ -2,7 +2,7 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_core:0.1" name: "lowrisc:cve2:cve2_core:0.1"
description: "Ibex CPU Core Components" description: "Ibex CPU Core Components"
filesets: filesets:
@ -11,31 +11,31 @@ filesets:
- lowrisc:prim:assert - lowrisc:prim:assert
- lowrisc:prim:clock_gating - lowrisc:prim:clock_gating
- lowrisc:prim:lfsr - lowrisc:prim:lfsr
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
- lowrisc:ibex:ibex_icache - lowrisc:cve2:cve2_icache
- lowrisc:dv:dv_fcov_macros - lowrisc:dv:dv_fcov_macros
files: files:
- rtl/ibex_alu.sv - rtl/cve2_alu.sv
- rtl/ibex_branch_predict.sv - rtl/cve2_branch_predict.sv
- rtl/ibex_compressed_decoder.sv - rtl/cve2_compressed_decoder.sv
- rtl/ibex_controller.sv - rtl/cve2_controller.sv
- rtl/ibex_cs_registers.sv - rtl/cve2_cs_registers.sv
- rtl/ibex_csr.sv - rtl/cve2_csr.sv
- rtl/ibex_counter.sv - rtl/cve2_counter.sv
- rtl/ibex_decoder.sv - rtl/cve2_decoder.sv
- rtl/ibex_ex_block.sv - rtl/cve2_ex_block.sv
- rtl/ibex_fetch_fifo.sv - rtl/cve2_fetch_fifo.sv
- rtl/ibex_id_stage.sv - rtl/cve2_id_stage.sv
- rtl/ibex_if_stage.sv - rtl/cve2_if_stage.sv
- rtl/ibex_load_store_unit.sv - rtl/cve2_load_store_unit.sv
- rtl/ibex_multdiv_fast.sv - rtl/cve2_multdiv_fast.sv
- rtl/ibex_multdiv_slow.sv - rtl/cve2_multdiv_slow.sv
- rtl/ibex_prefetch_buffer.sv - rtl/cve2_prefetch_buffer.sv
- rtl/ibex_pmp.sv - rtl/cve2_pmp.sv
- rtl/ibex_wb_stage.sv - rtl/cve2_wb_stage.sv
- rtl/ibex_dummy_instr.sv - rtl/cve2_dummy_instr.sv
- rtl/ibex_core.sv - rtl/cve2_core.sv
- rtl/ibex_pmp_reset_default.svh: {is_include_file: true} - rtl/cve2_pmp_reset_default.svh: {is_include_file: true}
file_type: systemVerilogSource file_type: systemVerilogSource
files_lint_verilator: files_lint_verilator:
@ -72,21 +72,21 @@ parameters:
RV32M: RV32M:
datatype: str datatype: str
default: ibex_pkg::RV32MFast default: cve2_pkg::RV32MFast
paramtype: vlogdefine paramtype: vlogdefine
description: "RV32M implementation parameter enum. See the ibex_pkg::rv32m_e enum in ibex_pkg.sv for permitted values." description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."
RV32B: RV32B:
datatype: str datatype: str
default: ibex_pkg::RV32BNone default: cve2_pkg::RV32BNone
paramtype: vlogdefine paramtype: vlogdefine
description: "Bitmanip implementation parameter enum. See the ibex_pkg::rv32b_e enum in ibex_pkg.sv for permitted values." description: "Bitmanip implementation parameter enum. See the cve2_pkg::rv32b_e enum in cve2_pkg.sv for permitted values."
RegFile: RegFile:
datatype: str datatype: str
default: ibex_pkg::RegFileFF default: cve2_pkg::RegFileFF
paramtype: vlogdefine paramtype: vlogdefine
description: "Register file implementation parameter enum. See the ibex_pkg::regfile_e enum in ibex_pkg.sv for permitted values." description: "Register file implementation parameter enum. See the cve2_pkg::regfile_e enum in cve2_pkg.sv for permitted values."
ICache: ICache:
datatype: int datatype: int
@ -118,7 +118,7 @@ parameters:
default: 0 default: 0
description: "Enables static branch prediction (EXPERIMENTAL)" description: "Enables static branch prediction (EXPERIMENTAL)"
SecureIbex: SecureCVE2:
datatype: int datatype: int
default: 0 default: 0
paramtype: vlogparam paramtype: vlogparam
@ -149,7 +149,7 @@ targets:
- tool_veriblelint ? (files_lint_verible) - tool_veriblelint ? (files_lint_verible)
- files_rtl - files_rtl
- files_check_tool_requirements - files_check_tool_requirements
toplevel: ibex_core toplevel: cve2_core
parameters: parameters:
- tool_vivado ? (FPGA_XILINX=true) - tool_vivado ? (FPGA_XILINX=true)
lint: lint:
@ -173,7 +173,7 @@ targets:
- SYNTHESIS=true - SYNTHESIS=true
- RVFI=true - RVFI=true
default_tool: veribleformat default_tool: veribleformat
toplevel: ibex_core toplevel: cve2_core
tools: tools:
veribleformat: veribleformat:
verible_format_args: verible_format_args:

View file

@ -2,21 +2,21 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_icache:0.1" name: "lowrisc:cve2:cve2_icache:0.1"
description: "Ibex instruction cache" description: "Ibex instruction cache"
filesets: filesets:
files_rtl: files_rtl:
depend: depend:
- lowrisc:prim:secded - lowrisc:prim:secded
- lowrisc:prim:assert - lowrisc:prim:assert
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
files: files:
- rtl/ibex_icache.sv - rtl/cve2_icache.sv
file_type: systemVerilogSource file_type: systemVerilogSource
targets: targets:
default: &default_target default: &default_target
filesets: filesets:
- files_rtl - files_rtl
toplevel: ibex_icache toplevel: cve2_icache
default_tool: vcs default_tool: vcs

View file

@ -2,17 +2,17 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_multdiv:0.1" name: "lowrisc:cve2:cve2_multdiv:0.1"
description: "Multiplier and divider" description: "Multiplier and divider"
filesets: filesets:
files_rtl: files_rtl:
depend: depend:
- lowrisc:prim:assert - lowrisc:prim:assert
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
files: files:
- rtl/ibex_multdiv_fast.sv - rtl/cve2_multdiv_fast.sv
- rtl/ibex_multdiv_slow.sv - rtl/cve2_multdiv_slow.sv
file_type: systemVerilogSource file_type: systemVerilogSource
parameters: parameters:

View file

@ -2,13 +2,13 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_pkg:0.1" name: "lowrisc:cve2:cve2_pkg:0.1"
description: "Header package for Ibex" description: "Header package for CVE2"
filesets: filesets:
files_rtl: files_rtl:
files: files:
- rtl/ibex_pkg.sv - rtl/cve2_pkg.sv
file_type: systemVerilogSource file_type: systemVerilogSource
targets: targets:

View file

@ -2,24 +2,24 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_top:0.1" name: "lowrisc:cve2:cve2_top:0.1"
description: "Ibex, a small RV32 CPU core" description: "Ibex, a small RV32 CPU core"
filesets: filesets:
files_rtl: files_rtl:
depend: depend:
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
- lowrisc:ibex:ibex_core - lowrisc:cve2:cve2_core
- lowrisc:prim:buf - lowrisc:prim:buf
- lowrisc:prim:clock_mux2 - lowrisc:prim:clock_mux2
- lowrisc:prim:flop - lowrisc:prim:flop
- lowrisc:prim:ram_1p_scr - lowrisc:prim:ram_1p_scr
files: files:
- rtl/ibex_register_file_ff.sv # generic FF-based - rtl/cve2_register_file_ff.sv # generic FF-based
- rtl/ibex_register_file_fpga.sv # FPGA - rtl/cve2_register_file_fpga.sv # FPGA
- rtl/ibex_register_file_latch.sv # ASIC - rtl/cve2_register_file_latch.sv # ASIC
- rtl/ibex_lockstep.sv - rtl/cve2_lockstep.sv
- rtl/ibex_top.sv - rtl/cve2_top.sv
file_type: systemVerilogSource file_type: systemVerilogSource
files_lint_verilator: files_lint_verilator:
@ -56,21 +56,21 @@ parameters:
RV32M: RV32M:
datatype: str datatype: str
default: ibex_pkg::RV32MFast default: cve2_pkg::RV32MFast
paramtype: vlogdefine paramtype: vlogdefine
description: "RV32M implementation parameter enum. See the ibex_pkg::rv32m_e enum in ibex_pkg.sv for permitted values." description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."
RV32B: RV32B:
datatype: str datatype: str
default: ibex_pkg::RV32BNone default: cve2_pkg::RV32BNone
paramtype: vlogdefine paramtype: vlogdefine
description: "Bitmanip implementation parameter enum. See the ibex_pkg::rv32b_e enum in ibex_pkg.sv for permitted values." description: "Bitmanip implementation parameter enum. See the cve2_pkg::rv32b_e enum in cve2_pkg.sv for permitted values."
RegFile: RegFile:
datatype: str datatype: str
default: ibex_pkg::RegFileFF default: cve2_pkg::RegFileFF
paramtype: vlogdefine paramtype: vlogdefine
description: "Register file implementation parameter enum. See the ibex_pkg::regfile_e enum in ibex_pkg.sv for permitted values." description: "Register file implementation parameter enum. See the cve2_pkg::regfile_e enum in cve2_pkg.sv for permitted values."
ICache: ICache:
datatype: int datatype: int
@ -102,7 +102,7 @@ parameters:
default: 0 default: 0
description: "Enables static branch prediction (EXPERIMENTAL)" description: "Enables static branch prediction (EXPERIMENTAL)"
SecureIbex: SecureCVE2:
datatype: int datatype: int
default: 0 default: 0
paramtype: vlogparam paramtype: vlogparam
@ -139,7 +139,7 @@ targets:
- tool_veriblelint ? (files_lint_verible) - tool_veriblelint ? (files_lint_verible)
- files_rtl - files_rtl
- files_check_tool_requirements - files_check_tool_requirements
toplevel: ibex_top toplevel: cve2_top
parameters: parameters:
- tool_vivado ? (FPGA_XILINX=true) - tool_vivado ? (FPGA_XILINX=true)
lint: lint:
@ -163,7 +163,7 @@ targets:
- SYNTHESIS=true - SYNTHESIS=true
- RVFI=true - RVFI=true
default_tool: veribleformat default_tool: veribleformat
toplevel: ibex_top toplevel: cve2_top
tools: tools:
veribleformat: veribleformat:
verible_format_args: verible_format_args:

View file

@ -2,15 +2,15 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_top_tracing:0.1" name: "lowrisc:cve2:cve2_top_tracing:0.1"
description: "Ibex, a small RV32 CPU core with tracing enabled" description: "Ibex, a small RV32 CPU core with tracing enabled"
filesets: filesets:
files_rtl: files_rtl:
depend: depend:
- lowrisc:ibex:ibex_top - lowrisc:cve2:cve2_top
- lowrisc:ibex:ibex_tracer - lowrisc:cve2:cve2_tracer
files: files:
- rtl/ibex_top_tracing.sv - rtl/cve2_top_tracing.sv
file_type: systemVerilogSource file_type: systemVerilogSource
parameters: parameters:
@ -31,21 +31,21 @@ parameters:
RV32M: RV32M:
datatype: str datatype: str
default: ibex_pkg::RV32MFast default: cve2_pkg::RV32MFast
paramtype: vlogdefine paramtype: vlogdefine
description: "RV32M implementation parameter enum. See the ibex_pkg::rv32m_e enum in ibex_pkg.sv for permitted values." description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."
RV32B: RV32B:
datatype: str datatype: str
default: ibex_pkg::RV32BNone default: cve2_pkg::RV32BNone
paramtype: vlogdefine paramtype: vlogdefine
description: "Bitmanip implementation parameter enum. See the ibex_pkg::rv32b_e enum in ibex_pkg.sv for permitted values." description: "Bitmanip implementation parameter enum. See the cve2_pkg::rv32b_e enum in cve2_pkg.sv for permitted values."
RegFile: RegFile:
datatype: str datatype: str
default: ibex_pkg::RegFileFF default: cve2_pkg::RegFileFF
paramtype: vlogdefine paramtype: vlogdefine
description: "Register file implementation parameter enum. See the ibex_pkg::regfile_e enum in ibex_pkg.sv for permitted values." description: "Register file implementation parameter enum. See the cve2_pkg::regfile_e enum in cve2_pkg.sv for permitted values."
ICache: ICache:
datatype: int datatype: int
@ -77,7 +77,7 @@ parameters:
default: 0 default: 0
description: "Enables static branch prediction (EXPERIMENTAL)" description: "Enables static branch prediction (EXPERIMENTAL)"
SecureIbex: SecureCVE2:
datatype: int datatype: int
default: 0 default: 0
paramtype: vlogparam paramtype: vlogparam
@ -113,7 +113,7 @@ targets:
- files_rtl - files_rtl
parameters: parameters:
- RVFI=true - RVFI=true
toplevel: ibex_top_tracing toplevel: cve2_top_tracing
lint: lint:
<<: *default_target <<: *default_target
@ -129,7 +129,7 @@ targets:
- BranchTargetALU - BranchTargetALU
- WritebackStage - WritebackStage
- BranchPredictor - BranchPredictor
- SecureIbex - SecureCVE2
- ICacheScramble - ICacheScramble
- PMPEnable - PMPEnable
- PMPGranularity - PMPGranularity
@ -150,7 +150,7 @@ targets:
- SYNTHESIS=true - SYNTHESIS=true
- RVFI=true - RVFI=true
default_tool: veribleformat default_tool: veribleformat
toplevel: ibex_top_tracing toplevel: cve2_top_tracing
tools: tools:
veribleformat: veribleformat:
verible_format_args: verible_format_args:

View file

@ -2,16 +2,16 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_tracer:0.1" name: "lowrisc:cve2:cve2_tracer:0.1"
description: "Tracer for use with Ibex using the RVFI interface" description: "Tracer for use with Ibex using the RVFI interface"
filesets: filesets:
files_rtl: files_rtl:
depend: depend:
- lowrisc:prim:assert - lowrisc:prim:assert
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
files: files:
- rtl/ibex_tracer_pkg.sv - rtl/cve2_tracer_pkg.sv
- rtl/ibex_tracer.sv - rtl/cve2_tracer.sv
file_type: systemVerilogSource file_type: systemVerilogSource
targets: targets:

View file

@ -1,4 +1,4 @@
Introduction to Ibex Introduction to CVE2
==================== ====================
Ibex is a production-quality open source 32-bit RISC-V CPU core written in SystemVerilog. Ibex is a production-quality open source 32-bit RISC-V CPU core written in SystemVerilog.

View file

@ -8,8 +8,8 @@ This page discusses initial steps and requirements to start using Ibex in your d
Register File Register File
------------- -------------
Ibex comes with three different register file implementations that can be selected using the enumerated parameter ``RegFile`` defined in :file:`rtl/ibex_pkg.sv`. Ibex comes with three different register file implementations that can be selected using the enumerated parameter ``RegFile`` defined in :file:`rtl/cve2_pkg.sv`.
Depending on the target technology, either the flip-flop-based ("ibex_pkg::RegFileFF", default), the latch-based ("ibex_pkg::RegFileLatch") or an FPGA-targeted ("ibex_pkg::RegFileFPGA") implementation should be selected. Depending on the target technology, either the flip-flop-based ("cve2_pkg::RegFileFF", default), the latch-based ("cve2_pkg::RegFileLatch") or an FPGA-targeted ("cve2_pkg::RegFileFPGA") implementation should be selected.
For more information about the three register file implementations and their trade-offs, check out :ref:`register-file`. For more information about the three register file implementations and their trade-offs, check out :ref:`register-file`.
Identification CSRs Identification CSRs
@ -17,7 +17,7 @@ Identification CSRs
The RISC-V Privileged Architecture specifies several read-only CSRs that identify the vendor and micro-architecture of a CPU. The RISC-V Privileged Architecture specifies several read-only CSRs that identify the vendor and micro-architecture of a CPU.
These are ``mvendorid``, ``marchid`` and ``mimpid``. These are ``mvendorid``, ``marchid`` and ``mimpid``.
The fixed, read-only values for these CSRs are defined in :file:`rtl/ibex_pkg.sv`. The fixed, read-only values for these CSRs are defined in :file:`rtl/cve2_pkg.sv`.
Implementers should carefully consider appropriate values for these registers. Implementers should carefully consider appropriate values for these registers.
Ibex, as an open source implementation, has an assigned architecture ID (``marchid``) of 22. Ibex, as an open source implementation, has an assigned architecture ID (``marchid``) of 22.
(Allocations are specified in `marchid.md of the riscv-isa-manual repository <https://github.com/riscv/riscv-isa-manual/blob/master/marchid.md>`_.) (Allocations are specified in `marchid.md of the riscv-isa-manual repository <https://github.com/riscv/riscv-isa-manual/blob/master/marchid.md>`_.)

View file

@ -3,8 +3,8 @@
Core Integration Core Integration
================ ================
The main module is named ``ibex_top`` and can be found in ``ibex_top.sv``. The main module is named ``cve2_top`` and can be found in ``cve2_top.sv``.
Note that the core logic is split-out from the register file and RAMs under ``ibex_top``. Note that the core logic is split-out from the register file and RAMs under ``cve2_top``.
This is to facilitate a dual-core lockstep implementation (see :ref:`security`). This is to facilitate a dual-core lockstep implementation (see :ref:`security`).
Below, the instantiation template is given and the parameters and interfaces are described. Below, the instantiation template is given and the parameters and interfaces are described.
@ -14,23 +14,23 @@ Instantiation Template
.. code-block:: verilog .. code-block:: verilog
ibex_top #( cve2_top #(
.PMPEnable ( 0 ), .PMPEnable ( 0 ),
.PMPGranularity ( 0 ), .PMPGranularity ( 0 ),
.PMPNumRegions ( 4 ), .PMPNumRegions ( 4 ),
.MHPMCounterNum ( 0 ), .MHPMCounterNum ( 0 ),
.MHPMCounterWidth ( 40 ), .MHPMCounterWidth ( 40 ),
.RV32E ( 0 ), .RV32E ( 0 ),
.RV32M ( ibex_pkg::RV32MFast ), .RV32M ( cve2_pkg::RV32MFast ),
.RV32B ( ibex_pkg::RV32BNone ), .RV32B ( cve2_pkg::RV32BNone ),
.RegFile ( ibex_pkg::RegFileFF ), .RegFile ( cve2_pkg::RegFileFF ),
.ICache ( 0 ), .ICache ( 0 ),
.ICacheECC ( 0 ), .ICacheECC ( 0 ),
.ICacheScramble ( 0 ), .ICacheScramble ( 0 ),
.BranchPrediction ( 0 ), .BranchPrediction ( 0 ),
.SecureIbex ( 0 ), .SecureIbex ( 0 ),
.RndCnstLfsrSeed ( ibex_pkg::RndCnstLfsrSeedDefault ), .RndCnstLfsrSeed ( cve2_pkg::RndCnstLfsrSeedDefault ),
.RndCnstLfsrPerm ( ibex_pkg::RndCnstLfsrPermDefault ), .RndCnstLfsrPerm ( cve2_pkg::RndCnstLfsrPermDefault ),
.DbgTriggerEn ( 0 ), .DbgTriggerEn ( 0 ),
.DmHaltAddr ( 32'h1A110800 ), .DmHaltAddr ( 32'h1A110800 ),
.DmExceptionAddr ( 32'h1A110808 ) .DmExceptionAddr ( 32'h1A110808 )
@ -105,22 +105,22 @@ Parameters
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``RV32E`` | bit | 0 | RV32E mode enable (16 integer registers only) | | ``RV32E`` | bit | 0 | RV32E mode enable (16 integer registers only) |
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``RV32M`` | ibex_pkg::rv32m_e | RV32MFast | M(ultiply) extension select: | | ``RV32M`` | cve2_pkg::rv32m_e | RV32MFast | M(ultiply) extension select: |
| | | | "ibex_pkg::RV32MNone": No M-extension | | | | | "cve2_pkg::RV32MNone": No M-extension |
| | | | "ibex_pkg::RV32MSlow": Slow multi-cycle multiplier, iterative divider | | | | | "cve2_pkg::RV32MSlow": Slow multi-cycle multiplier, iterative divider |
| | | | "ibex_pkg::RV32MFast": 3-4 cycle multiplier, iterative divider | | | | | "cve2_pkg::RV32MFast": 3-4 cycle multiplier, iterative divider |
| | | | "ibex_pkg::RV32MSingleCycle": 1-2 cycle multiplier, iterative divider | | | | | "cve2_pkg::RV32MSingleCycle": 1-2 cycle multiplier, iterative divider |
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``RV32B`` | ibex_pkg::rv32b_e | RV32BNone | B(itmanipulation) extension select: | | ``RV32B`` | cve2_pkg::rv32b_e | RV32BNone | B(itmanipulation) extension select: |
| | | | "ibex_pkg::RV32BNone": No B-extension | | | | | "cve2_pkg::RV32BNone": No B-extension |
| | | | "ibex_pkg::RV32BBalanced": Sub-extensions Zba, Zbb, Zbs, Zbf and Zbt | | | | | "cve2_pkg::RV32BBalanced": Sub-extensions Zba, Zbb, Zbs, Zbf and Zbt |
| | | | "ibex_pkg::RV32BOTEarlGrey": All sub-extensions except Zbe | | | | | "cve2_pkg::RV32BOTEarlGrey": All sub-extensions except Zbe |
| | | | "ibex_pkg::RV32BFull": All sub-extensions | | | | | "cve2_pkg::RV32BFull": All sub-extensions |
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``RegFile`` | ibex_pkg::regfile_e | RegFileFF | Register file implementation select: | | ``RegFile`` | cve2_pkg::regfile_e | RegFileFF | Register file implementation select: |
| | | | "ibex_pkg::RegFileFF": Generic flip-flop-based register file | | | | | "cve2_pkg::RegFileFF": Generic flip-flop-based register file |
| | | | "ibex_pkg::RegFileFPGA": Register file for FPGA targets | | | | | "cve2_pkg::RegFileFPGA": Register file for FPGA targets |
| | | | "ibex_pkg::RegFileLatch": Latch-based register file for ASIC targets | | | | | "cve2_pkg::RegFileLatch": Latch-based register file for ASIC targets |
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``BranchTargetALU`` | bit | 0 | *EXPERIMENTAL* - Enables branch target ALU removing a stall | | ``BranchTargetALU`` | bit | 0 | *EXPERIMENTAL* - Enables branch target ALU removing a stall |
| | | | cycle from taken branches | | | | | cycle from taken branches |
@ -141,7 +141,7 @@ Parameters
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``SecureIbex`` | bit | 0 | *EXPERIMENTAL* Enable various additional features targeting | | ``SecureIbex`` | bit | 0 | *EXPERIMENTAL* Enable various additional features targeting |
| | | | secure code execution. Note: SecureIbex == 1'b1 and | | | | | secure code execution. Note: SecureIbex == 1'b1 and |
| | | | RV32M == ibex_pkg::RV32MNone is an illegal combination. | | | | | RV32M == cve2_pkg::RV32MNone is an illegal combination. |
+------------------------------+---------------------+------------+-----------------------------------------------------------------------+ +------------------------------+---------------------+------------+-----------------------------------------------------------------------+
| ``RndCnstLfsrSeed`` | lfsr_seed_t | see above | Set the starting seed of the LFSR used to generate dummy instructions | | ``RndCnstLfsrSeed`` | lfsr_seed_t | see above | Set the starting seed of the LFSR used to generate dummy instructions |
| | | | (only relevant when SecureIbex == 1'b1) | | | | | (only relevant when SecureIbex == 1'b1) |
@ -213,7 +213,7 @@ Interfaces
| | | | pause fetching new instructions. A | | | | | pause fetching new instructions. A |
| | | | multi-bit encoding scheme is used. See | | | | | multi-bit encoding scheme is used. See |
| | | | `FetchEnableOn` / `FetchEnableOff` in | | | | | `FetchEnableOn` / `FetchEnableOff` in |
| | | | :file:`rtl/ibex_pkg.sv` | | | | | :file:`rtl/cve2_pkg.sv` |
+----------------------------+-------------------------+-----+----------------------------------------+ +----------------------------+-------------------------+-----+----------------------------------------+
| ``core_sleep_o`` | 1 | out | Core in WFI with no outstanding data | | ``core_sleep_o`` | 1 | out | Core in WFI with no outstanding data |
| | | | or instruction accesses. Deasserts | | | | | or instruction accesses. Deasserts |

View file

@ -31,10 +31,10 @@ Follow the Spike build instructions to build and install Spike.
The build will install multiple header files and libraries, it is recommended a custom install location (using ``--prefix=<path>`` with ``configure``) is used to avoid cluttering system directories. The build will install multiple header files and libraries, it is recommended a custom install location (using ``--prefix=<path>`` with ``configure``) is used to avoid cluttering system directories.
The ``--enable-commitlog`` and ``--enable-misaligned`` options must be passed to ``configure``. The ``--enable-commitlog`` and ``--enable-misaligned`` options must be passed to ``configure``.
Once built, the ``IBEX_COSIM_ISS_ROOT`` environment variable must be set to the Spike root install directory (as given by ``--prefix=<path>`` to ``configure``) in order to build either the UVM DV environment or Simple System with co-simulation support. Once built, the ``CVE2_COSIM_ISS_ROOT`` environment variable must be set to the Spike root install directory (as given by ``--prefix=<path>`` to ``configure``) in order to build either the UVM DV environment or Simple System with co-simulation support.
To build/run the UVM DV environment with the co-simulator add the ``COSIM=1`` argument to the make command. To build/run the UVM DV environment with the co-simulator add the ``COSIM=1`` argument to the make command.
To build Simple System with the co-simulator build the ``lowrisc:ibex:ibex_simple_system_cosim`` core. To build Simple System with the co-simulator build the ``lowrisc:cve2:cve2_simple_system_cosim`` core.
Quick Build and Run Instructions Quick Build and Run Instructions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -44,7 +44,7 @@ Build and install the co-simulator
.. code-block:: bash .. code-block:: bash
# Get the Ibex co-simulation spike branch # Get the Ibex co-simulation spike branch
git clone -b ibex_cosim https://github.com/lowRISC/riscv-isa-sim.git riscv-isa-sim-cosim git clone -b cve2_cosim https://github.com/lowRISC/riscv-isa-sim.git riscv-isa-sim-cosim
# Setup build directory # Setup build directory
cd riscv-isa-sim-cosim cd riscv-isa-sim-cosim
@ -55,15 +55,15 @@ Build and install the co-simulator
../configure --enable-commitlog --enable-misaligned --prefix=/opt/spike-cosim ../configure --enable-commitlog --enable-misaligned --prefix=/opt/spike-cosim
sudo make -j8 install sudo make -j8 install
# Setup IBEX_COSIM_ISS_ROOT so build flow can find the co-simulator # Setup CVE2_COSIM_ISS_ROOT so build flow can find the co-simulator
export IBEX_COSIM_ISS_ROOT=/opt/spike-cosim export CVE2_COSIM_ISS_ROOT=/opt/spike-cosim
Run the UVM DV regression with co-simulation enabled Run the UVM DV regression with co-simulation enabled
.. code-block:: bash .. code-block:: bash
# Run regression with co-simulation enabled # Run regression with co-simulation enabled
cd <ibex_area>/dv/uvm/core_ibex cd <cve2_area>/dv/uvm/core_cve2
make COSIM=1 make COSIM=1
Build and run Simple System with the co-simulation enabled Build and run Simple System with the co-simulation enabled
@ -71,7 +71,7 @@ Build and run Simple System with the co-simulation enabled
.. code-block:: bash .. code-block:: bash
# Build simulator # Build simulator
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_simple_system_cosim --RV32E=0 --RV32M=ibex_pkg::RV32MFast fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_simple_system_cosim --RV32E=0 --RV32M=cve2_pkg::RV32MFast
# Build coremark test binary, with performance counter dump disabled. The # Build coremark test binary, with performance counter dump disabled. The
# co-simulator system doesn't produce matching performance counters in spike so # co-simulator system doesn't produce matching performance counters in spike so
@ -82,7 +82,7 @@ Build and run Simple System with the co-simulation enabled
export LD_LIBRARY_PATH=/opt/spike-cosim/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/opt/spike-cosim/lib:$LD_LIBRARY_PATH
# Run coremark binary with co-simulation checking # Run coremark binary with co-simulation checking
build/lowrisc_ibex_ibex_simple_system_cosim_0/sim-verilator/Vibex_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf build/lowrisc_cve2_cve2_simple_system_cosim_0/sim-verilator/Vcve2_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf
Co-simulation details Co-simulation details
---------------------- ----------------------
@ -143,7 +143,7 @@ The DV environment is responsible for determining when to call ``set_mip``, ``se
The state of the incoming interrupts and debug request is sampled when an instruction moves from IF to ID/EX. The state of the incoming interrupts and debug request is sampled when an instruction moves from IF to ID/EX.
The sampled state is tracked with the rest of the RVFI pipeline and used to call ``set_mip``, ``set_debug_req`` and ``set_nmi`` when the instruction is output by the RVFI. The sampled state is tracked with the rest of the RVFI pipeline and used to call ``set_mip``, ``set_debug_req`` and ``set_nmi`` when the instruction is output by the RVFI.
See the comments in :file:`rtl/ibex_core.sv`, around the ``new_debug_req``, ``new_nmi`` and ``new_irq`` signals for further details. See the comments in :file:`rtl/cve2_core.sv`, around the ``new_debug_req``, ``new_nmi`` and ``new_irq`` signals for further details.
Memory Access Checking and Bus Errors Memory Access Checking and Bus Errors
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -163,7 +163,7 @@ The co-simulation system will produce an instruction fault trap if it attempts t
Two methods are available for dealing with bus errors on the Iside, they differ in where they probe. Two methods are available for dealing with bus errors on the Iside, they differ in where they probe.
One probes on the external instr_X memory interface, the other probes internally within the IF stage. One probes on the external instr_X memory interface, the other probes internally within the IF stage.
The probe used is selected by the ``probe_imem_for_err`` field of the ``core_ibex_cosim_cfg`` structure. The probe used is selected by the ``probe_imem_for_err`` field of the ``core_cve2_cosim_cfg`` structure.
When set external probing is used, otherwise internal probing is used. When set external probing is used, otherwise internal probing is used.
Both probe points look for addresses that have seen bus errors. Both probe points look for addresses that have seen bus errors.

View file

@ -47,7 +47,7 @@ Some categories are just a single instruction, which is named without further de
* **ALU** - All of the reg/reg reg/imm instructions that use the ALU. * **ALU** - All of the reg/reg reg/imm instructions that use the ALU.
This is any RISC-V instruction with an opcode of ``7'b0010011`` or ``7'b0110011`` (``ibex_pkg::OPCODE_OP`` and ``ibex_pkg::OPCODE_OP_IMM``) other than the ``MUL*`` and ``DIV*`` family of instructions (from RV32M). This is any RISC-V instruction with an opcode of ``7'b0010011`` or ``7'b0110011`` (``cve2_pkg::OPCODE_OP`` and ``cve2_pkg::OPCODE_OP_IMM``) other than the ``MUL*`` and ``DIV*`` family of instructions (from RV32M).
* **Mul** - Any ``MUL*`` instruction (from RV32M). * **Mul** - Any ``MUL*`` instruction (from RV32M).
* **Div** - Any ``DIV*`` instruction (from RV32M). * **Div** - Any ``DIV*`` instruction (from RV32M).
* **Branch** - Any ``B*`` family branch instruction. * **Branch** - Any ``B*`` family branch instruction.
@ -262,8 +262,8 @@ Basic read/write functionality must be tested on all implemented CSRs.
* Access to CSR disallowed due to privilege level/debug mode. * Access to CSR disallowed due to privilege level/debug mode.
* Read and write from/to an unimplemented CSR * Read and write from/to an unimplemented CSR
CSRs addresses do not need to be crossed with the variety of CSR instructions as these all use the same basic read & write interface into ``ibex_cs_registers``. CSRs addresses do not need to be crossed with the variety of CSR instructions as these all use the same basic read & write interface into ``cve2_cs_registers``.
Coverage of the above points will be sampled at the ``ibex_cs_registers`` interface (as opposed to sampling CSR instructions). Coverage of the above points will be sampled at the ``cve2_cs_registers`` interface (as opposed to sampling CSR instructions).
Miscellaneous Miscellaneous
^^^^^^^^^^^^^ ^^^^^^^^^^^^^

View file

@ -597,7 +597,7 @@ CSR Address: ``0xF11``
Reset Value: ``0x0000_0000`` Reset Value: ``0x0000_0000``
Use the ``CSR_MVENDORID_VALUE`` parameter in :file:`rtl/ibex_pkg.sv` to change the fixed value. Use the ``CSR_MVENDORID_VALUE`` parameter in :file:`rtl/cve2_pkg.sv` to change the fixed value.
Details of what the ID represents can be found in the RISC-V Privileged Specification. Details of what the ID represents can be found in the RISC-V Privileged Specification.
Machine Architecture ID (marchid) Machine Architecture ID (marchid)
@ -607,7 +607,7 @@ CSR Address: ``0xF12``
Reset Value: ``0x0000_0016`` Reset Value: ``0x0000_0016``
Use the ``CSR_MARCHID_VALUE`` parameter in :file:`rtl/ibex_pkg.sv` to change the fixed value. Use the ``CSR_MARCHID_VALUE`` parameter in :file:`rtl/cve2_pkg.sv` to change the fixed value.
The value used is allocated specifically to Ibex. The value used is allocated specifically to Ibex.
If significant changes are made a different ID should be used. If significant changes are made a different ID should be used.
Details of what the ID represents can be found in the RISC-V Privileged Specification. Details of what the ID represents can be found in the RISC-V Privileged Specification.
@ -619,7 +619,7 @@ CSR Address: ``0xF13``
Reset Value: ``0x0000_0000`` Reset Value: ``0x0000_0000``
Use the ``CSR_MIMPID_VALUE`` parameter in :file:`rtl/ibex_pkg.sv` to change the fixed value. Use the ``CSR_MIMPID_VALUE`` parameter in :file:`rtl/cve2_pkg.sv` to change the fixed value.
Details of what the ID represents can be found in the RISC-V Privileged Specification. Details of what the ID represents can be found in the RISC-V Privileged Specification.
.. _csr-mhartid: .. _csr-mhartid:

View file

@ -2,7 +2,7 @@
Instruction Cache Instruction Cache
================= =================
:file:`rtl/ibex_icache.sv.` :file:`rtl/cve2_icache.sv.`
NOTE - This module is currently DRAFT NOTE - This module is currently DRAFT
@ -213,7 +213,7 @@ This isn't an attempt to describe the cache's performance characteristics.
The I$ has a single clock (``clk_i``) and asynchronous reset (``rst_ni``). The I$ has a single clock (``clk_i``) and asynchronous reset (``rst_ni``).
Data is requested from the instruction memory with the ports prefixed by ``instr_``. These work as described in :ref:`instruction-fetch`. Data is requested from the instruction memory with the ports prefixed by ``instr_``. These work as described in :ref:`instruction-fetch`.
Note that there's one extra port on the I$, which doesn't appear at the ``ibex_top`` top-level. Note that there's one extra port on the I$, which doesn't appear at the ``cve2_top`` top-level.
This is ``instr_pmp_err_i``. This is ``instr_pmp_err_i``.
If the PMP block disallows a fetch for a certain address, it will squash the outgoing memory request entirely and set ``instr_pmp_err_i``. If the PMP block disallows a fetch for a certain address, it will squash the outgoing memory request entirely and set ``instr_pmp_err_i``.
If that happens, the cache drops ``instr_req_o`` and stops making any further requests for that cache line. If that happens, the cache drops ``instr_req_o`` and stops making any further requests for that cache line.

View file

@ -315,7 +315,7 @@
style="fill:#000000;stroke-width:0.26458332px" style="fill:#000000;stroke-width:0.26458332px"
x="50.900173" x="50.900173"
y="70.702904" y="70.702904"
id="tspan861">core_ibex_base_test</tspan></text> id="tspan861">core_cve2_base_test</tspan></text>
<g <g
id="g947" id="g947"
transform="matrix(0.26458333,0,0,0.26458333,-15.697697,79.233817)"> transform="matrix(0.26458333,0,0,0.26458333,-15.697697,79.233817)">
@ -349,7 +349,7 @@
sodipodi:role="line" sodipodi:role="line"
id="tspan1030" id="tspan1030"
x="90.395103" x="90.395103"
y="498.28259">In the UVM run phase, the core_ibex_base_test</tspan><tspan y="498.28259">In the UVM run phase, the core_cve2_base_test</tspan><tspan
sodipodi:role="line" sodipodi:role="line"
x="90.395103" x="90.395103"
y="516.61591" y="516.61591"
@ -361,7 +361,7 @@
sodipodi:role="line" sodipodi:role="line"
x="90.395103" x="90.395103"
y="553.28259" y="553.28259"
id="tspan1038">derive from core_ibex_base_test and override</tspan><tspan id="tspan1038">derive from core_cve2_base_test and override</tspan><tspan
sodipodi:role="line" sodipodi:role="line"
x="90.395103" x="90.395103"
y="571.61591" y="571.61591"
@ -412,7 +412,7 @@
id="tspan983" id="tspan983"
y="90.343819" y="90.343819"
x="34.48238" x="34.48238"
style="fill:#000000;stroke-width:0.26458097px">core_ibex_env</tspan></text> style="fill:#000000;stroke-width:0.26458097px">core_cve2_env</tspan></text>
<g <g
transform="translate(0.26727063,-15.478201)" transform="translate(0.26727063,-15.478201)"
id="g2312"> id="g2312">
@ -442,7 +442,7 @@
id="text1015"><tspan id="text1015"><tspan
x="189.98438" x="189.98438"
y="378.39615" y="378.39615"
id="tspan1013">ibex_mem_intf_agent (dside)</tspan></text> id="tspan1013">cve2_mem_intf_agent (dside)</tspan></text>
</g> </g>
</g> </g>
<g <g
@ -471,7 +471,7 @@
id="tspan1013-5" id="tspan1013-5"
y="104.25224" y="104.25224"
x="34.569" x="34.569"
style="stroke-width:0.26458332px">ibex_cosim_agent</tspan></text> style="stroke-width:0.26458332px">cve2_cosim_agent</tspan></text>
<g <g
id="g2293" id="g2293"
transform="translate(3.3545413,1.1339286)"> transform="translate(3.3545413,1.1339286)">
@ -498,7 +498,7 @@
style="stroke-width:0.26458332px" style="stroke-width:0.26458332px"
x="30.930977" x="30.930977"
y="109.68816" y="109.68816"
id="tspan997">ibex_cosim_scoreboard</tspan></text> id="tspan997">cve2_cosim_scoreboard</tspan></text>
</g> </g>
</g> </g>
<g <g
@ -527,7 +527,7 @@
id="text1015-74"><tspan id="text1015-74"><tspan
x="189.98438" x="189.98438"
y="378.39615" y="378.39615"
id="tspan1013-7">ibex_mem_intf_agent (iside)</tspan></text> id="tspan1013-7">cve2_mem_intf_agent (iside)</tspan></text>
</g> </g>
<g <g
style="stroke-linecap:butt" style="stroke-linecap:butt"
@ -555,7 +555,7 @@
id="text1015-74-0"><tspan id="text1015-74-0"><tspan
x="189.98438" x="189.98438"
y="378.39615" y="378.39615"
id="tspan1013-7-8">ibex_irq_agent</tspan></text> id="tspan1013-7-8">cve2_irq_agent</tspan></text>
</g> </g>
<rect <rect
x="4.2931142" x="4.2931142"
@ -581,7 +581,7 @@
style="font-size:4.23333311px;fill:#000000;stroke-width:0.26458332px" style="font-size:4.23333311px;fill:#000000;stroke-width:0.26458332px"
x="34.628601" x="34.628601"
y="161.96948" y="161.96948"
id="tspan867-8">core_ibex_env_cfg</tspan></text> id="tspan867-8">core_cve2_env_cfg</tspan></text>
</g> </g>
<g <g
id="g9160"> id="g9160">
@ -922,7 +922,7 @@
sodipodi:role="line" sodipodi:role="line"
id="tspan8838" id="tspan8838"
x="125.14215" x="125.14215"
y="187.71576">core_ibex_ifetch_if ifetch_vif</tspan></text> y="187.71576">core_cve2_ifetch_if ifetch_vif</tspan></text>
<text <text
xml:space="preserve" xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:butt" style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-linecap:butt"
@ -959,7 +959,7 @@
id="tspan8860" id="tspan8860"
x="277.61084" x="277.61084"
y="110.63695" y="110.63695"
style="stroke-width:0.26458332">core_ibex_fcov_if</tspan></text> style="stroke-width:0.26458332">core_cve2_fcov_if</tspan></text>
</g> </g>
</g> </g>
<g <g

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Before After
Before After

View file

@ -15,7 +15,7 @@ The stage is made up of multiple sub-blocks which are described below.
Instruction Decode Block (ID) Instruction Decode Block (ID)
----------------------------- -----------------------------
Source File: :file:`rtl/ibex_id_stage.sv` Source File: :file:`rtl/cve2_id_stage.sv`
The Instruction Decode (ID) controls the overall decode/execution process. The Instruction Decode (ID) controls the overall decode/execution process.
It contains the muxes to choose what is sent to the ALU inputs and where the write data for the register file comes from. It contains the muxes to choose what is sent to the ALU inputs and where the write data for the register file comes from.
@ -23,7 +23,7 @@ A small state machine is used to control multi-cycle instructions (see :ref:`pip
Controller Controller
---------- ----------
Source File: :file:`rtl/ibex_controller.sv` Source File: :file:`rtl/cve2_controller.sv`
The Controller contains the state machine that controls the overall execution of the processor. The Controller contains the state machine that controls the overall execution of the processor.
It is responsible for: It is responsible for:
@ -36,25 +36,25 @@ It is responsible for:
Decoder Decoder
------- -------
Source File: :file:`rtl/ibex_decoder.sv` Source File: :file:`rtl/cve2_decoder.sv`
The decoder takes uncompressed instruction data and issues appropriate control signals to the other blocks to execute the instruction. The decoder takes uncompressed instruction data and issues appropriate control signals to the other blocks to execute the instruction.
Register File Register File
------------- -------------
Source Files: :file:`rtl/ibex_register_file_ff.sv` :file:`rtl/ibex_register_file_fpga.sv` :file:`rtl/ibex_register_file_latch.sv` Source Files: :file:`rtl/cve2_register_file_ff.sv` :file:`rtl/cve2_register_file_fpga.sv` :file:`rtl/cve2_register_file_latch.sv`
See :ref:`register-file` for more details. See :ref:`register-file` for more details.
Execute Block Execute Block
------------- -------------
Source File: :file:`rtl/ibex_ex_block.sv` Source File: :file:`rtl/cve2_ex_block.sv`
The execute block contains the ALU and the multiplier/divider blocks, it does little beyond wiring and instantiating these blocks. The execute block contains the ALU and the multiplier/divider blocks, it does little beyond wiring and instantiating these blocks.
Arithmetic Logic Unit (ALU) Arithmetic Logic Unit (ALU)
--------------------------- ---------------------------
Source File: :file:`rtl/ibex_alu.sv` Source File: :file:`rtl/cve2_alu.sv`
The Arithmetic Logic Logic (ALU) is a purely combinational block that implements operations required for the Integer Computational Instructions and the comparison operations required for the Control Transfer Instructions in the RV32I RISC-V Specification. The Arithmetic Logic Logic (ALU) is a purely combinational block that implements operations required for the Integer Computational Instructions and the comparison operations required for the Control Transfer Instructions in the RV32I RISC-V Specification.
Other blocks use the ALU for the following tasks: Other blocks use the ALU for the following tasks:
@ -66,15 +66,15 @@ Other blocks use the ALU for the following tasks:
Bit-Manipulation Extension Bit-Manipulation Extension
Support for the `RISC-V Bit-Manipulation Extension version 1.0.0 <https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf>`_ and `draft version 0.93 from January 10, 2021 <https://github.com/riscv/riscv-bitmanip/blob/master/bitmanip-0.93.pdf>`_ is optional. [#B_draft]_ Support for the `RISC-V Bit-Manipulation Extension version 1.0.0 <https://github.com/riscv/riscv-bitmanip/releases/download/1.0.0/bitmanip-1.0.0-38-g865e7a7.pdf>`_ and `draft version 0.93 from January 10, 2021 <https://github.com/riscv/riscv-bitmanip/blob/master/bitmanip-0.93.pdf>`_ is optional. [#B_draft]_
It can be enabled via the enumerated parameter ``RV32B`` defined in :file:`rtl/ibex_pkg.sv`. It can be enabled via the enumerated parameter ``RV32B`` defined in :file:`rtl/cve2_pkg.sv`.
By default, this parameter is set to "ibex_pkg::RV32BNone" to disable the bit-manipulation extension. By default, this parameter is set to "cve2_pkg::RV32BNone" to disable the bit-manipulation extension.
There are three versions of the bit-manipulation extension available: There are three versions of the bit-manipulation extension available:
The balanced version comprises a set of sub-extensions aiming for good benefits at a reasonable area overhead. The balanced version comprises a set of sub-extensions aiming for good benefits at a reasonable area overhead.
It can be selected by setting the ``RV32B`` parameter to "ibex_pkg::RV32BBalanced". It can be selected by setting the ``RV32B`` parameter to "cve2_pkg::RV32BBalanced".
The OTEarlGrey version comprises all sub-extensions except for the Zbe. The OTEarlGrey version comprises all sub-extensions except for the Zbe.
This version can be selected by setting the ``RV32B`` parameter to "ibex_pkg::RV32BOTEarlGrey". This version can be selected by setting the ``RV32B`` parameter to "cve2_pkg::RV32BOTEarlGrey".
The full version comprises all sub-extensions and can be selected by setting the ``RV32B`` parameter to "ibex_pkg::RV32BFull". The full version comprises all sub-extensions and can be selected by setting the ``RV32B`` parameter to "cve2_pkg::RV32BFull".
The following table gives an overview of which sub-extensions are implemented in each version and of which instructions are implemented as multi-cycle instructions. The following table gives an overview of which sub-extensions are implemented in each version and of which instructions are implemented as multi-cycle instructions.
Multi-cycle instructions are completed in 2 cycles. Multi-cycle instructions are completed in 2 cycles.
All remaining instructions complete in a single cycle. All remaining instructions complete in a single cycle.
@ -109,16 +109,16 @@ Bit-Manipulation Extension
Multiplier/Divider Block (MULT/DIV) Multiplier/Divider Block (MULT/DIV)
----------------------------------- -----------------------------------
Source Files: :file:`rtl/ibex_multdiv_slow.sv` :file:`rtl/ibex_multdiv_fast.sv` Source Files: :file:`rtl/cve2_multdiv_slow.sv` :file:`rtl/cve2_multdiv_fast.sv`
The Multiplier/Divider (MULT/DIV) is a state machine driven block to perform multiplication and division. The Multiplier/Divider (MULT/DIV) is a state machine driven block to perform multiplication and division.
The fast and slow versions differ in multiplier only. All versions implement the same form of long division algorithm. The ALU block is used by the long division algorithm in all versions. The fast and slow versions differ in multiplier only. All versions implement the same form of long division algorithm. The ALU block is used by the long division algorithm in all versions.
Multiplier Multiplier
The multiplier can be implemented in three variants controlled via the enumerated parameter ``RV32M`` defined in :file:`rtl/ibex_pkg.sv`. The multiplier can be implemented in three variants controlled via the enumerated parameter ``RV32M`` defined in :file:`rtl/cve2_pkg.sv`.
Single-Cycle Multiplier Single-Cycle Multiplier
This implementation is chosen by setting the ``RV32M`` parameter to "ibex_pkg::RV32MSingleCycle". This implementation is chosen by setting the ``RV32M`` parameter to "cve2_pkg::RV32MSingleCycle".
The single-cycle multiplier makes use of three parallel multiplier units, designed to be mapped to hardware multiplier primitives on FPGAs. The single-cycle multiplier makes use of three parallel multiplier units, designed to be mapped to hardware multiplier primitives on FPGAs.
It is therefore the **first choice for FPGA synthesis**. It is therefore the **first choice for FPGA synthesis**.
@ -128,7 +128,7 @@ Multiplier
- ASIC synthesis has not yet been tested but is expected to consume 3-4x the area of the fast multiplier for ASIC. - ASIC synthesis has not yet been tested but is expected to consume 3-4x the area of the fast multiplier for ASIC.
Fast Multi-Cycle Multiplier Fast Multi-Cycle Multiplier
This implementation is chosen by setting the ``RV32M`` parameter to "ibex_pkg::RV32MFast". This implementation is chosen by setting the ``RV32M`` parameter to "cve2_pkg::RV32MFast".
The fast multi-cycle multiplier provides a reasonable trade-off between area and performance. It is the **first choice for ASIC synthesis**. The fast multi-cycle multiplier provides a reasonable trade-off between area and performance. It is the **first choice for ASIC synthesis**.
- Completes multiply in 3-4 cycles using a MAC (multiply accumulate) which is capable of a 17-bit x 17-bit multiplication with a 34-bit accumulator. - Completes multiply in 3-4 cycles using a MAC (multiply accumulate) which is capable of a 17-bit x 17-bit multiplication with a 34-bit accumulator.
@ -138,7 +138,7 @@ Multiplier
- In some cases it may be desirable to replace this with a specific implementation such as an explicit gate level implementation. - In some cases it may be desirable to replace this with a specific implementation such as an explicit gate level implementation.
Slow Multi-Cycle Multiplier Slow Multi-Cycle Multiplier
To select the slow multi-cycle multiplier, set the ``RV32M`` parameter to "ibex_pkg::RV32MSlow". To select the slow multi-cycle multiplier, set the ``RV32M`` parameter to "cve2_pkg::RV32MSlow".
- Completes multiply in clog2(``op_b``) + 1 cycles (for MUL) or 33 cycles (for MULH) using a Baugh-Wooley multiplier. - Completes multiply in clog2(``op_b``) + 1 cycles (for MUL) or 33 cycles (for MULH) using a Baugh-Wooley multiplier.
- The ALU block is used to compute additions. - The ALU block is used to compute additions.
@ -151,11 +151,11 @@ Divider
- Cycle 2: Compute absolute value of operand B - Cycle 2: Compute absolute value of operand B
- Cycles 4 - 36: Perform long division as described here: https://en.wikipedia.org/wiki/Division_algorithm#Integer_division_(unsigned)_with_remainder. - Cycles 4 - 36: Perform long division as described here: https://en.wikipedia.org/wiki/Division_algorithm#Integer_division_(unsigned)_with_remainder.
By setting the ``RV32M`` parameter to "ibex_pkg::RV32MNone", the M-extension can be disabled completely. By setting the ``RV32M`` parameter to "cve2_pkg::RV32MNone", the M-extension can be disabled completely.
Control and Status Register Block (CSR) Control and Status Register Block (CSR)
--------------------------------------- ---------------------------------------
Source File: :file:`rtl/ibex_cs_registers.sv` Source File: :file:`rtl/cve2_cs_registers.sv`
The CSR contains all of the CSRs (control/status registers). The CSR contains all of the CSRs (control/status registers).
Any CSR read/write is handled through this block. Any CSR read/write is handled through this block.
@ -165,7 +165,7 @@ Further detail on the implemented CSRs can be found in :ref:`cs-registers`
Load-Store Unit (LSU) Load-Store Unit (LSU)
--------------------- ---------------------
Source File: :file:`rtl/ibex_load_store_unit.sv` Source File: :file:`rtl/cve2_load_store_unit.sv`
The Load-Store Unit (LSU) interfaces with main memory to perform load and store operations. The Load-Store Unit (LSU) interfaces with main memory to perform load and store operations.
See :ref:`load-store-unit` for more details. See :ref:`load-store-unit` for more details.

View file

@ -2,7 +2,7 @@
Instruction Fetch Instruction Fetch
================= =================
:file:`rtl/ibex_if_stage.sv.` :file:`rtl/cve2_if_stage.sv.`
.. figure:: images/if_stage.svg .. figure:: images/if_stage.svg
:name: if_stage :name: if_stage
@ -12,9 +12,9 @@ Instruction Fetch
The Instruction Fetch (IF) stage of the core is able to supply one instruction to the Instruction-Decode (ID) stage per cycle if the instruction cache or the instruction memory is able to serve one instruction per cycle. The Instruction Fetch (IF) stage of the core is able to supply one instruction to the Instruction-Decode (ID) stage per cycle if the instruction cache or the instruction memory is able to serve one instruction per cycle.
Instructions are fetched into a prefetch buffer (:file:`rtl/ibex_prefetch_buffer.sv`) for optimal performance and timing closure reasons. Instructions are fetched into a prefetch buffer (:file:`rtl/cve2_prefetch_buffer.sv`) for optimal performance and timing closure reasons.
This buffer simply fetches instructions linearly until it is full. This buffer simply fetches instructions linearly until it is full.
The instructions themselves are stored along with the Program Counter (PC) they came from in the fetch FIFO (:file:`rtl/ibex_fetch_fifo.sv`). The instructions themselves are stored along with the Program Counter (PC) they came from in the fetch FIFO (:file:`rtl/cve2_fetch_fifo.sv`).
The fetch FIFO has a feedthrough path so when empty a new instruction entering the FIFO is immediately made available on the FIFO output. The fetch FIFO has a feedthrough path so when empty a new instruction entering the FIFO is immediately made available on the FIFO output.
A localparam ``DEPTH`` gives a configurable depth which is set to 3 by default. A localparam ``DEPTH`` gives a configurable depth which is set to 3 by default.

View file

@ -2,7 +2,7 @@
Load-Store Unit Load-Store Unit
=============== ===============
:file:`rtl/ibex_load_store_unit.sv` :file:`rtl/cve2_load_store_unit.sv`
The Load-Store Unit (LSU) of the core takes care of accessing the data memory. The Load-Store Unit (LSU) of the core takes care of accessing the data memory.
Loads and stores of words (32 bit), half words (16 bit) and bytes (8 bit) are supported. Loads and stores of words (32 bit), half words (16 bit) and bytes (8 bit) are supported.

View file

@ -50,5 +50,5 @@ Custom Reset Values
By default all PMP CSRs (include ``mseccfg``) are reset to 0. By default all PMP CSRs (include ``mseccfg``) are reset to 0.
Some applications may want other reset values. Some applications may want other reset values.
Default reset values are defined in :file:`ibex_pmp_reset_default.svh`. Default reset values are defined in :file:`cve2_pmp_reset_default.svh`.
An implementation can either modify this file or define ``IBEX_CUSTOM_PMP_RESET_VALUES`` and place a copy of :file:`ibex_pmp_result_default.svh` in a new file, :file:`ibex_pmp_reset.svh`, changing the values as required and adding the new file to the include path of whatever build flow is being used. An implementation can either modify this file or define ``CVE2_CUSTOM_PMP_RESET_VALUES`` and place a copy of :file:`cve2_pmp_result_default.svh` in a new file, :file:`cve2_pmp_reset.svh`, changing the values as required and adding the new file to the include path of whatever build flow is being used.

View file

@ -2,7 +2,7 @@
Register File Register File
============= =============
Source Files: :file:`rtl/ibex_register_file_ff.sv` :file:`rtl/ibex_register_file_fpga.sv` :file:`rtl/ibex_register_file_latch.sv` Source Files: :file:`rtl/cve2_register_file_ff.sv` :file:`rtl/cve2_register_file_fpga.sv` :file:`rtl/cve2_register_file_latch.sv`
Ibex has either 31 or 15 32-bit registers if the RV32E extension is disabled or enabled, respectively. Ibex has either 31 or 15 32-bit registers if the RV32E extension is disabled or enabled, respectively.
Register ``x0`` is statically bound to 0 and can only be read, it does not contain any sequential logic. Register ``x0`` is statically bound to 0 and can only be read, it does not contain any sequential logic.
@ -11,7 +11,7 @@ The register file has two read ports and one write port, register file data is a
There is no write to read forwarding path so if one register is being both read and written the read will return the current value rather than the value being written. There is no write to read forwarding path so if one register is being both read and written the read will return the current value rather than the value being written.
There are three flavors of register file available, each having their own benefits and trade-offs. There are three flavors of register file available, each having their own benefits and trade-offs.
The register file flavor is selected via the enumerated parameter ``RegFile`` defined in :file:`rtl/ibex_pkg.sv`. The register file flavor is selected via the enumerated parameter ``RegFile`` defined in :file:`rtl/cve2_pkg.sv`.
Flip-Flop-Based Register File Flip-Flop-Based Register File
----------------------------- -----------------------------
@ -20,7 +20,7 @@ The flip-flop-based register file uses regular, positive-edge-triggered flip-flo
This makes it the **first choice when simulating the design using Verilator**. This makes it the **first choice when simulating the design using Verilator**.
This implementation can be selected by setting the ``RegFile`` parameter to "ibex_pkg::RegFileFF". This implementation can be selected by setting the ``RegFile`` parameter to "cve2_pkg::RegFileFF".
It is the default selection. It is the default selection.
FPGA Register File FPGA Register File
@ -32,7 +32,7 @@ For Xilinx FPGAs, synthesis results in an implementation using RAM32M primitives
This makes it the **first choice for FPGA synthesis**. This makes it the **first choice for FPGA synthesis**.
To select the FPGA register file, set the ``RegFile`` parameter to "ibex_pkg::RegFileFPGA". To select the FPGA register file, set the ``RegFile`` parameter to "cve2_pkg::RegFileFPGA".
Latch-Based Register File Latch-Based Register File
------------------------- -------------------------
@ -46,7 +46,7 @@ Simulation of the latch-based register file is possible using commercial tools.
The latch-based register file can also be used for FPGA synthesis, but this is not recommended as FPGAs usually do not well support latches. The latch-based register file can also be used for FPGA synthesis, but this is not recommended as FPGAs usually do not well support latches.
To select the latch-based register file, set the ``RegFile`` parameter to "ibex_pkg::RegFileLatch". To select the latch-based register file, set the ``RegFile`` parameter to "cve2_pkg::RegFileLatch".
In addition, a technology-specific clock gating cell must be provided to keep the clock inactive when the latches are not written. In addition, a technology-specific clock gating cell must be provided to keep the clock inactive when the latches are not written.
This cell must be wrapped in a module called ``prim_clock_gating``. This cell must be wrapped in a module called ``prim_clock_gating``.
For more information regarding the clock gating cell, checkout :ref:`getting-started`. For more information regarding the clock gating cell, checkout :ref:`getting-started`.

View file

@ -10,7 +10,7 @@ Outputs
------- -------
Ibex has three alert outputs for signalling security issues. Ibex has three alert outputs for signalling security issues.
The internal major alert (**alert_major_internal_o**) indicates a critical security issue from which the core cannot recover which was detected internally in `ibex_top`. The internal major alert (**alert_major_internal_o**) indicates a critical security issue from which the core cannot recover which was detected internally in `cve2_top`.
The bus major alert (**alert_major_internal_o**) indicates a critical security issue from which the core cannot recover which was detected on incoming bus data. The bus major alert (**alert_major_internal_o**) indicates a critical security issue from which the core cannot recover which was detected on incoming bus data.
The minor alert (**alert_minor_o**) indicates potential security issues which can be monitored over time by a system. The minor alert (**alert_minor_o**) indicates potential security issues which can be monitored over time by a system.
@ -65,7 +65,7 @@ Sofware can periodically re-seed this LFSR with true random numbers (if availabl
This will make the insertion interval of dummy instructions much harder for an attacker to predict. This will make the insertion interval of dummy instructions much harder for an attacker to predict.
Note that the dummy instruction feature inserts multiply and divide instructions. Note that the dummy instruction feature inserts multiply and divide instructions.
The core must be configured with a multiplier (`RV32M != ibex_pkg::RV32MNone`) or errors will occur using this feature. The core must be configured with a multiplier (`RV32M != cve2_pkg::RV32MNone`) or errors will occur using this feature.
Bus integrity checking Bus integrity checking
---------------------- ----------------------

View file

@ -30,7 +30,7 @@ Testbench Architecture
Ibex utilises a co-simulation checking approach described in detail in :ref:`cosim`. Ibex utilises a co-simulation checking approach described in detail in :ref:`cosim`.
With the co-simulation system all instructions Ibex executes and all external events such as an interrupts or memory errors are fed to a golden model. With the co-simulation system all instructions Ibex executes and all external events such as an interrupts or memory errors are fed to a golden model.
The results of every instruction execution and every memory access are crossed checked against the golden model with any mismatches resulting in a test failure. The results of every instruction execution and every memory access are crossed checked against the golden model with any mismatches resulting in a test failure.
The aim is to check all possible externally observable behaviours of ``ibex_top`` against the golden model. The aim is to check all possible externally observable behaviours of ``cve2_top`` against the golden model.
The golden model used is the `Spike RISC-V ISS <https://github.com/riscv-software-src/riscv-isa-sim>`_. The golden model used is the `Spike RISC-V ISS <https://github.com/riscv-software-src/riscv-isa-sim>`_.
The testbench uses UVM. The testbench uses UVM.
@ -88,16 +88,16 @@ Tests
As with stimulus, test sequence development uses a coverage based approach. As with stimulus, test sequence development uses a coverage based approach.
Tests will be added such that all coverage in the :ref:`coverage-plan` can be hit. Tests will be added such that all coverage in the :ref:`coverage-plan` can be hit.
Not all the details of specific tests will be documented here. Not all the details of specific tests will be documented here.
The test list (`dv/uvm/core_ibex/riscv_dv_extension/testlist.yaml <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/riscv_dv_extension/testlist.yaml>`_), provides an exhaustive list of all tests along with a brief description of what the test does. The test list (`dv/uvm/core_cve2/riscv_dv_extension/testlist.yaml <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/riscv_dv_extension/testlist.yaml>`_), provides an exhaustive list of all tests along with a brief description of what the test does.
A test will execute a binary whilst running zero or more sequences that provide stimulus to external interfaces of ``ibex_top``. A test will execute a binary whilst running zero or more sequences that provide stimulus to external interfaces of ``cve2_top``.
As the memory interfaces are all driven by Ibex, with any testbench generated activity in response to a request from Ibex, they do not require explicit sequences run by the test. As the memory interfaces are all driven by Ibex, with any testbench generated activity in response to a request from Ibex, they do not require explicit sequences run by the test.
Instead the test can configure the randomisation of memory delays as it wishes. Instead the test can configure the randomisation of memory delays as it wishes.
Memory errors can be configured to always occur in statically defined areas of the memory map or a sequence can be used to inject them via the memory interface agent. Memory errors can be configured to always occur in statically defined areas of the memory map or a sequence can be used to inject them via the memory interface agent.
The following sequences are available for tests to use. The following sequences are available for tests to use.
Each sequence is derived from a base sequence which provides controls to repeat the sequence at fixed or random internals, forever or after a random number of repeats. Each sequence is derived from a base sequence which provides controls to repeat the sequence at fixed or random internals, forever or after a random number of repeats.
Full details can be found in `dv/uvm/core_ibex/tests/core_ibex_seq_lib.sv <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/tests/core_ibex_seq_lib.sv>`_. Full details can be found in `dv/uvm/core_cve2/tests/core_cve2_seq_lib.sv <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/tests/core_cve2_seq_lib.sv>`_.
* ``irq_raise_seq`` - Raises one or more interrupts. * ``irq_raise_seq`` - Raises one or more interrupts.
The testbench binary can write to a special memory location to acknowledge the interrupt and cause it to drop. The testbench binary can write to a special memory location to acknowledge the interrupt and cause it to drop.

View file

@ -3,8 +3,8 @@
Tracer Tracer
====== ======
The module ``ibex_tracer`` can be used to create a log of the executed instructions. The module ``cve2_tracer`` can be used to create a log of the executed instructions.
It is used by ``ibex_top_tracing`` which forwards the `RVFI signals <https://github.com/SymbioticEDA/riscv-formal/blob/master/docs/rvfi.md>`_ to the tracer (see also :ref:`rvfi`). It is used by ``cve2_top_tracing`` which forwards the `RVFI signals <https://github.com/SymbioticEDA/riscv-formal/blob/master/docs/rvfi.md>`_ to the tracer (see also :ref:`rvfi`).
Output file Output file
----------- -----------
@ -12,8 +12,8 @@ Output file
All traced instructions are written to a log file. All traced instructions are written to a log file.
By default, the log file is named ``trace_core_<HARTID>.log``, with ``<HARTID>`` being the 8 digit hart ID of the core being traced. By default, the log file is named ``trace_core_<HARTID>.log``, with ``<HARTID>`` being the 8 digit hart ID of the core being traced.
The file name base, defaulting to ``trace_core`` can be set using the ``ibex_tracer_file_base`` plusarg passed to the simulation. The file name base, defaulting to ``trace_core`` can be set using the ``cve2_tracer_file_base`` plusarg passed to the simulation.
For example, ``+ibex_tracer_file_base=ibex_my_trace`` will produce log files named ``ibex_my_trace_<HARTID>.log``. For example, ``+cve2_tracer_file_base=cve2_my_trace`` will produce log files named ``cve2_my_trace_<HARTID>.log``.
The exact syntax of passing plusargs to a simulation depends on the simulator. The exact syntax of passing plusargs to a simulation depends on the simulator.
Disabling the tracer Disabling the tracer
@ -21,9 +21,9 @@ Disabling the tracer
If the instruction log is not needed for a specific simulation run, the tracer can be disabled. If the instruction log is not needed for a specific simulation run, the tracer can be disabled.
The plusarg ``ibex_tracer_enable`` controls the tracer. The plusarg ``cve2_tracer_enable`` controls the tracer.
The tracer is enabled by default. The tracer is enabled by default.
To disable the tracer use ``ibex_tracer_enable=0`` with the correct plusarg syntax of the simulator. To disable the tracer use ``cve2_tracer_enable=0`` with the correct plusarg syntax of the simulator.
Trace output format Trace output format
------------------- -------------------

View file

@ -11,7 +11,7 @@ Ibex Core
Overview Overview
^^^^^^^^ ^^^^^^^^
This is a SV/UVM testbench for verification of the Ibex core, located in `dv/uvm/core_ibex`. This is a SV/UVM testbench for verification of the Ibex core, located in `dv/uvm/core_cve2`.
At a high level, this testbench uses the open source `RISCV-DV random instruction generator At a high level, this testbench uses the open source `RISCV-DV random instruction generator
<https://github.com/google/riscv-dv>`_ to generate compiled instruction binaries, loads them into a <https://github.com/google/riscv-dv>`_ to generate compiled instruction binaries, loads them into a
simple memory model, stimulates the Ibex core to run this program in memory, and then compares the simple memory model, stimulates the Ibex core to run this program in memory, and then compares the
@ -32,8 +32,8 @@ A block diagram of the testbench is below.
Memory Interface Agents Memory Interface Agents
""""""""""""""""""""""" """""""""""""""""""""""
The code can be found in the `dv/uvm/core_ibex/common/ibex_mem_intf_agent The code can be found in the `dv/uvm/core_cve2/common/cve2_mem_intf_agent
<https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_ibex/common/ibex_mem_intf_agent>`_ directory. <https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_cve2/common/cve2_mem_intf_agent>`_ directory.
Two of these agents are instantiated within the testbench, one for the instruction fetch interface, Two of these agents are instantiated within the testbench, one for the instruction fetch interface,
and the second for the LSU interface. and the second for the LSU interface.
These agents run slave sequences that wait for memory requests from the core, and then grant the These agents run slave sequences that wait for memory requests from the core, and then grant the
@ -43,7 +43,7 @@ Interrupt Interface Agent
""""""""""""""""""""""""" """""""""""""""""""""""""
The code can be found in the The code can be found in the
`dv/uvm/core_ibex/common/irq_agent <https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_ibex/common/irq_agent>`_ directory. `dv/uvm/core_cve2/common/irq_agent <https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_cve2/common/irq_agent>`_ directory.
This agent is used to drive stimulus onto the Ibex core's interrupt pins randomly during test This agent is used to drive stimulus onto the Ibex core's interrupt pins randomly during test
execution. execution.
@ -62,10 +62,10 @@ Test and Sequence Library
""""""""""""""""""""""""" """""""""""""""""""""""""
The code can be found in the The code can be found in the
`dv/uvm/core_ibex/tests <https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_ibex/tests>`_ directory. `dv/uvm/core_cve2/tests <https://github.com/lowRISC/ibex/tree/master/dv/uvm/core_cve2/tests>`_ directory.
The tests here are the main sources of external stimulus generation and checking for this testbench, The tests here are the main sources of external stimulus generation and checking for this testbench,
as the memory interface slave sequences simply serve the core's memory requests. as the memory interface slave sequences simply serve the core's memory requests.
The tests here are all extended from ``core_ibex_base_test``, and coordinate the entire flow for a The tests here are all extended from ``core_cve2_base_test``, and coordinate the entire flow for a
single test, from loading the compiled assembly binary program into the testbench memory model, to single test, from loading the compiled assembly binary program into the testbench memory model, to
checking the Ibex core status during the test and dealing with test timeouts. checking the Ibex core status during the test and dealing with test timeouts.
The sequences here are used to drive interrupt and debug stimulus into the core. The sequences here are used to drive interrupt and debug stimulus into the core.
@ -76,8 +76,8 @@ Testplan
The goal of this bench is to fully verify the Ibex core with 100% The goal of this bench is to fully verify the Ibex core with 100%
coverage. This includes testing all RV32IMCB instructions, privileged coverage. This includes testing all RV32IMCB instructions, privileged
spec compliance, exception and interrupt testing, Debug Mode operation etc. spec compliance, exception and interrupt testing, Debug Mode operation etc.
The complete test list can be found in the file `dv/uvm/core_ibex/riscv_dv_extension/testlist.yaml The complete test list can be found in the file `dv/uvm/core_cve2/riscv_dv_extension/testlist.yaml
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/riscv_dv_extension/testlist.yaml>`_. <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/riscv_dv_extension/testlist.yaml>`_.
For details on coverage see the :ref:`coverage-plan`. For details on coverage see the :ref:`coverage-plan`.
Please note that verification is still a work in progress. Please note that verification is still a work in progress.
@ -123,7 +123,7 @@ to tell the RISCV-DV code where to find them:
export RISCV_OBJCOPY="$RISCV_TOOLCHAIN/bin/riscv32-unknown-elf-objcopy" export RISCV_OBJCOPY="$RISCV_TOOLCHAIN/bin/riscv32-unknown-elf-objcopy"
export SPIKE_PATH=/path/to/spike/bin export SPIKE_PATH=/path/to/spike/bin
.. _LRSpike: https://github.com/lowRISC/riscv-isa-sim/tree/ibex_cosim .. _LRSpike: https://github.com/lowRISC/riscv-isa-sim/tree/cve2_cosim
.. _riscv-toolchain-source: https://github.com/riscv/riscv-gnu-toolchain .. _riscv-toolchain-source: https://github.com/riscv/riscv-gnu-toolchain
.. _riscv-toolchain-releases: https://github.com/lowRISC/lowrisc-toolchains/releases .. _riscv-toolchain-releases: https://github.com/lowRISC/lowrisc-toolchains/releases
.. _bitmanip-patches: https://github.com/lowRISC/lowrisc-toolchains#how-to-generate-the-bitmanip-patches .. _bitmanip-patches: https://github.com/lowRISC/lowrisc-toolchains#how-to-generate-the-bitmanip-patches
@ -154,12 +154,12 @@ any analysis that is required to increase verification effectiveness.
This mechanism is explained in detail at https://github.com/google/riscv-dv/blob/master/HANDSHAKE.md. This mechanism is explained in detail at https://github.com/google/riscv-dv/blob/master/HANDSHAKE.md.
As a sidenote, the signature address that this testbench uses for the handshaking is ``0x8ffffffc``. As a sidenote, the signature address that this testbench uses for the handshaking is ``0x8ffffffc``.
Additionally, as is mentioned in the RISCV-DV documentation of this handshake, a small set of API Additionally, as is mentioned in the RISCV-DV documentation of this handshake, a small set of API
tasks are provided in `dv/uvm/core_ibex/tests/core_ibex_base_test.sv tasks are provided in `dv/uvm/core_cve2/tests/core_cve2_base_test.sv
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/tests/core_ibex_base_tests.sv>`_ to enable easy <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/tests/core_cve2_base_tests.sv>`_ to enable easy
and efficient integration and usage of this mechanism in this test environment. and efficient integration and usage of this mechanism in this test environment.
To see how this handshake is used during real simulations, look in To see how this handshake is used during real simulations, look in
`dv/uvm/core_ibex/tests/core_ibex_test_lib.sv `dv/uvm/core_cve2/tests/core_cve2_test_lib.sv
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/tests/core_ibex_test_lib.sv>`_. <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/tests/core_cve2_test_lib.sv>`_.
As can be seen, this mechanism is extensively used to provide runtime verification for situations involving external debug As can be seen, this mechanism is extensively used to provide runtime verification for situations involving external debug
requests, interrupt assertions, and memory faults. requests, interrupt assertions, and memory faults.
To add another layer of correctness checking to the checking already provided by the handshake To add another layer of correctness checking to the checking already provided by the handshake
@ -171,11 +171,11 @@ against each other, since any code executed in the debug ROM and trap handlers s
register state in the rest of the program. register state in the rest of the program.
The entirety of this flow is controlled by the Makefile found at The entirety of this flow is controlled by the Makefile found at
`dv/uvm/core_ibex/Makefile <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/Makefile>`_; here is a list of frequently used commands: `dv/uvm/core_cve2/Makefile <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/Makefile>`_; here is a list of frequently used commands:
.. code-block:: bash .. code-block:: bash
cd dv/uvm/core_ibex cd dv/uvm/core_cve2
# Run a full regression # Run a full regression
make make
@ -216,8 +216,8 @@ The entirety of this flow is controlled by the Makefile found at
Run with a different RTL simulator Run with a different RTL simulator
"""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""
You can add any compile/runtime options in `dv/uvm/core_ibex/yaml/simulator.yaml You can add any compile/runtime options in `dv/uvm/core_cve2/yaml/simulator.yaml
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_ibex/yaml/rtl_simulation.yaml>`_. <https://github.com/lowRISC/ibex/blob/master/dv/uvm/core_cve2/yaml/rtl_simulation.yaml>`_.
.. code-block:: bash .. code-block:: bash
@ -244,10 +244,10 @@ classes that provides basic UVM testbench functionality and components.
This DV environment will be compiled and simulated using the `dvsim simulation tool This DV environment will be compiled and simulated using the `dvsim simulation tool
<https://github.com/lowRISC/opentitan/tree/master/util/dvsim>`_. <https://github.com/lowRISC/opentitan/tree/master/util/dvsim>`_.
The master ``.hjson`` file that controls simulation with ``dvsim`` can be found The master ``.hjson`` file that controls simulation with ``dvsim`` can be found
at `dv/uvm/icache/dv/ibex_icache_sim_cfg.hjson at `dv/uvm/icache/dv/cve2_icache_sim_cfg.hjson
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/icache/dv/ibex_icache_sim_cfg.hjson>`_. <https://github.com/lowRISC/ibex/blob/master/dv/uvm/icache/dv/cve2_icache_sim_cfg.hjson>`_.
The associated testplan ``.hjson`` file is located at `dv/uvm/icache/data/ibex_icache_testplan.hjson The associated testplan ``.hjson`` file is located at `dv/uvm/icache/data/cve2_icache_testplan.hjson
<https://github.com/lowRISC/ibex/blob/master/dv/uvm/icache/data/ibex_icache_testplan.hjson>`_. <https://github.com/lowRISC/ibex/blob/master/dv/uvm/icache/data/cve2_icache_testplan.hjson>`_.
As this testbench is still in its infancy, it is currently only able to be compiled, as no tests or As this testbench is still in its infancy, it is currently only able to be compiled, as no tests or
sequences are implemented, nor are there any entries in the testplan file. sequences are implemented, nor are there any entries in the testplan file.
To build the testbench locally using the VCS simulator, run the following command from the root of To build the testbench locally using the VCS simulator, run the following command from the root of
@ -255,7 +255,7 @@ the Ibex repository:
.. code-block:: bash .. code-block:: bash
./vendor/lowrisc_ip/util/dvsim/dvsim.py dv/uvm/icache/dv/ibex_icache_sim_cfg.hjson --build-only ./vendor/lowrisc_ip/util/dvsim/dvsim.py dv/uvm/icache/dv/cve2_icache_sim_cfg.hjson --build-only
--skip-ral --purge --sr sim_out --skip-ral --purge --sr sim_out
Specify the intended output directory using either the ``--sr`` or ``-scratch-root`` option. Specify the intended output directory using either the ``--sr`` or ``-scratch-root`` option.

View file

@ -37,13 +37,13 @@ How to run RISC-V Compliance on Ibex
```sh ```sh
cd $IBEX_REPO_BASE cd $IBEX_REPO_BASE
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_riscv_compliance --RV32E=0 --RV32M=ibex_pkg::RV32MNone fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_riscv_compliance --RV32E=0 --RV32M=cve2_pkg::RV32MNone
``` ```
You can use the two compile-time options `--RV32M` and `--RV32E` to You can use the two compile-time options `--RV32M` and `--RV32E` to
enable/disable the M and E ISA extensions, respectively. enable/disable the M and E ISA extensions, respectively.
You can now find the compiled simulation at `build/lowrisc_ibex_ibex_riscv_compliance_0.1/sim-verilator/Vibex_riscv_compliance`. You can now find the compiled simulation at `build/lowrisc_cve2_cve2_riscv_compliance_0.1/sim-verilator/Vcve2_riscv_compliance`.
2. Get the RISC-V Compliance test suite 2. Get the RISC-V Compliance test suite
@ -60,7 +60,7 @@ How to run RISC-V Compliance on Ibex
# adjust to match your compiler name # adjust to match your compiler name
export RISCV_PREFIX=riscv32-unknown-elf- export RISCV_PREFIX=riscv32-unknown-elf-
# give the absolute path to the simulation binary compiled in step 1 # give the absolute path to the simulation binary compiled in step 1
export TARGET_SIM=/path/to/your/Vibex_riscv_compliance export TARGET_SIM=/path/to/your/Vcve2_riscv_compliance
export RISCV_DEVICE=rv32imc export RISCV_DEVICE=rv32imc
export RISCV_TARGET=ibex export RISCV_TARGET=ibex

View file

@ -7,14 +7,14 @@
#include "verilator_sim_ctrl.h" #include "verilator_sim_ctrl.h"
int main(int argc, char **argv) { int main(int argc, char **argv) {
ibex_riscv_compliance top; cve2_riscv_compliance top;
VerilatorMemUtil memutil; VerilatorMemUtil memutil;
VerilatorSimCtrl &simctrl = VerilatorSimCtrl::GetInstance(); VerilatorSimCtrl &simctrl = VerilatorSimCtrl::GetInstance();
simctrl.SetTop(&top, &top.IO_CLK, &top.IO_RST_N, simctrl.SetTop(&top, &top.IO_CLK, &top.IO_RST_N,
VerilatorSimCtrlFlags::ResetPolarityNegative); VerilatorSimCtrlFlags::ResetPolarityNegative);
MemArea ram( MemArea ram(
"TOP.ibex_riscv_compliance.u_ram.u_ram.gen_generic.u_impl_generic", "TOP.cve2_riscv_compliance.u_ram.u_ram.gen_generic.u_impl_generic",
64 * 1024 / 4, 4); 64 * 1024 / 4, 4);
memutil.RegisterMemoryArea("ram", 0x0, &ram); memutil.RegisterMemoryArea("ram", 0x0, &ram);

View file

@ -2,15 +2,15 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_riscv_compliance:0.1" name: "lowrisc:cve2:cve2_riscv_compliance:0.1"
description: "Ibex simulation for RISC-V compliance testing (using Verilator)" description: "Ibex simulation for RISC-V compliance testing (using Verilator)"
filesets: filesets:
files_sim: files_sim:
depend: depend:
- lowrisc:ibex:ibex_top_tracing - lowrisc:cve2:cve2_top_tracing
- lowrisc:ibex:sim_shared - lowrisc:cve2:sim_shared
files: files:
- rtl/ibex_riscv_compliance.sv - rtl/cve2_riscv_compliance.sv
- rtl/riscv_testutil.sv - rtl/riscv_testutil.sv
file_type: systemVerilogSource file_type: systemVerilogSource
@ -19,7 +19,7 @@ filesets:
- lowrisc:dv_verilator:memutil_verilator - lowrisc:dv_verilator:memutil_verilator
- lowrisc:dv_verilator:simutil_verilator - lowrisc:dv_verilator:simutil_verilator
files: files:
- ibex_riscv_compliance.cc: { file_type: cppSource } - cve2_riscv_compliance.cc: { file_type: cppSource }
- lint/verilator_waiver.vlt: {file_type: vlt} - lint/verilator_waiver.vlt: {file_type: vlt}
parameters: parameters:
@ -31,21 +31,21 @@ parameters:
RV32M: RV32M:
datatype: str datatype: str
default: ibex_pkg::RV32MFast default: cve2_pkg::RV32MFast
paramtype: vlogdefine paramtype: vlogdefine
description: "RV32M implementation parameter enum. See the ibex_pkg::rv32m_e enum in ibex_pkg.sv for permitted values." description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."
RV32B: RV32B:
datatype: str datatype: str
default: ibex_pkg::RV32BNone default: cve2_pkg::RV32BNone
paramtype: vlogdefine paramtype: vlogdefine
description: "Bitmanip implementation parameter enum. See the ibex_pkg::rv32b_e enum in ibex_pkg.sv for permitted values." description: "Bitmanip implementation parameter enum. See the cve2_pkg::rv32b_e enum in cve2_pkg.sv for permitted values."
RegFile: RegFile:
datatype: str datatype: str
default: ibex_pkg::RegFileFF default: cve2_pkg::RegFileFF
paramtype: vlogdefine paramtype: vlogdefine
description: "Register file implementation parameter enum. See the ibex_pkg::regfile_e enum in ibex_pkg.sv for permitted values." description: "Register file implementation parameter enum. See the cve2_pkg::regfile_e enum in cve2_pkg.sv for permitted values."
ICache: ICache:
datatype: int datatype: int
@ -128,7 +128,7 @@ targets:
- PMPNumRegions - PMPNumRegions
- SecureIbex - SecureIbex
- ICacheScramble - ICacheScramble
toplevel: ibex_riscv_compliance toplevel: cve2_riscv_compliance
tools: tools:
verilator: verilator:
mode: cc mode: cc
@ -140,6 +140,6 @@ targets:
- '--trace-structs' - '--trace-structs'
- '--trace-params' - '--trace-params'
- '--trace-max-array 1024' - '--trace-max-array 1024'
- '-CFLAGS "-std=c++11 -Wall -DVM_TRACE_FMT_FST -DTOPLEVEL_NAME=ibex_riscv_compliance -g"' - '-CFLAGS "-std=c++11 -Wall -DVM_TRACE_FMT_FST -DTOPLEVEL_NAME=cve2_riscv_compliance -g"'
- '-LDFLAGS "-pthread -lutil -lelf"' - '-LDFLAGS "-pthread -lutil -lelf"'
- "-Wall" - "-Wall"

View file

@ -28,5 +28,5 @@
// matches when you set a 1-bit value to a literal 1, so it won't hide // matches when you set a 1-bit value to a literal 1, so it won't hide
// silly mistakes like setting it to 2. // silly mistakes like setting it to 2.
// //
lint_off -rule WIDTH -file "*/rtl/ibex_riscv_compliance.sv" lint_off -rule WIDTH -file "*/rtl/cve2_riscv_compliance.sv"
-match "*expects 1 bits*Initial value's CONST '32'h1'*" -match "*expects 1 bits*Initial value's CONST '32'h1'*"

View file

@ -10,7 +10,7 @@
* simulators (if the top-level clk and rst ports are replaced with a generated * simulators (if the top-level clk and rst ports are replaced with a generated
* clock). * clock).
*/ */
module ibex_riscv_compliance ( module cve2_riscv_compliance (
input IO_CLK, input IO_CLK,
input IO_RST_N input IO_RST_N
); );
@ -19,9 +19,9 @@ module ibex_riscv_compliance (
parameter int unsigned PMPGranularity = 0; parameter int unsigned PMPGranularity = 0;
parameter int unsigned PMPNumRegions = 4; parameter int unsigned PMPNumRegions = 4;
parameter bit RV32E = 1'b0; parameter bit RV32E = 1'b0;
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast; parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast;
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone; parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone;
parameter ibex_pkg::regfile_e RegFile = ibex_pkg::RegFileFF; parameter cve2_pkg::regfile_e RegFile = cve2_pkg::RegFileFF;
parameter bit BranchTargetALU = 1'b0; parameter bit BranchTargetALU = 1'b0;
parameter bit WritebackStage = 1'b0; parameter bit WritebackStage = 1'b0;
parameter bit ICache = 1'b0; parameter bit ICache = 1'b0;
@ -113,7 +113,7 @@ module ibex_riscv_compliance (
.cfg_device_addr_mask .cfg_device_addr_mask
); );
ibex_top_tracing #( cve2_top_tracing #(
.PMPEnable (PMPEnable ), .PMPEnable (PMPEnable ),
.PMPGranularity (PMPGranularity ), .PMPGranularity (PMPGranularity ),
.PMPNumRegions (PMPNumRegions ), .PMPNumRegions (PMPNumRegions ),
@ -177,7 +177,7 @@ module ibex_riscv_compliance (
.crash_dump_o ( ), .crash_dump_o ( ),
.double_fault_seen_o ( ), .double_fault_seen_o ( ),
.fetch_enable_i (ibex_pkg::FetchEnableOn), .fetch_enable_i (cve2_pkg::FetchEnableOn),
.alert_minor_o ( ), .alert_minor_o ( ),
.alert_major_internal_o ( ), .alert_major_internal_o ( ),
.alert_major_bus_o ( ), .alert_major_bus_o ( ),

View file

@ -53,11 +53,11 @@ Run either of the following commands at the top level to build the respective ha
Both variants of the Arty A7 are supported and can be selected via the `--parts` parameter. Both variants of the Arty A7 are supported and can be selected via the `--parts` parameter.
``` ```
fusesoc --cores-root=. run --target=synth --setup --build lowrisc:ibex:top_artya7 --part xc7a35ticsg324-1L fusesoc --cores-root=. run --target=synth --setup --build lowrisc:cve2:top_artya7 --part xc7a35ticsg324-1L
``` ```
``` ```
fusesoc --cores-root=. run --target=synth --setup --build lowrisc:ibex:top_artya7 --part xc7a100tcsg324-1 fusesoc --cores-root=. run --target=synth --setup --build lowrisc:cve2:top_artya7 --part xc7a100tcsg324-1
``` ```
This will create a directory `build` which contains the output files, including This will create a directory `build` which contains the output files, including
@ -70,7 +70,7 @@ Example use case includes loading `coremark.vmem` which can be used for performa
Please see [CoreMark README](https://github.com/lowRISC/ibex/blob/master/examples/sw/benchmarks/README.md) for compiling CoreMark. Please see [CoreMark README](https://github.com/lowRISC/ibex/blob/master/examples/sw/benchmarks/README.md) for compiling CoreMark.
``` ```
fusesoc --cores-root=. run --target=synth --setup --build lowrisc:ibex:top_artya7 --part xc7a100tcsg324-1 --SRAMInitFile=examples/sw/benchmarks/coremark/coremark.vmem fusesoc --cores-root=. run --target=synth --setup --build lowrisc:cve2:top_artya7 --part xc7a100tcsg324-1 --SRAMInitFile=examples/sw/benchmarks/coremark/coremark.vmem
``` ```
#### Power Analysis Using Vivado #### Power Analysis Using Vivado
@ -81,7 +81,7 @@ This switching activity is then used to generate a detailed power report.
In order to use it with CoreMark run the command below In order to use it with CoreMark run the command below
``` ```
fusesoc --cores-root=. run --target=synth --setup --build lowrisc:ibex:top_artya7 --part xc7a100tcsg324-1 --SRAMInitFile=examples/sw/benchmarks/coremark/coremark.vmem --FPGAPowerAnalysis=1 fusesoc --cores-root=. run --target=synth --setup --build lowrisc:cve2:top_artya7 --part xc7a100tcsg324-1 --SRAMInitFile=examples/sw/benchmarks/coremark/coremark.vmem --FPGAPowerAnalysis=1
``` ```
## Program ## Program
@ -89,7 +89,7 @@ fusesoc --cores-root=. run --target=synth --setup --build lowrisc:ibex:top_artya
After the board is connected to the computer it can be programmed with: After the board is connected to the computer it can be programmed with:
``` ```
fusesoc --cores-root=. run --target=synth --run lowrisc:ibex:top_artya7 fusesoc --cores-root=. run --target=synth --run lowrisc:cve2:top_artya7
``` ```
LED1/LED3 and LED0/LED2 should alternately be on after the FPGA programming is finished. LED1/LED3 and LED0/LED2 should alternately be on after the FPGA programming is finished.

View file

@ -35,8 +35,8 @@ module top_artya7 (
logic [31:0] data_wdata; logic [31:0] data_wdata;
logic [31:0] data_rdata; logic [31:0] data_rdata;
ibex_top #( cve2_top #(
.RegFile(ibex_pkg::RegFileFPGA), .RegFile(cve2_pkg::RegFileFPGA),
.DmHaltAddr(32'h00000000), .DmHaltAddr(32'h00000000),
.DmExceptionAddr(32'h00000000) .DmExceptionAddr(32'h00000000)
) u_top ( ) u_top (

View file

@ -2,13 +2,13 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:top_artya7:0.1" name: "lowrisc:cve2:top_artya7:0.1"
description: "Ibex example toplevel for Arty A7 boards (both, -35 and -100)" description: "Ibex example toplevel for Arty A7 boards (both, -35 and -100)"
filesets: filesets:
files_rtl_artya7: files_rtl_artya7:
depend: depend:
- lowrisc:ibex:ibex_top - lowrisc:cve2:cve2_top
- lowrisc:ibex:fpga_xilinx_shared - lowrisc:cve2:fpga_xilinx_shared
files: files:
- rtl/top_artya7.sv - rtl/top_artya7.sv
file_type: systemVerilogSource file_type: systemVerilogSource

View file

@ -1,4 +1,4 @@
open_project ../../lowrisc_ibex_top_artya7_0.1.xpr open_project ../../lowrisc_cve2_top_artya7_0.1.xpr
set saif_name "detailed_power.saif" set saif_name "detailed_power.saif"
open_run impl_1 open_run impl_1
@ -18,7 +18,7 @@ close_saif
# Reporting power using .saif generated above # Reporting power using .saif generated above
open_run impl_1 open_run impl_1
set_operating_conditions -process maximum set_operating_conditions -process maximum
read_saif "../../lowrisc_ibex_top_artya7_0.1.sim/sim_1/impl/func/xsim/$saif_name" read_saif "../../lowrisc_cve2_top_artya7_0.1.sim/sim_1/impl/func/xsim/$saif_name"
read_saif "../../lowrisc_ibex_top_artya7_0.1.sim/sim_1/impl/func/xsim/$saif_name" -strip_path top_artya7 read_saif "../../lowrisc_cve2_top_artya7_0.1.sim/sim_1/impl/func/xsim/$saif_name" -strip_path top_artya7
set_units -power uW set_units -power uW
report_power -name {detailed_power_report} -verbose -file post_implementation_power_result.log -hierarchical_depth 20 report_power -name {detailed_power_report} -verbose -file post_implementation_power_result.log -hierarchical_depth 20

View file

@ -31,7 +31,7 @@ The Simple System simulator binary can be built via FuseSoC. From the Ibex
repository root run: repository root run:
``` ```
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_simple_system --RV32E=0 --RV32M=ibex_pkg::RV32MFast fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_simple_system --RV32E=0 --RV32M=cve2_pkg::RV32MFast
``` ```
## Building Software ## Building Software
@ -60,7 +60,7 @@ correct compiler binaries.
Having built the simulator and software, from the Ibex repository root run: Having built the simulator and software, from the Ibex repository root run:
``` ```
./build/lowrisc_ibex_ibex_simple_system_0/sim-verilator/Vibex_simple_system [-t] --meminit=ram,<sw_elf_file> ./build/lowrisc_cve2_cve2_simple_system_0/sim-verilator/Vcve2_simple_system [-t] --meminit=ram,<sw_elf_file>
``` ```
`<sw_elf_file>` should be a path to an ELF file (or alternatively a vmem file) `<sw_elf_file>` should be a path to an ELF file (or alternatively a vmem file)
@ -97,8 +97,8 @@ Compressed Instructions: 182
The simulator produces several output files The simulator produces several output files
* `ibex_simple_system.log` - The ASCII output written via the output peripheral * `cve2_simple_system.log` - The ASCII output written via the output peripheral
* `ibex_simple_system_pcount.csv` - A CSV of the performance counters * `cve2_simple_system_pcount.csv` - A CSV of the performance counters
* `trace_core_00000000.log` - An instruction trace of execution * `trace_core_00000000.log` - An instruction trace of execution
## Simulating with Synopsys VCS ## Simulating with Synopsys VCS
@ -106,7 +106,7 @@ The simulator produces several output files
Similar to the Verilator flow the Simple System simulator binary can be built using: Similar to the Verilator flow the Simple System simulator binary can be built using:
``` ```
fusesoc --cores-root=. run --target=sim --tool=vcs --setup --build lowrisc:ibex:ibex_simple_system --RV32E=0 --RV32M=ibex_pkg::RV32MFast --SRAMInitFile=`<sw_vmem_file>` fusesoc --cores-root=. run --target=sim --tool=vcs --setup --build lowrisc:cve2:cve2_simple_system --RV32E=0 --RV32M=cve2_pkg::RV32MFast --SRAMInitFile=`<sw_vmem_file>`
``` ```
`<sw_vmem_file>` should be a path to a vmem file built as described above, use `<sw_vmem_file>` should be a path to a vmem file built as described above, use
@ -116,7 +116,7 @@ binary.
To run the simulator: To run the simulator:
``` ```
./build/lowrisc_ibex_ibex_simple_system_0/sim-vcs/lowrisc_ibex_ibex_simple_system_0 ./build/lowrisc_cve2_cve2_simple_system_0/sim-vcs/lowrisc_cve2_cve2_simple_system_0
``` ```
Pass `-gui` to use the DVE GUI. Pass `-gui` to use the DVE GUI.
@ -126,7 +126,7 @@ Pass `-gui` to use the DVE GUI.
To build and run Simple System run: To build and run Simple System run:
``` ```
fusesoc --cores-root=. run --target=sim --tool=rivierapro lowrisc:ibex:ibex_simple_system --RV32E=0 --RV32M=ibex_pkg::RV32MFast --SRAMInitFile=\"$(readlink -f <sw_vmem_file>)\" fusesoc --cores-root=. run --target=sim --tool=rivierapro lowrisc:cve2:cve2_simple_system --RV32E=0 --RV32M=cve2_pkg::RV32MFast --SRAMInitFile=\"$(readlink -f <sw_vmem_file>)\"
``` ```
`<sw_vmem_file>` should be a path to a vmem file built as described above, use `<sw_vmem_file>` should be a path to a vmem file built as described above, use

View file

@ -6,9 +6,9 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include "Vibex_simple_system__Syms.h" #include "Vcve2_simple_system__Syms.h"
#include "ibex_pcounts.h" #include "cve2_pcounts.h"
#include "ibex_simple_system.h" #include "cve2_simple_system.h"
#include "verilated_toplevel.h" #include "verilated_toplevel.h"
#include "verilator_memutil.h" #include "verilator_memutil.h"
#include "verilator_sim_ctrl.h" #include "verilator_sim_ctrl.h"
@ -34,18 +34,18 @@ int SimpleSystem::Main(int argc, char **argv) {
} }
std::string SimpleSystem::GetIsaString() const { std::string SimpleSystem::GetIsaString() const {
const Vibex_simple_system &top = _top; const Vcve2_simple_system &top = _top;
assert(top.ibex_simple_system); assert(top.cve2_simple_system);
std::string base = top.ibex_simple_system->RV32E ? "rv32e" : "rv32i"; std::string base = top.cve2_simple_system->RV32E ? "rv32e" : "rv32i";
std::string extensions = "c"; std::string extensions = "c";
if (top.ibex_simple_system->RV32M) if (top.cve2_simple_system->RV32M)
extensions += "m"; extensions += "m";
// See the equivalent get_isa_string() function in core_ibex_base_test.sv for // See the equivalent get_isa_string() function in core_cve2_base_test.sv for
// an explanation of the different ISA strings // an explanation of the different ISA strings
switch (top.ibex_simple_system->RV32B) { switch (top.cve2_simple_system->RV32B) {
case 0: // RV32BNone case 0: // RV32BNone
break; break;
@ -92,17 +92,17 @@ bool SimpleSystem::Finish() {
return false; return false;
} }
// Set the scope to the root scope, the ibex_pcount_string function otherwise // Set the scope to the root scope, the cve2_pcount_string function otherwise
// doesn't know the scope itself. Could be moved to ibex_pcount_string, but // doesn't know the scope itself. Could be moved to cve2_pcount_string, but
// would require a way to set the scope name from here, similar to MemUtil. // would require a way to set the scope name from here, similar to MemUtil.
svSetScope(svGetScopeFromName("TOP.ibex_simple_system")); svSetScope(svGetScopeFromName("TOP.cve2_simple_system"));
std::cout << "\nPerformance Counters" << std::endl std::cout << "\nPerformance Counters" << std::endl
<< "====================" << std::endl; << "====================" << std::endl;
std::cout << ibex_pcount_string(false); std::cout << cve2_pcount_string(false);
std::ofstream pcount_csv("ibex_simple_system_pcount.csv"); std::ofstream pcount_csv("cve2_simple_system_pcount.csv");
pcount_csv << ibex_pcount_string(true); pcount_csv << cve2_pcount_string(true);
return true; return true;
} }

View file

@ -2,14 +2,14 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_simple_system" name: "lowrisc:cve2:cve2_simple_system"
description: "Generic simple system for running binaries on ibex using verilator" description: "Generic simple system for running binaries on ibex using verilator"
filesets: filesets:
files_simple_system: files_simple_system:
depend: depend:
- lowrisc:ibex:ibex_simple_system_core - lowrisc:cve2:cve2_simple_system_core
files: files:
- ibex_simple_system_main.cc - cve2_simple_system_main.cc
file_type: cppSource file_type: cppSource
parameters: parameters:
@ -21,21 +21,21 @@ parameters:
RV32M: RV32M:
datatype: str datatype: str
default: ibex_pkg::RV32MFast default: cve2_pkg::RV32MFast
paramtype: vlogdefine paramtype: vlogdefine
description: "RV32M implementation parameter enum. See the ibex_pkg::rv32m_e enum in ibex_pkg.sv for permitted values." description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."
RV32B: RV32B:
datatype: str datatype: str
default: ibex_pkg::RV32BNone default: cve2_pkg::RV32BNone
paramtype: vlogdefine paramtype: vlogdefine
description: "Bitmanip implementation parameter enum. See the ibex_pkg::rv32b_e enum in ibex_pkg.sv for permitted values." description: "Bitmanip implementation parameter enum. See the cve2_pkg::rv32b_e enum in cve2_pkg.sv for permitted values."
RegFile: RegFile:
datatype: str datatype: str
default: ibex_pkg::RegFileFF default: cve2_pkg::RegFileFF
paramtype: vlogdefine paramtype: vlogdefine
description: "Register file implementation parameter enum. See the ibex_pkg::regfile_e enum in ibex_pkg.sv for permitted values." description: "Register file implementation parameter enum. See the cve2_pkg::regfile_e enum in cve2_pkg.sv for permitted values."
ICache: ICache:
datatype: int datatype: int
@ -106,7 +106,7 @@ targets:
default: &default_target default: &default_target
filesets: filesets:
- files_simple_system - files_simple_system
toplevel: ibex_simple_system toplevel: cve2_simple_system
parameters: parameters:
- RV32E - RV32E
- RV32M - RV32M
@ -154,7 +154,7 @@ targets:
- '--trace-structs' - '--trace-structs'
- '--trace-params' - '--trace-params'
- '--trace-max-array 1024' - '--trace-max-array 1024'
- '-CFLAGS "-std=c++11 -Wall -DVM_TRACE_FMT_FST -DTOPLEVEL_NAME=ibex_simple_system -g"' - '-CFLAGS "-std=c++11 -Wall -DVM_TRACE_FMT_FST -DTOPLEVEL_NAME=cve2_simple_system -g"'
- '-LDFLAGS "-pthread -lutil -lelf"' - '-LDFLAGS "-pthread -lutil -lelf"'
- "-Wall" - "-Wall"
- "-Wwarn-IMPERFECTSCH" - "-Wwarn-IMPERFECTSCH"

View file

@ -16,7 +16,7 @@ class SimpleSystem {
std::string GetIsaString() const; std::string GetIsaString() const;
protected: protected:
ibex_simple_system _top; cve2_simple_system _top;
VerilatorMemUtil _memutil; VerilatorMemUtil _memutil;
MemArea _ram; MemArea _ram;

View file

@ -2,25 +2,25 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:ibex_simple_system_core" name: "lowrisc:cve2:cve2_simple_system_core"
description: "Generic simple system for running binaries on ibex using verilator" description: "Generic simple system for running binaries on ibex using verilator"
filesets: filesets:
files_sim: files_sim:
depend: depend:
- lowrisc:ibex:ibex_top_tracing - lowrisc:cve2:cve2_top_tracing
- lowrisc:ibex:sim_shared - lowrisc:cve2:sim_shared
files: files:
- rtl/ibex_simple_system.sv - rtl/cve2_simple_system.sv
file_type: systemVerilogSource file_type: systemVerilogSource
files_verilator: files_verilator:
depend: depend:
- lowrisc:dv_verilator:memutil_verilator - lowrisc:dv_verilator:memutil_verilator
- lowrisc:dv_verilator:simutil_verilator - lowrisc:dv_verilator:simutil_verilator
- lowrisc:dv_verilator:ibex_pcounts - lowrisc:dv_verilator:cve2_pcounts
files: files:
- ibex_simple_system.cc: { file_type: cppSource } - cve2_simple_system.cc: { file_type: cppSource }
- ibex_simple_system.h: { file_type: cppSource, is_include_file: true} - cve2_simple_system.h: { file_type: cppSource, is_include_file: true}
- lint/verilator_waiver.vlt: {file_type: vlt} - lint/verilator_waiver.vlt: {file_type: vlt}
files_lint_verible: files_lint_verible:

View file

@ -2,11 +2,11 @@
// Licensed under the Apache License, Version 2.0, see LICENSE for details. // Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
#include "ibex_simple_system.h" #include "cve2_simple_system.h"
int main(int argc, char **argv) { int main(int argc, char **argv) {
SimpleSystem simple_system( SimpleSystem simple_system(
"TOP.ibex_simple_system.u_ram.u_ram.gen_generic.u_impl_generic", "TOP.cve2_simple_system.u_ram.u_ram.gen_generic.u_impl_generic",
1024 * 1024); 1024 * 1024);
return simple_system.Main(argc, argv); return simple_system.Main(argc, argv);

View file

@ -1 +1 @@
waive --rule=macro-name-style --location="ibex_simple_system.sv" --regex="RegFile" waive --rule=macro-name-style --location="cve2_simple_system.sv" --regex="RegFile"

View file

@ -28,13 +28,13 @@
// matches when you set a 1-bit value to a literal 1, so it won't hide // matches when you set a 1-bit value to a literal 1, so it won't hide
// silly mistakes like setting it to 2. // silly mistakes like setting it to 2.
// //
lint_off -rule WIDTH -file "*/rtl/ibex_simple_system.sv" lint_off -rule WIDTH -file "*/rtl/cve2_simple_system.sv"
-match "*expects 1 bits*Initial value's CONST '32'h1'*" -match "*expects 1 bits*Initial value's CONST '32'h1'*"
// This isn't a waiver, as such, but rather tells Verilator to expose // This isn't a waiver, as such, but rather tells Verilator to expose
// the given parameters' values to C++. This allows cosim to figure // the given parameters' values to C++. This allows cosim to figure
// out what flavour of core it is running, which allows us to call // out what flavour of core it is running, which allows us to call
// Spike with the right ISA. // Spike with the right ISA.
public -module "ibex_simple_system" -var "RV32E" public -module "cve2_simple_system" -var "RV32E"
public -module "ibex_simple_system" -var "RV32M" public -module "cve2_simple_system" -var "RV32M"
public -module "ibex_simple_system" -var "RV32B" public -module "cve2_simple_system" -var "RV32B"

View file

@ -7,15 +7,15 @@
// default. Other simulators don't take the detour via `define and can override the corresponding // default. Other simulators don't take the detour via `define and can override the corresponding
// parameters directly. // parameters directly.
`ifndef RV32M `ifndef RV32M
`define RV32M ibex_pkg::RV32MFast `define RV32M cve2_pkg::RV32MFast
`endif `endif
`ifndef RV32B `ifndef RV32B
`define RV32B ibex_pkg::RV32BNone `define RV32B cve2_pkg::RV32BNone
`endif `endif
`ifndef RegFile `ifndef RegFile
`define RegFile ibex_pkg::RegFileFF `define RegFile cve2_pkg::RegFileFF
`endif `endif
/** /**
@ -30,7 +30,7 @@
* simulator_ctrl module. * simulator_ctrl module.
*/ */
module ibex_simple_system ( module cve2_simple_system (
input IO_CLK, input IO_CLK,
input IO_RST_N input IO_RST_N
); );
@ -41,9 +41,9 @@ module ibex_simple_system (
parameter int unsigned PMPGranularity = 0; parameter int unsigned PMPGranularity = 0;
parameter int unsigned PMPNumRegions = 4; parameter int unsigned PMPNumRegions = 4;
parameter bit RV32E = 1'b0; parameter bit RV32E = 1'b0;
parameter ibex_pkg::rv32m_e RV32M = `RV32M; parameter cve2_pkg::rv32m_e RV32M = `RV32M;
parameter ibex_pkg::rv32b_e RV32B = `RV32B; parameter cve2_pkg::rv32b_e RV32B = `RV32B;
parameter ibex_pkg::regfile_e RegFile = `RegFile; parameter cve2_pkg::regfile_e RegFile = `RegFile;
parameter bit BranchTargetALU = 1'b0; parameter bit BranchTargetALU = 1'b0;
parameter bit WritebackStage = 1'b0; parameter bit WritebackStage = 1'b0;
parameter bit ICache = 1'b0; parameter bit ICache = 1'b0;
@ -162,7 +162,7 @@ module ibex_simple_system (
.cfg_device_addr_mask .cfg_device_addr_mask
); );
ibex_top_tracing #( cve2_top_tracing #(
.SecureIbex ( SecureIbex ), .SecureIbex ( SecureIbex ),
.ICacheScramble ( ICacheScramble ), .ICacheScramble ( ICacheScramble ),
.PMPEnable ( PMPEnable ), .PMPEnable ( PMPEnable ),
@ -227,7 +227,7 @@ module ibex_simple_system (
.crash_dump_o (), .crash_dump_o (),
.double_fault_seen_o (), .double_fault_seen_o (),
.fetch_enable_i (ibex_pkg::FetchEnableOn), .fetch_enable_i (cve2_pkg::FetchEnableOn),
.alert_minor_o (), .alert_minor_o (),
.alert_major_internal_o (), .alert_major_internal_o (),
.alert_major_bus_o (), .alert_major_bus_o (),
@ -260,7 +260,7 @@ module ibex_simple_system (
); );
simulator_ctrl #( simulator_ctrl #(
.LogName("ibex_simple_system.log") .LogName("cve2_simple_system.log")
) u_simulator_ctrl ( ) u_simulator_ctrl (
.clk_i (clk_sys), .clk_i (clk_sys),
.rst_ni (rst_sys_n), .rst_ni (rst_sys_n),
@ -295,7 +295,7 @@ module ibex_simple_system (
export "DPI-C" function mhpmcounter_get; export "DPI-C" function mhpmcounter_get;
function automatic longint unsigned mhpmcounter_get(int index); function automatic longint unsigned mhpmcounter_get(int index);
return u_top.u_ibex_top.u_ibex_core.cs_registers_i.mhpmcounter[index]; return u_top.u_cve2_top.u_cve2_core.cs_registers_i.mhpmcounter[index];
endfunction endfunction
endmodule endmodule

View file

@ -11,7 +11,7 @@ All of these benchmarks run on Simple System. A verilator simulation suitable
for running them can be built with: for running them can be built with:
``` ```
fusesoc --cores-root=. run --target=sim --setup --build lowrisc:ibex:ibex_simple_system --RV32E=0 --RV32M=ibex_pkg::RV32MFast fusesoc --cores-root=. run --target=sim --setup --build lowrisc:cve2:cve2_simple_system --RV32E=0 --RV32M=cve2_pkg::RV32MFast
``` ```
See examples/simple_system/README.md for full details. See examples/simple_system/README.md for full details.
@ -35,13 +35,13 @@ make -C ./examples/sw/benchmarks/coremark/
To run CoreMark (after building a suitable simulator binary, see above): To run CoreMark (after building a suitable simulator binary, see above):
``` ```
build/lowrisc_ibex_ibex_simple_system_0/sim-verilator/Vibex_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf build/lowrisc_cve2_cve2_simple_system_0/sim-verilator/Vcve2_simple_system --meminit=ram,examples/sw/benchmarks/coremark/coremark.elf
``` ```
The simulator outputs the performance counter values observed for the benchmark The simulator outputs the performance counter values observed for the benchmark
(the counts do not include anything from pre or post benchmark loops). (the counts do not include anything from pre or post benchmark loops).
CoreMark should output (to `ibex_simple_system.log`) something like the CoreMark should output (to `cve2_simple_system.log`) something like the
following: following:
``` ```

View file

@ -8,7 +8,7 @@
/** /**
* Delay loop executing within 8 cycles on ibex * Delay loop executing within 8 cycles on ibex
*/ */
static void delay_loop_ibex(unsigned long loops) { static void delay_loop_cve2(unsigned long loops) {
int out; /* only to notify compiler of modifications to |loops| */ int out; /* only to notify compiler of modifications to |loops| */
asm volatile( asm volatile(
"1: nop \n" // 1 cycle "1: nop \n" // 1 cycle
@ -22,16 +22,16 @@ static void delay_loop_ibex(unsigned long loops) {
); );
} }
static int usleep_ibex(unsigned long usec) { static int usleep_cve2(unsigned long usec) {
unsigned long usec_cycles; unsigned long usec_cycles;
usec_cycles = CLK_FIXED_FREQ_HZ * usec / 1000 / 1000 / 8; usec_cycles = CLK_FIXED_FREQ_HZ * usec / 1000 / 1000 / 8;
delay_loop_ibex(usec_cycles); delay_loop_cve2(usec_cycles);
return 0; return 0;
} }
static int usleep(unsigned long usec) { static int usleep(unsigned long usec) {
return usleep_ibex(usec); return usleep_cve2(usec);
} }
int main(int argc, char **argv) { int main(int argc, char **argv) {

View file

@ -4,7 +4,7 @@
# A simple wrapper around fusesoc to make it a bit easier to run the formal flow # A simple wrapper around fusesoc to make it a bit easier to run the formal flow
core-name := lowrisc:fpv:ibex_data_ind_timing core-name := lowrisc:fpv:cve2_data_ind_timing
vlnv := $(subst :,_,$(core-name)) vlnv := $(subst :,_,$(core-name))
build-root := $(abspath ../../build/$(vlnv)) build-root := $(abspath ../../build/$(vlnv))

View file

@ -3,14 +3,14 @@ CAPI=2:
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:fpv:ibex_data_ind_timing:0.1" name: "lowrisc:fpv:cve2_data_ind_timing:0.1"
description: "Formal test for data independent timing" description: "Formal test for data independent timing"
filesets: filesets:
testbench: testbench:
depend: depend:
- lowrisc:ibex:ibex_pkg - lowrisc:cve2:cve2_pkg
- lowrisc:ibex:ibex_multdiv - lowrisc:cve2:cve2_multdiv
- lowrisc:util:sv2v - lowrisc:util:sv2v
files: files:
- run.sby.j2 : {file_type: sbyConfigTemplate} - run.sby.j2 : {file_type: sbyConfigTemplate}
@ -76,7 +76,7 @@ targets:
slow: &slow slow: &slow
filesets: filesets:
- testbench - testbench
toplevel: ibex_multdiv_slow toplevel: cve2_multdiv_slow
default_tool: symbiyosys default_tool: symbiyosys
tools: tools:
symbiyosys: symbiyosys:
@ -113,7 +113,7 @@ targets:
fast: &fast fast: &fast
<<: *slow <<: *slow
toplevel: ibex_multdiv_fast toplevel: cve2_multdiv_fast
tools: tools:
symbiyosys: symbiyosys:
tasknames: tasknames:

View file

@ -14,7 +14,7 @@ module formal_tb (
input logic div_en_i, // dynamic enable signal, for FSM control input logic div_en_i, // dynamic enable signal, for FSM control
input logic mult_sel_i, // static decoder input, for data muxes input logic mult_sel_i, // static decoder input, for data muxes
input logic div_sel_i, // static decoder input, for data muxes input logic div_sel_i, // static decoder input, for data muxes
input ibex_pkg::md_op_e operator_i, input cve2_pkg::md_op_e operator_i,
input logic [1:0] signed_mode_i, input logic [1:0] signed_mode_i,
input logic [31:0] op_a_i, input logic [31:0] op_a_i,
input logic [31:0] op_b_i, input logic [31:0] op_b_i,
@ -37,7 +37,7 @@ module formal_tb (
input logic valid_o input logic valid_o
); );
import ibex_pkg::*; import cve2_pkg::*;
logic [2:0] f_startup_count = 3'd0; logic [2:0] f_startup_count = 3'd0;
always_ff @(posedge clk_i) begin : reset_assertion always_ff @(posedge clk_i) begin : reset_assertion

View file

@ -13,7 +13,7 @@ always_comb begin
// Enable signal must be asserted in order for the state machine to advance // Enable signal must be asserted in order for the state machine to advance
assume (div_en_i); assume (div_en_i);
assume (div_sel_i); assume (div_sel_i);
assume (operator_i == ibex_pkg::MD_OP_DIV); assume (operator_i == cve2_pkg::MD_OP_DIV);
end else begin end else begin
assume (~div_en_i); assume (~div_en_i);
assume (~div_sel_i); assume (~div_sel_i);

View file

@ -13,7 +13,7 @@ always_comb begin
// Enable signal must be asserted in order for the state machine to advance // Enable signal must be asserted in order for the state machine to advance
assume (mult_en_i); assume (mult_en_i);
assume (mult_sel_i); assume (mult_sel_i);
assume (operator_i == ibex_pkg::MD_OP_MULH); assume (operator_i == cve2_pkg::MD_OP_MULH);
end else begin end else begin
assume (~mult_en_i); assume (~mult_en_i);
assume (~mult_sel_i); assume (~mult_sel_i);

View file

@ -13,7 +13,7 @@ always_comb begin
// Enable signal must be asserted in order for the state machine to advance // Enable signal must be asserted in order for the state machine to advance
assume (mult_en_i); assume (mult_en_i);
assume (mult_sel_i); assume (mult_sel_i);
assume (operator_i == ibex_pkg::MD_OP_MULL); assume (operator_i == cve2_pkg::MD_OP_MULL);
end else begin end else begin
assume (~mult_en_i); assume (~mult_en_i);
assume (~mult_sel_i); assume (~mult_sel_i);

View file

@ -13,7 +13,7 @@ always_comb begin
// Enable signal must be asserted in order for the state machine to advance // Enable signal must be asserted in order for the state machine to advance
assume (div_en_i); assume (div_en_i);
assume (div_sel_i); assume (div_sel_i);
assume (operator_i == ibex_pkg::MD_OP_REM); assume (operator_i == cve2_pkg::MD_OP_REM);
end else begin end else begin
assume (~div_en_i); assume (~div_en_i);
assume (~div_sel_i); assume (~div_sel_i);

View file

@ -7,7 +7,7 @@
# Whether to use ECC (0 for disabled; 1 for enabled) # Whether to use ECC (0 for disabled; 1 for enabled)
ECC := 0 ECC := 0
core-name := lowrisc:fpv:ibex_icache_fpv core-name := lowrisc:fpv:cve2_icache_fpv
vlnv := $(subst :,_,$(core-name)) vlnv := $(subst :,_,$(core-name))
build-root := $(abspath ../../build/$(vlnv)) build-root := $(abspath ../../build/$(vlnv))

View file

@ -3,13 +3,13 @@ CAPI=2:
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:fpv:ibex_icache_fpv:0.1" name: "lowrisc:fpv:cve2_icache_fpv:0.1"
description: "Formal properties for Ibex ICache" description: "Formal properties for Ibex ICache"
filesets: filesets:
all: all:
depend: depend:
- lowrisc:ibex:ibex_icache - lowrisc:cve2:cve2_icache
- lowrisc:prim:assert - lowrisc:prim:assert
- lowrisc:util:sv2v - lowrisc:util:sv2v
files: files:
@ -30,7 +30,7 @@ targets:
- ICacheECC - ICacheECC
filesets: filesets:
- all - all
toplevel: ibex_icache toplevel: cve2_icache
default_tool: symbiyosys default_tool: symbiyosys
tools: tools:
symbiyosys: symbiyosys:

View file

@ -16,7 +16,7 @@
`ASSUME(name``_zero_in_reset, `IMPLIES(!rst_ni, ~|(name)), clk_i, 1'b0) `ASSUME(name``_zero_in_reset, `IMPLIES(!rst_ni, ~|(name)), clk_i, 1'b0)
module formal_tb module formal_tb
import ibex_pkg::*; import cve2_pkg::*;
#( #(
// DUT parameters // DUT parameters
parameter bit BranchPredictor = 1'b0, parameter bit BranchPredictor = 1'b0,

View file

@ -5,7 +5,7 @@
# Provide a convenient way to create a Verilog source of Ibex. # Provide a convenient way to create a Verilog source of Ibex.
# This is used by riscv-formal. See README.md for more details. # This is used by riscv-formal. See README.md for more details.
IBEX_ENABLE_WB ?= 0 CVE2_ENABLE_WB ?= 0
# Name of the output file # Name of the output file
IBEX_OUT := ibex.v IBEX_OUT := ibex.v
@ -28,29 +28,29 @@ INC_DIRS := \
# SystemVerilog sources of Ibex # SystemVerilog sources of Ibex
SRCS_SV ?= \ SRCS_SV ?= \
$(SRC_DIR)/ibex_alu.sv \ $(SRC_DIR)/cve2_alu.sv \
$(SRC_DIR)/ibex_compressed_decoder.sv \ $(SRC_DIR)/cve2_compressed_decoder.sv \
$(SRC_DIR)/ibex_controller.sv \ $(SRC_DIR)/cve2_controller.sv \
$(SRC_DIR)/ibex_counter.sv \ $(SRC_DIR)/cve2_counter.sv \
$(SRC_DIR)/ibex_csr.sv \ $(SRC_DIR)/cve2_csr.sv \
$(SRC_DIR)/ibex_cs_registers.sv \ $(SRC_DIR)/cve2_cs_registers.sv \
$(SRC_DIR)/ibex_decoder.sv \ $(SRC_DIR)/cve2_decoder.sv \
$(SRC_DIR)/ibex_ex_block.sv \ $(SRC_DIR)/cve2_ex_block.sv \
$(SRC_DIR)/ibex_fetch_fifo.sv \ $(SRC_DIR)/cve2_fetch_fifo.sv \
$(SRC_DIR)/ibex_id_stage.sv \ $(SRC_DIR)/cve2_id_stage.sv \
$(SRC_DIR)/ibex_if_stage.sv \ $(SRC_DIR)/cve2_if_stage.sv \
$(SRC_DIR)/ibex_load_store_unit.sv \ $(SRC_DIR)/cve2_load_store_unit.sv \
$(SRC_DIR)/ibex_multdiv_fast.sv \ $(SRC_DIR)/cve2_multdiv_fast.sv \
$(SRC_DIR)/ibex_multdiv_slow.sv \ $(SRC_DIR)/cve2_multdiv_slow.sv \
$(SRC_DIR)/ibex_prefetch_buffer.sv \ $(SRC_DIR)/cve2_prefetch_buffer.sv \
$(SRC_DIR)/ibex_pmp.sv \ $(SRC_DIR)/cve2_pmp.sv \
$(SRC_DIR)/ibex_register_file_ff.sv \ $(SRC_DIR)/cve2_register_file_ff.sv \
$(SRC_DIR)/ibex_wb_stage.sv \ $(SRC_DIR)/cve2_wb_stage.sv \
$(SRC_DIR)/ibex_core.sv \ $(SRC_DIR)/cve2_core.sv \
$(SRC_DIR)/ibex_top.sv $(SRC_DIR)/cve2_top.sv
PKGS ?= \ PKGS ?= \
$(SRC_DIR)/ibex_pkg.sv \ $(SRC_DIR)/cve2_pkg.sv \
$(LOWRISC_IP)/ip/prim/rtl/prim_ram_1p_pkg.sv $(LOWRISC_IP)/ip/prim/rtl/prim_ram_1p_pkg.sv
PRIM_CLOCK ?= $(SYN_DIR)/rtl/prim_clock_gating.v PRIM_CLOCK ?= $(SYN_DIR)/rtl/prim_clock_gating.v
@ -73,9 +73,9 @@ $(GEN_V): $(OUTDIR)%.v: $(SRC_DIR)%.sv $(PKGS) | $(OUTDIR)
# Disable "M" extension # Disable "M" extension
$(IBEX_OUT): $(GEN_V) $(PRIM_CLOCK) $(IBEX_OUT): $(GEN_V) $(PRIM_CLOCK)
yosys -p "read_verilog $(PRIM_CLOCK) $(GEN_V)" \ yosys -p "read_verilog $(PRIM_CLOCK) $(GEN_V)" \
-p "chparam -set RV32M 0 ibex_top" \ -p "chparam -set RV32M 0 cve2_top" \
-p "chparam -set WritebackStage $(IBEX_ENABLE_WB) ibex_top" \ -p "chparam -set WritebackStage $(CVE2_ENABLE_WB) cve2_top" \
-p "synth -top ibex_top" \ -p "synth -top cve2_top" \
-p "write_verilog $(IBEX_OUT)" -p "write_verilog $(IBEX_OUT)"
.PHONY: clean .PHONY: clean

View file

@ -12,7 +12,7 @@
`verilator_config `verilator_config
lint_off -rule PINCONNECTEMPTY lint_off -rule PINCONNECTEMPTY
// We have some boolean top-level parameters in e.g. ibex_core_tracing.sv. // We have some boolean top-level parameters in e.g. cve2_core_tracing.sv.
// When building with fusesoc, these get set with defines like // When building with fusesoc, these get set with defines like
// -GRV32M=1 (rather than -GRV32M=1'b1), leading to warnings like: // -GRV32M=1 (rather than -GRV32M=1'b1), leading to warnings like:
// //
@ -23,13 +23,13 @@ lint_off -rule PINCONNECTEMPTY
// matches when you set a 1-bit value to a literal 1, so it won't hide // matches when you set a 1-bit value to a literal 1, so it won't hide
// silly mistakes like setting it to 2. // silly mistakes like setting it to 2.
// //
lint_off -rule WIDTH -file "*/rtl/ibex_top_tracing.sv" lint_off -rule WIDTH -file "*/rtl/cve2_top_tracing.sv"
-match "*expects 1 bits*Initial value's CONST '32'h1'*" -match "*expects 1 bits*Initial value's CONST '32'h1'*"
// Operator expects 1 bit on initial value but initial value's CONST generates // Operator expects 1 bit on initial value but initial value's CONST generates
// 32 bits, need a specific RV32B waiver as it uses enums so the above catch-all // 32 bits, need a specific RV32B waiver as it uses enums so the above catch-all
// waiver doesn't work. // waiver doesn't work.
lint_off -rule WIDTH -file "*/rtl/ibex_top_tracing.sv" -match "*'RV32B'*" lint_off -rule WIDTH -file "*/rtl/cve2_top_tracing.sv" -match "*'RV32B'*"
// Bits of signal are not used: be_i[3:1] // Bits of signal are not used: be_i[3:1]
// Bits of signal are not used: addr_i[31:10,1:0] // Bits of signal are not used: addr_i[31:10,1:0]
@ -52,21 +52,21 @@ lint_off -rule UNUSED -file "*/rtl/timer.sv" -match "*'timer_addr_i'[31:10]*"
// Signal is not used: clk_i // Signal is not used: clk_i
// leaving clk and reset connected in-case we want to add assertions // leaving clk and reset connected in-case we want to add assertions
lint_off -rule UNUSED -file "*/rtl/ibex_pmp.sv" -match "*clk_i*" lint_off -rule UNUSED -file "*/rtl/cve2_pmp.sv" -match "*clk_i*"
lint_off -rule UNUSED -file "*/rtl/ibex_compressed_decoder.sv" -match "*clk_i*" lint_off -rule UNUSED -file "*/rtl/cve2_compressed_decoder.sv" -match "*clk_i*"
lint_off -rule UNUSED -file "*/rtl/ibex_decoder.sv" -match "*clk_i*" lint_off -rule UNUSED -file "*/rtl/cve2_decoder.sv" -match "*clk_i*"
lint_off -rule UNUSED -file "*/rtl/ibex_branch_predict.sv" -match "*clk_i*" lint_off -rule UNUSED -file "*/rtl/cve2_branch_predict.sv" -match "*clk_i*"
// Signal is not used: rst_ni // Signal is not used: rst_ni
// leaving clk and reset connected in-case we want to add assertions // leaving clk and reset connected in-case we want to add assertions
lint_off -rule UNUSED -file "*/rtl/ibex_pmp.sv" -match "*rst_ni*" lint_off -rule UNUSED -file "*/rtl/cve2_pmp.sv" -match "*rst_ni*"
lint_off -rule UNUSED -file "*/rtl/ibex_compressed_decoder.sv" -match "*rst_ni*" lint_off -rule UNUSED -file "*/rtl/cve2_compressed_decoder.sv" -match "*rst_ni*"
lint_off -rule UNUSED -file "*/rtl/ibex_decoder.sv" -match "*rst_ni*" lint_off -rule UNUSED -file "*/rtl/cve2_decoder.sv" -match "*rst_ni*"
lint_off -rule UNUSED -file "*/rtl/ibex_branch_predict.sv" -match "*rst_ni*" lint_off -rule UNUSED -file "*/rtl/cve2_branch_predict.sv" -match "*rst_ni*"
// Temporary waivers until OpenTitan primitives are lint-clean // Temporary waivers until OpenTitan primitives are lint-clean
// https://github.com/lowRISC/opentitan/issues/2313 // https://github.com/lowRISC/opentitan/issues/2313
lint_off -file "*/lowrisc_prim_*/rtl/*.sv" lint_off -file "*/lowrisc_prim_*/rtl/*.sv"
lint_off -rule UNUSED -file "*/rtl/ibex_top_tracing.sv" -match "*RndCnstLfsrSeed*" lint_off -rule UNUSED -file "*/rtl/cve2_top_tracing.sv" -match "*RndCnstLfsrSeed*"
lint_off -rule UNUSED -file "*/rtl/ibex_top_tracing.sv" -match "*RndCnstLfsrPerm*" lint_off -rule UNUSED -file "*/rtl/cve2_top_tracing.sv" -match "*RndCnstLfsrPerm*"

View file

@ -6,10 +6,10 @@
/** /**
* Arithmetic logic unit * Arithmetic logic unit
*/ */
module ibex_alu #( module cve2_alu #(
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone
) ( ) (
input ibex_pkg::alu_op_e operator_i, input cve2_pkg::alu_op_e operator_i,
input logic [31:0] operand_a_i, input logic [31:0] operand_a_i,
input logic [31:0] operand_b_i, input logic [31:0] operand_b_i,
@ -31,7 +31,7 @@ module ibex_alu #(
output logic comparison_result_o, output logic comparison_result_o,
output logic is_equal_result_o output logic is_equal_result_o
); );
import ibex_pkg::*; import cve2_pkg::*;
logic [31:0] operand_a_rev; logic [31:0] operand_a_rev;
logic [32:0] operand_b_neg; logic [32:0] operand_b_neg;

View file

@ -17,7 +17,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_branch_predict ( module cve2_branch_predict (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
@ -30,7 +30,7 @@ module ibex_branch_predict (
output logic predict_branch_taken_o, output logic predict_branch_taken_o,
output logic [31:0] predict_branch_pc_o output logic [31:0] predict_branch_pc_o
); );
import ibex_pkg::*; import cve2_pkg::*;
logic [31:0] imm_j_type; logic [31:0] imm_j_type;
logic [31:0] imm_b_type; logic [31:0] imm_b_type;

View file

@ -13,7 +13,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_compressed_decoder ( module cve2_compressed_decoder (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
input logic valid_i, input logic valid_i,
@ -22,7 +22,7 @@ module ibex_compressed_decoder (
output logic is_compressed_o, output logic is_compressed_o,
output logic illegal_instr_o output logic illegal_instr_o
); );
import ibex_pkg::*; import cve2_pkg::*;
// valid_i indicates if instr_i is valid and is used for assertions only. // valid_i indicates if instr_i is valid and is used for assertions only.
// The following signal is used to avoid possible lint errors. // The following signal is used to avoid possible lint errors.

View file

@ -10,7 +10,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
`include "dv_fcov_macros.svh" `include "dv_fcov_macros.svh"
module ibex_controller #( module cve2_controller #(
parameter bit WritebackStage = 0, parameter bit WritebackStage = 0,
parameter bit BranchPredictor = 0 parameter bit BranchPredictor = 0
) ( ) (
@ -47,12 +47,12 @@ module ibex_controller #(
// to prefetcher // to prefetcher
output logic instr_req_o, // start fetching instructions output logic instr_req_o, // start fetching instructions
output logic pc_set_o, // jump to address set by pc_mux output logic pc_set_o, // jump to address set by pc_mux
output ibex_pkg::pc_sel_e pc_mux_o, // IF stage fetch address selector output cve2_pkg::pc_sel_e pc_mux_o, // IF stage fetch address selector
// (boot, normal, exception...) // (boot, normal, exception...)
output logic nt_branch_mispredict_o, // Not-taken branch in ID/EX was output logic nt_branch_mispredict_o, // Not-taken branch in ID/EX was
// mispredicted (predicted taken) // mispredicted (predicted taken)
output ibex_pkg::exc_pc_sel_e exc_pc_mux_o, // IF stage selector for exception PC output cve2_pkg::exc_pc_sel_e exc_pc_mux_o, // IF stage selector for exception PC
output ibex_pkg::exc_cause_e exc_cause_o, // for IF stage, CSRs output cve2_pkg::exc_cause_e exc_cause_o, // for IF stage, CSRs
// LSU // LSU
input logic [31:0] lsu_addr_last_i, // for mtval input logic [31:0] lsu_addr_last_i, // for mtval
@ -70,14 +70,14 @@ module ibex_controller #(
// interrupt signals // interrupt signals
input logic csr_mstatus_mie_i, // M-mode interrupt enable bit input logic csr_mstatus_mie_i, // M-mode interrupt enable bit
input logic irq_pending_i, // interrupt request pending input logic irq_pending_i, // interrupt request pending
input ibex_pkg::irqs_t irqs_i, // interrupt requests qualified with input cve2_pkg::irqs_t irqs_i, // interrupt requests qualified with
// mie CSR // mie CSR
input logic irq_nm_i, // non-maskeable interrupt input logic irq_nm_i, // non-maskeable interrupt
output logic nmi_mode_o, // core executing NMI handler output logic nmi_mode_o, // core executing NMI handler
// debug signals // debug signals
input logic debug_req_i, input logic debug_req_i,
output ibex_pkg::dbg_cause_e debug_cause_o, output cve2_pkg::dbg_cause_e debug_cause_o,
output logic debug_csr_save_o, output logic debug_csr_save_o,
output logic debug_mode_o, output logic debug_mode_o,
input logic debug_single_step_i, input logic debug_single_step_i,
@ -92,7 +92,7 @@ module ibex_controller #(
output logic csr_restore_dret_id_o, output logic csr_restore_dret_id_o,
output logic csr_save_cause_o, output logic csr_save_cause_o,
output logic [31:0] csr_mtval_o, output logic [31:0] csr_mtval_o,
input ibex_pkg::priv_lvl_e priv_mode_i, input cve2_pkg::priv_lvl_e priv_mode_i,
input logic csr_mstatus_tw_i, input logic csr_mstatus_tw_i,
// stall & flush signals // stall & flush signals
@ -107,7 +107,7 @@ module ibex_controller #(
output logic perf_tbranch_o // we are executing a taken branch output logic perf_tbranch_o // we are executing a taken branch
// instruction // instruction
); );
import ibex_pkg::*; import cve2_pkg::*;
// FSM state encoding // FSM state encoding
typedef enum logic [3:0] { typedef enum logic [3:0] {
@ -170,8 +170,8 @@ module ibex_controller #(
always_ff @(negedge clk_i) begin always_ff @(negedge clk_i) begin
// print warning in case of decoding errors // print warning in case of decoding errors
if ((ctrl_fsm_cs == DECODE) && instr_valid_i && !instr_fetch_err_i && illegal_insn_d) begin if ((ctrl_fsm_cs == DECODE) && instr_valid_i && !instr_fetch_err_i && illegal_insn_d) begin
$display("%t: Illegal instruction (hart %0x) at PC 0x%h: 0x%h", $time, ibex_core.hart_id_i, $display("%t: Illegal instruction (hart %0x) at PC 0x%h: 0x%h", $time, cve2_core.hart_id_i,
ibex_id_stage.pc_id_i, ibex_id_stage.instr_rdata_i); cve2_id_stage.pc_id_i, cve2_id_stage.instr_rdata_i);
end end
end end
// synopsys translate_on // synopsys translate_on
@ -203,7 +203,7 @@ module ibex_controller #(
(mret_insn | (csr_mstatus_tw_i & wfi_insn)); (mret_insn | (csr_mstatus_tw_i & wfi_insn));
// This is recorded in the illegal_insn_q flop to help timing. Specifically // This is recorded in the illegal_insn_q flop to help timing. Specifically
// it is needed to break the path from ibex_cs_registers/illegal_csr_insn_o // it is needed to break the path from cve2_cs_registers/illegal_csr_insn_o
// to pc_set_o. Clear when controller is in FLUSH so it won't remain set // to pc_set_o. Clear when controller is in FLUSH so it won't remain set
// once illegal instruction is handled. // once illegal instruction is handled.
// All terms in this expression are qualified by instr_valid_i // All terms in this expression are qualified by instr_valid_i
@ -916,7 +916,7 @@ module ibex_controller #(
`ifdef RVFI `ifdef RVFI
// Workaround for internal verilator error when using hierarchical refers to calcuate this // Workaround for internal verilator error when using hierarchical refers to calcuate this
// directly in ibex_core // directly in cve2_core
logic rvfi_flush_next; logic rvfi_flush_next;
assign rvfi_flush_next = ctrl_fsm_ns == FLUSH; assign rvfi_flush_next = ctrl_fsm_ns == FLUSH;

17
rtl/cve2_core.f Normal file
View file

@ -0,0 +1,17 @@
cve2_pkg.sv
cve2_alu.sv
cve2_compressed_decoder.sv
cve2_controller.sv
cve2_counter.sv
cve2_cs_registers.sv
cve2_decoder.sv
cve2_ex_block.sv
cve2_id_stage.sv
cve2_if_stage.sv
cve2_load_store_unit.sv
cve2_multdiv_slow.sv
cve2_multdiv_fast.sv
cve2_prefetch_buffer.sv
cve2_fetch_fifo.sv
cve2_register_file_ff.sv
cve2_core.sv

View file

@ -12,7 +12,7 @@
/** /**
* Top level module of the ibex RISC-V core * Top level module of the ibex RISC-V core
*/ */
module ibex_core import ibex_pkg::*; #( module cve2_core import cve2_pkg::*; #(
parameter bit PMPEnable = 1'b0, parameter bit PMPEnable = 1'b0,
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
parameter int unsigned PMPNumRegions = 4, parameter int unsigned PMPNumRegions = 4,
@ -362,7 +362,7 @@ module ibex_core import ibex_pkg::*; #(
// IF stage // // IF stage //
////////////// //////////////
ibex_if_stage #( cve2_if_stage #(
.DmHaltAddr (DmHaltAddr), .DmHaltAddr (DmHaltAddr),
.DmExceptionAddr (DmExceptionAddr), .DmExceptionAddr (DmExceptionAddr),
.DummyInstructions(DummyInstructions), .DummyInstructions(DummyInstructions),
@ -481,7 +481,7 @@ module ibex_core import ibex_pkg::*; #(
// ID stage // // ID stage //
////////////// //////////////
ibex_id_stage #( cve2_id_stage #(
.RV32E (RV32E), .RV32E (RV32E),
.RV32M (RV32M), .RV32M (RV32M),
.RV32B (RV32B), .RV32B (RV32B),
@ -640,7 +640,7 @@ module ibex_core import ibex_pkg::*; #(
// for RVFI only // for RVFI only
assign unused_illegal_insn_id = illegal_insn_id; assign unused_illegal_insn_id = illegal_insn_id;
ibex_ex_block #( cve2_ex_block #(
.RV32M (RV32M), .RV32M (RV32M),
.RV32B (RV32B), .RV32B (RV32B),
.BranchTargetALU(BranchTargetALU) .BranchTargetALU(BranchTargetALU)
@ -692,7 +692,7 @@ module ibex_core import ibex_pkg::*; #(
assign data_req_o = data_req_out & ~pmp_req_err[PMP_D]; assign data_req_o = data_req_out & ~pmp_req_err[PMP_D];
assign lsu_resp_err = lsu_load_err | lsu_store_err; assign lsu_resp_err = lsu_load_err | lsu_store_err;
ibex_load_store_unit load_store_unit_i ( cve2_load_store_unit load_store_unit_i (
.clk_i (clk_i), .clk_i (clk_i),
.rst_ni(rst_ni), .rst_ni(rst_ni),
@ -738,7 +738,7 @@ module ibex_core import ibex_pkg::*; #(
.perf_store_o(perf_store) .perf_store_o(perf_store)
); );
ibex_wb_stage #( cve2_wb_stage #(
.ResetAll ( ResetAll ), .ResetAll ( ResetAll ),
.WritebackStage(WritebackStage) .WritebackStage(WritebackStage)
) wb_stage_i ( ) wb_stage_i (
@ -912,7 +912,7 @@ module ibex_core import ibex_pkg::*; #(
assign csr_wdata = alu_operand_a_ex; assign csr_wdata = alu_operand_a_ex;
assign csr_addr = csr_num_e'(csr_access ? alu_operand_b_ex[11:0] : 12'b0); assign csr_addr = csr_num_e'(csr_access ? alu_operand_b_ex[11:0] : 12'b0);
ibex_cs_registers #( cve2_cs_registers #(
.DbgTriggerEn (DbgTriggerEn), .DbgTriggerEn (DbgTriggerEn),
.DbgHwBreakNum (DbgHwBreakNum), .DbgHwBreakNum (DbgHwBreakNum),
.DataIndTiming (DataIndTiming), .DataIndTiming (DataIndTiming),
@ -1040,7 +1040,7 @@ module ibex_core import ibex_pkg::*; #(
assign pmp_req_type[PMP_D] = data_we_o ? PMP_ACC_WRITE : PMP_ACC_READ; assign pmp_req_type[PMP_D] = data_we_o ? PMP_ACC_WRITE : PMP_ACC_READ;
assign pmp_priv_lvl[PMP_D] = priv_mode_lsu; assign pmp_priv_lvl[PMP_D] = priv_mode_lsu;
ibex_pmp #( cve2_pmp #(
.PMPGranularity(PMPGranularity), .PMPGranularity(PMPGranularity),
.PMPNumChan (PMP_NUM_CHAN), .PMPNumChan (PMP_NUM_CHAN),
.PMPNumRegions (PMPNumRegions) .PMPNumRegions (PMPNumRegions)
@ -1146,14 +1146,14 @@ module ibex_core import ibex_pkg::*; #(
logic new_debug_req; logic new_debug_req;
logic new_nmi; logic new_nmi;
logic new_irq; logic new_irq;
ibex_pkg::irqs_t captured_mip; cve2_pkg::irqs_t captured_mip;
logic captured_nmi; logic captured_nmi;
logic captured_debug_req; logic captured_debug_req;
logic captured_valid; logic captured_valid;
// RVFI extension for co-simulation support // RVFI extension for co-simulation support
// debug_req and MIP captured at IF -> ID transition so one extra stage // debug_req and MIP captured at IF -> ID transition so one extra stage
ibex_pkg::irqs_t rvfi_ext_stage_mip [RVFI_STAGES+1]; cve2_pkg::irqs_t rvfi_ext_stage_mip [RVFI_STAGES+1];
logic rvfi_ext_stage_nmi [RVFI_STAGES+1]; logic rvfi_ext_stage_nmi [RVFI_STAGES+1];
logic rvfi_ext_stage_debug_req [RVFI_STAGES+1]; logic rvfi_ext_stage_debug_req [RVFI_STAGES+1];
logic [63:0] rvfi_ext_stage_mcycle [RVFI_STAGES]; logic [63:0] rvfi_ext_stage_mcycle [RVFI_STAGES];

View file

@ -1,4 +1,4 @@
module ibex_counter #( module cve2_counter #(
parameter int CounterWidth = 32, parameter int CounterWidth = 32,
// When set `counter_val_upd_o` provides an incremented version of the counter value, otherwise // When set `counter_val_upd_o` provides an incremented version of the counter value, otherwise
// the output is hard-wired to 0. This is required to allow Xilinx DSP inference to work // the output is hard-wired to 0. This is required to allow Xilinx DSP inference to work

View file

@ -12,7 +12,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_cs_registers #( module cve2_cs_registers #(
parameter bit DbgTriggerEn = 0, parameter bit DbgTriggerEn = 0,
parameter int unsigned DbgHwBreakNum = 1, parameter int unsigned DbgHwBreakNum = 1,
parameter bit DataIndTiming = 1'b0, parameter bit DataIndTiming = 1'b0,
@ -25,8 +25,8 @@ module ibex_cs_registers #(
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
parameter int unsigned PMPNumRegions = 4, parameter int unsigned PMPNumRegions = 4,
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast, parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast,
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone
) ( ) (
// Clock and Reset // Clock and Reset
input logic clk_i, input logic clk_i,
@ -36,8 +36,8 @@ module ibex_cs_registers #(
input logic [31:0] hart_id_i, input logic [31:0] hart_id_i,
// Privilege mode // Privilege mode
output ibex_pkg::priv_lvl_e priv_mode_id_o, output cve2_pkg::priv_lvl_e priv_mode_id_o,
output ibex_pkg::priv_lvl_e priv_mode_lsu_o, output cve2_pkg::priv_lvl_e priv_mode_lsu_o,
output logic csr_mstatus_tw_o, output logic csr_mstatus_tw_o,
// mtvec // mtvec
@ -47,9 +47,9 @@ module ibex_cs_registers #(
// Interface to registers (SRAM like) // Interface to registers (SRAM like)
input logic csr_access_i, input logic csr_access_i,
input ibex_pkg::csr_num_e csr_addr_i, input cve2_pkg::csr_num_e csr_addr_i,
input logic [31:0] csr_wdata_i, input logic [31:0] csr_wdata_i,
input ibex_pkg::csr_op_e csr_op_i, input cve2_pkg::csr_op_e csr_op_i,
input csr_op_en_i, input csr_op_en_i,
output logic [31:0] csr_rdata_o, output logic [31:0] csr_rdata_o,
@ -60,18 +60,18 @@ module ibex_cs_registers #(
input logic [14:0] irq_fast_i, input logic [14:0] irq_fast_i,
input logic nmi_mode_i, input logic nmi_mode_i,
output logic irq_pending_o, // interrupt request pending output logic irq_pending_o, // interrupt request pending
output ibex_pkg::irqs_t irqs_o, // interrupt requests qualified with mie output cve2_pkg::irqs_t irqs_o, // interrupt requests qualified with mie
output logic csr_mstatus_mie_o, output logic csr_mstatus_mie_o,
output logic [31:0] csr_mepc_o, output logic [31:0] csr_mepc_o,
// PMP // PMP
output ibex_pkg::pmp_cfg_t csr_pmp_cfg_o [PMPNumRegions], output cve2_pkg::pmp_cfg_t csr_pmp_cfg_o [PMPNumRegions],
output logic [33:0] csr_pmp_addr_o [PMPNumRegions], output logic [33:0] csr_pmp_addr_o [PMPNumRegions],
output ibex_pkg::pmp_mseccfg_t csr_pmp_mseccfg_o, output cve2_pkg::pmp_mseccfg_t csr_pmp_mseccfg_o,
// debug // debug
input logic debug_mode_i, input logic debug_mode_i,
input ibex_pkg::dbg_cause_e debug_cause_i, input cve2_pkg::dbg_cause_e debug_cause_i,
input logic debug_csr_save_i, input logic debug_csr_save_i,
output logic [31:0] csr_depc_o, output logic [31:0] csr_depc_o,
output logic debug_single_step_o, output logic debug_single_step_o,
@ -99,7 +99,7 @@ module ibex_cs_registers #(
input logic csr_restore_mret_i, input logic csr_restore_mret_i,
input logic csr_restore_dret_i, input logic csr_restore_dret_i,
input logic csr_save_cause_i, input logic csr_save_cause_i,
input ibex_pkg::exc_cause_e csr_mcause_i, input cve2_pkg::exc_cause_e csr_mcause_i,
input logic [31:0] csr_mtval_i, input logic [31:0] csr_mtval_i,
output logic illegal_csr_insn_o, // access to non-existent CSR, output logic illegal_csr_insn_o, // access to non-existent CSR,
// with wrong priviledge level, or // with wrong priviledge level, or
@ -121,7 +121,7 @@ module ibex_cs_registers #(
input logic div_wait_i // core waiting for divide input logic div_wait_i // core waiting for divide
); );
import ibex_pkg::*; import cve2_pkg::*;
localparam int unsigned RV32BEnabled = (RV32B == RV32BNone) ? 0 : 1; localparam int unsigned RV32BEnabled = (RV32B == RV32BNone) ? 0 : 1;
localparam int unsigned RV32MEnabled = (RV32M == RV32MNone) ? 0 : 1; localparam int unsigned RV32MEnabled = (RV32M == RV32MNone) ? 0 : 1;
@ -801,7 +801,7 @@ module ibex_cs_registers #(
mpp: PRIV_LVL_U, mpp: PRIV_LVL_U,
mprv: 1'b0, mprv: 1'b0,
tw: 1'b0}; tw: 1'b0};
ibex_csr #( cve2_csr #(
.Width ($bits(status_t)), .Width ($bits(status_t)),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue({MSTATUS_RST_VAL}) .ResetValue({MSTATUS_RST_VAL})
@ -815,7 +815,7 @@ module ibex_cs_registers #(
); );
// MEPC // MEPC
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -833,7 +833,7 @@ module ibex_cs_registers #(
assign mie_d.irq_timer = csr_wdata_int[CSR_MTIX_BIT]; assign mie_d.irq_timer = csr_wdata_int[CSR_MTIX_BIT];
assign mie_d.irq_external = csr_wdata_int[CSR_MEIX_BIT]; assign mie_d.irq_external = csr_wdata_int[CSR_MEIX_BIT];
assign mie_d.irq_fast = csr_wdata_int[CSR_MFIX_BIT_HIGH:CSR_MFIX_BIT_LOW]; assign mie_d.irq_fast = csr_wdata_int[CSR_MFIX_BIT_HIGH:CSR_MFIX_BIT_LOW];
ibex_csr #( cve2_csr #(
.Width ($bits(irqs_t)), .Width ($bits(irqs_t)),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -847,7 +847,7 @@ module ibex_cs_registers #(
); );
// MSCRATCH // MSCRATCH
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -861,7 +861,7 @@ module ibex_cs_registers #(
); );
// MCAUSE // MCAUSE
ibex_csr #( cve2_csr #(
.Width (6), .Width (6),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -875,7 +875,7 @@ module ibex_cs_registers #(
); );
// MTVAL // MTVAL
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -889,7 +889,7 @@ module ibex_cs_registers #(
); );
// MTVEC // MTVEC
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue(32'd1) .ResetValue(32'd1)
@ -909,7 +909,7 @@ module ibex_cs_registers #(
prv: PRIV_LVL_M, prv: PRIV_LVL_M,
default: '0 default: '0
}; };
ibex_csr #( cve2_csr #(
.Width ($bits(dcsr_t)), .Width ($bits(dcsr_t)),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue({DCSR_RESET_VAL}) .ResetValue({DCSR_RESET_VAL})
@ -923,7 +923,7 @@ module ibex_cs_registers #(
); );
// DEPC // DEPC
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -937,7 +937,7 @@ module ibex_cs_registers #(
); );
// DSCRATCH0 // DSCRATCH0
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -951,7 +951,7 @@ module ibex_cs_registers #(
); );
// DSCRATCH1 // DSCRATCH1
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -966,7 +966,7 @@ module ibex_cs_registers #(
// MSTACK // MSTACK
localparam status_stk_t MSTACK_RESET_VAL = '{mpie: 1'b1, mpp: PRIV_LVL_U}; localparam status_stk_t MSTACK_RESET_VAL = '{mpie: 1'b1, mpp: PRIV_LVL_U};
ibex_csr #( cve2_csr #(
.Width ($bits(status_stk_t)), .Width ($bits(status_stk_t)),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue({MSTACK_RESET_VAL}) .ResetValue({MSTACK_RESET_VAL})
@ -980,7 +980,7 @@ module ibex_cs_registers #(
); );
// MSTACK_EPC // MSTACK_EPC
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -994,7 +994,7 @@ module ibex_cs_registers #(
); );
// MSTACK_CAUSE // MSTACK_CAUSE
ibex_csr #( cve2_csr #(
.Width (6), .Width (6),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -1013,10 +1013,10 @@ module ibex_cs_registers #(
if (PMPEnable) begin : g_pmp_registers if (PMPEnable) begin : g_pmp_registers
// PMP reset values // PMP reset values
`ifdef IBEX_CUSTOM_PMP_RESET_VALUES `ifdef CVE2_CUSTOM_PMP_RESET_VALUES
`include "ibex_pmp_reset.svh" `include "cve2_pmp_reset.svh"
`else `else
`include "ibex_pmp_reset_default.svh" `include "cve2_pmp_reset_default.svh"
`endif `endif
pmp_mseccfg_t pmp_mseccfg_q, pmp_mseccfg_d; pmp_mseccfg_t pmp_mseccfg_q, pmp_mseccfg_d;
@ -1102,7 +1102,7 @@ module ibex_cs_registers #(
&csr_wdata_int[(i%4)*PMP_CFG_W+:2]; &csr_wdata_int[(i%4)*PMP_CFG_W+:2];
assign pmp_cfg_wdata[i].read = csr_wdata_int[(i%4)*PMP_CFG_W]; assign pmp_cfg_wdata[i].read = csr_wdata_int[(i%4)*PMP_CFG_W];
ibex_csr #( cve2_csr #(
.Width ($bits(pmp_cfg_t)), .Width ($bits(pmp_cfg_t)),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue(pmp_cfg_rst[i]) .ResetValue(pmp_cfg_rst[i])
@ -1131,7 +1131,7 @@ module ibex_cs_registers #(
(csr_addr == (CSR_OFF_PMP_ADDR + i[11:0])); (csr_addr == (CSR_OFF_PMP_ADDR + i[11:0]));
end end
ibex_csr #( cve2_csr #(
.Width (PMPAddrWidth), .Width (PMPAddrWidth),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue(pmp_addr_rst[i][33-:PMPAddrWidth]) .ResetValue(pmp_addr_rst[i][33-:PMPAddrWidth])
@ -1164,7 +1164,7 @@ module ibex_cs_registers #(
// MSECCFG.RLB cannot be set again // MSECCFG.RLB cannot be set again
assign pmp_mseccfg_d.rlb = any_pmp_entry_locked ? 1'b0 : csr_wdata_int[CSR_MSECCFG_RLB_BIT]; assign pmp_mseccfg_d.rlb = any_pmp_entry_locked ? 1'b0 : csr_wdata_int[CSR_MSECCFG_RLB_BIT];
ibex_csr #( cve2_csr #(
.Width ($bits(pmp_mseccfg_t)), .Width ($bits(pmp_mseccfg_t)),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue(pmp_mseccfg_rst) .ResetValue(pmp_mseccfg_rst)
@ -1219,7 +1219,7 @@ module ibex_cs_registers #(
end end
// When adding or altering performance counter meanings and default // When adding or altering performance counter meanings and default
// mappings please update dv/verilator/pcount/cpp/ibex_pcounts.cc // mappings please update dv/verilator/pcount/cpp/cve2_pcounts.cc
// appropriately. // appropriately.
// //
// active counters // active counters
@ -1255,7 +1255,7 @@ module ibex_cs_registers #(
end end
// mcycle // mcycle
ibex_counter #( cve2_counter #(
.CounterWidth(64) .CounterWidth(64)
) mcycle_counter_i ( ) mcycle_counter_i (
.clk_i(clk_i), .clk_i(clk_i),
@ -1270,7 +1270,7 @@ module ibex_cs_registers #(
// minstret // minstret
ibex_counter #( cve2_counter #(
.CounterWidth(64), .CounterWidth(64),
.ProvideValUpd(1) .ProvideValUpd(1)
) minstret_counter_i ( ) minstret_counter_i (
@ -1306,7 +1306,7 @@ module ibex_cs_registers #(
if (i < MHPMCounterNum) begin : gen_imp if (i < MHPMCounterNum) begin : gen_imp
logic [63:0] mhpmcounter_raw, mhpmcounter_next; logic [63:0] mhpmcounter_raw, mhpmcounter_next;
ibex_counter #( cve2_counter #(
.CounterWidth(MHPMCounterWidth), .CounterWidth(MHPMCounterWidth),
.ProvideValUpd(Cnt == 10) .ProvideValUpd(Cnt == 10)
) mcounters_variable_i ( ) mcounters_variable_i (
@ -1407,7 +1407,7 @@ module ibex_cs_registers #(
assign tmatch_value_d = csr_wdata_int[31:0]; assign tmatch_value_d = csr_wdata_int[31:0];
// Registers // Registers
ibex_csr #( cve2_csr #(
.Width (DbgHwNumLen), .Width (DbgHwNumLen),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -1421,7 +1421,7 @@ module ibex_cs_registers #(
); );
for (genvar i = 0; i < DbgHwBreakNum; i++) begin : g_dbg_tmatch_reg for (genvar i = 0; i < DbgHwBreakNum; i++) begin : g_dbg_tmatch_reg
ibex_csr #( cve2_csr #(
.Width (1), .Width (1),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -1434,7 +1434,7 @@ module ibex_cs_registers #(
.rd_error_o() .rd_error_o()
); );
ibex_csr #( cve2_csr #(
.Width (32), .Width (32),
.ShadowCopy(1'b0), .ShadowCopy(1'b0),
.ResetValue('0) .ResetValue('0)
@ -1564,7 +1564,7 @@ module ibex_cs_registers #(
assign icache_enable_o = cpuctrl_q.icache_enable; assign icache_enable_o = cpuctrl_q.icache_enable;
ibex_csr #( cve2_csr #(
.Width ($bits(cpu_ctrl_t)), .Width ($bits(cpu_ctrl_t)),
.ShadowCopy(ShadowCSR), .ShadowCopy(ShadowCSR),
.ResetValue('0) .ResetValue('0)

View file

@ -8,7 +8,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_csr #( module cve2_csr #(
parameter int unsigned Width = 32, parameter int unsigned Width = 32,
parameter bit ShadowCopy = 1'b0, parameter bit ShadowCopy = 1'b0,
parameter bit [Width-1:0] ResetValue = '0 parameter bit [Width-1:0] ResetValue = '0

View file

@ -13,10 +13,10 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_decoder #( module cve2_decoder #(
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast, parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast,
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone, parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone,
parameter bit BranchTargetALU = 0 parameter bit BranchTargetALU = 0
) ( ) (
input logic clk_i, input logic clk_i,
@ -43,10 +43,10 @@ module ibex_decoder #(
input logic illegal_c_insn_i, // compressed instruction decode failed input logic illegal_c_insn_i, // compressed instruction decode failed
// immediates // immediates
output ibex_pkg::imm_a_sel_e imm_a_mux_sel_o, // immediate selection for operand a output cve2_pkg::imm_a_sel_e imm_a_mux_sel_o, // immediate selection for operand a
output ibex_pkg::imm_b_sel_e imm_b_mux_sel_o, // immediate selection for operand b output cve2_pkg::imm_b_sel_e imm_b_mux_sel_o, // immediate selection for operand b
output ibex_pkg::op_a_sel_e bt_a_mux_sel_o, // branch target selection operand a output cve2_pkg::op_a_sel_e bt_a_mux_sel_o, // branch target selection operand a
output ibex_pkg::imm_b_sel_e bt_b_mux_sel_o, // branch target selection operand b output cve2_pkg::imm_b_sel_e bt_b_mux_sel_o, // branch target selection operand b
output logic [31:0] imm_i_type_o, output logic [31:0] imm_i_type_o,
output logic [31:0] imm_s_type_o, output logic [31:0] imm_s_type_o,
output logic [31:0] imm_b_type_o, output logic [31:0] imm_b_type_o,
@ -55,7 +55,7 @@ module ibex_decoder #(
output logic [31:0] zimm_rs1_type_o, output logic [31:0] zimm_rs1_type_o,
// register file // register file
output ibex_pkg::rf_wd_sel_e rf_wdata_sel_o, // RF write data selection output cve2_pkg::rf_wd_sel_e rf_wdata_sel_o, // RF write data selection
output logic rf_we_o, // write enable for regfile output logic rf_we_o, // write enable for regfile
output logic [4:0] rf_raddr_a_o, output logic [4:0] rf_raddr_a_o,
output logic [4:0] rf_raddr_b_o, output logic [4:0] rf_raddr_b_o,
@ -64,10 +64,10 @@ module ibex_decoder #(
output logic rf_ren_b_o, // Instruction reads from RF addr B output logic rf_ren_b_o, // Instruction reads from RF addr B
// ALU // ALU
output ibex_pkg::alu_op_e alu_operator_o, // ALU operation selection output cve2_pkg::alu_op_e alu_operator_o, // ALU operation selection
output ibex_pkg::op_a_sel_e alu_op_a_mux_sel_o, // operand a selection: reg value, PC, output cve2_pkg::op_a_sel_e alu_op_a_mux_sel_o, // operand a selection: reg value, PC,
// immediate or zero // immediate or zero
output ibex_pkg::op_b_sel_e alu_op_b_mux_sel_o, // operand b selection: reg value or output cve2_pkg::op_b_sel_e alu_op_b_mux_sel_o, // operand b selection: reg value or
// immediate // immediate
output logic alu_multicycle_o, // ternary bitmanip instruction output logic alu_multicycle_o, // ternary bitmanip instruction
@ -77,12 +77,12 @@ module ibex_decoder #(
output logic mult_sel_o, // as above but static, for data muxes output logic mult_sel_o, // as above but static, for data muxes
output logic div_sel_o, // as above but static, for data muxes output logic div_sel_o, // as above but static, for data muxes
output ibex_pkg::md_op_e multdiv_operator_o, output cve2_pkg::md_op_e multdiv_operator_o,
output logic [1:0] multdiv_signed_mode_o, output logic [1:0] multdiv_signed_mode_o,
// CSRs // CSRs
output logic csr_access_o, // access to CSR output logic csr_access_o, // access to CSR
output ibex_pkg::csr_op_e csr_op_o, // operation to perform on CSR output cve2_pkg::csr_op_e csr_op_o, // operation to perform on CSR
// LSU // LSU
output logic data_req_o, // start transaction to data memory output logic data_req_o, // start transaction to data memory
@ -97,7 +97,7 @@ module ibex_decoder #(
output logic branch_in_dec_o output logic branch_in_dec_o
); );
import ibex_pkg::*; import cve2_pkg::*;
logic illegal_insn; logic illegal_insn;
logic illegal_reg_rv32e; logic illegal_reg_rv32e;

View file

@ -9,7 +9,7 @@
*/ */
// SEC_CM: CTRL_FLOW.UNPREDICTABLE // SEC_CM: CTRL_FLOW.UNPREDICTABLE
module ibex_dummy_instr import ibex_pkg::*; #( module cve2_dummy_instr import cve2_pkg::*; #(
parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault, parameter lfsr_seed_t RndCnstLfsrSeed = RndCnstLfsrSeedDefault,
parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault parameter lfsr_perm_t RndCnstLfsrPerm = RndCnstLfsrPermDefault
) ( ) (

View file

@ -8,16 +8,16 @@
* *
* Execution block: Hosts ALU and MUL/DIV unit * Execution block: Hosts ALU and MUL/DIV unit
*/ */
module ibex_ex_block #( module cve2_ex_block #(
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast, parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast,
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone, parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone,
parameter bit BranchTargetALU = 0 parameter bit BranchTargetALU = 0
) ( ) (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
// ALU // ALU
input ibex_pkg::alu_op_e alu_operator_i, input cve2_pkg::alu_op_e alu_operator_i,
input logic [31:0] alu_operand_a_i, input logic [31:0] alu_operand_a_i,
input logic [31:0] alu_operand_b_i, input logic [31:0] alu_operand_b_i,
input logic alu_instr_first_cycle_i, input logic alu_instr_first_cycle_i,
@ -28,7 +28,7 @@ module ibex_ex_block #(
input logic [31:0] bt_b_operand_i, input logic [31:0] bt_b_operand_i,
// Multiplier/Divider // Multiplier/Divider
input ibex_pkg::md_op_e multdiv_operator_i, input cve2_pkg::md_op_e multdiv_operator_i,
input logic mult_en_i, // dynamic enable signal, for FSM control input logic mult_en_i, // dynamic enable signal, for FSM control
input logic div_en_i, // dynamic enable signal, for FSM control input logic div_en_i, // dynamic enable signal, for FSM control
input logic mult_sel_i, // static decoder output, for data muxes input logic mult_sel_i, // static decoder output, for data muxes
@ -53,7 +53,7 @@ module ibex_ex_block #(
output logic ex_valid_o // EX has valid output output logic ex_valid_o // EX has valid output
); );
import ibex_pkg::*; import cve2_pkg::*;
logic [31:0] alu_result, multdiv_result; logic [31:0] alu_result, multdiv_result;
@ -113,7 +113,7 @@ module ibex_ex_block #(
// ALU // // ALU //
///////// /////////
ibex_alu #( cve2_alu #(
.RV32B(RV32B) .RV32B(RV32B)
) alu_i ( ) alu_i (
.operator_i (alu_operator_i), .operator_i (alu_operator_i),
@ -138,7 +138,7 @@ module ibex_ex_block #(
//////////////// ////////////////
if (RV32M == RV32MSlow) begin : gen_multdiv_slow if (RV32M == RV32MSlow) begin : gen_multdiv_slow
ibex_multdiv_slow multdiv_i ( cve2_multdiv_slow multdiv_i (
.clk_i (clk_i), .clk_i (clk_i),
.rst_ni (rst_ni), .rst_ni (rst_ni),
.mult_en_i (mult_en_i), .mult_en_i (mult_en_i),
@ -163,7 +163,7 @@ module ibex_ex_block #(
.multdiv_result_o (multdiv_result) .multdiv_result_o (multdiv_result)
); );
end else if (RV32M == RV32MFast || RV32M == RV32MSingleCycle) begin : gen_multdiv_fast end else if (RV32M == RV32MFast || RV32M == RV32MSingleCycle) begin : gen_multdiv_fast
ibex_multdiv_fast #( cve2_multdiv_fast #(
.RV32M(RV32M) .RV32M(RV32M)
) multdiv_i ( ) multdiv_i (
.clk_i (clk_i), .clk_i (clk_i),

View file

@ -12,7 +12,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_fetch_fifo #( module cve2_fetch_fifo #(
parameter int unsigned NUM_REQS = 2, parameter int unsigned NUM_REQS = 2,
parameter bit ResetAll = 1'b0 parameter bit ResetAll = 1'b0
) ( ) (

View file

@ -10,7 +10,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_icache import ibex_pkg::*; #( module cve2_icache import cve2_pkg::*; #(
parameter bit ICacheECC = 1'b0, parameter bit ICacheECC = 1'b0,
parameter bit ResetAll = 1'b0, parameter bit ResetAll = 1'b0,
parameter int unsigned BusSizeECC = BUS_SIZE, parameter int unsigned BusSizeECC = BUS_SIZE,

View file

@ -17,10 +17,10 @@
`include "prim_assert.sv" `include "prim_assert.sv"
`include "dv_fcov_macros.svh" `include "dv_fcov_macros.svh"
module ibex_id_stage #( module cve2_id_stage #(
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast, parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast,
parameter ibex_pkg::rv32b_e RV32B = ibex_pkg::RV32BNone, parameter cve2_pkg::rv32b_e RV32B = cve2_pkg::RV32BNone,
parameter bit DataIndTiming = 1'b0, parameter bit DataIndTiming = 1'b0,
parameter bit BranchTargetALU = 0, parameter bit BranchTargetALU = 0,
parameter bit WritebackStage = 0, parameter bit WritebackStage = 0,
@ -50,11 +50,11 @@ module ibex_id_stage #(
// IF and ID stage signals // IF and ID stage signals
output logic pc_set_o, output logic pc_set_o,
output ibex_pkg::pc_sel_e pc_mux_o, output cve2_pkg::pc_sel_e pc_mux_o,
output logic nt_branch_mispredict_o, output logic nt_branch_mispredict_o,
output logic [31:0] nt_branch_addr_o, output logic [31:0] nt_branch_addr_o,
output ibex_pkg::exc_pc_sel_e exc_pc_mux_o, output cve2_pkg::exc_pc_sel_e exc_pc_mux_o,
output ibex_pkg::exc_cause_e exc_cause_o, output cve2_pkg::exc_cause_e exc_cause_o,
input logic illegal_c_insn_i, input logic illegal_c_insn_i,
input logic instr_fetch_err_i, input logic instr_fetch_err_i,
@ -66,7 +66,7 @@ module ibex_id_stage #(
input logic ex_valid_i, // EX stage has valid output input logic ex_valid_i, // EX stage has valid output
input logic lsu_resp_valid_i, // LSU has valid output, or is done input logic lsu_resp_valid_i, // LSU has valid output, or is done
// ALU // ALU
output ibex_pkg::alu_op_e alu_operator_ex_o, output cve2_pkg::alu_op_e alu_operator_ex_o,
output logic [31:0] alu_operand_a_ex_o, output logic [31:0] alu_operand_a_ex_o,
output logic [31:0] alu_operand_b_ex_o, output logic [31:0] alu_operand_b_ex_o,
@ -84,7 +84,7 @@ module ibex_id_stage #(
output logic div_en_ex_o, output logic div_en_ex_o,
output logic mult_sel_ex_o, output logic mult_sel_ex_o,
output logic div_sel_ex_o, output logic div_sel_ex_o,
output ibex_pkg::md_op_e multdiv_operator_ex_o, output cve2_pkg::md_op_e multdiv_operator_ex_o,
output logic [1:0] multdiv_signed_mode_ex_o, output logic [1:0] multdiv_signed_mode_ex_o,
output logic [31:0] multdiv_operand_a_ex_o, output logic [31:0] multdiv_operand_a_ex_o,
output logic [31:0] multdiv_operand_b_ex_o, output logic [31:0] multdiv_operand_b_ex_o,
@ -92,7 +92,7 @@ module ibex_id_stage #(
// CSR // CSR
output logic csr_access_o, output logic csr_access_o,
output ibex_pkg::csr_op_e csr_op_o, output cve2_pkg::csr_op_e csr_op_o,
output logic csr_op_en_o, output logic csr_op_en_o,
output logic csr_save_if_o, output logic csr_save_if_o,
output logic csr_save_id_o, output logic csr_save_id_o,
@ -101,7 +101,7 @@ module ibex_id_stage #(
output logic csr_restore_dret_id_o, output logic csr_restore_dret_id_o,
output logic csr_save_cause_o, output logic csr_save_cause_o,
output logic [31:0] csr_mtval_o, output logic [31:0] csr_mtval_o,
input ibex_pkg::priv_lvl_e priv_mode_i, input cve2_pkg::priv_lvl_e priv_mode_i,
input logic csr_mstatus_tw_i, input logic csr_mstatus_tw_i,
input logic illegal_csr_insn_i, input logic illegal_csr_insn_i,
input logic data_ind_timing_i, input logic data_ind_timing_i,
@ -124,7 +124,7 @@ module ibex_id_stage #(
// Interrupt signals // Interrupt signals
input logic csr_mstatus_mie_i, input logic csr_mstatus_mie_i,
input logic irq_pending_i, input logic irq_pending_i,
input ibex_pkg::irqs_t irqs_i, input cve2_pkg::irqs_t irqs_i,
input logic irq_nm_i, input logic irq_nm_i,
output logic nmi_mode_o, output logic nmi_mode_o,
@ -133,7 +133,7 @@ module ibex_id_stage #(
// Debug Signal // Debug Signal
output logic debug_mode_o, output logic debug_mode_o,
output ibex_pkg::dbg_cause_e debug_cause_o, output cve2_pkg::dbg_cause_e debug_cause_o,
output logic debug_csr_save_o, output logic debug_csr_save_o,
input logic debug_req_i, input logic debug_req_i,
input logic debug_single_step_i, input logic debug_single_step_i,
@ -166,7 +166,7 @@ module ibex_id_stage #(
input logic rf_write_wb_i, input logic rf_write_wb_i,
output logic en_wb_o, output logic en_wb_o,
output ibex_pkg::wb_instr_type_e instr_type_wb_o, output cve2_pkg::wb_instr_type_e instr_type_wb_o,
output logic instr_perf_count_id_o, output logic instr_perf_count_id_o,
input logic ready_wb_i, input logic ready_wb_i,
input logic outstanding_load_wb_i, input logic outstanding_load_wb_i,
@ -183,7 +183,7 @@ module ibex_id_stage #(
output logic instr_id_done_o output logic instr_id_done_o
); );
import ibex_pkg::*; import cve2_pkg::*;
// Decoder/Controller, ID stage internal signals // Decoder/Controller, ID stage internal signals
logic illegal_insn_dec; logic illegal_insn_dec;
@ -419,7 +419,7 @@ module ibex_id_stage #(
// Decoder // // Decoder //
///////////// /////////////
ibex_decoder #( cve2_decoder #(
.RV32E (RV32E), .RV32E (RV32E),
.RV32M (RV32M), .RV32M (RV32M),
.RV32B (RV32B), .RV32B (RV32B),
@ -529,7 +529,7 @@ module ibex_id_stage #(
assign illegal_insn_o = instr_valid_i & (illegal_insn_dec | illegal_csr_insn_i); assign illegal_insn_o = instr_valid_i & (illegal_insn_dec | illegal_csr_insn_i);
ibex_controller #( cve2_controller #(
.WritebackStage (WritebackStage), .WritebackStage (WritebackStage),
.BranchPredictor(BranchPredictor) .BranchPredictor(BranchPredictor)
) controller_i ( ) controller_i (

View file

@ -12,7 +12,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_if_stage import ibex_pkg::*; #( module cve2_if_stage import cve2_pkg::*; #(
parameter int unsigned DmHaltAddr = 32'h1A110800, parameter int unsigned DmHaltAddr = 32'h1A110800,
parameter int unsigned DmExceptionAddr = 32'h1A110808, parameter int unsigned DmExceptionAddr = 32'h1A110808,
parameter bit DummyInstructions = 1'b0, parameter bit DummyInstructions = 1'b0,
@ -159,7 +159,7 @@ module ibex_if_stage import ibex_pkg::*; #(
logic predict_branch_taken; logic predict_branch_taken;
logic [31:0] predict_branch_pc; logic [31:0] predict_branch_pc;
ibex_pkg::pc_sel_e pc_mux_internal; cve2_pkg::pc_sel_e pc_mux_internal;
logic [7:0] unused_boot_addr; logic [7:0] unused_boot_addr;
logic [7:0] unused_csr_mtvec; logic [7:0] unused_csr_mtvec;
@ -207,7 +207,7 @@ module ibex_if_stage import ibex_pkg::*; #(
if (ICache) begin : gen_icache if (ICache) begin : gen_icache
// Full I-Cache option // Full I-Cache option
ibex_icache #( cve2_icache #(
.ICacheECC (ICacheECC), .ICacheECC (ICacheECC),
.ResetAll (ResetAll), .ResetAll (ResetAll),
.BusSizeECC (BusSizeECC), .BusSizeECC (BusSizeECC),
@ -257,7 +257,7 @@ module ibex_if_stage import ibex_pkg::*; #(
); );
end else begin : gen_prefetch_buffer end else begin : gen_prefetch_buffer
// prefetch buffer, caches a fixed number of instructions // prefetch buffer, caches a fixed number of instructions
ibex_prefetch_buffer #( cve2_prefetch_buffer #(
.ResetAll (ResetAll) .ResetAll (ResetAll)
) prefetch_buffer_i ( ) prefetch_buffer_i (
.clk_i ( clk_i ), .clk_i ( clk_i ),
@ -347,7 +347,7 @@ module ibex_if_stage import ibex_pkg::*; #(
// //
// since it does not matter where we decompress instructions, we do it here // since it does not matter where we decompress instructions, we do it here
// to ease timing closure // to ease timing closure
ibex_compressed_decoder compressed_decoder_i ( cve2_compressed_decoder compressed_decoder_i (
.clk_i (clk_i), .clk_i (clk_i),
.rst_ni (rst_ni), .rst_ni (rst_ni),
.valid_i (fetch_valid & ~fetch_err), .valid_i (fetch_valid & ~fetch_err),
@ -363,7 +363,7 @@ module ibex_if_stage import ibex_pkg::*; #(
logic insert_dummy_instr; logic insert_dummy_instr;
logic [31:0] dummy_instr_data; logic [31:0] dummy_instr_data;
ibex_dummy_instr #( cve2_dummy_instr #(
.RndCnstLfsrSeed (RndCnstLfsrSeed), .RndCnstLfsrSeed (RndCnstLfsrSeed),
.RndCnstLfsrPerm (RndCnstLfsrPerm) .RndCnstLfsrPerm (RndCnstLfsrPerm)
) dummy_instr_i ( ) dummy_instr_i (
@ -584,7 +584,7 @@ module ibex_if_stage import ibex_pkg::*; #(
end end
end end
ibex_branch_predict branch_predict_i ( cve2_branch_predict branch_predict_i (
.clk_i (clk_i), .clk_i (clk_i),
.rst_ni (rst_ni), .rst_ni (rst_ni),
.fetch_rdata_i(fetch_rdata), .fetch_rdata_i(fetch_rdata),

View file

@ -14,7 +14,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
`include "dv_fcov_macros.svh" `include "dv_fcov_macros.svh"
module ibex_load_store_unit module cve2_load_store_unit
( (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,

View file

@ -8,7 +8,7 @@
// LockstepOffset cycles. // LockstepOffset cycles.
// SEC_CM: LOGIC.SHADOW // SEC_CM: LOGIC.SHADOW
module ibex_lockstep import ibex_pkg::*; #( module cve2_lockstep import cve2_pkg::*; #(
parameter int unsigned LockstepOffset = 2, parameter int unsigned LockstepOffset = 2,
parameter bit PMPEnable = 1'b0, parameter bit PMPEnable = 1'b0,
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
@ -351,7 +351,7 @@ module ibex_lockstep import ibex_pkg::*; #(
logic shadow_alert_minor, shadow_alert_major; logic shadow_alert_minor, shadow_alert_major;
ibex_core #( cve2_core #(
.PMPEnable ( PMPEnable ), .PMPEnable ( PMPEnable ),
.PMPGranularity ( PMPGranularity ), .PMPGranularity ( PMPGranularity ),
.PMPNumRegions ( PMPNumRegions ), .PMPNumRegions ( PMPNumRegions ),

View file

@ -14,8 +14,8 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_multdiv_fast #( module cve2_multdiv_fast #(
parameter ibex_pkg::rv32m_e RV32M = ibex_pkg::RV32MFast parameter cve2_pkg::rv32m_e RV32M = cve2_pkg::RV32MFast
) ( ) (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
@ -23,7 +23,7 @@ module ibex_multdiv_fast #(
input logic div_en_i, // dynamic enable signal, for FSM control input logic div_en_i, // dynamic enable signal, for FSM control
input logic mult_sel_i, // static decoder output, for data muxes input logic mult_sel_i, // static decoder output, for data muxes
input logic div_sel_i, // static decoder output, for data muxes input logic div_sel_i, // static decoder output, for data muxes
input ibex_pkg::md_op_e operator_i, input cve2_pkg::md_op_e operator_i,
input logic [1:0] signed_mode_i, input logic [1:0] signed_mode_i,
input logic [31:0] op_a_i, input logic [31:0] op_a_i,
input logic [31:0] op_b_i, input logic [31:0] op_b_i,
@ -45,7 +45,7 @@ module ibex_multdiv_fast #(
output logic valid_o output logic valid_o
); );
import ibex_pkg::*; import cve2_pkg::*;
// Both multiplier variants // Both multiplier variants
logic signed [34:0] mac_res_signed; logic signed [34:0] mac_res_signed;
@ -530,4 +530,4 @@ module ibex_multdiv_fast #(
`endif `endif
`endif `endif
endmodule // ibex_mult endmodule // cve2_mult

View file

@ -11,7 +11,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
module ibex_multdiv_slow module cve2_multdiv_slow
( (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
@ -19,7 +19,7 @@ module ibex_multdiv_slow
input logic div_en_i, // dynamic enable signal, for FSM control input logic div_en_i, // dynamic enable signal, for FSM control
input logic mult_sel_i, // static decoder output, for data muxes input logic mult_sel_i, // static decoder output, for data muxes
input logic div_sel_i, // static decoder output, for data muxes input logic div_sel_i, // static decoder output, for data muxes
input ibex_pkg::md_op_e operator_i, input cve2_pkg::md_op_e operator_i,
input logic [1:0] signed_mode_i, input logic [1:0] signed_mode_i,
input logic [31:0] op_a_i, input logic [31:0] op_a_i,
input logic [31:0] op_b_i, input logic [31:0] op_b_i,
@ -42,7 +42,7 @@ module ibex_multdiv_slow
output logic valid_o output logic valid_o
); );
import ibex_pkg::*; import cve2_pkg::*;
typedef enum logic [2:0] { typedef enum logic [2:0] {
MD_IDLE, MD_ABS_A, MD_ABS_B, MD_COMP, MD_LAST, MD_CHANGE_SIGN, MD_FINISH MD_IDLE, MD_ABS_A, MD_ABS_B, MD_COMP, MD_LAST, MD_CHANGE_SIGN, MD_FINISH

View file

@ -6,7 +6,7 @@
/** /**
* Package with constants used by Ibex * Package with constants used by Ibex
*/ */
package ibex_pkg; package cve2_pkg;
//////////////// ////////////////
// IO Structs // // IO Structs //
@ -614,7 +614,7 @@ package ibex_pkg;
// Note that if adjusting these parameters it is assumed the bottom bit is set for On and unset // Note that if adjusting these parameters it is assumed the bottom bit is set for On and unset
// for Off. This allows the use of FetchEnableOn/FetchEnableOff to work for both secure and // for Off. This allows the use of FetchEnableOn/FetchEnableOff to work for both secure and
// non-secure Ibex. If this assumption is broken the RTL that uses the fetch_enable signal within // non-secure Ibex. If this assumption is broken the RTL that uses the fetch_enable signal within
// `ibex_core` may need adjusting. // `cve2_core` may need adjusting.
parameter fetch_enable_t FetchEnableOn = 4'b1001; parameter fetch_enable_t FetchEnableOn = 4'b1001;
parameter fetch_enable_t FetchEnableOff = 4'b0110; parameter fetch_enable_t FetchEnableOff = 4'b0110;
endpackage endpackage

View file

@ -2,7 +2,7 @@
// Licensed under the Apache License, Version 2.0, see LICENSE for details. // Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
module ibex_pmp #( module cve2_pmp #(
// Granularity of NAPOT access, // Granularity of NAPOT access,
// 0 = No restriction, 1 = 8 byte, 2 = 16 byte, 3 = 32 byte, etc. // 0 = No restriction, 1 = 8 byte, 2 = 16 byte, 3 = 32 byte, etc.
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
@ -16,19 +16,19 @@ module ibex_pmp #(
input logic rst_ni, input logic rst_ni,
// Interface to CSRs // Interface to CSRs
input ibex_pkg::pmp_cfg_t csr_pmp_cfg_i [PMPNumRegions], input cve2_pkg::pmp_cfg_t csr_pmp_cfg_i [PMPNumRegions],
input logic [33:0] csr_pmp_addr_i [PMPNumRegions], input logic [33:0] csr_pmp_addr_i [PMPNumRegions],
input ibex_pkg::pmp_mseccfg_t csr_pmp_mseccfg_i, input cve2_pkg::pmp_mseccfg_t csr_pmp_mseccfg_i,
input ibex_pkg::priv_lvl_e priv_mode_i [PMPNumChan], input cve2_pkg::priv_lvl_e priv_mode_i [PMPNumChan],
// Access checking channels // Access checking channels
input logic [33:0] pmp_req_addr_i [PMPNumChan], input logic [33:0] pmp_req_addr_i [PMPNumChan],
input ibex_pkg::pmp_req_e pmp_req_type_i [PMPNumChan], input cve2_pkg::pmp_req_e pmp_req_type_i [PMPNumChan],
output logic pmp_req_err_o [PMPNumChan] output logic pmp_req_err_o [PMPNumChan]
); );
import ibex_pkg::*; import cve2_pkg::*;
// Access Checking Signals // Access Checking Signals
logic [33:0] region_start_addr [PMPNumRegions]; logic [33:0] region_start_addr [PMPNumRegions];
@ -177,7 +177,7 @@ module ibex_pmp #(
assign pmp_req_err_o[c] = access_fault[c]; assign pmp_req_err_o[c] = access_fault[c];
end end
// RLB, rule locking bypass, is only relevant to ibex_cs_registers which controls writes to the // RLB, rule locking bypass, is only relevant to cve2_cs_registers which controls writes to the
// PMP CSRs. Tie to unused signal here to prevent lint warnings. // PMP CSRs. Tie to unused signal here to prevent lint warnings.
logic unused_csr_pmp_mseccfg_rlb; logic unused_csr_pmp_mseccfg_rlb;
assign unused_csr_pmp_mseccfg_rlb = csr_pmp_mseccfg_i.rlb; assign unused_csr_pmp_mseccfg_rlb = csr_pmp_mseccfg_i.rlb;

View file

@ -9,7 +9,7 @@
* Prefetch Buffer that caches instructions. This cuts overly long critical * Prefetch Buffer that caches instructions. This cuts overly long critical
* paths to the instruction cache. * paths to the instruction cache.
*/ */
module ibex_prefetch_buffer #( module cve2_prefetch_buffer #(
parameter bit ResetAll = 1'b0 parameter bit ResetAll = 1'b0
) ( ) (
input logic clk_i, input logic clk_i,
@ -94,7 +94,7 @@ module ibex_prefetch_buffer #(
// Overlay the fifo fill state with the outstanding requests to see if there is space. // Overlay the fifo fill state with the outstanding requests to see if there is space.
assign fifo_ready = ~&(fifo_busy | rdata_outstanding_rev); assign fifo_ready = ~&(fifo_busy | rdata_outstanding_rev);
ibex_fetch_fifo #( cve2_fetch_fifo #(
.NUM_REQS (NUM_REQS), .NUM_REQS (NUM_REQS),
.ResetAll (ResetAll) .ResetAll (ResetAll)
) fifo_i ( ) fifo_i (

View file

@ -10,7 +10,7 @@
* This register file is based on flip flops. Use this register file when * This register file is based on flip flops. Use this register file when
* targeting FPGA synthesis or Verilator simulation. * targeting FPGA synthesis or Verilator simulation.
*/ */
module ibex_register_file_ff #( module cve2_register_file_ff #(
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter int unsigned DataWidth = 32, parameter int unsigned DataWidth = 32,
parameter bit DummyInstructions = 0, parameter bit DummyInstructions = 0,

View file

@ -11,7 +11,7 @@
* This register file is designed to make FPGA synthesis tools infer RAM primitives. For Xilinx * This register file is designed to make FPGA synthesis tools infer RAM primitives. For Xilinx
* FPGA architectures, it will produce RAM32M primitives. Other vendors have not yet been tested. * FPGA architectures, it will produce RAM32M primitives. Other vendors have not yet been tested.
*/ */
module ibex_register_file_fpga #( module cve2_register_file_fpga #(
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter int unsigned DataWidth = 32, parameter int unsigned DataWidth = 32,
parameter bit DummyInstructions = 0, parameter bit DummyInstructions = 0,

View file

@ -11,7 +11,7 @@
* based RF. It requires a target technology-specific clock gating cell. Use this * based RF. It requires a target technology-specific clock gating cell. Use this
* register file when targeting ASIC synthesis or event-based simulators. * register file when targeting ASIC synthesis or event-based simulators.
*/ */
module ibex_register_file_latch #( module cve2_register_file_latch #(
parameter bit RV32E = 0, parameter bit RV32E = 0,
parameter int unsigned DataWidth = 32, parameter int unsigned DataWidth = 32,
parameter bit DummyInstructions = 0, parameter bit DummyInstructions = 0,

View file

@ -12,7 +12,7 @@
/** /**
* Top level module of the ibex RISC-V core * Top level module of the ibex RISC-V core
*/ */
module ibex_top import ibex_pkg::*; #( module cve2_top import cve2_pkg::*; #(
parameter bit PMPEnable = 1'b0, parameter bit PMPEnable = 1'b0,
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
parameter int unsigned PMPNumRegions = 4, parameter int unsigned PMPNumRegions = 4,
@ -226,7 +226,7 @@ module ibex_top import ibex_pkg::*; #(
.out_o(rf_rdata_b_ecc_buf) .out_o(rf_rdata_b_ecc_buf)
); );
ibex_core #( cve2_core #(
.PMPEnable (PMPEnable), .PMPEnable (PMPEnable),
.PMPGranularity (PMPGranularity), .PMPGranularity (PMPGranularity),
.PMPNumRegions (PMPNumRegions), .PMPNumRegions (PMPNumRegions),
@ -254,7 +254,7 @@ module ibex_top import ibex_pkg::*; #(
.RegFileDataWidth (RegFileDataWidth), .RegFileDataWidth (RegFileDataWidth),
.DmHaltAddr (DmHaltAddr), .DmHaltAddr (DmHaltAddr),
.DmExceptionAddr (DmExceptionAddr) .DmExceptionAddr (DmExceptionAddr)
) u_ibex_core ( ) u_cve2_core (
.clk_i(clk), .clk_i(clk),
.rst_ni, .rst_ni,
@ -352,7 +352,7 @@ module ibex_top import ibex_pkg::*; #(
///////////////////////////////// /////////////////////////////////
if (RegFile == RegFileFF) begin : gen_regfile_ff if (RegFile == RegFileFF) begin : gen_regfile_ff
ibex_register_file_ff #( cve2_register_file_ff #(
.RV32E (RV32E), .RV32E (RV32E),
.DataWidth (RegFileDataWidth), .DataWidth (RegFileDataWidth),
.DummyInstructions(DummyInstructions), .DummyInstructions(DummyInstructions),
@ -373,7 +373,7 @@ module ibex_top import ibex_pkg::*; #(
.we_a_i (rf_we_wb) .we_a_i (rf_we_wb)
); );
end else if (RegFile == RegFileFPGA) begin : gen_regfile_fpga end else if (RegFile == RegFileFPGA) begin : gen_regfile_fpga
ibex_register_file_fpga #( cve2_register_file_fpga #(
.RV32E (RV32E), .RV32E (RV32E),
.DataWidth (RegFileDataWidth), .DataWidth (RegFileDataWidth),
.DummyInstructions(DummyInstructions), .DummyInstructions(DummyInstructions),
@ -394,7 +394,7 @@ module ibex_top import ibex_pkg::*; #(
.we_a_i (rf_we_wb) .we_a_i (rf_we_wb)
); );
end else if (RegFile == RegFileLatch) begin : gen_regfile_latch end else if (RegFile == RegFileLatch) begin : gen_regfile_latch
ibex_register_file_latch #( cve2_register_file_latch #(
.RV32E (RV32E), .RV32E (RV32E),
.DataWidth (RegFileDataWidth), .DataWidth (RegFileDataWidth),
.DummyInstructions(DummyInstructions), .DummyInstructions(DummyInstructions),
@ -806,7 +806,7 @@ module ibex_top import ibex_pkg::*; #(
logic lockstep_alert_minor_local, lockstep_alert_major_internal_local; logic lockstep_alert_minor_local, lockstep_alert_major_internal_local;
logic lockstep_alert_major_bus_local; logic lockstep_alert_major_bus_local;
ibex_lockstep #( cve2_lockstep #(
.PMPEnable (PMPEnable), .PMPEnable (PMPEnable),
.PMPGranularity (PMPGranularity), .PMPGranularity (PMPGranularity),
.PMPNumRegions (PMPNumRegions), .PMPNumRegions (PMPNumRegions),
@ -834,7 +834,7 @@ module ibex_top import ibex_pkg::*; #(
.RegFileDataWidth (RegFileDataWidth), .RegFileDataWidth (RegFileDataWidth),
.DmHaltAddr (DmHaltAddr), .DmHaltAddr (DmHaltAddr),
.DmExceptionAddr (DmExceptionAddr) .DmExceptionAddr (DmExceptionAddr)
) u_ibex_lockstep ( ) u_cve2_lockstep (
.clk_i (clk), .clk_i (clk),
.rst_ni (rst_ni), .rst_ni (rst_ni),

View file

@ -6,7 +6,7 @@
* Top level module of the ibex RISC-V core with tracing enabled * Top level module of the ibex RISC-V core with tracing enabled
*/ */
module ibex_top_tracing import ibex_pkg::*; #( module cve2_top_tracing import cve2_pkg::*; #(
parameter bit PMPEnable = 1'b0, parameter bit PMPEnable = 1'b0,
parameter int unsigned PMPGranularity = 0, parameter int unsigned PMPGranularity = 0,
parameter int unsigned PMPNumRegions = 4, parameter int unsigned PMPNumRegions = 4,
@ -91,7 +91,7 @@ module ibex_top_tracing import ibex_pkg::*; #(
); );
// ibex_tracer relies on the signals from the RISC-V Formal Interface // cve2_tracer relies on the signals from the RISC-V Formal Interface
`ifndef RVFI `ifndef RVFI
$fatal("Fatal error: RVFI needs to be defined globally."); $fatal("Fatal error: RVFI needs to be defined globally.");
`endif `endif
@ -136,7 +136,7 @@ module ibex_top_tracing import ibex_pkg::*; #(
assign unused_rvfi_ext_debug_req = rvfi_ext_debug_req; assign unused_rvfi_ext_debug_req = rvfi_ext_debug_req;
assign unused_rvfi_ext_mcycle = rvfi_ext_mcycle; assign unused_rvfi_ext_mcycle = rvfi_ext_mcycle;
ibex_top #( cve2_top #(
.PMPEnable ( PMPEnable ), .PMPEnable ( PMPEnable ),
.PMPGranularity ( PMPGranularity ), .PMPGranularity ( PMPGranularity ),
.PMPNumRegions ( PMPNumRegions ), .PMPNumRegions ( PMPNumRegions ),
@ -159,7 +159,7 @@ module ibex_top_tracing import ibex_pkg::*; #(
.RndCnstLfsrPerm ( RndCnstLfsrPerm ), .RndCnstLfsrPerm ( RndCnstLfsrPerm ),
.DmHaltAddr ( DmHaltAddr ), .DmHaltAddr ( DmHaltAddr ),
.DmExceptionAddr ( DmExceptionAddr ) .DmExceptionAddr ( DmExceptionAddr )
) u_ibex_top ( ) u_cve2_top (
.clk_i, .clk_i,
.rst_ni, .rst_ni,
@ -240,8 +240,8 @@ module ibex_top_tracing import ibex_pkg::*; #(
.core_sleep_o .core_sleep_o
); );
ibex_tracer cve2_tracer
u_ibex_tracer ( u_cve2_tracer (
.clk_i, .clk_i,
.rst_ni, .rst_ni,

View file

@ -12,12 +12,12 @@
* All traced instructions are written to a log file. By default, the log file is named * All traced instructions are written to a log file. By default, the log file is named
* trace_core_<HARTID>.log, with <HARTID> being the 8 digit hart ID of the core being traced. * trace_core_<HARTID>.log, with <HARTID> being the 8 digit hart ID of the core being traced.
* *
* The file name base, defaulting to "trace_core" can be set using the "ibex_tracer_file_base" * The file name base, defaulting to "trace_core" can be set using the "cve2_tracer_file_base"
* plusarg passed to the simulation, e.g. "+ibex_tracer_file_base=ibex_my_trace". The exact syntax * plusarg passed to the simulation, e.g. "+cve2_tracer_file_base=cve2_my_trace". The exact syntax
* of passing plusargs to a simulation depends on the simulator. * of passing plusargs to a simulation depends on the simulator.
* *
* The creation of the instruction trace is enabled by default but can be disabled for a simulation. * The creation of the instruction trace is enabled by default but can be disabled for a simulation.
* This behaviour is controlled by the plusarg "ibex_tracer_enable". Use "ibex_tracer_enable=0" to * This behaviour is controlled by the plusarg "cve2_tracer_enable". Use "cve2_tracer_enable=0" to
* disable the tracer. * disable the tracer.
* *
* The trace contains six columns, separated by tabs: * The trace contains six columns, separated by tabs:
@ -34,7 +34,7 @@
* to the one produced by objdump. This simplifies the correlation between the static program * to the one produced by objdump. This simplifies the correlation between the static program
* information from the objdump-generated disassembly, and the runtime information from this tracer. * information from the objdump-generated disassembly, and the runtime information from this tracer.
*/ */
module ibex_tracer ( module cve2_tracer (
input logic clk_i, input logic clk_i,
input logic rst_ni, input logic rst_ni,
@ -79,7 +79,7 @@ module ibex_tracer (
logic [ 1:0] unused_rvfi_mode = rvfi_mode; logic [ 1:0] unused_rvfi_mode = rvfi_mode;
logic [ 1:0] unused_rvfi_ixl = rvfi_ixl; logic [ 1:0] unused_rvfi_ixl = rvfi_ixl;
import ibex_tracer_pkg::*; import cve2_tracer_pkg::*;
int file_handle; int file_handle;
string file_name; string file_name;
@ -98,7 +98,7 @@ module ibex_tracer (
logic trace_log_enable; logic trace_log_enable;
initial begin initial begin
if ($value$plusargs("ibex_tracer_enable=%b", trace_log_enable)) begin if ($value$plusargs("cve2_tracer_enable=%b", trace_log_enable)) begin
if (trace_log_enable == 1'b0) begin if (trace_log_enable == 1'b0) begin
$display("%m: Instruction trace disabled."); $display("%m: Instruction trace disabled.");
end end
@ -112,7 +112,7 @@ module ibex_tracer (
if (file_handle == 32'h0) begin if (file_handle == 32'h0) begin
string file_name_base = "trace_core"; string file_name_base = "trace_core";
void'($value$plusargs("ibex_tracer_file_base=%s", file_name_base)); void'($value$plusargs("cve2_tracer_file_base=%s", file_name_base));
$sformat(file_name, "%s_%h.log", file_name_base, hart_id_i); $sformat(file_name, "%s_%h.log", file_name_base, hart_id_i);
$display("%m: Writing execution trace to %s", file_name); $display("%m: Writing execution trace to %s", file_name);

View file

@ -3,8 +3,8 @@
// Licensed under the Apache License, Version 2.0, see LICENSE for details. // Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
package ibex_tracer_pkg; package cve2_tracer_pkg;
import ibex_pkg::*; import cve2_pkg::*;
parameter logic [1:0] OPCODE_C0 = 2'b00; parameter logic [1:0] OPCODE_C0 = 2'b00;
parameter logic [1:0] OPCODE_C1 = 2'b01; parameter logic [1:0] OPCODE_C1 = 2'b01;

View file

@ -14,7 +14,7 @@
`include "prim_assert.sv" `include "prim_assert.sv"
`include "dv_fcov_macros.svh" `include "dv_fcov_macros.svh"
module ibex_wb_stage #( module cve2_wb_stage #(
parameter bit ResetAll = 1'b0, parameter bit ResetAll = 1'b0,
parameter bit WritebackStage = 1'b0 parameter bit WritebackStage = 1'b0
) ( ) (
@ -22,7 +22,7 @@ module ibex_wb_stage #(
input logic rst_ni, input logic rst_ni,
input logic en_wb_i, input logic en_wb_i,
input ibex_pkg::wb_instr_type_e instr_type_wb_i, input cve2_pkg::wb_instr_type_e instr_type_wb_i,
input logic [31:0] pc_id_i, input logic [31:0] pc_id_i,
input logic instr_is_compressed_id_i, input logic instr_is_compressed_id_i,
input logic instr_perf_count_id_i, input logic instr_perf_count_id_i,
@ -56,7 +56,7 @@ module ibex_wb_stage #(
output logic instr_done_wb_o output logic instr_done_wb_o
); );
import ibex_pkg::*; import cve2_pkg::*;
// 0 == RF write from ID // 0 == RF write from ID
// 1 == RF write from LSU // 1 == RF write from LSU

View file

@ -1,17 +0,0 @@
ibex_pkg.sv
ibex_alu.sv
ibex_compressed_decoder.sv
ibex_controller.sv
ibex_counter.sv
ibex_cs_registers.sv
ibex_decoder.sv
ibex_ex_block.sv
ibex_id_stage.sv
ibex_if_stage.sv
ibex_load_store_unit.sv
ibex_multdiv_slow.sv
ibex_multdiv_fast.sv
ibex_prefetch_buffer.sv
ibex_fetch_fifo.sv
ibex_register_file_ff.sv
ibex_core.sv

View file

@ -2,7 +2,7 @@ CAPI=2:
# Copyright lowRISC contributors. # Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details. # Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
name: "lowrisc:ibex:fpga_xilinx_shared" name: "lowrisc:cve2:fpga_xilinx_shared"
description: "Collection of useful RTL for Xilinx based examples" description: "Collection of useful RTL for Xilinx based examples"
filesets: filesets:
files_sv: files_sv:

Some files were not shown because too many files have changed in this diff Show more