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

Subversion Repositories nysa_sata

[/] [nysa_sata/] [trunk/] [sim/] [tb_cocotb.v] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cospan
`timescale 1ns/1ps
2
 
3
`include "sata_defines.v"
4
 
5
module tb_cocotb (
6
 
7
//Parameters
8
//Registers/Wires
9
input               rst,              //reset
10
input               clk,
11
 
12
output              linkup,           //link is finished
13
output              sata_ready,
14
output              busy,
15
 
16
input               write_data_en,
17
input               read_data_en,
18
 
19
input               soft_reset_en,
20
input       [15:0]  sector_count,
21
input       [47:0]  sector_address,
22
 
23
output              d2h_interrupt,
24
output              d2h_notification,
25
output      [3:0]   d2h_port_mult,
26
output      [7:0]   d2h_device,
27
output      [47:0]  d2h_lba,
28
output      [15:0]  d2h_sector_count,
29
output      [7:0]   d2h_status,
30
output      [7:0]   d2h_error,
31
 
32
input               u2h_write_enable,
33
output              u2h_write_finished,
34
input       [23:0]  u2h_write_count,
35
 
36
input               h2u_read_enable,
37
output      [23:0]  h2u_read_total_count,
38
output              h2u_read_error,
39
output              h2u_read_busy,
40
 
41
output              u2h_read_error,
42
 
43
 
44
output              transport_layer_ready,
45
output              link_layer_ready,
46
output              phy_ready,
47
 
48
input               prim_scrambler_en,
49
input               data_scrambler_en,
50
 
51
//Data Interface
52
output              tx_set_elec_idle,
53
output              rx_is_elec_idle,
54
output              hd_ready,
55
input               platform_ready,
56
 
57
//Debug
58
input               hold,
59
input               single_rdwr
60
);
61
reg     [31:0]      test_id = 0;
62
 
63
wire    [31:0]      tx_dout;
64
wire                tx_isk;
65
wire                tx_comm_reset;
66
wire                tx_comm_wake;
67
wire                tx_elec_idle;
68
 
69
wire    [31:0]      rx_din;
70
wire    [3:0]       rx_isk;
71
wire                rx_elec_idle;
72
wire                comm_init_detect;
73
wire                comm_wake_detect;
74
 
75
wire                rx_byte_is_aligned;
76
 
77
reg                 r_rst;
78
reg                 r_write_data_en;
79
reg                 r_read_data_en;
80
reg                 r_soft_reset_en;
81
reg     [15:0]      r_sector_count;
82
reg     [47:0]      r_sector_address;
83
reg                 r_prim_scrambler_en;
84
reg                 r_data_scrambler_en;
85
reg                 r_platform_ready;
86
reg                 r_dout_count;
87
reg                 r_hold;
88
reg                 r_single_rdwr;
89
 
90
reg                 r_u2h_write_enable;
91
reg         [23:0]  r_u2h_write_count;
92
reg                 r_h2u_read_enable;
93
 
94
wire                hd_read_from_host;
95
wire        [31:0]  hd_data_from_host;
96
 
97
 
98
wire                hd_write_to_host;
99
wire        [31:0]  hd_data_to_host;
100
 
101
wire        [31:0]  user_dout;
102
wire                user_dout_ready;
103
wire                user_dout_activate;
104
wire                user_dout_stb;
105
wire        [23:0]  user_dout_size;
106
 
107
 
108
wire  [31:0]        user_din;
109
wire                user_din_stb;
110
wire  [1:0]         user_din_ready;
111
wire  [1:0]         user_din_activate;
112
wire  [23:0]        user_din_size;
113
 
114
//There is a bug in COCOTB when stiumlating a signal, sometimes it can be corrupted if not registered
115
always @ (*) r_rst                = rst;
116
always @ (*) r_write_data_en      = write_data_en;
117
always @ (*) r_read_data_en       = read_data_en;
118
always @ (*) r_soft_reset_en      = soft_reset_en;
119
always @ (*) r_sector_count       = sector_count;
120
always @ (*) r_sector_address     = sector_address;
121
always @ (*) r_prim_scrambler_en  = prim_scrambler_en;
122
always @ (*) r_data_scrambler_en  = data_scrambler_en;
123
always @ (*) r_platform_ready     = platform_ready;
124
always @ (*) r_hold               = hold;
125
always @ (*) r_single_rdwr        = single_rdwr;
126
 
127
always @ (*) r_u2h_write_enable   = u2h_write_enable;
128
always @ (*) r_u2h_write_count    = u2h_write_count;
129
 
130
always @ (*) r_h2u_read_enable    = h2u_read_enable;
131
 
132
//Submodules
133
 
134
//User Generated Test Data
135
test_in user_2_hd_generator(
136
  .clk                   (clk                  ),
137
  .rst                   (rst                  ),
138
 
139
  .enable                (r_u2h_write_enable   ),
140
  .finished              (u2h_write_finished   ),
141
  .write_count           (r_u2h_write_count    ),
142
 
143
  .ready                 (user_din_ready       ),
144
  .activate              (user_din_activate    ),
145
  .fifo_data             (user_din             ),
146
  .fifo_size             (user_din_size        ),
147
  .strobe                (user_din_stb         )
148
);
149
 
150
//Module to process data from Hard Drive to User
151
test_out hd_2_user_reader(
152
  .clk                   (clk                  ),
153
  .rst                   (rst                  ),
154
 
155
  .busy                  (h2u_read_busy        ),
156
  .enable                (r_h2u_read_enable    ),
157
  .error                 (h2u_read_error       ),
158
  .total_count           (h2u_read_total_count ),
159
 
160
  .ready                 (user_dout_ready      ),
161
  .activate              (user_dout_activate   ),
162
  .size                  (user_dout_size       ),
163
  .data                  (user_dout            ),
164
  .strobe                (user_dout_stb        )
165
);
166
 
167
//hd data reader core
168
hd_data_reader user_2_hd_reader(
169
  .clk                   (clk                  ),
170
  .rst                   (rst                  ),
171
  .enable                (r_u2h_write_enable   ),
172
  .error                 (u2h_read_error       ),
173
 
174
  .hd_read_from_host     (hd_read_from_host    ),
175
  .hd_data_from_host     (hd_data_from_host    )
176
);
177
 
178
//hd data writer core
179
hd_data_writer hd_2_user_generator(
180
  .clk                   (clk                  ),
181
  .rst                   (rst                  ),
182
  .enable                (r_h2u_read_enable    ),
183
  .data                  (hd_data_to_host      ),
184
  .strobe                (hd_write_to_host     )
185
);
186
 
