hw/ip/prim/abstract/prim_pad_wrapper.sv Cov: 67%

   1: // Copyright lowRISC contributors.
   2: // Licensed under the Apache License, Version 2.0, see LICENSE for details.
   3: // SPDX-License-Identifier: Apache-2.0
   4: 
   5: // TODO: This module is a hard-coded stopgap to select an implementation of an
   6: // "abstract module". This module is to be replaced by generated code.
   7: 
   8: 
   9: `ifndef PRIM_DEFAULT_IMPL
  10:   `define PRIM_DEFAULT_IMPL prim_pkg::ImplGeneric
  11: `endif
  12: 
  13: module prim_pad_wrapper #(
  14:   parameter prim_pkg::impl_e Impl = `PRIM_DEFAULT_IMPL,
  15:   parameter int unsigned AttrDw = 6
  16: ) (
  17:   inout  wire        inout_io, // bidirectional pad
  18:   output logic       in_o,     // input data
  19:   input              out_i,    // output data
  20:   input              oe_i,     // output enable
  21:   // additional attributes
  22:   input [AttrDw-1:0] attr_i
  23: );
  24: 
  25:   import prim_pkg::*;
  26: 
  27:   // The generic implementation is NOT synthesizable
  28:   if (Impl == ImplGeneric) begin : gen_pad_generic
  29:     prim_generic_pad_wrapper #(
  30:       .AttrDw(AttrDw)
  31:     ) i_pad_wrapper (
  32:       .inout_io,
  33:       .in_o,
  34:       .out_i,
  35:       .oe_i,
  36:       .attr_i
  37:     );
  38:   end else if (Impl == ImplXilinx) begin : gen_pad_xilinx
  39:     prim_xilinx_pad_wrapper #(
  40:       .AttrDw(AttrDw)
  41:     ) i_pad_wrapper (
  42:       .inout_io,
  43:       .in_o,
  44:       .out_i,
  45:       .oe_i,
  46:       .attr_i
  47:     );
  48:   end else begin : gen_failure
  49:     // TODO: Find code that works across tools and causes a compile failure
  50:   end
  51: 
  52: endmodule : prim_pad_wrapper
  53: