../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: