📄 tbxsp010pak.vhd
字号:
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, sd2_0_6);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 5us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 1us;
stim<= '1';
comment2:= "ACK ";
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- string #3
--------------------
-- send SETUP stage
comment2:= "GetDescriptor(String #3) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, gsd3);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 200us;
--------------------
-- data stage, DATA1
comment2:= "IN, DATA1 ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, sd3_0_6);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 5us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 1us;
comment2:= "ACK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- string #4
--------------------
-- send SETUP stage
comment2:= "GetDescriptor(String #4) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, gsd4);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 200us;
--------------------
-- data stage, DATA1
comment2:= "IN, DATA1 ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, sd4_0_6);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 5us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 1us;
comment2:= "ACK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
end procedure;
----------------------------------------------------------------------------
procedure SetAddress(
signal tb_clk: in STD_LOGIC;
signal tb_xd: out STD_LOGIC;
signal tb_x0: out STD_LOGIC;
signal stim: out STD_LOGIC) is
constant sa65: packetBUF:= (
x"00", -- 0: bmRequestType 0x00 Host-to-device
x"05", -- 1: bRequest 0x05 SET_ADDRESS
x"65", -- 2: wValue 0x0065 Device Address
x"00", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"00", -- 6: wLength 0x0000
x"00"); -- 7:
constant sa00: packetBUF:= (
x"00", -- 0: bmRequestType 0x00 Host-to-device
x"05", -- 1: bRequest 0x05 SET_ADDRESS
x"00", -- 2: wValue 0x0000 Device Address
x"00", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"00", -- 6: wLength 0x0000
x"00"); -- 7:
begin
comment1:= "SetAddress ";
----------------------------------------
-- SetAddress to 0x65
--------------------
-- send SETUP stage
comment2:= "SetAddress(0x00) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, sa65);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 45us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 15us;
comment2:= "ACK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- repeated SetAddress to verify
--------------------
-- send SETUP stage
comment2:= "SetAddress(0x01) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr1, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, sa00);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 45us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr1, ep0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 10us;
comment2:= "ACK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr1, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
end procedure;
----------------------------------------------------------------------------
procedure SetConfiguration(
signal tb_clk: in STD_LOGIC;
signal tb_xd: out STD_LOGIC;
signal tb_x0: out STD_LOGIC;
signal stim: out STD_LOGIC) is
constant sc: packetBUF:= (
x"00", -- 0: bmRequestType 0x00 Host-to-device
x"09", -- 1: bRequest 0x09 SET_CONFIGURATION
x"17", -- 2: wValue 0x0017 Configuration Value
x"00", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"00", -- 6: wLength 0x0000
x"00"); -- 7:
constant gc: packetBUF:= (
x"80", -- 0: bmRequestType 0x80 Device-to-host
x"08", -- 1: bRequest 0x08 GET_CONFIGURATION
x"00", -- 2: wValue 0x0000
x"00", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"01", -- 6: wLength 0x0001
x"00"); -- 7:
constant cv: packetCHR:=
x"17"; -- 0: Config Value 0x17
begin
comment1:= "SetConfiguration ";
----------------------------------------
-- SetConfiguration to 0x17
--------------------
-- send SETUP stage
comment2:= "SetConfiguration ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, sc);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 40us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 10us;
comment2:= "ACK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- GetConfiguration
--------------------
-- send SETUP stage
comment2:= "GetConfiguration ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, gc);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 40us;
--------------------
-- data stage, DATA1
comment2:= "IN, DATA1 ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, cv);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 10us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 1us;
comment2:= "ACK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
end procedure;
----------------------------------------------------------------------------
procedure GetStatus(
signal tb_clk: in STD_LOGIC;
signal tb_xd: out STD_LOGIC;
signal tb_x0: out STD_LOGIC;
signal stim: out STD_LOGIC) is
constant egs: packetBUF:= (
x"82", -- 0: bmRequestType 0x82 Device-to-host
x"00", -- 1: bRequest 0x00 GET_STATUS
x"00", -- 2: wValue 0x0000 Zero
x"00", -- 3:
x"01", -- 4: wIndex 0x0001 Endpoint
x"00", -- 5:
x"02", -- 6: wLength 0x0002 Two
x"00"); -- 7:
constant es0: packetBUF:= (
x"00", -- 0: 0x00 HALT off
x"00"); -- 1:
constant es1: packetBUF:= (
x"01", -- 0: 0x01 HALT on
x"00"); -- 1:
constant dgs: packetBUF:= (
x"80", -- 0: bmRequestType 0x80 Device-to-host
x"00", -- 1: bRequest 0x00 GET_STATUS
x"00", -- 2: wValue 0x0000 Zero
x"00", -- 3:
x"00", -- 4: wIndex 0x0000 Zero
x"00", -- 5:
x"02", -- 6: wLength 0x0002 Two
x"00"); -- 7:
constant ds: packetBUF:= (
x"01", -- 0: 0x01 Self Powered
x"00"); -- 1:
constant igs: packetBUF:= (
x"81", -- 0: bmRequestType 0x81 Device-to-host
x"00", -- 1: bRequest 0x00 GET_STATUS
x"00", -- 2: wValue 0x0000 Zero
x"00", -- 3:
x"01", -- 4: wIndex 0x0001 Interface
x"00", -- 5:
x"02", -- 6: wLength 0x0002 Two
x"00"); -- 7:
constant iis: packetBUF:= (
x"00", -- 0: 0x00 zero
x"00"); -- 1: 0x00 zero
constant esf: packetBUF:= (
x"02", -- 0: bmRequestType 0x02 Host-to-device
x"03", -- 1: bRequest 0x03 SET_FEATURE
x"00", -- 2: wValue 0x0000 Feature Selector
x"00", -- 3:
x"01", -- 4: wIndex 0x0001 Endpoint
x"00", -- 5:
x"00", -- 6: wLength 0x0000
x"00"); -- 7:
constant ecf: packetBUF:= (
x"02", -- 0: bmRequestType 0x02 Host-to-device
x"01", -- 1: bRequest 0x01 CLEAR_FEATURE
x"00", -- 2: wValue 0x0000 Feature Selector
x"00", -- 3:
x"01", -- 4: wIndex 0x0001 Endpoint
x"00", -- 5:
x"00", -- 6: wLength 0x0000
x"00"); -- 7:
begin
comment1:= "GetStatus ";
----------------------------------------
-- SetFeature (ENDPOINT_HALT)
--------------------
-- send SETUP stage
comment2:= "SetFeature(EP_HALT) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, esf);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 40us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 10us;
comment2:= "ACK ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- GetStatus(EP)
--------------------
-- send SETUP stage
comment2:= "GetStatus(EP) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, egs);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- data stage, DATA1
comment2:= "IN, DATA1 ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, es1);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 10us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 10us;
comment2:= "ACK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
----------------------------------------
-- GetStatus(Interface)
--------------------
-- send SETUP stage
comment2:= "GetStatus(Interface) ";
stim<= '1';
packetIDLE (tb_clk, tb_xd, tb_x0, 5);
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, igs);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- data stage, DATA1
comment2:= "IN, DATA1 ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetDATA1(tb_clk, tb_xd, tb_x0, iis);
stim<= '1';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 10us;
--------------------
-- status stage
comment2:= "NAK ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -