URL
https://opencores.org/ocsvn/usb11_sim_model/usb11_sim_model/trunk
Subversion Repositories usb11_sim_model
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 5 to Rev 6
- ↔ Reverse comparison
Rev 5 → Rev 6
/usb11_sim_model/trunk/USB_Stimuli.vhd
1,35 → 1,22
--==========================================================================================================-- |
-- -- |
-- Copyright (C) 2011 by Martin Neumann martin@neumanns-mail.de -- |
-- -- |
-- This source file may be used and distributed without restriction provided that this copyright statement -- |
-- is not removed from the file and that any derivative work contains the original copyright notice and -- |
-- the associated disclaimer. -- |
-- -- |
-- This software is provided ''as is'' and without any express or implied warranties, including, but not -- |
-- limited to, the implied warranties of merchantability and fitness for a particular purpose. in no event -- |
-- shall the author or contributors be liable for any direct, indirect, incidental, special, exemplary, or -- |
-- consequential damages (including, but not limited to, procurement of substitute goods or services; loss -- |
-- of use, data, or profits; or business interruption) however caused and on any theory of liability, -- |
-- whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way -- |
-- out of the use of this software, even if advised of the possibility of such damage. -- |
-- -- |
--==========================================================================================================-- |
-- -- |
-- File name : USB_tc_02.vhd -- |
-- Author : Martin Neumann martin@neumanns-mail.de -- |
-- Description : Copy and rename this file to usb_stimuli.vhd before running a new simulation! -- |
-- -- |
--==========================================================================================================-- |
-- -- |
-- Change history -- |
-- -- |
-- Version / date Description -- |
-- -- |
-- 01 05 Mar 2011 MN Initial version -- |
-- -- |
-- End change history -- |
--==========================================================================================================-- |
--==========================================================================-- |
-- -- |
-- Copyright (C) 2011 by Martin Neumann martin@neumanns-mail.de -- |
-- -- |
-- File name : usb_tc03.vhd -- |
-- Author : Martin Neumann martin@neumanns-mail.de -- |
-- Description : Copy and rename this file to usb_stimuli.vhd -- |
-- before running a new simulation! -- |
-- -- |
--==========================================================================-- |
-- -- |
-- Change history -- |
-- -- |
-- Version / date Description -- |
-- -- |
-- 01 15 Mar 2013 MN Initial version -- |
-- -- |
-- End change history -- |
--==========================================================================-- |
|
LIBRARY work, IEEE; |
USE IEEE.std_logic_1164.ALL; |
39,115 → 26,285
ENTITY USB_Stimuli IS PORT( |
-- Test Control Interface -- |
USB : OUT usb_action; |
t_no : OUT NATURAL; |
-- Application Interface |
clk : IN STD_LOGIC; |
rst_neg_ext : OUT STD_LOGIC; |
RXval : IN STD_LOGIC; -- RX bytes available |
RXdat : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- Received data bytes |
RXrdy : OUT STD_LOGIC := '0'; -- Application ready for data |
RXlen : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- Number of bytes available |
TXval : OUT STD_LOGIC := '0'; -- Application has valid data |
TXdat : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Data byte to send |
TXrdy : IN STD_LOGIC; -- Entity is ready for data |
TXroom : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- No of free bytes in TX |
TXcork : OUT STD_LOGIC := '1'); -- Hold TX transmission |
t_no : OUT NATURAL |
); |
END USB_Stimuli; |
|
ARCHITECTURE sim OF usb_stimuli IS |
|
SIGNAL rd_data : byte_array(0 TO 7); |
SIGNAL TX_load : STD_LOGIC := '0'; |
|
BEGIN |
|
--==========================================================================-- |
-- All outcommented procedure calls reflect the expected USB Slave response -- |
--==========================================================================-- |
p_stimuli_data : PROCESS |
variable top : NATURAL; |
BEGIN |
list("*****************************"); |
list("* Results of tc_02.vhd *"); |
list("*****************************"); |
list(" "); |
list(T_No, 10); |
list("**********************************"); |
list("* *"); |
list("* Test USB FS SLAVE *"); |
list("* Init according to Win 7 driver *"); |
list("* *"); |
list("**********************************"); |
rst_neg_ext <= '0'; |
WAIT FOR 301 ns; |
rst_neg_ext <= '1'; |
WAIT FOR 40 ns; |
list("Reset completed, initializing"); |
TX_load <= '1'; |
list(T_No, 20); |
setup(usb, X"00", X"0"); --Send Setup to addr 0, endp 0 .. |
send_D0(usb,(X"80",X"06",X"00",X"01",X"00",X"00",X"40",X"00")); -- .. 'Get Device descriptor' |
wait_slv(usb); --Recv ACK |
in_token(usb, X"00", X"0"); --Send IN-Token |
wait_slv(usb); --Recv Data1 Device Discriptor |
send_ack(usb); --Send ACK |
out_token(usb, X"00", X"0"); |
send_D0(usb); --Send Zero Data |
wait_slv(usb); |
WAIT FOR 400 ns; |
--***************************************-- |
list(T_No, 01); |
send_res(usb); |
sof_token(usb, X"55D"); |
sof_token(usb, X"55E"); |
sof_token(usb, X"55F"); |
setup(usb, X"00",X"0"); -- GET_DESCRIPTOR |
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"40",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"00",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40", |
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00", |
-- X"00",X"01")); |
send_ACK (usb); |
out_token(usb, X"00",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
send_res(usb); |
list(T_No, 02); |
--***************************************-- |
setup(usb, X"00",X"0"); -- SET_ADDRESS |
send_D0 (usb, (X"00",X"05",X"02",X"00",X"00",X"00",X"00",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"00",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb); |
send_ACK (usb); |
list(T_No, 03); |
--***************************************-- |
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 1 |
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"12",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40", |
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00", |
-- X"00",X"01")); |
send_ACK (usb); |
out_token(usb, X"02",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 04); |
--***************************************-- |
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 2 |
send_D0 (usb, (X"80",X"06",X"00",X"02",X"00",X"00",X"FF",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"09",X"02",X"43",X"00",X"02",X"01",X"00",X"80", |
-- X"FA",X"09",X"04",X"00",X"00",X"01",X"02",X"02", |
-- X"01",X"00",X"05",X"24",X"00",X"10",X"01",X"04", |
-- X"24",X"02",X"00",X"05",X"24",X"06",X"00",X"01", |
-- X"05",X"24",X"01",X"00",X"01",X"07",X"05",X"82", |
-- X"03",X"08",X"00",X"FF",X"09",X"04",X"01",X"00", |
-- X"02",X"0A",X"00",X"00",X"00",X"07",X"05",X"81", |
-- X"02",X"40",X"00",X"00",X"07",X"05",X"01",X"02")); |
send_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D0 (usb, (X"40",X"00",X"00")); |
send_ACK (usb); |
out_token(usb, X"02",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 05); |
--***************************************-- |
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 1 |
send_D0 (usb, (X"80",X"06",X"00",X"01",X"00",X"00",X"12",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"12",X"01",X"10",X"01",X"02",X"00",X"00",X"40", |
-- X"9A",X"FB",X"9A",X"FB",X"20",X"00",X"00",X"00", |
-- X"00",X"01")); |
send_ACK (usb); |
out_token(usb, X"02",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 06); |
--***************************************-- |
setup(usb, X"02",X"0"); -- GET_DESCRIPTOR 2 |
send_D0 (usb, (X"80",X"06",X"00",X"02",X"00",X"00",X"09",X"01")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"09",X"02",X"43",X"00",X"02",X"01",X"00",X"80", |
-- X"FA",X"09",X"04",X"00",X"00",X"01",X"02",X"02", |
-- X"01",X"00",X"05",X"24",X"00",X"10",X"01",X"04", |
-- X"24",X"02",X"00",X"05",X"24",X"06",X"00",X"01", |
-- X"05",X"24",X"01",X"00",X"01",X"07",X"05",X"82", |
-- X"03",X"08",X"00",X"FF",X"09",X"04",X"01",X"00", |
-- X"02",X"0A",X"00",X"00",X"00",X"07",X"05",X"81", |
-- X"02",X"40",X"00",X"00",X"07",X"05",X"01",X"02")); |
send_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D0 (usb, (X"40",X"00",X"00")); |
send_ACK (usb); |
out_token(usb, X"02",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 07); |
--***************************************-- |
setup(usb, X"02",X"0"); -- SET_CONFIGURATION |
send_D0 (usb, (X"00",X"09",X"01",X"00",X"00",X"00",X"00",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb); |
send_ACK (usb); |
list(T_No, 08); |
--***************************************-- |
setup(usb, X"02",X"0"); |
send_D0 (usb, (X"A1",X"21",X"00",X"00",X"00",X"00",X"07",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb); |
send_ACK (usb); |
out_token(usb, X"02",X"0"); |
send_D1 (usb); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 09); |
--***************************************-- |
setup(usb, X"02",X"0"); |
send_D0 (usb, (X"21",X"22",X"00",X"00",X"00",X"00",X"00",X"00")); |
wait_slv (usb); |
-- recv_ACK (usb); |
in_token(usb, X"02",X"0"); |
wait_slv (usb); |
-- recv_D1 (usb); |
send_ACK (usb); |
list("write and read 3x 64 bytes to - from engine 1"); |
--==========================================================================-- |
-- Win 7 configuration sequence has been completed - applicatioon starting -- |
-- First engine 1 transfer after setup -> data toggle bit starts with 0 !! -- |
--==========================================================================-- |
list(T_No, 10); |
out_token(usb, X"02",X"1"); |
send_D0 (usb, (X"00",X"01",X"02",X"03",X"04",X"05",X"06",X"07", |
X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F", |
X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17", |
X"18",X"19",X"1A",X"1B",X"1C",X"1D",X"1E",X"1F", |
X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27", |
X"28",X"29",X"2A",X"2B",X"2C",X"2D",X"2E",X"2F", |
X"30",X"31",X"32",X"33",X"34",X"35",X"36",X"37", |
X"38",X"39",X"3A",X"3B",X"3C",X"3D",X"3E",X"3F")); |
wait_slv (usb); |
-- recv_ACK (usb); |
out_token(usb, X"02",X"1"); |
send_D1 (usb, (X"40",X"41",X"42",X"43",X"44",X"45",X"46",X"47", |
X"48",X"49",X"4A",X"4B",X"4C",X"4D",X"4E",X"4F", |
X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57", |
X"58",X"59",X"5A",X"5B",X"5C",X"5D",X"5E",X"5F", |
X"60",X"61",X"62",X"63",X"64",X"65",X"66",X"67", |
X"68",X"69",X"6A",X"6B",X"6C",X"6D",X"6E",X"6F", |
X"70",X"71",X"72",X"73",X"74",X"75",X"76",X"77", |
X"78",X"79",X"7A",X"7B",X"7C",X"7D",X"7E",X"7F")); |
wait_slv (usb); |
-- recv_ACK (usb); |
out_token(usb, X"02",X"1"); |
send_D0 (usb, (X"80",X"81",X"82",X"83",X"84",X"85",X"86",X"87", |
X"88",X"89",X"8A",X"8B",X"8C",X"8D",X"8E",X"8F", |
X"90",X"91",X"92",X"93",X"94",X"95",X"96",X"97", |
X"98",X"99",X"9A",X"9B",X"9C",X"9D",X"9E",X"9F", |
X"A0",X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7", |
X"A8",X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF", |
X"B0",X"B1",X"B2",X"B3",X"B4",X"B5",X"B6",X"B7", |
X"B8",X"B9",X"BA",X"BB",X"BC",X"BD",X"BE",X"BF")); |
wait_slv (usb); |
-- recv_ACK (usb); |
list(T_No, 11); |
list("read 1st 64 bytes"); |
in_token(usb, X"02",X"1"); |
wait_slv (usb); |
-- recv_D0 (usb, (X"00",X"10",X"20",X"30",X"40",X"50",X"60",X"70", |
-- X"80",X"90",X"A0",X"B0",X"C0",X"D0",X"E0",X"F0", |
-- X"01",X"11",X"21",X"31",X"41",X"51",X"61",X"71", |
-- X"81",X"91",X"A1",X"B1",X"C1",X"D1",X"E1",X"F1", |
-- X"02",X"12",X"22",X"32",X"42",X"52",X"62",X"72", |
-- X"82",X"92",X"A2",X"B2",X"C2",X"D2",X"E2",X"F2", |
-- X"03",X"13",X"23",X"33",X"43",X"53",X"63",X"73", |
-- X"83",X"93",X"A3",X"B3",X"C3",X"D3",X"E3",X"F3")); |
send_ACK (usb); |
list("read 2nd 64 bytes"); |
in_token(usb, X"02",X"1"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"04",X"14",X"24",X"34",X"44",X"54",X"64",X"74", |
-- X"84",X"94",X"A4",X"B4",X"C4",X"D4",X"E4",X"F4", |
-- X"05",X"15",X"25",X"35",X"45",X"55",X"65",X"75", |
-- X"85",X"95",X"A5",X"B5",X"C5",X"D5",X"E5",X"F5", |
-- X"06",X"16",X"26",X"36",X"46",X"56",X"66",X"76", |
-- X"86",X"96",X"A6",X"B6",X"C6",X"D6",X"E6",X"F6", |
-- X"07",X"17",X"27",X"37",X"47",X"57",X"67",X"77", |
-- X"87",X"97",X"A7",X"B7",X"C7",X"D7",X"E7",X"F7")); |
send_ACK (usb); |
in_token(usb, X"02",X"1"); |
wait_slv (usb); |
-- recv_D0 (usb, (X"08",X"18",X"28",X"38",X"48",X"58",X"68",X"78", |
-- X"88",X"98",X"A8",X"B8",X"C8",X"D8",X"E8",X"F8", |
-- X"09",X"19",X"29",X"39",X"49",X"59",X"69",X"79", |
-- X"89",X"99",X"A9",X"B9",X"C9",X"D9",X"E9",X"F9", |
-- X"0A",X"1A",X"2A",X"3A",X"4A",X"5A",X"6A",X"7A", |
-- X"8A",X"9A",X"AA",X"BA",X"CA",X"DA",X"EA",X"FA", |
-- X"0B",X"1B",X"2B",X"3B",X"4B",X"5B",X"6B",X"7B", |
-- X"8B",X"9B",X"AB",X"BB",X"CB",X"DB",X"EB",X"FB")); |
send_ACK (usb); |
list("write and read 1x 64 bytes to - from engine 1"); |
--**************************************************-- |
list(T_No, 32); |
out_token(usb, X"02",X"1"); |
send_D1 (usb, (X"C0",X"C1",X"C2",X"C3",X"C4",X"C5",X"C6",X"C7", |
X"C8",X"C9",X"CA",X"CB",X"CC",X"CD",X"CE",X"CF", |
X"D0",X"D1",X"D2",X"D3",X"D4",X"D5",X"D6",X"D7", |
X"D8",X"D9",X"DA",X"DB",X"DC",X"DD",X"DE",X"DF", |
X"E0",X"E1",X"E2",X"E3",X"E4",X"E5",X"E6",X"E7", |
X"E8",X"E9",X"EA",X"EB",X"EC",X"ED",X"EE",X"EF", |
X"F0",X"F1",X"F2",X"F3",X"F4",X"F5",X"F6",X"F7", |
X"F8",X"F9",X"FA",X"FB",X"FC",X"FD",X"FE",X"FF")); |
wait_slv (usb); |
list(T_No, 13); |
in_token(usb, X"02",X"1"); |
wait_slv (usb); |
-- recv_D1 (usb, (X"0C",X"1C",X"2C",X"3C",X"4C",X"5C",X"6C",X"7C", |
-- X"8C",X"9C",X"AC",X"BC",X"CC",X"DC",X"EC",X"FC", |
-- X"0D",X"1D",X"2D",X"3D",X"4D",X"5D",X"6D",X"7D", |
-- X"8D",X"9D",X"AD",X"BD",X"CD",X"DD",X"ED",X"FD", |
-- X"0E",X"1E",X"2E",X"3E",X"4E",X"5E",X"6E",X"7E", |
-- X"8E",X"9E",X"AE",X"BE",X"CE",X"DE",X"EE",X"FE", |
-- X"0F",X"1F",X"2F",X"3F",X"4F",X"5F",X"6F",X"7F", |
-- X"8F",X"9F",X"AF",X"BF",X"CF",X"DF",X"EF",X"FF")); |
send_ACK (usb); |
list(T_No, 14); |
list("test for more data - nothing"); |
in_token(usb, X"02",X"1"); |
wait_slv (usb); |
-- recv_D0 (usb); |
send_ACK (usb); |
|
list(T_No, 30); |
setup(usb, X"00", X"0"); --Setup to addr 0, endp 0 .. |
send_D0(usb,(X"00",X"05",X"03",X"00",X"00",X"00",X"00",X"00")); -- .. 'Set Address' |
wait_slv(usb); --Recv ACK |
in_token(usb, X"00", X"0"); --Send IN-Token |
wait_slv(usb); --Recv Data0 zero Length |
send_ack(usb); --Send ACK |
|
--Now we may use the new address : |
list(T_No, 50); |
out_token(usb, X"03", X"1"); --Send Out-Token to Endpoint 1 |
send_D0(usb, (X"11",X"22",X"33",X"44",X"55",X"66",X"77",X"88")); |
wait_slv(usb); |
list(T_No, 51); |
out_token(usb, X"03", X"1"); --Send Out-Token to Endpoint 1 |
send_D0(usb, (X"11",X"12",X"13",X"14",X"15",X"16",X"17",X"18")); |
wait_slv(usb); |
TXcork <= '0'; --Release TX buffer |
FOR i IN 0 TO 5 LOOP |
list(T_No, 60+i); |
in_token(usb, X"03", X"1"); --Send IN-Token to Endpoint 1 |
wait_slv(usb); --Recv Data ? |
send_ack(usb); --Send ACK |
END LOOP; |
-- list(T_No, 70); |
-- in_token(usb, X"03", X"1"); --Send IN-Token to Endpoint 1 |
-- wait_slv(usb); --Recv Data ? |
-- send_ack(usb); --Send ACK |
IF usb_busy THEN --is a usb_monitor signal |
WAIT UNTIL NOT usb_busy; |
END IF; |
WAIT FOR 300 ns; |
send_RES(usb); |
WAIT FOR 1 us; |
ASSERT FALSE REPORT"End of Test" SEVERITY FAILURE; |
END PROCESS; |
|
p_rd_data : PROCESS |
VARIABLE i : NATURAL := 0; |
BEGIN |
WAIT UNTIL rising_edge(clk); |
RXrdy <= '1'; |
IF i < 8 THEN |
RXrdy <= '1'; |
IF RXval ='1' THEN |
rd_data(i) <= RXdat; |
END IF; |
ELSE |
RXrdy <= '0'; |
END IF; |
END PROCESS; |
|
p_wr_data : PROCESS |
VARIABLE i : NATURAL := 0; |
BEGIN |
WAIT UNTIL rising_edge(clk); |
IF i < 333 AND TXrdy ='1' and TX_load ='1' THEN |
TXval <= '1'; |
TXdat <= CONV_STD_LOGIC_VECTOR(i,8); |
i := i +1; |
ELSE |
TXval <= '0'; |
END IF; |
END PROCESS; |
|
END sim; |