亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? devicetranseiver.vhd

?? fpga介紹及其相關實驗代碼等等,fpga介紹及其相關實驗代碼
?? VHD
?? 第 1 頁 / 共 2 頁
字號:
---------------------------------------------------------------------------------------------------
--
-- File        : e:\Courses\ComputerHardwareInterface\USB_IF_DESIGN\USB_IF\src\DeviceTranseiver.vhd
-- Create Time : Fri Apr 16 20:18:23 2004
-- Title       : DeviceTranseiver
-- Design      : USB Interface IP Core
-- Author      : Lou Xinghua (louxinghua99@mails.tsinghua.edu.cn)
-- Company     : Department of Engineering Physics in Tsinghua Unversity, Beijing, China
-- Version     : 1.0
--
---------------------------------------------------------------------------------------------------
--
-- Description : 
-- This module implements data receiving and transfering with cooperation of PIDUSBD12.
-- It also communicates with the RequestHandler module.
-- Written by Lou Xinghua
--
---------------------------------------------------------------------------------------------------

--{{ Section below this comment is automatically maintained
--   and may be overwritten
--{entity {DeviceTranseiver} architecture {DeviceTranseiver}}

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use WORK.USB_PACKAGE.all;
use WORK.PDIUSBD12_PACKAGE.all;


entity DeviceTranseiver is
	 port(					  
		 reset_n : in STD_LOGIC; 
		 clk : in STD_LOGIC;  
		 int_n : in STD_LOGIC;
		 a0 : out STD_LOGIC;
		 data_in : in STD_LOGIC_VECTOR(7 downto 0);
		 data_out : out STD_LOGIC_VECTOR(7 downto 0);
		 wr_n : out STD_LOGIC;
		 rd_n : out STD_LOGIC;
		 suspend : inout STD_LOGIC;
		 recv_n : out STD_LOGIC;
		 cmd : in STD_LOGIC_VECTOR(7 downto 0);
		 exec_n: in STD_LOGIC;
		 req_type : out STD_LOGIC_VECTOR(7 downto 0);
		 step : out std_logic_vector(7 downto 0)
	     );
end DeviceTranseiver;

--}} End of automatically maintained section

architecture DeviceTranseiver of DeviceTranseiver is

-- Internal Signals

-- Temp Signals

-- State Machine
signal ts_state: TRANSEIVER_STATE;		
signal ih_state: INT_HANDLE_STATE;

signal config: STD_LOGIC;						-- configuration 
signal remote_wakeup: STD_LOGIC;				-- remote wakeup
	
-- Registers
signal ts_data: REG256x8 := TRANSEIVER_DATA; 
	
