~ruther/vhdl-spi-2

b5bfa2ebf2458e67a557e726bea30401e601db87 — Rutherther 3 months ago 0d966c3
fix: assumptions about synthesizable code
M hdl_spi/manifest.scm => hdl_spi/manifest.scm +2 -0
@@ 60,6 60,8 @@ testbenches in Python.")
   (list
    "python-pytest"
    "python"
    "python-pudb"
    "python-pytest-pudb"
    "vhdl-ls"
    "make"


M hdl_spi/models/spi_models.py => hdl_spi/models/spi_models.py +1 -0
@@ 123,6 123,7 @@ class SpiSlave:

            if first != csn_falling:
                self._log.error(f"CSN did not fall in time ({max} {unit})!")
                raise Exception(f"CSN did not fall in time ({max} {unit})!")
                continue

            # csn fell

M hdl_spi/src/rs_latch.vhd => hdl_spi/src/rs_latch.vhd +8 -4
@@ 11,16 11,20 @@ entity rs_latch is
end entity rs_latch;

architecture a1 of rs_latch is

  signal q : std_logic;
begin  -- architecture a1

  data: process (reset_i, set_i) is
  data: process (all) is
  begin  -- process data
    if set_i = '1' then
      q_o <= '1';
      q <= '1';
    elsif reset_i = '1' then
      q_o <= '0';
      q <= '0';
    else
      q <= q;
    end if;
  end process data;

  q_o <= q;

end architecture a1;

M hdl_spi/src/spi_masterslave.vhd => hdl_spi/src/spi_masterslave.vhd +91 -95
@@ 16,37 16,45 @@ entity spi_masterslave is

  port (
    -- IOs
    sck_io               : inout std_logic;
    miso_io              : inout std_logic;
    mosi_io              : inout std_logic;
    csn_io               : inout std_logic;
    sck_i                : in  std_logic;
    miso_i               : in  std_logic;
    mosi_i               : in  std_logic;
    csn_i                : in  std_logic;
    sck_o                : out std_logic;
    miso_o               : out std_logic;
    mosi_o               : out std_logic;
    csn_o                : out std_logic;
    sck_t                : out std_logic;
    miso_t               : out std_logic;
    mosi_t               : out std_logic;
    csn_t                : out std_logic;
    -- Control
    clk_i                : in    std_logic;
    rst_in               : in    std_logic;
    en_i                 : in    std_logic;
    master_i             : in    std_logic;
    clock_polarity_i     : in    std_logic;
    clock_phase_i        : in    std_logic;
    size_sel_i           : in    std_logic_vector(SIZES_2LOG - 1 downto 0);
    div_sel_i            : in    std_logic_vector(DIVISORS_LOG2 - 1 downto 0);
    pulse_csn_i          : in    std_logic;
    rx_block_on_full_i   : in    std_logic;
    lsbfirst_i           : in    std_logic;
    clk_i                : in  std_logic;
    rst_in               : in  std_logic;
    en_i                 : in  std_logic;
    master_i             : in  std_logic;
    clock_polarity_i     : in  std_logic;
    clock_phase_i        : in  std_logic;
    size_sel_i           : in  std_logic_vector(SIZES_2LOG - 1 downto 0);
    div_sel_i            : in  std_logic_vector(DIVISORS_LOG2 - 1 downto 0);
    pulse_csn_i          : in  std_logic;
    rx_block_on_full_i   : in  std_logic;
    lsbfirst_i           : in  std_logic;
    -- Data
    -- Rx
    rx_en_i              : in    std_logic;
    rx_data_o            : out   std_logic_vector(get_max_natural(SIZES) - 1 downto 0);
    rx_valid_o           : out   std_logic;
    rx_ready_i           : in    std_logic;
    rx_en_i              : in  std_logic;
    rx_data_o            : out std_logic_vector(get_max_natural(SIZES) - 1 downto 0);
    rx_valid_o           : out std_logic;
    rx_ready_i           : in  std_logic;
    -- Tx
    tx_en_i              : in    std_logic;
    tx_data_i            : in    std_logic_vector(get_max_natural(SIZES) - 1 downto 0);
    tx_valid_i           : in    std_logic;
    tx_ready_o           : out   std_logic;
    tx_en_i              : in  std_logic;
    tx_data_i            : in  std_logic_vector(get_max_natural(SIZES) - 1 downto 0);
    tx_valid_i           : in  std_logic;
    tx_ready_o           : out std_logic;
    -- State
    busy_o               : out   std_logic;
    err_lost_rx_data_o   : out   std_logic;
    clear_lost_rx_data_i : in    std_logic);
    busy_o               : out std_logic;
    err_lost_rx_data_o   : out std_logic;
    clear_lost_rx_data_i : in  std_logic);

end entity spi_masterslave;



@@ 106,6 114,9 @@ architecture a1 of spi_masterslave is
  signal master_latch_sample_data : std_logic;
  signal master_latch_change_data : std_logic;

  signal csn, sck, mosi, miso : std_logic;
  signal csn_en, sck_en, mosi_en, miso_en : std_logic;

begin  -- architecture a1
  master_en <= en_i and master_i;
  slave_en <= en_i and not master_i;


@@ 204,8 215,8 @@ begin  -- architecture a1
      rst_in           => slave_ctrl_rst_n,
      clock_polarity_i => clock_polarity_i,
      clock_phase_i    => clock_phase_i,
      sck_i            => sck_io,
      csn_i            => csn_io,
      sck_i            => sck_i,
      csn_i            => csn_i,
      clock_rising_o   => slave_clock_rising,
      sample_data_o    => slave_latch_sample_data,
      change_data_o    => slave_latch_change_data);


@@ 243,72 254,57 @@ begin  -- architecture a1
      q_o     => tx_serial_data,
      latch_i => latch_change_data_out);

  master_connection : entity work.spi_multiplexor
    port map (
      en_i                => master_en,
      mosi_en_i           => master_mosi_en,
      miso_en_i           => master_miso_en,
      sck_en_i            => master_sck_en,
      csn_en_i            => master_csn_en,
      mosi_i              => tx_serial_data(0),
      miso_i              => '0',
      sck_i               => master_sck,
      csn_i               => master_csn,
      mosi_o              => mosi_io,
      miso_o              => miso_io,
      sck_o               => sck_io,
      csn_o               => csn_io,
      rx_valid_i          => master_rx_valid,
      rx_valid_o          => rx_valid_o,
      tx_ready_i          => master_tx_ready,
      tx_ready_o          => tx_ready_o,
      busy_i              => master_busy,
      busy_o              => busy_o,
      err_lost_rx_data_i  => master_err_lost_rx_data,
      err_lost_rx_data_o  => err_lost_rx_data_o,
      rst_in              => master_ctrl_rst_n,
      rst_on              => ctrl_rst_n,
      latch_tx_data_i     => master_latch_new_tx_data,
      latch_tx_data_o     => latch_new_tx_data,
      latch_sample_data_i => master_latch_sample_data,
      latch_sample_data_o => latch_sample_data,
      latch_change_data_i => master_latch_change_data,
      latch_change_data_o => latch_change_data_out,
      rx_serial_i         => miso_io,
      rx_serial_o         => rx_serial_data);

  slave_connection : entity work.spi_multiplexor
    port map (
      en_i                => slave_en,
      mosi_en_i           => slave_mosi_en,
      miso_en_i           => slave_miso_en,
      sck_en_i            => slave_sck_en,
      csn_en_i            => slave_csn_en,
      mosi_i              => '0',
      miso_i              => tx_serial_data(0),
      sck_i               => '0',
      csn_i               => '0',
      mosi_o              => mosi_io,
      miso_o              => miso_io,
      sck_o               => sck_io,
      csn_o               => csn_io,
      rx_valid_i          => slave_rx_valid,
      rx_valid_o          => rx_valid_o,
      tx_ready_i          => slave_tx_ready,
      tx_ready_o          => tx_ready_o,
      busy_i              => slave_busy,
      busy_o              => busy_o,
      err_lost_rx_data_i  => slave_err_lost_rx_data,
      err_lost_rx_data_o  => err_lost_rx_data_o,
      rst_in              => slave_ctrl_rst,
      rst_on              => ctrl_rst_n,
      latch_tx_data_i     => slave_latch_new_tx_data,
      latch_tx_data_o     => latch_new_tx_data,
      latch_sample_data_i => slave_latch_sample_data,
      latch_sample_data_o => latch_sample_data,
      latch_change_data_i => slave_latch_change_data,
      latch_change_data_o => latch_change_data_out,
      rx_serial_i         => mosi_io,
      rx_serial_o         => rx_serial_data);
  mosi_t <= slave_mosi_en when slave_en = '1' else
             master_mosi_en when master_en = '1' else
             '0';
  miso_t <= slave_miso_en when slave_en = '1' else
             master_miso_en when master_en = '1' else
             '0';
  sck_t <= slave_sck_en when slave_en = '1' else
             master_sck_en when master_en = '1' else
             '0';
  csn_t <= slave_csn_en when slave_en = '1' else
             master_csn_en when master_en = '1' else
             '0';

  mosi_o <= tx_serial_data(0) when master_en = '1' else
          '0' when slave_en = '1' else
          '0';

  miso_o <= '0' when master_en = '1' else
          tx_serial_data(0) when slave_en = '1' else '0';

  sck_o <= master_sck when master_en = '1' else
         '0';

  csn_o <= master_csn when master_en = '1' else '0';

  rx_valid_o <= master_rx_valid when master_en = '1' else
                slave_rx_valid when slave_en = '1' else
                '0';
  tx_ready_o <= master_tx_ready when master_en = '1' else
                slave_tx_ready when slave_en = '1' else
                '0';
  busy_o <= master_busy when master_en = '1' else
                slave_busy when slave_en = '1' else
                '0';
  err_lost_rx_data_o <= master_err_lost_rx_data when master_en = '1' else
                        slave_err_lost_rx_data when slave_en = '1' else
                        '0';
  ctrl_rst_n <= master_ctrl_rst_n when master_en = '1' else
                slave_ctrl_rst_n when slave_en = '1' else
                '0';
  latch_new_tx_data <= master_latch_new_tx_data when master_en = '1' else
                       slave_latch_new_tx_data when slave_en = '1' else
                       '0';
  rx_serial_data <= miso_i when master_en =  '1' else
                    mosi_i when slave_en = '1' else
                    '0';
  latch_sample_data <= master_latch_sample_data when master_en = '1' else
                slave_latch_sample_data when slave_en = '1' else
                '0';
  latch_change_data_out <= master_latch_change_data when master_en = '1' else
                slave_latch_change_data when slave_en = '1' else
                '0';

