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

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

?? usb1_pe.v

?? USB v1.1 RTL and design specification
?? V
?? 第 1 頁 / 共 2 頁
字號:
/////////////////////////////////////////////////////////////////////
////                                                             ////
////  Protocol Engine                                            ////
////  Performs automatic protocol functions                      ////
////                                                             ////
////  Author: Rudolf Usselmann                                   ////
////          rudi@asics.ws                                      ////
////                                                             ////
////                                                             ////
////  Downloaded from: http://www.opencores.org/cores/usb1_funct/////
////                                                             ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// Copyright (C) 2000-2002 Rudolf Usselmann                    ////
////                         www.asics.ws                        ////
////                         rudi@asics.ws                       ////
////                                                             ////
//// This source file may be used and distributed without        ////
//// restriction provided that this copyright statement is not   ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
////                                                             ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

//  CVS Log
//
//  $Id: usb1_pe.v,v 1.1.1.1 2002/09/19 12:07:24 rudi Exp $
//
//  $Date: 2002/09/19 12:07:24 $
//  $Revision: 1.1.1.1 $
//  $Author: rudi $
//  $Locker:  $
//  $State: Exp $
//
// Change History:
//               $Log: usb1_pe.v,v $
//               Revision 1.1.1.1  2002/09/19 12:07:24  rudi
//               Initial Checkin
//
//
//
//
//
//
//

