| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| package spi_agent_pkg; |
| // dep packages |
| import uvm_pkg::*; |
| import dv_utils_pkg::*; |
| import dv_lib_pkg::*; |
| |
| // macro includes |
| `include "uvm_macros.svh" |
| `include "dv_macros.svh" |
| |
| // local types |
| // transaction type |
| typedef enum { |
| SpiTransNormal, // normal SPI trans |
| SpiTransSckNoCsb, // bad SPI trans with clk but no sb |
| SpiTransCsbNoScb // bad SPI trans with csb but no clk |
| } spi_trans_type_e; |
| |
| // sck edge type - used by driver and monitor |
| // to wait for the right edge based on CPOL / CPHA |
| typedef enum { |
| LeadingEdge, |
| DrivingEdge, |
| SamplingEdge |
| } sck_edge_type_e; |
| |
| // spi mode |
| typedef enum { |
| Single = 0, // Full duplex, tx: sio[0], rx: sio[1] |
| Dual = 1, // Half duplex, tx and rx: sio[1:0] |
| Quad = 2 // Half duplex, tx and rx: sio[3:0] |
| } spi_mode_e; |
| |
| // spi config |
| typedef struct { |
| // CONTROL register field |
| rand bit [8:0] tx_watermark; |
| rand bit [6:0] rx_watermark; |
| // CONFIGOPTS register field |
| rand bit cpol; |
| rand bit cpha; |
| rand bit fullcyc; |
| rand bit csaat; |
| rand bit [3:0] csnlead; |
| rand bit [3:0] csntrail; |
| rand bit [3:0] csnidle; |
| rand bit [15:0] clkdiv; |
| // COMMAND register field |
| rand bit fulldplx; |
| rand bit highz; |
| rand bit speed; |
| rand bit [3:0] tx1_cnt; |
| rand bit [8:0] txn_cnt; |
| rand bit [8:0] rx_cnt; |
| rand bit [3:0] dummy_cycles; |
| } spi_regs_t; |
| |
| // forward declare classes to allow typedefs below |
| typedef class spi_item; |
| typedef class spi_agent_cfg; |
| |
| // package sources |
| `include "spi_agent_cfg.sv" |
| `include "spi_agent_cov.sv" |
| `include "spi_item.sv" |
| `include "spi_monitor.sv" |
| `include "spi_driver.sv" |
| `include "spi_host_driver.sv" |
| `include "spi_device_driver.sv" |
| `include "spi_sequencer.sv" |
| `include "spi_agent.sv" |
| `include "seq_lib/spi_seq_list.sv" |
| |
| endpackage: spi_agent_pkg |