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 3

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

powered by: WebSVN 2.1.0

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