`include "usb1_defines.v"

module usb1_pe(	clk, rst,

		// UTMI Interfaces
		tx_valid, rx_active,

		// PID Information
		pid_OUT, pid_IN, pid_SOF, pid_SETUP,
		pid_DATA0, pid_DATA1, pid_DATA2, pid_MDATA,
		pid_ACK, pid_PING,

		// Token Information
		token_valid, 

		// Receive Data Output
		rx_data_done, crc16_err,

		// Packet Assembler Interface
		send_token, token_pid_sel,
		data_pid_sel,

		// IDMA Interface
		rx_dma_en, tx_dma_en,
		abort,
		idma_done,

		// Register File Interface

		fsel,
		ep_sel, match, nse_err,
		ep_full, ep_empty,

		int_upid_set, int_crc16_set, int_to_set, int_seqerr_set,
		csr,
		send_stall

		);

input		clk, rst;
input		tx_valid, rx_active;

// Packet Disassembler Interface
		// Decoded PIDs (used when token_valid is asserted)
input		pid_OUT, pid_IN, pid_SOF, pid_SETUP;
input		pid_DATA0, pid_DATA1, pid_DATA2, pid_MDATA;
input		pid_ACK, pid_PING;

input		token_valid;		// Token is valid

input		rx_data_done;		// Indicates end of a transfer
input		crc16_err;		// Data packet CRC 16 error

// Packet Assembler Interface
output		send_token;
output	[1:0]	token_pid_sel;
output	[1:0]	data_pid_sel;

// IDMA Interface
output		rx_dma_en;	// Allows the data to be stored
output		tx_dma_en;	// Allows for data to be retrieved
output		abort;		// Abort Transfer (time_out, crc_err or rx_error)
input		idma_done;	// DMA is done indicator

input		ep_full;	// Indicates the endpoints fifo is full
input		ep_empty;	// Indicates the endpoints fifo is empty

// Register File interface
input		fsel;		// This function is selected
input	[3:0]	ep_sel;		// Endpoint Number Input
input		match;		// Endpoint Matched
output		nse_err;	// no such endpoint error

output		int_upid_set;	// Set unsupported PID interrupt
output		int_crc16_set;	// Set CRC16 error interrupt
output		int_to_set;	// Set time out interrupt
output		int_seqerr_set;	// Set PID sequence error interrupt

input	[13:0]	csr;		// Internal CSR Output

input		send_stall;	// Force sending a STALL during setup


///////////////////////////////////////////////////////////////////
//
// Local Wires and Registers
//

// tx token decoding
parameter	ACK   = 0,
		NACK  = 1,
		STALL = 2,
		NYET  = 3;

// State decoding
parameter	[9:0]	// synopsys enum state
		IDLE	= 10'b000000_0001,
		TOKEN	= 10'b000000_0010,
		IN	= 10'b000000_0100,
		IN2	= 10'b000000_1000,
		OUT	= 10'b000001_0000,
		OUT2A	= 10'b000010_0000,
		OUT2B	= 10'b000100_0000,
		UPDATEW	= 10'b001000_0000,
		UPDATE	= 10'b010000_0000,
		UPDATE2	= 10'b100000_0000;

reg	[1:0]	token_pid_sel;
reg	[1:0]	token_pid_sel_d;
reg		send_token;
reg		send_token_d;
reg		rx_dma_en, tx_dma_en;
reg		int_seqerr_set_d;
reg		int_seqerr_set;
reg		int_upid_set;

reg		match_r;

// Endpoint Decoding
wire		IN_ep, OUT_ep, CTRL_ep;		// Endpoint Types
wire		txfr_iso, txfr_bulk, txfr_int;	// Transfer Types

reg	[1:0]	uc_dpd;

// Buffer checks
reg	[9:0]	/* synopsys enum state */ state, next_state;
// synopsys state_vector state

// PID next and current decoders
reg	[1:0]	next_dpid;
reg	[1:0]	this_dpid;
reg		pid_seq_err;
wire	[1:0]	tr_fr_d;

wire	[13:0]	size_next;
wire		buf_smaller;

// After sending Data in response to an IN token from host, the
// host must reply with an ack. The host has XXXnS to reply.
// "rx_ack_to" indicates when this time has expired.
// rx_ack_to_clr, clears the timer
reg		rx_ack_to_clr;
reg		rx_ack_to_clr_d;
reg		rx_ack_to;
reg	[7:0]	rx_ack_to_cnt;

// After sending a OUT token the host must send a data packet.
// The host has XX nS to send the packet. "tx_data_to" indicates
// when this time has expired.
// tx_data_to_clr, clears the timer
wire		tx_data_to_clr;
reg		tx_data_to;
reg	[7:0]	tx_data_to_cnt;

wire	[7:0]	rx_ack_to_val, tx_data_to_val;


wire	[1:0]	next_bsel;
reg		uc_stat_set_d;
reg		uc_dpd_set;

reg		in_token;
reg		out_token;
reg		setup_token;

wire		in_op, out_op;	// Indicate a IN or OUT operation

reg	[1:0]	allow_pid;

reg		nse_err;
reg		abort;

wire	[1:0]	ep_type, txfr_type;

///////////////////////////////////////////////////////////////////
//
// Misc Logic
//

// Endpoint/CSR Decoding
assign IN_ep   = csr[9];
assign OUT_ep  = csr[10];
assign CTRL_ep = csr[11];

assign txfr_iso  = csr[12];
assign txfr_bulk = csr[13];
assign txfr_int = !csr[12] & !csr[13];

assign ep_type = csr[10:9];
assign txfr_type = csr[13:12];

always @(posedge clk)
	match_r <= #1 match  & fsel;

// No Such Endpoint Indicator
always @(posedge clk)
	nse_err <= #1 token_valid & (pid_OUT | pid_IN | pid_SETUP) & !match;

always @(posedge clk)
	send_token <= #1 send_token_d;

always @(posedge clk)
	token_pid_sel <= #1 token_pid_sel_d;

///////////////////////////////////////////////////////////////////
//
// Data Pid Storage
//

reg	[1:0]	ep0_dpid, ep1_dpid, ep2_dpid, ep3_dpid;
reg	[1:0]	ep4_dpid, ep5_dpid, ep6_dpid, ep7_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep0_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h0))	ep0_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep1_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h1))	ep1_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep2_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h2))	ep2_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep3_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h3))	ep3_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep4_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h4))	ep4_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep5_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h5))	ep5_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep6_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h6))	ep6_dpid <= next_dpid;

always @(posedge clk or negedge rst)
	if(!rst)				ep7_dpid <= 2'b00;
	else
	if(uc_dpd_set & (ep_sel == 4'h7))	ep7_dpid <= next_dpid;

always @(posedge clk)
	case(ep_sel)
	   4'h0: uc_dpd <= ep0_dpid;
	   4'h1: uc_dpd <= ep1_dpid;
	   4'h2: uc_dpd <= ep2_dpid;
	   4'h3: uc_dpd <= ep3_dpid;
	   4'h4: uc_dpd <= ep4_dpid;
	   4'h5: uc_dpd <= ep5_dpid;
	   4'h6: uc_dpd <= ep6_dpid;
	   4'h7: uc_dpd <= ep7_dpid;
	endcase

///////////////////////////////////////////////////////////////////
//
// Data Pid Sequencer
//

assign tr_fr_d = 2'h0;

always @(posedge clk)	// tr/mf:ep/type:tr/type:last dpd
	casex({tr_fr_d,ep_type,txfr_type,uc_dpd})	// synopsys full_case parallel_case
	   8'b0?_01_01_??: next_dpid <= #1 2'b00;	// ISO txfr. IN, 1 tr/mf

	   8'b10_01_01_?0: next_dpid <= #1 2'b01;	// ISO txfr. IN, 2 tr/mf
	   8'b10_01_01_?1: next_dpid <= #1 2'b00;	// ISO txfr. IN, 2 tr/mf

	   8'b11_01_01_00: next_dpid <= #1 2'b01;	// ISO txfr. IN, 3 tr/mf
	   8'b11_01_01_01: next_dpid <= #1 2'b10;	// ISO txfr. IN, 3 tr/mf
	   8'b11_01_01_10: next_dpid <= #1 2'b00;	// ISO txfr. IN, 3 tr/mf

	   8'b0?_10_01_??: next_dpid <= #1 2'b00;	// ISO txfr. OUT, 1 tr/mf

	   8'b10_10_01_??: 				// ISO txfr. OUT, 2 tr/mf
			   begin	// Resynchronize in case of PID error
				case({pid_MDATA, pid_DATA1})	// synopsys full_case parallel_case
				  2'b10: next_dpid <= #1 2'b01;
				  2'b01: next_dpid <= #1 2'b00;
				endcase
			   end

	   8'b11_10_01_00: 				// ISO txfr. OUT, 3 tr/mf
			   begin	// Resynchronize in case of PID error
				case({pid_MDATA, pid_DATA2})	// synopsys full_case parallel_case
				  2'b10: next_dpid <= #1 2'b01;
				  2'b01: next_dpid <= #1 2'b00;
				endcase
			   end
	   8'b11_10_01_01: 				// ISO txfr. OUT, 3 tr/mf
			   begin	// Resynchronize in case of PID error
				case({pid_MDATA, pid_DATA2})	// synopsys full_case parallel_case
				  2'b10: next_dpid <= #1 2'b10;
				  2'b01: next_dpid <= #1 2'b00;
				endcase
			   end
	   8'b11_10_01_10: 				// ISO txfr. OUT, 3 tr/mf
			   begin	// Resynchronize in case of PID error
				case({pid_MDATA, pid_DATA2})	// synopsys full_case parallel_case
				  2'b10: next_dpid <= #1 2'b01;
				  2'b01: next_dpid <= #1 2'b00;
				endcase
			   end

	   8'b??_01_00_?0,				// IN/OUT endpoint only
	   8'b??_10_00_?0: next_dpid <= #1 2'b01;	// INT transfers

	   8'b??_01_00_?1,				// IN/OUT endpoint only
	   8'b??_10_00_?1: next_dpid <= #1 2'b00;	// INT transfers

	   8'b??_01_10_?0,				// IN/OUT endpoint only
	   8'b??_10_10_?0: next_dpid <= #1 2'b01;	// BULK transfers

	   8'b??_01_10_?1,				// IN/OUT endpoint only
	   8'b??_10_10_?1: next_dpid <= #1 2'b00;	// BULK transfers

	   8'b??_00_??_??:				// CTRL Endpoint
		casex({setup_token, in_op, out_op, uc_dpd})	// synopsys full_case parallel_case
		   5'b1_??_??: next_dpid <= #1 2'b11;	// SETUP operation
		   5'b0_10_0?: next_dpid <= #1 2'b11;	// IN operation
		   5'b0_10_1?: next_dpid <= #1 2'b01;	// IN operation
		   5'b0_01_?0: next_dpid <= #1 2'b11;	// OUT operation
		   5'b0_01_?1: next_dpid <= #1 2'b10;	// OUT operation
		endcase

	endcase

// Current PID decoder

// Allow any PID for ISO. transfers when mode full speed or tr_fr is zero
always @(pid_DATA0 or pid_DATA1 or pid_DATA2 or pid_MDATA)
	case({pid_DATA0, pid_DATA1, pid_DATA2, pid_MDATA} ) // synopsys full_case parallel_case
	   4'b1000: allow_pid = 2'b00;
	   4'b0100: allow_pid = 2'b01;
	   4'b0010: allow_pid = 2'b10;
	   4'b0001: allow_pid = 2'b11;
	endcase

always @(posedge clk)	// tf/mf:ep/type:tr/type:last dpd
	casex({tr_fr_d,ep_type,txfr_type,uc_dpd})	// synopsys full_case parallel_case
	   8'b0?_01_01_??: this_dpid <= #1 2'b00;	// ISO txfr. IN, 1 tr/mf

	   8'b10_01_01_?0: this_dpid <= #1 2'b01;	// ISO txfr. IN, 2 tr/mf
	   8'b10_01_01_?1: this_dpid <= #1 2'b00;	// ISO txfr. IN, 2 tr/mf

	   8'b11_01_01_00: this_dpid <= #1 2'b10;	// ISO txfr. IN, 3 tr/mf
	   8'b11_01_01_01: this_dpid <= #1 2'b01;	// ISO txfr. IN, 3 tr/mf
	   8'b11_01_01_10: this_dpid <= #1 2'b00;	// ISO txfr. IN, 3 tr/mf

	   8'b00_10_01_??: this_dpid <= #1 allow_pid;	// ISO txfr. OUT, 0 tr/mf

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美在线观看| 欧美一区二区成人6969| 奇米色777欧美一区二区| 亚洲一区二区在线播放相泽| 日韩精品专区在线影院重磅| av成人免费在线观看| 久久国产欧美日韩精品| 亚洲制服丝袜在线| 国产精品美女视频| 久久久另类综合| 欧美一区二区三区系列电影| 91成人网在线| 99久久综合色| 国产一区二区三区视频在线播放| 亚洲123区在线观看| 亚洲欧美色图小说| 欧美高清在线一区二区| 欧美电影免费观看完整版| 欧美日韩电影一区| 91黄色在线观看| 91视频国产资源| 成人av在线影院| 国产成人午夜电影网| 精品一区二区日韩| 青青草国产精品亚洲专区无| 亚洲成人自拍一区| 亚洲午夜私人影院| 亚洲电影视频在线| 午夜视频在线观看一区二区三区 | 91国产成人在线| 99久久精品免费| 成人app网站| 成人av免费网站| 成人午夜短视频| 顶级嫩模精品视频在线看| 国产伦精品一区二区三区视频青涩 | 丝袜a∨在线一区二区三区不卡| 亚洲精品国产一区二区精华液 | 亚洲乱码国产乱码精品精可以看| 国产精品无人区| 久久蜜臀精品av| 国产三级三级三级精品8ⅰ区| 久久一区二区三区四区| 国产亚洲综合色| 国产精品乱子久久久久| 国产精品国产三级国产普通话蜜臀| 国产精品久久久久久亚洲伦 | 亚洲免费av在线| 一区二区三区四区在线| 一区二区三区中文字幕在线观看| 一区二区三区免费| 亚洲成人av中文| 五月婷婷综合网| 七七婷婷婷婷精品国产| 国产一区二区三区免费看| 高清国产午夜精品久久久久久| eeuss鲁一区二区三区| 一本久久a久久免费精品不卡| 欧洲国内综合视频| 制服丝袜av成人在线看| 欧美精品一区二区久久久| 日本一区二区视频在线观看| 亚洲日本免费电影| 手机精品视频在线观看| 国内精品视频一区二区三区八戒| 成人黄色大片在线观看| 欧美做爰猛烈大尺度电影无法无天| 欧美日韩国产在线播放网站| 精品美女被调教视频大全网站| 中文字幕精品—区二区四季| 一个色在线综合| 精品在线你懂的| 99re在线精品| 欧美成人福利视频| 中文字幕日韩欧美一区二区三区| 午夜天堂影视香蕉久久| 国产经典欧美精品| 91黄色小视频| 久久久久97国产精华液好用吗| 亚洲免费电影在线| 精品一区二区三区免费播放| 色综合天天综合网天天狠天天| 欧美一区二区播放| 国产精品三级久久久久三级| 五月开心婷婷久久| 国产成人精品免费网站| 欧美人妇做爰xxxⅹ性高电影| 久久免费精品国产久精品久久久久| 亚洲女子a中天字幕| 精品在线观看免费| 在线亚洲欧美专区二区| 国产亚洲综合在线| 日韩在线观看一区二区| 99在线精品一区二区三区| 91精品国产综合久久精品性色| 国产精品国产三级国产有无不卡| 青椒成人免费视频| 色域天天综合网| 国产日本欧美一区二区| 七七婷婷婷婷精品国产| 91福利视频久久久久| 欧美国产精品一区二区| 麻豆国产精品一区二区三区| 欧美视频一区二区三区| 国产在线精品免费av| 欧美午夜不卡视频| 国产精品国产三级国产a| 麻豆高清免费国产一区| 欧美精品丝袜久久久中文字幕| 国产精品不卡一区| 国产成人日日夜夜| 精品国产制服丝袜高跟| 婷婷成人激情在线网| 91久久精品一区二区三| 中文字幕一区二区日韩精品绯色| 韩国中文字幕2020精品| 日韩小视频在线观看专区| 亚洲福利视频三区| 在线观看免费视频综合| √…a在线天堂一区| 成人av免费在线| 国产精品女同一区二区三区| 国产黄色91视频| 久久影音资源网| 国产露脸91国语对白| 欧美精品一区二区三区高清aⅴ| 蜜臀久久久久久久| 欧美另类一区二区三区| 亚洲国产精品尤物yw在线观看| 91久久精品国产91性色tv| 亚洲桃色在线一区| 色综合网站在线| 一区二区在线观看视频| 在线免费观看视频一区| 亚洲最大色网站| 欧美丝袜自拍制服另类| 午夜视频在线观看一区二区三区| 欧美丝袜第三区| 天堂成人免费av电影一区| 欧美日韩午夜在线| 日韩精品免费专区| 日韩一区二区电影网| 久久97超碰色| 国产欧美一区二区三区在线看蜜臀| 国产福利不卡视频| 国产精品麻豆视频| 91久久精品国产91性色tv| 亚洲国产日韩一区二区| 7777精品伊人久久久大香线蕉的| 日韩经典一区二区| 欧美成人一区二区三区在线观看| 国产在线精品一区在线观看麻豆| 国产日韩欧美一区二区三区乱码| jlzzjlzz欧美大全| 亚洲一区免费观看| 日韩午夜在线播放| 国产精品一区二区在线看| 国产一区二区三区黄视频| 国产亚洲一区二区三区四区| thepron国产精品| 亚洲国产成人tv| 精品久久人人做人人爰| 粉嫩嫩av羞羞动漫久久久| 亚洲精品国产无天堂网2021 | 99re成人在线| 亚洲成人www| 亚洲精品一区二区在线观看| 成人av电影观看| 亚洲一区中文在线| 精品福利一二区| www.在线欧美| 奇米影视一区二区三区| 欧美国产精品一区| 欧美群妇大交群的观看方式| 国产一区二区三区电影在线观看| 中文字幕一区日韩精品欧美| 欧美顶级少妇做爰| 国产成人高清在线| 亚洲无人区一区| 久久久久久久久伊人| 在线视频你懂得一区二区三区| 捆绑紧缚一区二区三区视频| 成人欧美一区二区三区视频网页 | 亚洲成av人片一区二区| 久久久99久久| 欧美三级日韩三级| 粉嫩绯色av一区二区在线观看| 亚洲成人激情自拍| 国产精品蜜臀av| 日韩精品一区二区三区在线| 91亚洲精品一区二区乱码| 蜜臂av日日欢夜夜爽一区| 日韩理论片在线| 久久久久久亚洲综合| 欧美视频一区二区三区| jlzzjlzz亚洲女人18| 国产真实乱子伦精品视频| 亚洲高清视频的网址| 国产精品久久免费看| 精品不卡在线视频|