begin

	-- enter your statements here --
	
	-- signal connections	
	
	-- main process
	main_process: 
	process( reset_n, clk )	

	-- in process variables
	variable handle_step: INTEGER8 := 0; 	
	variable wr_n_var: STD_LOGIC := '1'; 
	variable rd_n_var: STD_LOGIC := '1';
	
	-- 
	variable ir_0: STD_LOGIC_VECTOR(7 downto 0);		-- interrupt register 0 
	variable ir_1: STD_LOGIC;							-- interrupt register 1 (EOT) 
	variable is_setup: STD_LOGIC;						-- last transaction status register	 

	--
	variable active_ep: STD_LOGIC_VECTOR(7 downto 0) := X"FF";
	variable ram_address: INTEGER8 := 0;
	variable read_count: INTEGER8 := 0;	
	variable to_read: INTEGER8 := 0;
	variable read_in: INTEGER8 := 0; 
	variable data_length: INTEGER8 := 0; 
	variable data_count: INTEGER8 := 0;	  
	variable is_receive: STD_LOGIC := '0';	
	variable write_count: INTEGER8 := 0;
	variable to_write: INTEGER8 := 0;  
	variable is_transmit: STD_LOGIC := '0';	
	---- Read/Write EndPoint Related Variables 		 				  
	variable last_ts_state: TRANSEIVER_STATE;

	begin
		if reset_n = '0' then
			-- reset state machine
			ts_state <= TS_DISCONNECTED;  
			ih_state <= IH_IDLE;
			-- reset output signals		 
			a0 <= '0';
			data_out <= X"00";	 
			wr_n <= '1';
			rd_n <= '1';
			recv_n <= '1';
			req_type <= X"00";			 
			step <= X"FF";
			-- reset internal signals & in process variables  
			data_out <= X"00";
			ts_data <= TRANSEIVER_DATA;						 		
			config <= '0';
			remote_wakeup <= '0';
			ir_0 := X"00";
			ir_1 := '0';
			is_setup := '0'; 							
			active_ep := X"FF";
			ram_address := 0; 
			read_count := 0;
			to_read := 0;
			read_in := 0;		   		   
			data_length := 0;		   		   
			data_count := 0;  
			is_receive := '0';		   
			to_write := 0;	 
			is_transmit := '0';
			handle_step := 0;								
			last_ts_state := TS_IDLE;
		elsif rising_edge(clk) then			 
			-- init in process variables
			wr_n_var := '1';
			rd_n_var := '1';
			-- handle according to current state
			case ts_state is												
				
			-- state is 'disconnected', means not connected to PDIUSBD12
			when TS_DISCONNECTED =>	 	
				ts_state <= TS_CONNECTING;   
				handle_step := 0;
				
			-- state is 'connecting', means connecting to PDIUSBD12, sending configuration data
			when TS_CONNECTING =>
				-- send varies of command to config PDIUSBD12
				case handle_step is
				when 0 =>
					data_out <= D12_COMMAND_SET_DMA;
					a0 <= D12_COMMAND;
					wr_n_var := '0';
				when 1 =>
					data_out <= D12_DMA;
					a0 <= D12_DATA;
					wr_n_var := '0';
				when 2 =>
					data_out <= D12_COMMAND_SET_MODE;
					a0 <= D12_COMMAND;
					wr_n_var := '0';
				when 3 =>
					data_out <= D12_MODE_CONFIG;
					a0 <= D12_DATA;
					wr_n_var := '0';
				when 4 =>
					data_out <= D12_MODE_CLOCK_DIV;
					a0 <= D12_DATA;
					wr_n_var := '0';
				when 5 =>
					ts_state <= TS_IDLE;
				when others =>
					NULL;
				end case;
				handle_step := handle_step+1;
				
			-- state is 'idle', means PDIUSBD12 is free
			when TS_IDLE =>
				data_out <= X"00";
				recv_n <= '1';
				ih_state <= IH_START;
				-- check for interrupt & request handler's command
				if int_n = '0' then		   
					handle_step := 0;
					ts_state <= TS_READ_IR;
				elsif exec_n = '0' then
					ts_state <= GetCommandHandler(cmd);
					handle_step := 0;
				end if;

			when TS_END_REQUESTHANDLER =>
--				suspend <= '1';
				ts_state <= TS_IDLE;
								
			-- state is 'read ir', means reading interrupt reigster
			when TS_READ_IR =>
				if handle_step = 0 then
					-- send command: read interrupt register
					a0 <= D12_COMMAND;
					data_out <= D12_COMMAND_READ_IR;
					wr_n_var := '0';
				elsif handle_step = 1 then
					-- try to retrieve the first data
					a0 <= D12_DATA;
					rd_n_var := '0';
				elsif handle_step = 2 then
					-- reserve the first data
					ir_0 := data_in;			 
					-- try to retrieve the second data
					a0 <= D12_DATA;
					rd_n_var := '0';
				else
					-- reserve the second data
					ir_1 := data_in(0);
					-- till now, we have finished retrieving interrupt registers
					ts_state <= GetInterruptHandler(ir_0, ir_1);
					ih_state <= IH_START;
				end if;
				handle_step := handle_step+1;

			when TS_BUSRESET =>
--				suspend <= '1';	 
--				config <= '0';
--				remote_wakeup <= '0';
--				step <= X"FF";  
				ts_state <= TS_IDLE;

			-- state is 'suspend change'
			when TS_SUSPENDCHANGE =>
--				if suspend = '1' then
--					suspend <= '0';
--				end if;
				ts_state <= TS_IDLE;
				
			-- state is 'endpoint0 receive', means endpoint0 has data arrived
			when TS_EP0_RECEIVE =>	
			
				-- state is 'start', means starting processing
				case ih_state is 															   
				when IH_START =>	   	   	
					-- send command: read last transaction status register of endpoint 0
					a0 <= D12_COMMAND;
					data_out <= D12_COMMAND_READ_LTS_EP0_OUT;
					wr_n_var := '0';
					handle_step := 0;
					ih_state <= IH_READ_LTS;
				-- state is 'read lts', means reading last transaction status
				when IH_READ_LTS =>
					if handle_step = 0 then
						-- try to retrieve last transaction status register of endpoint 0
						a0 <= D12_DATA;
						rd_n_var := '0';
						handle_step := handle_step+1;
					else
						-- reserve last transaction status register of endpoint 0
						is_setup := data_in(D12_SETUPPACKET_BIT);
						-- till now, we have finished reading last transaction status 
						-- prepare to retrieve data
						active_ep := X"00";
						read_count := 0; 
						read_in := 0;
						last_ts_state := ts_state;
						ts_state <= TS_READ_ENDPOINT; 
						handle_step := 0; 
						-- check whether it is a setup packet or regular data
						if is_setup = '1' then 
							ram_address := ADDRESS_EP0_BUFFER;
							to_read := LENGTH_SETUP_PACKET;	
							ih_state <= IH_ACK_ENDPOINT;
						elsif is_receive = '1' then  
							ram_address := ADDRESS_EP0_BUFFER+data_count;
							to_read := LENGTH_ENDPOINT0_BUFFER;
							ih_state <= IH_END_RECEIVE;
						else
							ts_state <= TS_IDLE;
						end if;
					end if;
					
				-- state is 'acknowledge setup', means acknowledge retrieving setup packet
				when IH_ACK_ENDPOINT =>	
					if to_read = read_in then
						-- send varies of command to acknowledge endpoint access
						data_out <= ep0_ack_data(handle_step);
						a0 <= D12_COMMAND;
						wr_n_var := '0';
						handle_step := handle_step+1;
						if handle_step = D12_EP0_ACK_DATA_LENGTH then
							-- get the data length of this transaction, reserved in 'data_length'
							data_length := GetDataLength(ts_data(ADDRESS_DATA_LENGTH_HIGH), ts_data(ADDRESS_DATA_LENGTH_LOW));
							-- data_count reserves the amount of retrieved data
							data_count := 0;
							is_receive := '0';
							-- check whether more data need retrieve
							if ts_data(ADDRESS_EP0_BUFFER)(7) = '1' then	-- data is in, no more data to retrieve
								ts_state <= TS_END_RECEIVE;
							elsif data_length = 0 then	-- data_length is ZERO, obviously ...
								ts_state <= TS_END_RECEIVE;
							elsif data_length > LENGTH_ENDPOINT0_BUFFER then -- this is impossible, so ...
								ts_state <= TS_ERROR;
							else	-- still, there are more data to retrieve
								ts_state <= TS_IDLE;
								is_receive := '1';
							end if;								
						end if;
					else
						ts_state <= TS_ERROR;
					end if;	
					
				-- state is 'end receive', means finishing receiving extra data
				when IH_END_RECEIVE =>
					data_count := data_count+read_in;
					if (read_in /= LENGTH_ENDPOINT0_BUFFER) or (data_count >= data_length) then
						is_receive := '0';
						ts_state <= TS_END_RECEIVE;
					else
						ts_state <= TS_IDLE;
					end if;						   					
									
				-- state is unknown, do nothing
				when others =>
					NULL;
				end case;
				
			-- state is 'read endpoint', means retrieving data from endpoint0 buffer
			when TS_READ_ENDPOINT =>
				case handle_step is
				when 0 =>  
					-- send command: select endpoint
					a0 <= D12_COMMAND;
					data_out <= active_ep;
					wr_n_var := '0';
					handle_step := handle_step+1;
				when 1 =>
					-- send command: read endpoint
					a0 <= D12_COMMAND;
					data_out <= D12_COMMAND_RW_BUFFER;
					wr_n_var := '0';
					handle_step := handle_step+1; 
				when 2 | 3 =>					  
					-- try to retrieve the first and second data in endpoint buffer
					a0 <= D12_DATA;
					rd_n_var := '0';			   
					handle_step := handle_step+1;
				when 4 =>
					-- the second data is the buffer lenth, reserve it
					read_in := conv_integer(data_in); 
					-- if no data, just quit reading
					if read_in = 0 then
						handle_step := 7;
					else
						-- try to retrieve rest of the data
						handle_step := handle_step+1;
						a0 <= D12_DATA;
						rd_n_var := '0'; 
					end if;
				when 5 =>
					-- reserve data
					ts_data(ram_address) <= data_in;
					ram_address := ram_address+1;
					read_count := read_count+1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美顶级少妇做爰| 欧美精品99久久久**| 亚洲小少妇裸体bbw| 色欧美88888久久久久久影院| 一区二区三区四区五区视频在线观看| 欧美日韩在线三级| 国产呦精品一区二区三区网站| 综合在线观看色| 欧美一区二区免费观在线| 成人高清视频免费观看| 日本一区中文字幕 | 视频一区视频二区中文| 精品粉嫩aⅴ一区二区三区四区| 国产一区在线观看视频| 亚洲欧美一区二区三区国产精品| 色婷婷一区二区三区四区| 美女视频黄a大片欧美| 亚洲人成精品久久久久久| 26uuu久久综合| 欧美午夜不卡在线观看免费| 青青草97国产精品免费观看| 国产精品久久一卡二卡| 欧美日韩一级片网站| 国产成人亚洲综合a∨婷婷图片| 五月激情综合色| 亚洲图片欧美综合| 亚洲男同1069视频| 最新中文字幕一区二区三区| 国产日韩视频一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av | 国产91综合网| 精品午夜一区二区三区在线观看| 日韩在线观看一区二区| 亚洲无线码一区二区三区| 亚洲伊人色欲综合网| 亚洲一区二区美女| 亚洲第一精品在线| 五月婷婷激情综合| 日韩av一区二区三区四区| 日本免费新一区视频| 美腿丝袜一区二区三区| 91女厕偷拍女厕偷拍高清| 91蝌蚪国产九色| 日本韩国欧美在线| 欧美三级日本三级少妇99| 欧美三日本三级三级在线播放| 欧美天堂一区二区三区| 欧美精品成人一区二区三区四区| 91精品国产综合久久久久久| 在线播放欧美女士性生活| 日韩欧美在线不卡| 久久精品人人做| 国产精品网曝门| 日韩美女啊v在线免费观看| 樱花影视一区二区| 亚洲不卡一区二区三区| 奇米888四色在线精品| 久久69国产一区二区蜜臀| 国产精品一二一区| 色综合久久久久网| 69成人精品免费视频| 日韩精品一区二| 国产欧美日本一区视频| 亚洲裸体xxx| 青青草91视频| 成人国产一区二区三区精品| 91丨九色porny丨蝌蚪| 在线不卡一区二区| 久久女同性恋中文字幕| 亚洲美女一区二区三区| 日韩成人伦理电影在线观看| 国产高清精品网站| 欧美中文字幕一二三区视频| 日韩免费高清av| 国产精品卡一卡二| 日韩中文欧美在线| 成人18视频日本| 欧美精品v日韩精品v韩国精品v| 26uuu另类欧美| 一区二区高清视频在线观看| 九九视频精品免费| 91女厕偷拍女厕偷拍高清| 日韩精品一区二| 亚洲精品免费播放| 国产精品一区二区免费不卡 | 久久99精品久久久久| 豆国产96在线|亚洲| 欧美日韩国产123区| 国产三级一区二区| 天堂成人国产精品一区| 成人伦理片在线| 日韩一卡二卡三卡| 亚洲欧美成人一区二区三区| 久久不见久久见免费视频1| 色哟哟欧美精品| 国产偷国产偷亚洲高清人白洁 | 高清国产一区二区| 欧美猛男gaygay网站| 亚洲欧洲一区二区三区| 久久国产精品免费| 欧美色偷偷大香| 国产精品国产自产拍高清av王其 | 久久久亚洲精品石原莉奈| 亚洲电影激情视频网站| 99麻豆久久久国产精品免费优播| 美腿丝袜亚洲一区| 91久久精品网| 国产精品三级视频| 国产麻豆日韩欧美久久| 欧美一区二区免费观在线| 亚洲国产欧美在线人成| av不卡在线观看| 久久亚洲二区三区| 久久精品国产一区二区| 欧美男人的天堂一二区| 亚洲一区二区av电影| av电影天堂一区二区在线| 久久精子c满五个校花| 美脚の诱脚舐め脚责91| 88在线观看91蜜桃国自产| 亚洲欧美乱综合| 成人午夜视频在线| 国产欧美一区二区精品久导航| 韩国女主播成人在线观看| 在线电影一区二区三区| 亚洲电影中文字幕在线观看| 91老师国产黑色丝袜在线| 亚洲色图视频网| 91在线看国产| 亚洲欧美日韩系列| 99久久伊人网影院| 日韩毛片一二三区| 99久久99久久综合| 亚洲男同性视频| 欧美三级视频在线观看| 亚洲123区在线观看| 欧美色综合久久| 日韩av一区二区三区| 日韩视频在线一区二区| 久久99国产精品久久| 久久综合久久综合久久| 粉嫩13p一区二区三区| 亚洲欧美综合色| 一道本成人在线| 性做久久久久久久久| 91精品啪在线观看国产60岁| 日本不卡一区二区| 欧美成人三级在线| 国产99久久精品| 亚洲女性喷水在线观看一区| 色欧美片视频在线观看| 婷婷久久综合九色综合绿巨人| 9191久久久久久久久久久| 免费av成人在线| 久久免费精品国产久精品久久久久| 国产91富婆露脸刺激对白| 亚洲日本青草视频在线怡红院| 欧美色窝79yyyycom| 六月丁香婷婷久久| 国产精品久久久久四虎| 欧洲中文字幕精品| 日韩av在线发布| 国产精品日韩成人| 精品视频色一区| 国产一区视频导航| 《视频一区视频二区| 欧美嫩在线观看| 国产成人夜色高潮福利影视| 一区二区三区在线观看国产| 这里只有精品免费| 播五月开心婷婷综合| 亚洲国产日日夜夜| 久久亚洲一区二区三区四区| 91色porny| 九色porny丨国产精品| 最新欧美精品一区二区三区| 欧美日韩专区在线| 国产精品一线二线三线精华| 亚洲精品国产一区二区精华液| 欧美一级欧美三级在线观看| 成人av在线网| 欧美午夜理伦三级在线观看| 国内成人免费视频| 一区二区三区日本| 久久久久久久一区| 欧美日本在线一区| jiyouzz国产精品久久| 美国十次综合导航| 亚洲一区二区在线视频| 久久久精品2019中文字幕之3| 欧美无砖专区一中文字| 国产很黄免费观看久久| 日本欧美肥老太交大片| 亚洲欧美偷拍卡通变态| 久久久久久97三级| 日韩欧美在线网站| 欧美日韩国产另类一区| 91视频.com| 成人激情开心网| 国内精品久久久久影院薰衣草|