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_pb_wishbone_ctrl/] [sim/] [wb_simple_ram_slave_if.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
/*
2
 
3
 
4
 
5
  parameter int  pA_W  = 32 ;
6
  parameter int  pD_W  = 32 ;
7
  parameter int pSEL_W = 4 ;
8
 
9
 
10
 
11
  logic                wb_tb_simple_ram_slave__clk    ;
12
  logic                wb_tb_simple_ram_slave__rst    ;
13
  logic                wb_tb_simple_ram_slave__cyc_i  ;
14
  logic                wb_tb_simple_ram_slave__stb_i  ;
15
  logic                wb_tb_simple_ram_slave__we_i   ;
16
  logic   [pA_W-1 : 0] wb_tb_simple_ram_slave__adr_i  ;
17
  logic   [pD_W-1 : 0] wb_tb_simple_ram_slave__dat_i  ;
18
  logic [pSEL_W-1 : 0] wb_tb_simple_ram_slave__sel_i  ;
19
  logic                wb_tb_simple_ram_slave__ack_o  ;
20
  logic                wb_tb_simple_ram_slave__err_o  ;
21
  logic                wb_tb_simple_ram_slave__rty_o  ;
22
  logic   [pD_W-1 : 0] wb_tb_simple_ram_slave__dat_o  ;
23
 
24
 
25
 
26
  wb_simple_ram_slave_if
27
  #(
28
    .pA_W   ( pA_W   ) ,
29
    .pD_W   ( pD_W   ) ,
30
    .pSEL_W ( pSEL_W )
31
  )
32
  wb_tb_simple_ram_slave
33
  (
34
    .clk   ( wb_tb_simple_ram_slave__clk   ) ,
35
    .rst   ( wb_tb_simple_ram_slave__rst   ) ,
36
    .cyc_i ( wb_tb_simple_ram_slave__cyc_i ) ,
37
    .stb_i ( wb_tb_simple_ram_slave__stb_i ) ,
38
    .we_i  ( wb_tb_simple_ram_slave__we_i  ) ,
39
    .adr_i ( wb_tb_simple_ram_slave__adr_i ) ,
40
    .dat_i ( wb_tb_simple_ram_slave__dat_i ) ,
41
    .sel_i ( wb_tb_simple_ram_slave__sel_i ) ,
42
    .ack_o ( wb_tb_simple_ram_slave__ack_o ) ,
43
    .err_o ( wb_tb_simple_ram_slave__err_o ) ,
44
    .rty_o ( wb_tb_simple_ram_slave__rty_o ) ,
45
    .dat_o ( wb_tb_simple_ram_slave__dat_o )
46
  );
47
 
48
 
49
  assign wb_tb_simple_ram_slave__clk   = '0 ;
50
  assign wb_tb_simple_ram_slave__rst   = '0 ;
51
  assign wb_tb_simple_ram_slave__cyc_i = '0 ;
52
  assign wb_tb_simple_ram_slave__stb_i = '0 ;
53
  assign wb_tb_simple_ram_slave__we_i  = '0 ;
54
  assign wb_tb_simple_ram_slave__adr_i = '0 ;
55
  assign wb_tb_simple_ram_slave__dat_i = '0 ;
56
  assign wb_tb_simple_ram_slave__sel_i = '0 ;
57
 
58
 
59
 
60
*/
61
 
62
//
63
// this interface is for write/read debug only
64
//
65
 
66
interface wb_simple_ram_slave_if
67
#(
68
  parameter int pA_W   = 32 ,
69
  parameter int pD_W   = 32 ,
70
  parameter int pSEL_W = 4
71
)
72
(
73
  input clk,
74
  input rst
75
);
76
 
77
  //------------------------------------------------------------------------------------------------------
78
  //
79
  //------------------------------------------------------------------------------------------------------
80
 
81
    logic                cyc_i ;
82
    logic                stb_i ;
83
    logic                we_i  ;
84
    logic   [pA_W-1 : 0] adr_i ;
85
    logic   [pD_W-1 : 0] dat_i ;
86
    logic [pSEL_W-1 : 0] sel_i ;
87
    logic                ack_o ;
88
    logic                err_o ;
89
    logic                rty_o ;
90
    logic   [pD_W-1 : 0] dat_o ;
91
 
92
  //------------------------------------------------------------------------------------------------------
93
  //
94
  //------------------------------------------------------------------------------------------------------
95
 
96
  default clocking cb @(posedge clk);
97
    default input #1ns output #1ns;
98
    output ack_o, err_o, rty_o, dat_o;
99
    input  cyc_i, stb_i, we_i, adr_i, dat_i, sel_i;
100
  endclocking
101
 
102
  //------------------------------------------------------------------------------------------------------
103
  //
104
  //------------------------------------------------------------------------------------------------------
105
 
106
  bit [pD_W-1 : 0] ram [2**pA_W-1:0];
107
 
108
  bit rnd = 0;  // use random wait states
109
  int ws  = 1;  // wait states
110
 
111
  int counter=0;
112
  //------------------------------------------------------------------------------------------------------
113
  //
114
  //------------------------------------------------------------------------------------------------------
115
 
116
  initial begin : ini
117
    cb.ack_o <= 1'b0;
118
    cb.err_o <= 1'b0;
119
    cb.rty_o <= 1'b0;
120
    cb.dat_o <= 1'b0;
121
 
122
    run ();
123
  end
124
 
125
  bit tack;
126
 
127
  assign #1ns tack = (cyc_i & stb_i);
128
 
129
  task run ();
130
    fork
131
      forever begin
132
        if (ws == 0) begin // ws == 0
133
          force ack_o = tack;
134
          wait (cyc_i);
135
          //
136
          if (rnd)
137
            ws = $urandom_range(0, 5);
138
          //
139
          if (cyc_i & stb_i) begin
140
            if (we_i)
141
              ram[adr_i] = dat_i;
142
            else
143
              dat_o <= #1ns ++counter;// $urandom_range(0, 255);// ram[adr_i];
144
          end
145
          //
146
          ##1;
147
          release ack_o;
148
        end // ws == 0
149
 
150
        else begin // ws > 0
151
          ##1;
152
          if (cb.cyc_i & cb.stb_i) begin
153
 
154
            ##(ws-1);
155
 
156
            if (rnd)
157
              ws = $urandom_range(0, 5);
158
 
159
            if (cb.we_i)
160
              ram[cb.adr_i] = cb.dat_i;
161
            else
162
              cb.dat_o <= ++counter;// ram[cb.adr_i];
163
 
164
            cb.ack_o <= 1'b1;
165
            ##1;
166
            cb.ack_o <= 1'b0;
167
          end // access
168
        end // ws
169
      end // forever
170
    join_none
171
  endtask
172
 
173
 
174
  task stop ();
175
    disable run ;
176
  endtask
177
 
178
endinterface

powered by: WebSVN 2.1.0

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