187
sata_stack ss (
188
  .rst                   (r_rst                ),  //reset
189
  .clk                   (clk                  ),  //clock used to run the stack
190
  .data_in_clk           (clk                  ),
191
  .data_in_clk_valid     (1'b1                 ),
192
  .data_out_clk          (clk                  ),
193
  .data_out_clk_valid    (1'b1                 ),
194
 
195
  .platform_ready        (platform_ready       ),  //the underlying physical platform is
196
  .linkup                (linkup               ),  //link is finished
197
  .sata_ready            (sata_ready           ),
198
 
199
  .busy                  (busy                 ),
200
 
201
  .write_data_en         (r_write_data_en      ),
202
  .single_rdwr           (r_single_rdwr        ),
203
  .read_data_en          (r_read_data_en       ),
204
 
205
  .send_user_command_stb (1'b0                 ),
206
  .soft_reset_en         (r_soft_reset_en      ),
207
  .command               (1'b0                 ),
208
 
209
  .sector_count          (r_sector_count       ),
210
  .sector_address        (r_sector_address     ),
211
 
212
  .d2h_interrupt         (d2h_interrupt        ),
213
  .d2h_notification      (d2h_notification     ),
214
  .d2h_port_mult         (d2h_port_mult        ),
215
  .d2h_device            (d2h_device           ),
216
  .d2h_lba               (d2h_lba              ),
217
  .d2h_sector_count      (d2h_sector_count     ),
218
  .d2h_status            (d2h_status           ),
219
  .d2h_error             (d2h_error            ),
220
 
221
  .user_din              (user_din             ),   //User Data Here
222
  .user_din_stb          (user_din_stb         ),   //Strobe Each Data word in here
223
  .user_din_ready        (user_din_ready       ),   //Using PPFIFO Ready Signal
224
  .user_din_activate     (user_din_activate    ),   //Activate PPFIFO Channel
225
  .user_din_size         (user_din_size        ),   //Find the size of the data to write to the device
226
 
227
  .user_dout             (user_dout            ),
228
  .user_dout_ready       (user_dout_ready      ),
229
  .user_dout_activate    (user_dout_activate   ),
230
  .user_dout_stb         (user_dout_stb        ),
231
  .user_dout_size        (user_dout_size       ),
232
 
233
  .transport_layer_ready (transport_layer_ready),
234
  .link_layer_ready      (link_layer_ready     ),
235
  .phy_ready             (phy_ready            ),
236
 
237
  .tx_dout               (tx_dout              ),
238
  .tx_isk                (tx_isk               ),
239
  .tx_comm_reset         (tx_comm_reset        ),
240
  .tx_comm_wake          (tx_comm_wake         ),
241
  .tx_elec_idle          (tx_elec_idle         ),
242
 
243
  .rx_din                (rx_din               ),
244
  .rx_isk                (rx_isk               ),
245
  .rx_elec_idle          (rx_elec_idle         ),
246
  .comm_init_detect      (comm_init_detect     ),
247
  .comm_wake_detect      (comm_wake_detect     ),
248
  .rx_byte_is_aligned    (rx_byte_is_aligned   ),
249
 
250
 
251
  .prim_scrambler_en     (r_prim_scrambler_en  ),
252
  .data_scrambler_en     (r_data_scrambler_en  )
253
);
254
 
255
faux_sata_hd  fshd   (
256
  .rst                   (r_rst                ),
257
  .clk                   (clk                  ),
258
  .tx_dout               (rx_din               ),
259
  .tx_isk                (rx_isk               ),
260
 
261
  .rx_din                (tx_dout              ),
262
  .rx_isk                ({3'b000, tx_isk}     ),
263
  .rx_is_elec_idle       (tx_elec_idle         ),
264
  .rx_byte_is_aligned    (rx_byte_is_aligned   ),
265
 
266
  .comm_reset_detect     (tx_comm_reset        ),
267
  .comm_wake_detect      (tx_comm_wake         ),
268
 
269
  .tx_comm_reset         (comm_init_detect     ),
270
  .tx_comm_wake          (comm_wake_detect     ),
271
 
272
  .hd_ready              (hd_ready             ),
273
//  .phy_ready             (phy_ready            ),
274
 
275
 
276
  .dbg_data_scrambler_en (r_data_scrambler_en  ),
277
 
278
  .dbg_hold              (r_hold               ),
279
 
280
  .dbg_ll_write_start    (0                    ),
281
  .dbg_ll_write_data     (0                    ),
282
  .dbg_ll_write_size     (0                    ),
283
  .dbg_ll_write_hold     (0                    ),
284
  .dbg_ll_write_abort    (0                    ),
285
 
286
  .dbg_ll_read_ready     (0                    ),
287
  .dbg_t_en              (0                    ),
288
 
289
  .dbg_send_reg_stb      (0                    ),
290
  .dbg_send_dma_act_stb  (0                    ),
291
  .dbg_send_data_stb     (0                    ),
292
  .dbg_send_pio_stb      (0                    ),
293
  .dbg_send_dev_bits_stb (0                    ),
294
 
295
  .dbg_pio_transfer_count(0                    ),
296
  .dbg_pio_direction     (0                    ),
297
  .dbg_pio_e_status      (0                    ),
298
 
299
  .dbg_d2h_interrupt     (0                    ),
300
  .dbg_d2h_notification  (0                    ),
301
  .dbg_d2h_status        (0                    ),
302
  .dbg_d2h_error         (0                    ),
303
  .dbg_d2h_port_mult     (0                    ),
304
  .dbg_d2h_device        (0                    ),
305
  .dbg_d2h_lba           (0                    ),
306
  .dbg_d2h_sector_count  (0                    ),
307
 
308
  .dbg_cl_if_data        (0                    ),
309
  .dbg_cl_if_ready       (0                    ),
310
  .dbg_cl_if_size        (0                    ),
311
  .dbg_cl_of_ready       (0                    ),
312
  .dbg_cl_of_size        (0                    ),
313
  .hd_read_from_host     (hd_read_from_host    ),
314
  .hd_data_from_host     (hd_data_from_host    ),
315
 
316
 
317
  .hd_write_to_host      (hd_write_to_host     ),
318
  .hd_data_to_host       (hd_data_to_host      )
319
 
320
 
321
);
322
 
323
//Asynchronous Logic
324
//Synchronous Logic
325
//Simulation Control
326
initial begin
327
  $dumpfile ("design.vcd");
328
  $dumpvars(0, tb_cocotb);
329
end
330
 
331
endmodule

powered by: WebSVN 2.1.0

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