end architecture a1;

D hdl_spi/src/spi_multiplexor.vhd => hdl_spi/src/spi_multiplexor.vhd +0 -63
@@ 1,63 0,0 @@
library ieee;
use ieee.std_logic_1164.all;

entity spi_multiplexor is

  port (
    en_i               : in  std_logic;
    mosi_en_i          : in  std_logic;
    miso_en_i          : in  std_logic;
    sck_en_i           : in  std_logic;
    csn_en_i           : in  std_logic;
    mosi_i             : in  std_logic;
    miso_i             : in  std_logic;
    sck_i              : in  std_logic;
    csn_i              : in  std_logic;
    mosi_o             : out std_logic;
    miso_o             : out std_logic;
    sck_o              : out std_logic;
    csn_o              : out std_logic;
    rx_valid_i         : in  std_logic;
    rx_valid_o         : out std_logic;
    tx_ready_i         : in  std_logic;
    tx_ready_o         : out std_logic;
    busy_i             : in  std_logic;
    busy_o             : out std_logic;
    err_lost_rx_data_i : in  std_logic;
    err_lost_rx_data_o : out std_logic;
    rst_in             : in  std_logic;
    rst_on             : out std_logic;

    latch_tx_data_i : in  std_logic;
    latch_tx_data_o : out std_logic;

    latch_sample_data_i : in  std_logic;
    latch_sample_data_o : out std_logic;

    latch_change_data_i : in  std_logic;
    latch_change_data_o : out std_logic;

    rx_serial_i : in  std_logic;
    rx_serial_o : out std_logic);

end entity spi_multiplexor;

architecture a1 of spi_multiplexor is

begin  -- architecture a1

  mosi_o <= mosi_i when mosi_en_i = '1' and en_i = '1' else 'Z';
  miso_o <= miso_i when miso_en_i = '1' and en_i = '1' else 'Z';
  sck_o <= sck_i when sck_en_i = '1' and en_i = '1' else'Z';
  csn_o <= csn_i when csn_en_i = '1' and en_i = '1' else'Z';
  rx_valid_o <= rx_valid_i when en_i = '1' else'Z';
  tx_ready_o <= tx_ready_i when en_i = '1' else'Z';
  busy_o <= busy_i when en_i = '1' else'Z';
  err_lost_rx_data_o <= err_lost_rx_data_i when en_i = '1' else'Z';
  rst_on <= rst_in when en_i = '1' else'Z';
  latch_tx_data_o <= latch_tx_data_i when en_i = '1' else'Z';
  latch_sample_data_o <= latch_sample_data_i when en_i = '1' else'Z';
  latch_change_data_o <= latch_change_data_i when en_i = '1' else'Z';
  rx_serial_o <= rx_serial_i when en_i = '1' else 'Z';

