../src/lowrisc_dv_dpi_spidpi_0.1/spidpi.sv Cov: 78.8%

   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: // SPIDPI -- act as a simple host for SPI device
   6: 
   7: // Bits in LOG_LEVEL sets what is output on info socket
   8: // 0x01 -- monitor packets
   9: // 0x08 -- bit level
  10: 
  11: module spidpi
  12:   #(
  13:   parameter string NAME = "spi0",
  14:   parameter MODE = 0,
  15:   parameter LOG_LEVEL = 9
  16:   )(
  17:   input  logic clk_i,
  18:   input  logic rst_ni,
  19:   output logic spi_device_sck_o,
  20:   output logic spi_device_csb_o,
  21:   output logic spi_device_mosi_o,
  22:   input  logic spi_device_miso_i,
  23:   input  logic spi_device_miso_en_i
  24: 
  25: );
  26:   import "DPI-C" function
  27:     chandle spidpi_create(input string name, input int mode, input int loglevel);
  28: 
  29:   import "DPI-C" function
  30:     void spidpi_close(input chandle ctx);
  31: 
  32:   import "DPI-C" function
  33:     byte spidpi_tick(input chandle ctx_void, input [1:0] d2p_data);
  34: 
  35:   chandle ctx;
  36: 
  37:   initial begin
  38:     ctx = spidpi_create(NAME, MODE, LOG_LEVEL);
  39:   end
  40: 
  41:   final begin
  42:     spidpi_close(ctx);
  43:   end
  44: 
  45:   logic       unused_rst = rst_ni;
  46:   logic [1:0] d2p;
  47:   logic       unused_dummy;
  48: 
  49:   assign d2p = { spi_device_miso_i, spi_device_miso_en_i};
  50:   always_ff @(posedge clk_i) begin
  51:     automatic byte p2d = spidpi_tick(ctx, d2p);
  52:     spi_device_sck_o <= p2d[0];
  53:     spi_device_csb_o <= p2d[1];
  54:     spi_device_mosi_o <= p2d[2];
  55:     // stop verilator warning
  56:     unused_dummy <= |p2d[7:3];
  57:   end
  58: endmodule
  59: