mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-06-27 17:00:57 -04:00
This PR introduces a new RAW hazard detection mechanism to eliminate WAW hazards in CVA6 issue stage. It first checks for hazards in all scoreboard entries in parallel. Then it filters found hazards before vs after the current issue pointer. It then finds the index of the last hazard before (resp. after) the issue pointer. Finally, it gives precedence to a hazard before the issue pointer over the one after the issue pointer. --------- Co-authored-by: Junheng Zheng <junheng.zheng@thalesgroup.com> Co-authored-by: JeanRochCoulon <jean-roch.coulon@thalesgroup.com>
202 lines
9 KiB
Text
202 lines
9 KiB
Text
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright 2021 OpenHW Group
|
|
//
|
|
// Licensed under the Solderpad Hardware Licence, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://solderpad.org/licenses/
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.0
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Manifest for the CVA6 CORE RTL model.
|
|
// - This is a CORE-ONLY manifest.
|
|
// - Relevent synthesis and simulation scripts/Makefiles must set the shell
|
|
// ENV variable CVA6_REPO_DIR.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//FPGA memories
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/fpga-support/rtl/SyncDpRam.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/fpga-support/rtl/AsyncDpRam.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/fpga-support/rtl/AsyncThreePortRam.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/fpga-support/rtl/SyncThreePortRam.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/fpga-support/rtl/SyncDpRam_ind_r_w.sv
|
|
|
|
+incdir+${CVA6_REPO_DIR}/core/include/
|
|
+incdir+${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/include/
|
|
+incdir+${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/
|
|
+incdir+${CVA6_REPO_DIR}/vendor/pulp-platform/axi/include/
|
|
+incdir+${CVA6_REPO_DIR}/common/local/util/
|
|
|
|
// Floating point unit
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_pkg.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_cast_multi.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_classifier.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_divsqrt_multi.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_fma_multi.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_fma.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_noncomp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_opgroup_block.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_opgroup_fmt_slice.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_opgroup_multifmt_slice.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_rounding.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpnew_top.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/defs_div_sqrt_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/control_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/div_sqrt_top_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/iteration_div_sqrt_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/norm_div_sqrt_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/nrbd_nrsc_mvp.sv
|
|
${CVA6_REPO_DIR}/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/preprocess_mvp.sv
|
|
|
|
${CVA6_REPO_DIR}/core/include/config_pkg.sv
|
|
${CVA6_REPO_DIR}/core/include/${TARGET_CFG}_config_pkg.sv
|
|
${CVA6_REPO_DIR}/core/include/riscv_pkg.sv
|
|
// Note: depends on fpnew_pkg, above
|
|
${CVA6_REPO_DIR}/core/include/ariane_pkg.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/axi/src/axi_pkg.sv
|
|
|
|
// Packages
|
|
${CVA6_REPO_DIR}/core/include/wt_cache_pkg.sv
|
|
${CVA6_REPO_DIR}/core/include/std_cache_pkg.sv
|
|
${CVA6_REPO_DIR}/core/include/instr_tracer_pkg.sv
|
|
${CVA6_REPO_DIR}/core/include/build_config_pkg.sv
|
|
|
|
//CVXIF
|
|
${CVA6_REPO_DIR}/core/cvxif_compressed_if_driver.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_issue_register_commit_if_driver.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_example/include/cvxif_instr_pkg.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_fu.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_example/cvxif_example_coprocessor.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_example/instr_decoder.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_example/compressed_instr_decoder.sv
|
|
${CVA6_REPO_DIR}/core/cvxif_example/copro_alu.sv
|
|
|
|
// Common Cells
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/cf_math_pkg.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/fifo_v3.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/lfsr.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/lfsr_8bit.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/stream_arbiter.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/stream_arbiter_flushable.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/stream_mux.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/stream_demux.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/lzc.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/rr_arb_tree.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/shift_reg.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/unread.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/popcount.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/exp_backoff.sv
|
|
|
|
// Common Cells for example coprocessor
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/counter.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/common_cells/src/delta_counter.sv
|
|
|
|
// Top-level source files (not necessarily instantiated at the top of the cva6).
|
|
${CVA6_REPO_DIR}/core/cva6.sv
|
|
${CVA6_REPO_DIR}/core/cva6_rvfi_probes.sv
|
|
${CVA6_REPO_DIR}/core/alu.sv
|
|
// Note: depends on fpnew_pkg, above
|
|
${CVA6_REPO_DIR}/core/fpu_wrap.sv
|
|
${CVA6_REPO_DIR}/core/branch_unit.sv
|
|
${CVA6_REPO_DIR}/core/compressed_decoder.sv
|
|
${CVA6_REPO_DIR}/core/macro_decoder.sv
|
|
${CVA6_REPO_DIR}/core/controller.sv
|
|
${CVA6_REPO_DIR}/core/zcmt_decoder.sv
|
|
${CVA6_REPO_DIR}/core/csr_buffer.sv
|
|
${CVA6_REPO_DIR}/core/csr_regfile.sv
|
|
${CVA6_REPO_DIR}/core/decoder.sv
|
|
${CVA6_REPO_DIR}/core/ex_stage.sv
|
|
${CVA6_REPO_DIR}/core/instr_realign.sv
|
|
${CVA6_REPO_DIR}/core/id_stage.sv
|
|
${CVA6_REPO_DIR}/core/issue_read_operands.sv
|
|
${CVA6_REPO_DIR}/core/issue_stage.sv
|
|
${CVA6_REPO_DIR}/core/load_unit.sv
|
|
${CVA6_REPO_DIR}/core/load_store_unit.sv
|
|
${CVA6_REPO_DIR}/core/lsu_bypass.sv
|
|
${CVA6_REPO_DIR}/core/mult.sv
|
|
${CVA6_REPO_DIR}/core/multiplier.sv
|
|
${CVA6_REPO_DIR}/core/serdiv.sv
|
|
${CVA6_REPO_DIR}/core/perf_counters.sv
|
|
${CVA6_REPO_DIR}/core/ariane_regfile_ff.sv
|
|
${CVA6_REPO_DIR}/core/ariane_regfile_fpga.sv
|
|
// NOTE: scoreboard.sv modified for DSIM (unchanged for other simulators)
|
|
${CVA6_REPO_DIR}/core/scoreboard.sv
|
|
${CVA6_REPO_DIR}/core/raw_checker.sv
|
|
${CVA6_REPO_DIR}/core/store_buffer.sv
|
|
${CVA6_REPO_DIR}/core/amo_buffer.sv
|
|
${CVA6_REPO_DIR}/core/store_unit.sv
|
|
${CVA6_REPO_DIR}/core/commit_stage.sv
|
|
${CVA6_REPO_DIR}/core/axi_shim.sv
|
|
${CVA6_REPO_DIR}/core/cva6_accel_first_pass_decoder_stub.sv
|
|
${CVA6_REPO_DIR}/core/acc_dispatcher.sv
|
|
${CVA6_REPO_DIR}/core/cva6_fifo_v3.sv
|
|
|
|
// What is "frontend"?
|
|
${CVA6_REPO_DIR}/core/frontend/btb.sv
|
|
${CVA6_REPO_DIR}/core/frontend/bht.sv
|
|
${CVA6_REPO_DIR}/core/frontend/bht2lvl.sv
|
|
${CVA6_REPO_DIR}/core/frontend/ras.sv
|
|
${CVA6_REPO_DIR}/core/frontend/instr_scan.sv
|
|
${CVA6_REPO_DIR}/core/frontend/instr_queue.sv
|
|
${CVA6_REPO_DIR}/core/frontend/frontend.sv
|
|
|
|
// Cache subsystem
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_dcache_ctrl.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_dcache_mem.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_dcache_missunit.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_dcache_wbuffer.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_dcache.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_icache.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_cache_subsystem.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/wt_axi_adapter.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/tag_cmp.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/axi_adapter.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/miss_handler.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cache_ctrl.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_icache_axi_wrapper.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/std_cache_subsystem.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/std_nbdcache.sv
|
|
-F ${HPDCACHE_DIR}/rtl/hpdcache.Flist
|
|
${HPDCACHE_DIR}/rtl/src/utils/hpdcache_mem_resp_demux.sv
|
|
${HPDCACHE_DIR}/rtl/src/utils/hpdcache_mem_to_axi_read.sv
|
|
${HPDCACHE_DIR}/rtl/src/utils/hpdcache_mem_to_axi_write.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_hpdcache_subsystem.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_hpdcache_subsystem_axi_arbiter.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_hpdcache_if_adapter.sv
|
|
${CVA6_REPO_DIR}/core/cache_subsystem/cva6_hpdcache_wrapper.sv
|
|
${HPDCACHE_DIR}/rtl/src/common/macros/behav/hpdcache_sram_1rw.sv
|
|
${HPDCACHE_DIR}/rtl/src/common/macros/behav/hpdcache_sram_wbyteenable_1rw.sv
|
|
${HPDCACHE_DIR}/rtl/src/common/macros/behav/hpdcache_sram_wmask_1rw.sv
|
|
|
|
// Physical Memory Protection
|
|
// NOTE: pmp.sv modified for DSIM (unchanged for other simulators)
|
|
${CVA6_REPO_DIR}/core/pmp/src/pmp.sv
|
|
${CVA6_REPO_DIR}/core/pmp/src/pmp_entry.sv
|
|
${CVA6_REPO_DIR}/core/pmp/src/pmp_data_if.sv
|
|
|
|
// Tracer (behavioral code, not RTL)
|
|
${CVA6_REPO_DIR}/common/local/util/instr_tracer.sv
|
|
${CVA6_REPO_DIR}/common/local/util/tc_sram_wrapper.sv
|
|
${CVA6_REPO_DIR}/common/local/util/tc_sram_wrapper_cache_techno.sv
|
|
${CVA6_REPO_DIR}/vendor/pulp-platform/tech_cells_generic/src/rtl/tc_sram.sv
|
|
${CVA6_REPO_DIR}/common/local/util/sram.sv
|
|
${CVA6_REPO_DIR}/common/local/util/sram_cache.sv
|
|
|
|
// MMU
|
|
${CVA6_REPO_DIR}/core/cva6_mmu/cva6_mmu.sv
|
|
${CVA6_REPO_DIR}/core/cva6_mmu/cva6_ptw.sv
|
|
${CVA6_REPO_DIR}/core/cva6_mmu/cva6_tlb.sv
|
|
${CVA6_REPO_DIR}/core/cva6_mmu/cva6_shared_tlb.sv
|
|
|
|
// end of manifest
|