// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//

package csrng_pkg;

  //-------------------------
  // Application Interfaces
  //-------------------------

  parameter int unsigned   GENBITS_BUS_WIDTH = 128;
  parameter int unsigned   CSRNG_CMD_WIDTH = 32;
  parameter int unsigned   FIPS_GENBITS_BUS_WIDTH = entropy_src_pkg::FIPS_BUS_WIDTH +
                           GENBITS_BUS_WIDTH;

  // instantiation interface
  typedef struct packed {
    logic         csrng_req_valid;
    logic [CSRNG_CMD_WIDTH-1:0]  csrng_req_bus;
    logic         genbits_ready;
  } csrng_req_t;

  typedef struct packed {
    logic         csrng_req_ready;
    logic         csrng_rsp_ack;
    logic         csrng_rsp_sts;
    logic         genbits_valid;
    logic         genbits_fips;
    logic [GENBITS_BUS_WIDTH-1:0] genbits_bus;
  } csrng_rsp_t;

  parameter csrng_req_t CSRNG_REQ_DEFAULT = '{default: '0};
  parameter csrng_rsp_t CSRNG_RSP_DEFAULT = '{default: '0};

  typedef enum logic [2:0] {
    INV = 3'h0,
    INS = 3'h1,
    RES = 3'h2,
    GEN = 3'h3,
    UPD = 3'h4,
    UNI = 3'h5,
    GENB = 3'h6,
    GENU = 3'h7
  } acmd_e;

  parameter int CsKeymgrDivWidth = 384;
  typedef logic [CsKeymgrDivWidth-1:0] cs_keymgr_div_t;

endpackage : csrng_pkg
