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_tb_simple_ram_slave.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_tb_simple_ram_slave
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_tb_simple_ram_slave
67
#(
68
  parameter int pA_W   = 32 ,
69
  parameter int pD_W   = 32 ,
70
  parameter int pSEL_W = 4
71
)
72
(
73
  clk   ,
74
  rst   ,
75
  cyc_i ,
76
  stb_i ,
77
  we_i  ,
78
  adr_i ,
79
  dat_i ,
80
  sel_i ,
81
  ack_o ,
82
  err_o ,
83
  rty_o ,
84
  dat_o
85
);
86
 
87
  //------------------------------------------------------------------------------------------------------
88
  //
89
  //------------------------------------------------------------------------------------------------------
90
 
91
  input  logic                clk   ;
92
  input  logic                rst   ;
93
  input  logic                cyc_i ;
94
  input  logic                stb_i ;
95
  input  logic                we_i  ;
96
  input  logic   [pA_W-1 : 0] adr_i ;
97
  input  logic   [pD_W-1 : 0] dat_i ;
98
  input  logic [pSEL_W-1 : 0] sel_i ;
99
  output logic                ack_o ;
100
  output logic                err_o ;
101
  output logic                rty_o ;
102
  output logic   [pD_W-1 : 0] dat_o ;
103
 
104
  //------------------------------------------------------------------------------------------------------
105
  //
106
  //------------------------------------------------------------------------------------------------------
107
 
108
  default clocking cb @(posedge clk);
109
    default input #1ns output #1ns;
110
    output ack_o, err_o, rty_o, dat_o;
111
    input  cyc_i, stb_i, we_i, adr_i, dat_i, sel_i;
112
  endclocking
113
 
114
  //------------------------------------------------------------------------------------------------------
115
  //
116
  //------------------------------------------------------------------------------------------------------
117
 
118
  localparam    lp_ADDR_32BIT_RANGE     =   33'h1_0000_0000;
119
  localparam    lp_MEM_ADDR_32BIT_RANGE =   (lp_ADDR_32BIT_RANGE-1);
120
 
121
  bit [pD_W-1 : 0] ram [16*512 : 0];// usually lp_MY_MEM_SIZE < 8K WORDs
122
 
123
  bit rnd = 0;  // use random wait states
124
  int ws  = 1;  // wait states
125
  //------------------------------------------------------------------------------------------------------
126
  //
127
  //------------------------------------------------------------------------------------------------------
128
 
129
  initial begin : ini
130
    cb.ack_o <= 1'b0;
131
    cb.err_o <= 1'b0;
132
    cb.rty_o <= 1'b0;
133
    cb.dat_o <= 1'b0;
134
 
135
    run ();
136
  end
137
 
138
  bit tack;
139
 
140
  assign #1ns tack = (cyc_i & stb_i);
141
 
142
  task run ();
143
    fork
144
      forever begin
145
        if (ws == 0) begin // ws == 0
146
          force ack_o = tack;
147
          wait (cyc_i);
148
          //
149
          if (rnd)
150
            ws = $urandom_range(0, 5);
151
          //
152
          if (cyc_i & stb_i) begin
153
            if (we_i)
154
              ram[adr_i] = dat_i;
155
            else
156
              dat_o <= #1ns ram[adr_i];
157
          end
158
          //
159
          ##1;
160
          release ack_o;
161
        end // ws == 0
162
 
163
        else begin // ws > 0
164
          ##1;
165
          if (cb.cyc_i & cb.stb_i) begin
166
 
167
            ##(ws-1);
168
 
169
            if (rnd)
170
              ws = $urandom_range(0, 5);
171
 
172
            if (cb.we_i)
173
              ram[cb.adr_i] = cb.dat_i;
174
            else
175
              cb.dat_o <= ram[cb.adr_i];
176
 
177
            cb.ack_o <= 1'b1;
178
            ##1;
179
            cb.ack_o <= 1'b0;
180
          end // access
181
        end // ws
182
      end // forever
183
    join_none
184
  endtask
185
 
186
 
187
  task stop ();
188
    disable run ;
189
  endtask
190
 
191
endinterface

powered by: WebSVN 2.1.0

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