OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [wishbone/] [testbecnh/] [dev_wb_cross/] [sim/] [wb_intf.sv] - Rev 2

Compare with Previous | Blame | View Log



interface wb_m_if
#(
  parameter int   pA_W = 32 ,
  parameter int   pD_W = 32 ,
  parameter int pSEL_W =  4
)
(
  input wb_clk, wb_rst
);
  logic                cyc_o ;
  logic                stb_o ;
  logic                we_o  ;
  logic   [pA_W-1 : 0] adr_o ;
  logic   [pD_W-1 : 0] dat_o ;
  logic [pSEL_W-1 : 0] sel_o ;
  logic                ack_i ;
  logic                err_i ;
  logic                rty_i ;
  logic   [pD_W-1 : 0] dat_i ;


  default clocking cb @(posedge wb_clk);
    default input #1ns output #1ns;
    output cyc_o, stb_o, we_o, adr_o, dat_o, sel_o;
    input ack_i, err_i, rty_i, dat_i;
  endclocking

  //------------------------------------------------------------------------------------------------------
  // base drivers
  //------------------------------------------------------------------------------------------------------

  // init
  task init ();
    cyc_o <= '0;
    stb_o <= '0;
    we_o  <= '0;
    adr_o <= '0;
    dat_o <= '0;
    sel_o <= '1;
  endtask

  //
  // write
  task write (output int err, input bit [pA_W-1 : 0] addr, input bit [pD_W-1 : 0] data, input int delay = 0, hold = 0);
    cb.cyc_o <= 1'b1;
    cb.stb_o <= 1'b1;
    cb.we_o  <= 1'b1;
    cb.adr_o <= addr;
    cb.dat_o <= data; //$display("[%t]: %m, ps, adr_o==%h, dat_o==%h", $time, addr, data);

    do
      ##1;
    while ((cb.ack_i | cb.err_i | cb.rty_i) != 1'b1);

    err = {cb.err_i , cb.rty_i};

    cb.cyc_o <= hold;
    cb.stb_o <= 1'b0;
    cb.we_o  <= 1'b0;

    ##(delay); //$display("[%t]: %m, pe", $time);
  endtask

  task write_begin (output int err, input bit [pA_W-1 : 0] addr, input bit [pD_W-1 : 0] data, input int delay = 0);
    write (err, addr, data, delay, 1); // hold bus
  endtask

  task write_end (output int err, input bit [pA_W-1 : 0] addr, input bit [pD_W-1 : 0] data, input int delay = 0);
    write(err, addr, data, delay, 0); // free bus
  endtask

  //
  // read
  task read (output int err, output bit [pD_W-1 : 0] data, input bit [pA_W-1 : 0] addr, input int delay = 0, hold = 0);
    cb.cyc_o <= 1'b1;
    cb.stb_o <= 1'b1;
    cb.we_o  <= 1'b0;
    cb.adr_o <= addr;

    do
      ##1;
    while ((cb.ack_i | cb.err_i | cb.rty_i) != 1'b1);

    err     = {cb.err_i , cb.rty_i};
    data    = cb.dat_i;

    cb.cyc_o <= hold;
    cb.stb_o <= 1'b0;
    cb.we_o  <= 1'b0;

    ##(delay);
  endtask

  task read_begin (output int err, output bit [pD_W-1 : 0] data, input bit [pA_W-1 : 0] addr, input int delay = 0);
    read (err, data, addr, delay, 1);
  endtask

  task read_end (output int err, output bit [pD_W-1 : 0] data, input bit [pA_W-1 : 0] addr, input int delay = 0);
    read (err, data, addr, delay, 0);
  endtask

endinterface

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.