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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? devicetranseiver.vhd

?? fpga介紹及其相關(guān)實(shí)驗(yàn)代碼等等,fpga介紹及其相關(guān)實(shí)驗(yàn)代碼
?? VHD
?? 第 1 頁 / 共 2 頁
字號(hào):
---------------------------------------------------------------------------------------------------
--
-- 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av中文一区二区三区| 不卡av在线免费观看| 国产人伦精品一区二区| 91视频精品在这里| 日本va欧美va精品发布| 亚洲激情综合网| 国产欧美视频在线观看| 在线成人免费观看| 91精品办公室少妇高潮对白| 国产精品主播直播| 视频一区二区不卡| 中文字幕综合网| 国产亚洲欧美在线| 欧美一级免费观看| 欧洲av在线精品| 99精品热视频| 国产 日韩 欧美大片| 捆绑调教美女网站视频一区| 午夜视频在线观看一区二区| 综合久久久久久| 国产精品久久久久久久岛一牛影视| 日韩一卡二卡三卡| 欧美特级限制片免费在线观看| 成人动漫av在线| 成人综合婷婷国产精品久久蜜臀| 久久国产精品色婷婷| 日日夜夜一区二区| 一区二区三区四区五区视频在线观看 | 国产成人av电影免费在线观看| 日韩不卡一二三区| 日韩中文字幕一区二区三区| 亚洲精品视频在线看| 亚洲嫩草精品久久| 亚洲人精品午夜| 综合久久久久综合| 亚洲精品乱码久久久久| 一区二区三区中文免费| 亚洲视频在线观看三级| 中文字幕中文乱码欧美一区二区| 中文字幕欧美国产| 国产精品久久777777| 国产无遮挡一区二区三区毛片日本| 久久亚洲免费视频| 国产欧美一区二区精品婷婷| 国产三区在线成人av| 中文无字幕一区二区三区| 国产三级一区二区三区| 中文字幕亚洲电影| 一区二区三区四区高清精品免费观看| 日韩理论片网站| 亚洲精品国产精华液| 亚洲大尺度视频在线观看| 日韩成人av影视| 国产一区91精品张津瑜| 国产1区2区3区精品美女| 91免费观看视频| 欧美亚日韩国产aⅴ精品中极品| 欧美色综合网站| 日韩色视频在线观看| 欧美极品另类videosde| 亚洲欧美自拍偷拍色图| 一区二区三区欧美激情| 日本视频在线一区| 久久99久久99| 国产精品一级二级三级| 欧美二区乱c少妇| 欧美一区二区三区公司| 国产亚洲一二三区| 尤物在线观看一区| 日本欧美在线观看| 成人美女视频在线观看| 欧美日韩亚洲综合在线| 欧美成人精品二区三区99精品| 久久久精品欧美丰满| 亚洲精品国产精品乱码不99| 日本美女一区二区三区| 成人福利视频在线看| 欧美高清性hdvideosex| 国产欧美日韩久久| 亚洲h在线观看| 国产精品12区| 欧美日韩在线直播| 久久精品日产第一区二区三区高清版 | 国产伦精品一区二区三区在线观看 | 一区二区三区精品| 蜜臀av性久久久久蜜臀av麻豆| 成人激情免费电影网址| 欧美乱妇20p| 国产精品国产精品国产专区不片| 五月激情综合婷婷| 99久久伊人网影院| 欧美一区二区三区的| 亚洲视频资源在线| 国产在线日韩欧美| 91精品中文字幕一区二区三区| 国产精品久线在线观看| 九色综合国产一区二区三区| 欧美亚洲动漫另类| 国产偷国产偷精品高清尤物| 亚洲第一成人在线| 99久久精品国产一区| 精品不卡在线视频| 天天综合网天天综合色| a4yy欧美一区二区三区| 久久婷婷色综合| 日韩精品1区2区3区| 色综合色综合色综合| 欧美激情一区二区三区| 精品一区二区在线播放| 欧美久久一二三四区| 亚洲欧洲精品天堂一级| 国产成人精品影视| 欧美成人乱码一区二区三区| 五月激情丁香一区二区三区| 91论坛在线播放| 中文字幕在线不卡| 国产成人av资源| 久久女同性恋中文字幕| 日韩成人一级片| 欧美乱熟臀69xxxxxx| 亚洲国产日韩在线一区模特| 色噜噜狠狠色综合中国| 中文字幕一区在线观看| 成人高清免费观看| 中文字幕第一区二区| 国产乱人伦偷精品视频免下载| 日韩欧美一区二区视频| 日本欧洲一区二区| 欧美一区二视频| 久久国产尿小便嘘嘘尿| 日韩欧美你懂的| 极品少妇一区二区| 欧美电影免费提供在线观看| 蜜臀精品久久久久久蜜臀| 日韩免费一区二区三区在线播放| 天涯成人国产亚洲精品一区av| 911国产精品| 日韩成人一级大片| 日韩免费一区二区三区在线播放| 久久www免费人成看片高清| 欧美成人国产一区二区| 精品亚洲免费视频| 欧美精品一区二区在线播放| 精品一区二区免费在线观看| 久久男人中文字幕资源站| 老鸭窝一区二区久久精品| 久久一夜天堂av一区二区三区| 国产乱对白刺激视频不卡| 国产欧美一区二区精品性色超碰| 国产suv精品一区二区三区| 欧美激情艳妇裸体舞| 久久久久久夜精品精品免费| 国产乱人伦精品一区二区在线观看| 国产欧美综合在线| 成人黄色电影在线| 一区二区三区中文在线观看| 欧美日本在线播放| 久久99最新地址| 国产精品乱码久久久久久| 一本一道综合狠狠老| 午夜精品久久久久久| 欧美电视剧免费观看| 国产·精品毛片| 亚洲综合成人在线| 欧美成人在线直播| 99久久免费精品| 日日夜夜免费精品| 欧美韩日一区二区三区| 欧洲在线/亚洲| 九色|91porny| 一区二区在线电影| 精品久久国产字幕高潮| 不卡高清视频专区| 日韩专区在线视频| 国产精品毛片久久久久久久| 欧美日韩精品电影| 岛国精品在线观看| 亚洲va中文字幕| 久久久不卡网国产精品二区| 欧美在线视频全部完| 国产精品18久久久久久久久久久久 | 精品国产sm最大网站免费看| 成人av电影在线网| 婷婷亚洲久悠悠色悠在线播放| 久久免费视频色| 欧美亚洲国产一区在线观看网站 | 日本一区二区三区国色天香| 色婷婷精品大在线视频| 国产一区二区三区免费在线观看| 亚洲伦理在线精品| 久久久综合视频| 欧美高清精品3d| 91丨九色丨尤物| 国产一区二区导航在线播放| 亚洲成人免费影院| 国产精品免费视频一区| 2023国产一二三区日本精品2022| 91久久精品国产91性色tv| 成人亚洲精品久久久久软件| 日韩黄色片在线观看|