end architecture a1;

M hdl_spi/src/spi_peripheral.vhd => hdl_spi/src/spi_peripheral.vhd +27 -11
@@ 20,10 20,18 @@ entity spi_peripheral is
    write_i            : in    std_logic;
    read_i             : in    std_logic;
    -- IOs
    sck_io             : inout std_logic;
    miso_io            : inout std_logic;
    mosi_io            : inout std_logic;
    csn_io             : inout std_logic;
    sck_i                : in  std_logic;
    miso_i               : in  std_logic;
    mosi_i               : in  std_logic;
    csn_i                : in  std_logic;
    sck_o                : out std_logic;
    miso_o               : out std_logic;
    mosi_o               : out std_logic;
    csn_o                : out std_logic;
    sck_t                : out std_logic;
    miso_t               : out std_logic;
    mosi_t               : out std_logic;
    csn_t                : out std_logic;
    -- Control
    clk_i              : in    std_logic;
    rst_in             : in    std_logic;


@@ 131,10 139,18 @@ begin  -- architecture a1
      CSN_PULSE_CYCLES => CSN_PULSE_CYCLES)
    port map (
      -- IOs
      sck_io               => sck_io,
      miso_io              => miso_io,
      mosi_io              => mosi_io,
      csn_io               => csn_io,
      sck_o               => sck_o,
      miso_o              => miso_o,
      mosi_o              => mosi_o,
      csn_o               => csn_o,
      sck_i               => sck_i,
      miso_i              => miso_i,
      mosi_i              => mosi_i,
      csn_i               => csn_i,
      sck_t               => sck_t,
      miso_t              => miso_t,
      mosi_t              => mosi_t,
      csn_t               => csn_t,
      -- Control
      clk_i                => clk_i,
      rst_in               => rst_in,


@@ 207,9 223,9 @@ begin  -- architecture a1
    case raddress_i is
      when CTRL_ADDRESS => rdata_o <= reg_control;
      when STATUS_ADDRESS => rdata_o <= reg_status;
      when DATA_ADDRESS => rdata_o <= (rx_buffer'range => rx_buffer, others => '0');
      when DATA_ADDRESS => rdata_o <= (15 downto 0 => rx_buffer, others => '0');
      when INTMASK_ADDRESS => rdata_o <= reg_intmask;
      when others => null;
      when others => rdata_o <= (others => '0');
    end case;
  end process output_register;



@@ 253,7 269,7 @@ begin  -- architecture a1
                err_lost_rx_data &
                busy &
                "0" &
                tx_buffer_full &
                (not tx_buffer_full) &
                rx_buffer_full;

  tx_data <= tx_buffer;

M hdl_spi/tests/Makefile => hdl_spi/tests/Makefile +1 -1
@@ 6,7 6,7 @@ TOPLEVEL_LANG ?= vhdl

SRC = $(PWD)/../src

VHDL_SOURCES=$(SRC)/spi_pkg.vhd $(SRC)/rs_latch.vhd $(SRC)/register.vhd $(SRC)/shift_register.vhd $(SRC)/spi_clkgen.vhd $(SRC)/spi_clkmon.vhd $(SRC)/spi_multiplexor.vhd $(SRC)/spi_slave_ctrl.vhd $(SRC)/spi_master_ctrl.vhd $(SRC)/spi_master.vhd $(SRC)/spi_masterslave.vhd $(SRC)/spi_peripheral.vhd
VHDL_SOURCES=$(SRC)/spi_pkg.vhd $(SRC)/rs_latch.vhd $(SRC)/register.vhd $(SRC)/shift_register.vhd $(SRC)/spi_clkgen.vhd $(SRC)/spi_clkmon.vhd $(SRC)/spi_slave_ctrl.vhd $(SRC)/spi_master_ctrl.vhd $(SRC)/spi_master.vhd $(SRC)/spi_masterslave.vhd $(SRC)/spi_peripheral.vhd

VCOM_ARGS = -2008
GHDL_ARGS= --std=08

M hdl_spi/tests/test_spi_masterslave.py => hdl_spi/tests/test_spi_masterslave.py +14 -15
@@ 18,7 18,7 @@ if cocotb.simulator.is_running():

async def init(dut, master: int = 1, tx_en: int = 1):
    dut._log.info("Init started!")
    dut.miso_io.value = 0;
    dut.miso_i.value = 0;
    dut.rst_in.value = 0;
    dut.lsbfirst_i.value = 0;
    dut.clock_polarity_i.value = 0;


@@ 157,7 157,7 @@ class DutDriver:
@cocotb.test()
async def single_transmit(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 10, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 197,7 197,7 @@ async def single_transmit(dut):
@cocotb.test()
async def lsbfirst(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 10, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 250,7 250,7 @@ async def lsbfirst(dut):
@cocotb.test()
async def rx_tx_disabled(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 10, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 305,7 305,7 @@ async def rx_tx_disabled(dut):
    await FallingEdge(dut.clk_i)
    await FallingEdge(dut.clk_i)

    assert str(dut.mosi_io.value[0]) == "Z"
    assert int(dut.mosi_t.value) == 0

    await slave.send_data(tx, 8)
    await slave.expect_transaction_in(15, "ns")


@@ 314,7 314,7 @@ async def rx_tx_disabled(dut):
    await driver.send_data(rx)

    timeout = Timer(10 * (8 + 5), "ns")
    mosi_event = Edge(dut.mosi_io)
    mosi_event = Edge(dut.mosi_t)

    res = await First(timeout, mosi_event)
    if res == mosi_event:


@@ 361,7 361,7 @@ async def perform_multiple_transmits(count, dut, slave, driver, size = 8):
@cocotb.test()
async def multiple_transmits(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 10, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 383,7 383,7 @@ async def multiple_transmits(dut):
@cocotb.test()
async def lost_rx_data(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 10, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 407,7 407,7 @@ async def lost_rx_data(dut):
@cocotb.test()
async def different_clock(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 20, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 430,7 430,7 @@ async def different_clock(dut):
@cocotb.test()
async def inverted_clock(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, RisingEdge, FallingEdge, 20, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 454,7 454,7 @@ async def inverted_clock(dut):
@cocotb.test()
async def shifted_inverted_clock(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(8, FallingEdge, RisingEdge, 20, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 485,7 485,7 @@ async def shifted_inverted_clock(dut):
@cocotb.test()
async def sixteen_bits(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(16, FallingEdge, RisingEdge, 20, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 512,7 512,7 @@ async def sixteen_bits(dut):
@cocotb.test()
async def rx_blocking_tx(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(16, RisingEdge, FallingEdge, 10, "ns", csn_pulse = True)
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 537,7 537,7 @@ async def rx_blocking_tx(dut):
@cocotb.test()
async def csn_pulse(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(16, RisingEdge, FallingEdge, 20, "ns", csn_pulse = True)
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 574,7 574,6 @@ def spi_tests_runner():
        proj_path / "src" / "shift_register.vhd",
        proj_path / "src" / "spi_clkgen.vhd",
        proj_path / "src" / "spi_clkmon.vhd",
        proj_path / "src" / "spi_multiplexor.vhd",
        proj_path / "src" / "spi_slave_ctrl.vhd",
        proj_path / "src" / "spi_master_ctrl.vhd",
        proj_path / "src" / "spi_master.vhd",

M hdl_spi/tests/test_spi_peripheral.py => hdl_spi/tests/test_spi_peripheral.py +2 -3
@@ 120,7 120,7 @@ class DutDriver:
@cocotb.test()
async def single_transission(dut):
    clk = Clock(dut.clk_i, 5, "ns")
    interface = SpiInterface(dut.csn_io, dut.sck_io, dut.miso_io, dut.mosi_io)
    interface = SpiInterface(dut.csn_o, dut.sck_o, dut.miso_i, dut.mosi_o)
    config = SpiConfig(16, RisingEdge, FallingEdge, 40, "ns")
    slave = SpiSlave(interface, config)
    driver = DutDriver(dut)


@@ 149,7 149,7 @@ async def single_transission(dut):
    tx = random.randint(0, 255)

    await slave.send_data(tx, 16)
    await slave.expect_transaction_in(20, "ns")
    await slave.expect_transaction_in(100, "ns")

    await driver.write(ADDR_DATA, rx)



@@ 181,7 181,6 @@ def spi_peripheral_tests_runner():
        proj_path / "src" / "shift_register.vhd",
        proj_path / "src" / "spi_clkgen.vhd",
        proj_path / "src" / "spi_clkmon.vhd",
        proj_path / "src" / "spi_multiplexor.vhd",
        proj_path / "src" / "spi_slave_ctrl.vhd",
        proj_path / "src" / "spi_master_ctrl.vhd",
        proj_path / "src" / "spi_master.vhd",

Do not follow this link