CAPI=2:
# Copyright (c) 2025 Eclipse Foundation
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
name: "openhwgroup:cve2:cve2_top:0.1"
description: "A single-issue 2-stage pipeline embedded class of RISC-V CPUs"

filesets:
  files_rtl:
    depend:
      - openhwgroup:cve2:cve2_pkg
      - openhwgroup:cve2:cve2_core
      - openhwgroup:cve2:cve2_clock_gate
      - lowrisc:prim:buf
      - lowrisc:prim:clock_mux2
      - lowrisc:prim:flop
      - lowrisc:prim:ram_1p_scr
    files:
      - rtl/cve2_register_file_ff.sv # generic FF-based
      - rtl/cve2_top.sv
    file_type: systemVerilogSource

  files_lint_verilator:
    files:
      - lint/verilator_waiver.vlt: {file_type: vlt}

  files_lint_verible:
    files:
      - lint/verible_waiver.vbw: {file_type: veribleLintWaiver}

  files_check_tool_requirements:
    depend:
     - lowrisc:tool:check_tool_requirements

parameters:
  RVFI:
    datatype: bool
    paramtype: vlogdefine

  SYNTHESIS:
    datatype: bool
    paramtype: vlogdefine

  FPGA_XILINX:
    datatype: bool
    description: Identifies Xilinx FPGA targets to set DSP pragmas for performance counters.
    default: false
    paramtype: vlogdefine

  MHPMCounterNum:
    datatype: int
    default: 10
    paramtype: vlogparam

  MHPMCounterWidth:
    datatype: int
    default: 40
    paramtype: vlogparam

  RV32E:
    datatype: int
    default: 0
    paramtype: vlogparam

  RV32M:
    datatype: str
    default: cve2_pkg::RV32MFast
    paramtype: vlogdefine
    description: "RV32M implementation parameter enum. See the cve2_pkg::rv32m_e enum in cve2_pkg.sv for permitted values."

targets:
  default: &default_target
    filesets:
      - tool_verilator ? (files_lint_verilator)
      - tool_veriblelint ? (files_lint_verible)
      - files_rtl
    toplevel: cve2_top
    parameters:
      - tool_vivado ? (FPGA_XILINX=true)

  lint:
    <<: *default_target
    parameters:
      - SYNTHESIS=true
      - RVFI=true
      - MHPMCounterNum
      - MHPMCounterWidth
      - RV32E
      - RV32M
    default_tool: verilator
    tools:
      verilator:
        mode: lint-only
        verilator_options:
          # - "-Wall"
          # RAM primitives wider than 64bit (required for ECC) fail to build in
          # Verilator without increasing the unroll count (see Verilator#1266)
          - "--unroll-count 72"
          - "-Wno-COMBDLY"
          - "-Wno-WIDTHEXPAND"
          - "-Wno-WIDTHTRUNC"

  format:
    filesets:
      - files_rtl
    parameters:
      - SYNTHESIS=true
      - RVFI=true
      - MHPMCounterNum
      - MHPMCounterWidth
      - RV32E
      - RV32M
    default_tool: veribleformat
    toplevel: cve2_top
    tools:
      veribleformat:
        verible_format_args:
          - "--inplace"
          - "--formal_parameters_indentation=indent"
          - "--named_parameter_indentation=indent"
          - "--named_port_indentation=indent"
          - "--port_declarations_indentation=indent"
