📄 tbxsp010pak.vhd
字号:
stim<= '0';
packetNAK (tb_clk, tb_xd, tb_x0);
wait for 5us;
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);
----------------------------------------
-- ClearFeature (ENDPOINT_HALT)
--------------------
-- send SETUP stage
comment2:= "ClearFeature(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, ecf);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- 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, es0);
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(Device)
--------------------
-- send SETUP stage
comment2:= "GetStatus(Device) ";
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, dgs);
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, ds);
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);
end procedure;
----------------------------------------------------------------------------
procedure GetReport(
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 gr: packetBUF:= (
x"A1", -- 0: bmRequestType 0xA1 Device-to-host
x"01", -- 1: bRequest 0x01 GET_REPORT
x"00", -- 2: wValue 0x0100 Input
x"01", -- 3:
x"01", -- 4: wIndex 0x0001 Interface
x"00", -- 5:
x"01", -- 6: wLength 0x0001 Report Length
x"00"); -- 7:
constant grd: packetCHR:=
x"AA"; -- 0: 0xAA Report Data
constant sr: packetBUF:= (
x"21", -- 0: bmRequestType 0x21 Device-to-host
x"09", -- 1: bRequest 0x09 SET_REPORT
x"00", -- 2: wValue 0x0100 Input
x"01", -- 3:
x"01", -- 4: wIndex 0x0001 Interface
x"00", -- 5:
x"01", -- 6: wLength 0x0001 Report Length
x"00"); -- 7:
constant srd: packetBUF:= (
x"AA", -- 0: 0xAA Report Data
x"55"); -- 1: 0x55
begin
comment1:= "GetReport ";
----------------------------------------
-- SetReport
--------------------
-- send SETUP stage
comment2:= "SetReport ";
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, sr);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- DATA stage
comment2:= "OUT, DATA1 ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0, srd);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 10us;
comment2:= "OUT, DATA0 ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, srd);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
--------------------
-- 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);
----------------------------------------
-- GetReport
--------------------
-- send SETUP stage
comment2:= "GetReport ";
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, gr);
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, grd);
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);
end procedure;
----------------------------------------------------------------------------
procedure GetClassDescriptor(
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 ghd: packetBUF:= (
x"81", -- 0: bmRequestType 0x81 Device-to-host
x"06", -- 1: bRequest 0x06 GET_DESCRIPTOR
x"00", -- 2: wValue 0x2100 HID
x"21", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"08", -- 6: wLength 0x0008
x"00"); -- 7:
constant hd0_7: packetBUF:= (
x"09", -- 0: bLength 0x09 9bytes
x"21", -- 1: bDescriptorType 0x21 HID
x"00", -- 2: bcdHID 0x0100 Rev 1.0
x"01", -- 3:
x"00", -- 4: bCountryCode 0x00
x"01", -- 5: bNumDescriptors 0x01
x"22", -- 6: bDescriptorType 0x22
x"1C"); -- 7: wDescriptorLength 0x1C
constant grd: packetBUF:= (
x"81", -- 0: bmRequestType 0x81 Device-to-host
x"06", -- 1: bRequest 0x06 GET_DESCRIPTOR
x"00", -- 2: wValue 0x2200 Report
x"22", -- 3:
x"00", -- 4: wIndex 0x0000
x"00", -- 5:
x"07", -- 6: wLength 0x0007
x"00"); -- 7:
constant rd0_6: packetBUF:= (
x"06", -- 0: 0x06
x"00", -- 1: 0x00
x"FF", -- 2: 0xFF
x"09", -- 3: 0x09
x"01", -- 4: 0x01
x"A1", -- 5: 0xA1
x"01"); -- 6: 0x01
begin
comment1:= "GetClassDescriptor ";
----------------------------------------
-- HID
--------------------
-- send SETUP stage
comment2:= "GetDescriptor(HID) ";
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, ghd);
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, hd0_7);
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);
----------------------------------------
-- Report
--------------------
-- send SETUP stage
comment2:= "GetDescriptor(Report) ";
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, grd);
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, rd0_6);
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);
end procedure;
----------------------------------------------------------------------------
procedure InvalidRequest(
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 inv: packetBUF:= (
x"FF", -- 0: bmRequestType 0xA1 Device-to-host
x"FF", -- 1: bRequest 0x01 GET_REPORT
x"FF", -- 2: wValue 0x0100 Input
x"FF", -- 3:
x"FF", -- 4: wIndex 0x0001 Interface
x"FF", -- 5:
x"FF", -- 6: wLength 0x0001 Report Length
x"FF"); -- 7:
constant ecf: packetBUF:= (
x"02", -- 0: bmRequestType 0x00 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:= "InvalidRequest ";
----------------------------------------
-- invalid request
--------------------
-- send SETUP stage
comment2:= "invalid SETUP ";
stim<= '1';
packetSETUP(tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA0(tb_clk, tb_xd, tb_x0, inv);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- try IN
comment2:= "IN, STALL ";
stim<= '1';
packetIN (tb_clk, tb_xd, tb_x0, addr0, ep0);
stim<= '0';
packetSTALL(tb_clk, tb_xd, tb_x0);
--------------------
-- try OUT
comment2:= "OUT, STALL ";
stim<= '1';
packetOUT (tb_clk, tb_xd, tb_x0, addr0, ep0);
packetDATA1(tb_clk, tb_xd, tb_x0, inv);
stim<= '0';
packetSTALL(tb_clk, tb_xd, tb_x0);
----------------------------------------
-- ClearFeature (any SETUP will disable endpoint STALL)
--------------------
-- send SETUP stage
comment2:= "ClearFeature(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, ecf);
stim<= '0';
packetACK (tb_clk, tb_xd, tb_x0);
wait for 50us;
--------------------
-- 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);
end procedure;
end TBxsp010pak;
--------------------------------------------------------------------------------
-- end of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -