1 |
10 |
M_artin |
--==========================================================================--
|
2 |
|
|
-- --
|
3 |
|
|
-- Copyright (C) 2011 by Martin Neumann martin@neumanns-mail.de --
|
4 |
|
|
-- --
|
5 |
|
|
-- File name : usb_tc03.vhd --
|
6 |
|
|
-- Author : Martin Neumann martin@neumanns-mail.de --
|
7 |
|
|
-- Description : Copy and rename this file to usb_stimuli.vhd --
|
8 |
|
|
-- before running a new simulation! --
|
9 |
|
|
-- --
|
10 |
|
|
--==========================================================================--
|
11 |
|
|
-- --
|
12 |
|
|
-- Change history --
|
13 |
|
|
-- --
|
14 |
|
|
-- Version / date Description --
|
15 |
|
|
-- --
|
16 |
|
|
-- 01 15 Mar 2013 MN Initial version --
|
17 |
|
|
-- --
|
18 |
|
|
-- End change history --
|
19 |
|
|
--==========================================================================--
|
20 |
|
|
|
21 |
|
|
LIBRARY work, IEEE;
|
22 |
|
|
USE IEEE.std_logic_1164.ALL;
|
23 |
|
|
USE IEEE.std_logic_arith.ALL;
|
24 |
|
|
USE work.usb_commands.ALL;
|
25 |
|
|
|
26 |
|
|
ENTITY USB_Stimuli IS PORT(
|
27 |
|
|
-- Test Control Interface --
|
28 |
|
|
USB : OUT usb_action;
|
29 |
|
|
rst_neg_ext : OUT STD_LOGIC;
|
30 |
|
|
t_no : OUT NATURAL
|
31 |
|
|
);
|
32 |
|
|
END USB_Stimuli;
|
33 |
|
|
|
34 |
|
|
ARCHITECTURE sim OF usb_stimuli IS
|
35 |
|
|
|
36 |
|
|
BEGIN
|
37 |
|
|
--==========================================================================--
|
38 |
|
|
-- All outcommented procedure calls reflect the expected USB Slave response --
|
39 |
|
|
--==========================================================================--
|
40 |
|
|
p_stimuli_data : PROCESS
|
41 |
|
|
variable top : NATURAL;
|
42 |
|
|
BEGIN
|
43 |
|
|
list("**********************************");
|
44 |
|
|
list("* *");
|
45 |
|
|
list("* Test USB FS SLAVE *");
|
46 |
|
|
list("* Init according to Win 7 driver *");
|
47 |
|
|
list("* *");
|
48 |
|
|
list("**********************************");
|
49 |
|
|
rst_neg_ext <= '0';
|
50 |
|
|
WAIT FOR 301 ns;
|
51 |
|
|
rst_neg_ext <= '1';
|
52 |
|
|
WAIT FOR 400 ns;
|
53 |
|
|
--***************************************--
|
54 |
|
|
list(T_No, 01);
|
55 |
|
|
send_res(usb);
|
56 |
|
|
sof_token(usb, X"55D");
|
57 |
|
|
sof_token(usb, X"55E");
|
58 |
|
|
sof_token(usb, X"55F");
|
59 |
|
|
setup(usb, X"00",X"0"); -- GET_DESCRIPTOR
|
60 |
|
|
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"40",X"00"));
|
61 |
|
|
wait_slv (usb);
|
62 |
|
|
-- recv_ACK (usb);
|
63 |
|
|
in_token(usb, X"00",X"0");
|
64 |
|
|
wait_slv (usb);
|
65 |
|
|
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40",
|
66 |
|
|
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00",
|
67 |
|
|
-- X"00",X"01"));
|
68 |
|
|
send_ACK (usb);
|
69 |
|
|
out_token(usb, X"00",X"0");
|
70 |
|
|
send_D1 (usb);
|
71 |
|
|
wait_slv (usb);
|
72 |
|
|
-- recv_ACK (usb);
|
73 |
|
|
send_res(usb);
|
74 |
|
|
list(T_No, 02);
|
75 |
|
|
--***************************************--
|
76 |
|
|
setup(usb, X"00",X"0"); -- SET_ADDRESS
|
77 |
|
|
send_D0 (usb, (X"00",X"05",X"02",X"00",X"00",X"00",X"00",X"00"));
|
78 |
|
|
wait_slv (usb);
|
79 |
|
|
-- recv_ACK (usb);
|
80 |
|
|
in_token(usb, X"00",X"0");
|
81 |
|
|
wait_slv (usb);
|
82 |
|
|
-- recv_D1 (usb);
|
83 |
|
|
send_ACK (usb);
|
84 |
|
|
list(T_No, 03);
|
85 |
|
|
--***************************************--
|
86 |
|
|
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 1
|
87 |
|
|
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"12",X"00"));
|
88 |
|
|
wait_slv (usb);
|
89 |
|
|
-- recv_ACK (usb);
|
90 |
|
|
in_token(usb, X"02",X"0");
|
91 |
|
|
wait_slv (usb);
|
92 |
|
|
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40",
|
93 |
|
|
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00",
|
94 |
|
|
-- X"00",X"01"));
|
95 |
|
|
send_ACK (usb);
|
96 |
|
|
out_token(usb, X"02",X"0");
|
97 |
|
|
send_D1 (usb);
|
98 |
|
|
wait_slv (usb);
|
99 |
|
|
-- recv_ACK (usb);
|
100 |
|
|
list(T_No, 04);
|
101 |
|
|
--***************************************--
|
102 |
|
|
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 2
|
103 |
|
|
send_D0 (usb, (X"80",X"06",X"00",X"02",X"00",X"00",X"FF",X"00"));
|
104 |
|
|
wait_slv (usb);
|
105 |
|
|
-- recv_ACK (usb);
|
106 |
|
|
in_token(usb, X"02",X"0");
|
107 |
|
|
wait_slv (usb);
|
108 |
|
|
-- recv_D1 (usb, (X"09",X"02",X"43",X"00",X"02",X"01",X"00",X"80",
|
109 |
|
|
-- X"FA",X"09",X"04",X"00",X"00",X"01",X"02",X"02",
|
110 |
|
|
-- X"01",X"00",X"05",X"24",X"00",X"10",X"01",X"04",
|
111 |
|
|
-- X"24",X"02",X"00",X"05",X"24",X"06",X"00",X"01",
|
112 |
|
|
-- X"05",X"24",X"01",X"00",X"01",X"07",X"05",X"82",
|
113 |
|
|
-- X"03",X"08",X"00",X"FF",X"09",X"04",X"01",X"00",
|
114 |
|
|
-- X"02",X"0A",X"00",X"00",X"00",X"07",X"05",X"81",
|
115 |
|
|
-- X"02",X"40",X"00",X"00",X"07",X"05",X"01",X"02"));
|
116 |
|
|
send_ACK (usb);
|
117 |
|
|
in_token(usb, X"02",X"0");
|
118 |
|
|
wait_slv (usb);
|
119 |
|
|
-- recv_D0 (usb, (X"40",X"00",X"00"));
|
120 |
|
|
send_ACK (usb);
|
121 |
|
|
out_token(usb, X"02",X"0");
|
122 |
|
|
send_D1 (usb);
|
123 |
|
|
wait_slv (usb);
|
124 |
|
|
-- recv_ACK (usb);
|
125 |
|
|
list(T_No, 05);
|
126 |
|
|
--***************************************--
|
127 |
|
|
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 1
|
128 |
|
|
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"12",X"00"));
|
129 |
|
|
wait_slv (usb);
|
130 |
|
|
-- recv_ACK (usb);
|
131 |
|
|
in_token(usb, X"02",X"0");
|
132 |
|
|
wait_slv (usb);
|
133 |
|
|
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40",
|
134 |
|
|
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00",
|
135 |
|
|
-- X"00",X"01"));
|
136 |
|
|
send_ACK (usb);
|
137 |
|
|
out_token(usb, X"02",X"0");
|
138 |
|
|
send_D1 (usb);
|
139 |
|
|
wait_slv (usb);
|
140 |
|
|
-- recv_ACK (usb);
|
141 |
|
|
list(T_No, 06);
|
142 |
|
|
--***************************************--
|
143 |
|
|
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 2
|
144 |
|
|
send_D0 (usb, (X"80",X"06",X"00",X"02",X"00",X"00",X"09",X"01"));
|
145 |
|
|
wait_slv (usb);
|
146 |
|
|
-- recv_ACK (usb);
|
147 |
|
|
in_token(usb, X"02",X"0");
|
148 |
|
|
wait_slv (usb);
|
149 |
|
|
-- recv_D1 (usb, (X"09",X"02",X"43",X"00",X"02",X"01",X"00",X"80",
|
150 |
|
|
-- X"FA",X"09",X"04",X"00",X"00",X"01",X"02",X"02",
|
151 |
|
|
-- X"01",X"00",X"05",X"24",X"00",X"10",X"01",X"04",
|
152 |
|
|
-- X"24",X"02",X"00",X"05",X"24",X"06",X"00",X"01",
|
153 |
|
|
-- X"05",X"24",X"01",X"00",X"01",X"07",X"05",X"82",
|
154 |
|
|
-- X"03",X"08",X"00",X"FF",X"09",X"04",X"01",X"00",
|
155 |
|
|
-- X"02",X"0A",X"00",X"00",X"00",X"07",X"05",X"81",
|
156 |
|
|
-- X"02",X"40",X"00",X"00",X"07",X"05",X"01",X"02"));
|
157 |
|
|
send_ACK (usb);
|
158 |
|
|
in_token(usb, X"02",X"0");
|
159 |
|
|
wait_slv (usb);
|
160 |
|
|
-- recv_D0 (usb, (X"40",X"00",X"00"));
|
161 |
|
|
send_ACK (usb);
|
162 |
|
|
out_token(usb, X"02",X"0");
|
163 |
|
|
send_D1 (usb);
|
164 |
|
|
wait_slv (usb);
|
165 |
|
|
-- recv_ACK (usb);
|
166 |
|
|
list(T_No, 07);
|
167 |
|
|
--***************************************--
|
168 |
|
|
setup(usb, X"02",X"0"); -- SET_CONFIGURATION
|
169 |
|
|
send_D0 (usb, (X"00",X"09",X"01",X"00",X"00",X"00",X"00",X"00"));
|
170 |
|
|
wait_slv (usb);
|
171 |
|
|
-- recv_ACK (usb);
|
172 |
|
|
in_token(usb, X"02",X"0");
|
173 |
|
|
wait_slv (usb);
|
174 |
|
|
-- recv_D1 (usb);
|
175 |
|
|
send_ACK (usb);
|
176 |
|
|
list(T_No, 08);
|
177 |
|
|
--***************************************--
|
178 |
|
|
setup(usb, X"02",X"0");
|
179 |
|
|
send_D0 (usb, (X"A1",X"21",X"00",X"00",X"00",X"00",X"07",X"00"));
|
180 |
|
|
wait_slv (usb);
|
181 |
|
|
-- recv_ACK (usb);
|
182 |
|
|
in_token(usb, X"02",X"0");
|
183 |
|
|
wait_slv (usb);
|
184 |
|
|
-- recv_D1 (usb);
|
185 |
|
|
send_ACK (usb);
|
186 |
|
|
out_token(usb, X"02",X"0");
|
187 |
|
|
send_D1 (usb);
|
188 |
|
|
wait_slv (usb);
|
189 |
|
|
-- recv_ACK (usb);
|
190 |
|
|
list(T_No, 09);
|
191 |
|
|
--***************************************--
|
192 |
|
|
setup(usb, X"02",X"0");
|
193 |
|
|
send_D0 (usb, (X"21",X"22",X"00",X"00",X"00",X"00",X"00",X"00"));
|
194 |
|
|
wait_slv (usb);
|
195 |
|
|
-- recv_ACK (usb);
|
196 |
|
|
in_token(usb, X"02",X"0");
|
197 |
|
|
wait_slv (usb);
|
198 |
|
|
-- recv_D1 (usb);
|
199 |
|
|
send_ACK (usb);
|
200 |
|
|
list("write and read 3x 64 bytes to - from engine 1");
|
201 |
|
|
--==========================================================================--
|
202 |
|
|
-- Win 7 configuration sequence has been completed - applicatioon starting --
|
203 |
|
|
-- First engine 1 transfer after setup -> data toggle bit starts with 0 !! --
|
204 |
|
|
--==========================================================================--
|
205 |
|
|
list(T_No, 10);
|
206 |
|
|
out_token(usb, X"02",X"1");
|
207 |
|
|
send_D0 (usb, (X"00",X"01",X"02",X"03",X"04",X"05",X"06",X"07",
|
208 |
|
|
X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",
|
209 |
|
|
X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17",
|
210 |
|
|
X"18",X"19",X"1A",X"1B",X"1C",X"1D",X"1E",X"1F",
|
211 |
|
|
X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27",
|
212 |
|
|
X"28",X"29",X"2A",X"2B",X"2C",X"2D",X"2E",X"2F",
|
213 |
|
|
X"30",X"31",X"32",X"33",X"34",X"35",X"36",X"37",
|
214 |
|
|
X"38",X"39",X"3A",X"3B",X"3C",X"3D",X"3E",X"3F"));
|
215 |
|
|
wait_slv (usb);
|
216 |
|
|
-- recv_ACK (usb);
|
217 |
|
|
out_token(usb, X"02",X"1");
|
218 |
|
|
send_D1 (usb, (X"40",X"41",X"42",X"43",X"44",X"45",X"46",X"47",
|
219 |
|
|
X"48",X"49",X"4A",X"4B",X"4C",X"4D",X"4E",X"4F",
|
220 |
|
|
X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57",
|
221 |
|
|
X"58",X"59",X"5A",X"5B",X"5C",X"5D",X"5E",X"5F",
|
222 |
|
|
X"60",X"61",X"62",X"63",X"64",X"65",X"66",X"67",
|
223 |
|
|
X"68",X"69",X"6A",X"6B",X"6C",X"6D",X"6E",X"6F",
|
224 |
|
|
X"70",X"71",X"72",X"73",X"74",X"75",X"76",X"77",
|
225 |
|
|
X"78",X"79",X"7A",X"7B",X"7C",X"7D",X"7E",X"7F"));
|
226 |
|
|
wait_slv (usb);
|
227 |
|
|
-- recv_ACK (usb);
|
228 |
|
|
out_token(usb, X"02",X"1");
|
229 |
|
|
send_D0 (usb, (X"80",X"81",X"82",X"83",X"84",X"85",X"86",X"87",
|
230 |
|
|
X"88",X"89",X"8A",X"8B",X"8C",X"8D",X"8E",X"8F",
|
231 |
|
|
X"90",X"91",X"92",X"93",X"94",X"95",X"96",X"97",
|
232 |
|
|
X"98",X"99",X"9A",X"9B",X"9C",X"9D",X"9E",X"9F",
|
233 |
|
|
X"A0",X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",
|
234 |
|
|
X"A8",X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",
|
235 |
|
|
X"B0",X"B1",X"B2",X"B3",X"B4",X"B5",X"B6",X"B7",
|
236 |
|
|
X"B8",X"B9",X"BA",X"BB",X"BC",X"BD",X"BE",X"BF"));
|
237 |
|
|
wait_slv (usb);
|
238 |
|
|
-- recv_ACK (usb);
|
239 |
|
|
list(T_No, 11);
|
240 |
|
|
list("read 1st 64 bytes");
|
241 |
|
|
in_token(usb, X"02",X"1");
|
242 |
|
|
wait_slv (usb);
|
243 |
|
|
-- recv_D0 (usb, (X"00",X"10",X"20",X"30",X"40",X"50",X"60",X"70",
|
244 |
|
|
-- X"80",X"90",X"A0",X"B0",X"C0",X"D0",X"E0",X"F0",
|
245 |
|
|
-- X"01",X"11",X"21",X"31",X"41",X"51",X"61",X"71",
|
246 |
|
|
-- X"81",X"91",X"A1",X"B1",X"C1",X"D1",X"E1",X"F1",
|
247 |
|
|
-- X"02",X"12",X"22",X"32",X"42",X"52",X"62",X"72",
|
248 |
|
|
-- X"82",X"92",X"A2",X"B2",X"C2",X"D2",X"E2",X"F2",
|
249 |
|
|
-- X"03",X"13",X"23",X"33",X"43",X"53",X"63",X"73",
|
250 |
|
|
-- X"83",X"93",X"A3",X"B3",X"C3",X"D3",X"E3",X"F3"));
|
251 |
|
|
send_ACK (usb);
|
252 |
|
|
list("read 2nd 64 bytes");
|
253 |
|
|
in_token(usb, X"02",X"1");
|
254 |
|
|
wait_slv (usb);
|
255 |
|
|
-- recv_D1 (usb, (X"04",X"14",X"24",X"34",X"44",X"54",X"64",X"74",
|
256 |
|
|
-- X"84",X"94",X"A4",X"B4",X"C4",X"D4",X"E4",X"F4",
|
257 |
|
|
-- X"05",X"15",X"25",X"35",X"45",X"55",X"65",X"75",
|
258 |
|
|
-- X"85",X"95",X"A5",X"B5",X"C5",X"D5",X"E5",X"F5",
|
259 |
|
|
-- X"06",X"16",X"26",X"36",X"46",X"56",X"66",X"76",
|
260 |
|
|
-- X"86",X"96",X"A6",X"B6",X"C6",X"D6",X"E6",X"F6",
|
261 |
|
|
-- X"07",X"17",X"27",X"37",X"47",X"57",X"67",X"77",
|
262 |
|
|
-- X"87",X"97",X"A7",X"B7",X"C7",X"D7",X"E7",X"F7"));
|
263 |
|
|
send_ACK (usb);
|
264 |
|
|
in_token(usb, X"02",X"1");
|
265 |
|
|
wait_slv (usb);
|
266 |
|
|
-- recv_D0 (usb, (X"08",X"18",X"28",X"38",X"48",X"58",X"68",X"78",
|
267 |
|
|
-- X"88",X"98",X"A8",X"B8",X"C8",X"D8",X"E8",X"F8",
|
268 |
|
|
-- X"09",X"19",X"29",X"39",X"49",X"59",X"69",X"79",
|
269 |
|
|
-- X"89",X"99",X"A9",X"B9",X"C9",X"D9",X"E9",X"F9",
|
270 |
|
|
-- X"0A",X"1A",X"2A",X"3A",X"4A",X"5A",X"6A",X"7A",
|
271 |
|
|
-- X"8A",X"9A",X"AA",X"BA",X"CA",X"DA",X"EA",X"FA",
|
272 |
|
|
-- X"0B",X"1B",X"2B",X"3B",X"4B",X"5B",X"6B",X"7B",
|
273 |
|
|
-- X"8B",X"9B",X"AB",X"BB",X"CB",X"DB",X"EB",X"FB"));
|
274 |
|
|
send_ACK (usb);
|
275 |
|
|
list("write and read 1x 64 bytes to - from engine 1");
|
276 |
|
|
--**************************************************--
|
277 |
|
|
list(T_No, 32);
|
278 |
|
|
out_token(usb, X"02",X"1");
|
279 |
|
|
send_D1 (usb, (X"C0",X"C1",X"C2",X"C3",X"C4",X"C5",X"C6",X"C7",
|
280 |
|
|
X"C8",X"C9",X"CA",X"CB",X"CC",X"CD",X"CE",X"CF",
|
281 |
|
|
X"D0",X"D1",X"D2",X"D3",X"D4",X"D5",X"D6",X"D7",
|
282 |
|
|
X"D8",X"D9",X"DA",X"DB",X"DC",X"DD",X"DE",X"DF",
|
283 |
|
|
X"E0",X"E1",X"E2",X"E3",X"E4",X"E5",X"E6",X"E7",
|
284 |
|
|
X"E8",X"E9",X"EA",X"EB",X"EC",X"ED",X"EE",X"EF",
|
285 |
|
|
X"F0",X"F1",X"F2",X"F3",X"F4",X"F5",X"F6",X"F7",
|
286 |
|
|
X"F8",X"F9",X"FA",X"FB",X"FC",X"FD",X"FE",X"FF"));
|
287 |
|
|
wait_slv (usb);
|
288 |
|
|
list(T_No, 13);
|
289 |
|
|
in_token(usb, X"02",X"1");
|
290 |
|
|
wait_slv (usb);
|
291 |
|
|
-- recv_D1 (usb, (X"0C",X"1C",X"2C",X"3C",X"4C",X"5C",X"6C",X"7C",
|
292 |
|
|
-- X"8C",X"9C",X"AC",X"BC",X"CC",X"DC",X"EC",X"FC",
|
293 |
|
|
-- X"0D",X"1D",X"2D",X"3D",X"4D",X"5D",X"6D",X"7D",
|
294 |
|
|
-- X"8D",X"9D",X"AD",X"BD",X"CD",X"DD",X"ED",X"FD",
|
295 |
|
|
-- X"0E",X"1E",X"2E",X"3E",X"4E",X"5E",X"6E",X"7E",
|
296 |
|
|
-- X"8E",X"9E",X"AE",X"BE",X"CE",X"DE",X"EE",X"FE",
|
297 |
|
|
-- X"0F",X"1F",X"2F",X"3F",X"4F",X"5F",X"6F",X"7F",
|
298 |
|
|
-- X"8F",X"9F",X"AF",X"BF",X"CF",X"DF",X"EF",X"FF"));
|
299 |
|
|
send_ACK (usb);
|
300 |
|
|
list(T_No, 14);
|
301 |
|
|
list("test for more data - nothing");
|
302 |
|
|
in_token(usb, X"02",X"1");
|
303 |
|
|
wait_slv (usb);
|
304 |
|
|
-- recv_D0 (usb);
|
305 |
|
|
send_ACK (usb);
|
306 |
|
|
|
307 |
|
|
ASSERT FALSE REPORT"End of Test" SEVERITY FAILURE;
|
308 |
|
|
END PROCESS;
|
309 |
|
|
|
310 |
|
|
END sim;
|