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

Subversion Repositories wb_async_mem_bridge

[/] [wb_async_mem_bridge/] [trunk/] [sim/] [models/] [async_mem_master.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 qaztronic
// --------------------------------------------------------------------
2
//
3
// --------------------------------------------------------------------
4
 
5
`timescale 1ns/10ps
6
 
7
 
8
module async_mem_master
9
  #(
10
    parameter log_level = 3,
11
    parameter ce_setup  = 10,
12
    parameter op_hold   = 15,
13
    parameter dw        = 32,
14
    parameter aw        = 32
15
  )
16
  (
17
    inout   [(dw-1):0]  mem_d,
18
    output  [(aw-1):0]  mem_a,
19
    output              mem_oe_n,
20
    output  [3:0]       mem_bls_n,
21
    output              mem_we_n,
22
    output              mem_cs_n,
23
 
24
    input               tb_clk,
25
    input               tb_rst
26
  );
27
 
28
 
29
 
30
  // --------------------------------------------------------------------
31
  //  async_mem_default_state
32
  reg  [(dw-1):0] mem_d_r;
33
  reg  [(aw-1):0] mem_a_r;
34
  reg             mem_oe_n_r;
35
  reg  [3:0]      mem_bls_n_r;
36
  reg             mem_we_n_r;
37
  reg             mem_cs_n_r;
38
  reg             tb_oe_r;
39
 
40
  task async_mem_default_state;
41
    begin
42
      mem_d_r     = 'bx;
43
      mem_a_r     = 'bx;
44
      mem_oe_n_r  = 1'b1;
45
      mem_bls_n_r = 4'b1111;
46
      mem_we_n_r  = 1'b1;
47
      tb_oe_r     = 1'b0;
48
    end
49
  endtask
50
 
51
 
52
  // --------------------------------------------------------------------
53
  //  
54
  initial
55
    begin
56
      async_mem_default_state();
57
      mem_cs_n_r  = 1'b1;
58
    end
59
 
60
 
61
  // --------------------------------------------------------------------
62
  //  async_mem_3x_write
63
  task async_mem_3x_write;
64
    input [(dw-1):0]  address;
65
    input [(dw-1):0]  data1;
66
    input [(dw-1):0]  data2;
67
    input [(dw-1):0]  data3;
68
    input [3:0]       byte_lane_select;
69
      begin
70
 
71
        if( log_level > 2 )
72
          $display( "###- async_mem_3x_write: @ 0x%h at time %t. ", address, $time );
73
 
74
        @(posedge tb_clk);
75
 
76
        mem_cs_n_r  = 1'b0;
77
        repeat(ce_setup) @(posedge tb_clk);
78
 
79
        mem_d_r = data1;
80
        mem_a_r = address;
81
        mem_oe_n_r  = 1'b1;
82
        mem_bls_n_r = byte_lane_select;
83
        mem_we_n_r  = 1'b0;
84
        tb_oe_r     = 1'b1;
85
 
86
        repeat(op_hold) @(posedge tb_clk);
87
        mem_we_n_r  = 1'b1;
88
 
89
 
90
        repeat(ce_setup) @(posedge tb_clk);
91
        mem_d_r = data2;
92
        mem_a_r = address + 4;
93
        mem_we_n_r  = 1'b0;
94
        repeat(op_hold) @(posedge tb_clk);
95
        mem_we_n_r  = 1'b1;
96
 
97
        repeat(ce_setup) @(posedge tb_clk);
98
        mem_d_r = data3;
99
        mem_a_r = address + 8;
100
        mem_we_n_r  = 1'b0;
101
        repeat(op_hold) @(posedge tb_clk);
102
        mem_we_n_r  = 1'b1;
103
 
104
        @(posedge tb_clk);
105
 
106
        async_mem_default_state();
107
 
108
        mem_cs_n_r  = 1'b1;
109
 
110
      end
111
  endtask
112
 
113
 
114
  // --------------------------------------------------------------------
115
  //  async_mem_write
116
  task async_mem_write;
117
    input [(dw-1):0]  address;
118
    input [(dw-1):0]  data;
119
    input [3:0]       byte_lane_select;
120
      begin
121
 
122
        if( log_level > 2 )
123
          $display( "###- async_mem_write: 0x%h @ 0x%h at time %t. ", data, address, $time );
124
 
125
        @(posedge tb_clk);
126
 
127
        mem_cs_n_r  = 1'b0;
128
        repeat(ce_setup) @(posedge tb_clk);
129
 
130
        mem_d_r = data;
131
        mem_a_r = address;
132
        mem_oe_n_r  = 1'b1;
133
        mem_bls_n_r = byte_lane_select;
134
        mem_we_n_r  = 1'b0;
135
        tb_oe_r     = 1'b1;
136
        repeat(op_hold) @(posedge tb_clk);
137
 
138
        async_mem_default_state();
139
 
140
        mem_cs_n_r  = 1'b1;
141
 
142
      end
143
  endtask
144
 
145
 
146
  // --------------------------------------------------------------------
147
  //  async_mem_cmp
148
  task async_mem_cmp;
149
    input [(dw-1):0]  address;
150
    input [(dw-1):0]  data;
151
    input [3:0]       byte_lane_select;
152
      begin
153
 
154
        if( log_level > 2 )
155
          $display( "###- async_mem_cmp: 0x%h @ 0x%h at time %t. ", data, address, $time );
156
 
157
        @(posedge tb_clk);
158
 
159
        mem_cs_n_r  = 1'b0;
160
        mem_we_n_r  = 1'b1;
161
        mem_oe_n_r  = 1'b0;
162
        tb_oe_r     = 1'b0;
163
        mem_a_r = address;
164
        mem_bls_n_r = byte_lane_select;
165
        repeat(ce_setup) @(posedge tb_clk);
166
 
167
 
168
        if( ( mem_d !== data ) & (log_level > 0) )
169
          $display( "!!!- Data compare error at time %t. Received %h, expected %h at address %h", $time, mem_d, data, address);
170
 
171
        repeat(op_hold) @(posedge tb_clk);
172
 
173
        async_mem_default_state();
174
 
175
        mem_cs_n_r  = 1'b1;
176
 
177
      end
178
  endtask
179
 
180
 
181
  // --------------------------------------------------------------------
182
  //  async_mem_3x_cmp
183
  task async_mem_3x_cmp;
184
    input [(dw-1):0]  address;
185
    input [(dw-1):0]  data1;
186
    input [(dw-1):0]  data2;
187
    input [(dw-1):0]  data3;
188
    input [3:0]       byte_lane_select;
189
      begin
190
 
191
        if( log_level > 2 )
192
          $display( "###- async_mem_3x_cmp: @ 0x%h at time %t. ", address, $time );
193
 
194
        @(posedge tb_clk);
195
 
196
        mem_cs_n_r  = 1'b0;
197
        mem_we_n_r  = 1'b1;
198
        mem_oe_n_r  = 1'b0;
199
        tb_oe_r     = 1'b0;
200
        mem_a_r = address;
201
        mem_bls_n_r = byte_lane_select;
202
        repeat(ce_setup) @(posedge tb_clk);
203
 
204
 
205
        if( ( mem_d !== data1 ) & (log_level > 0) )
206
          $display( "!!!- Data compare error at time %t. Received %h, expected %h at address %h", $time, mem_d, data1, address);
207
 
208
        repeat(op_hold) @(posedge tb_clk);
209
 
210
        mem_a_r = address + 4;
211
        repeat(ce_setup) @(posedge tb_clk);
212
 
213
 
214
        if( ( mem_d !== data2 ) & (log_level > 0) )
215
          $display( "!!!- Data compare error at time %t. Received %h, expected %h at address %h", $time, mem_d, data2, address + 4);
216
 
217
        repeat(op_hold) @(posedge tb_clk);
218
 
219
        mem_a_r = address + 8;
220
        repeat(ce_setup) @(posedge tb_clk);
221
 
222
 
223
        if( ( mem_d !== data3 ) & (log_level > 0) )
224
          $display( "!!!- Data compare error at time %t. Received %h, expected %h at address %h", $time, mem_d, data3, address + 8);
225
 
226
        repeat(op_hold) @(posedge tb_clk);
227
 
228
        async_mem_default_state();
229
 
230
        mem_cs_n_r  = 1'b1;
231
 
232
      end
233
  endtask
234
 
235
 
236
  // --------------------------------------------------------------------
237
  //  outputs
238
  assign mem_d = tb_oe_r ? mem_d_r : 'bz;
239
 
240
  assign mem_a      = mem_a_r;
241
  assign mem_oe_n   = mem_oe_n_r;
242
  assign mem_bls_n  = mem_bls_n_r;
243
  assign mem_we_n   = mem_we_n_r;
244
  assign mem_cs_n   = mem_cs_n_r;
245
 
246
endmodule
247
 
248
 

powered by: WebSVN 2.1.0

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