⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tbxsp010pak.vhd

📁 the vhdl model of usb. it is very helpful.
💻 VHD
📖 第 1 页 / 共 3 页
字号:
		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 + -