// 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;

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

  // default value of csrng_req_t (for dangling ports)
  parameter csrng_req_t CSRNG_REQ_DEFAULT = '{
    csrng_req_valid: 1'b0,
    csrng_req_bus:   '0,
    genbits_ready:   1'b0
  };


  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;

  // default value of csrng_rsp_t (for dangling ports)
  parameter csrng_rsp_t CSRNG_RSP_DEFAULT = '{
    csrng_req_ready: 1'b0,
    csrng_rsp_ack: 1'b0,
    csrng_rsp_sts: 1'b0,
    genbits_valid:   1'b0,
    genbits_fips:   1'b0,
    genbits_bus:     '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;



endpackage : csrng_pkg
