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

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

?? usb_tx_phy.v

?? USB v1.1 RTL and design specification
?? V
字號:
/////////////////////////////////////////////////////////////////////
////                                                             ////
////  USB 1.1 PHY                                                ////
////  TX                                                         ////
////                                                             ////
////                                                             ////
////  Author: Rudolf Usselmann                                   ////
////          rudi@asics.ws                                      ////
////                                                             ////
////                                                             ////
////  Downloaded from: http://www.opencores.org/cores/usb_phy/   ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// 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: usb_tx_phy.v,v 1.1.1.1 2002/09/16 14:27:02 rudi Exp $
//
//  $Date: 2002/09/16 14:27:02 $
//  $Revision: 1.1.1.1 $
//  $Author: rudi $
//  $Locker:  $
//  $State: Exp $
//
// Change History:
//               $Log: usb_tx_phy.v,v $
//               Revision 1.1.1.1  2002/09/16 14:27:02  rudi
//               Created Directory Structure
//
//
//
//
//
//
//

`include "timescale.v"

module usb_tx_phy(
		clk, rst, fs_ce, phy_mode,
	
		// Transciever Interface
		txdp, txdn, txoe,	

		// UTMI Interface
		DataOut_i, TxValid_i, TxReady_o
		);

input		clk;
input		rst;
input		fs_ce;
input		phy_mode;
output		txdp, txdn, txoe;
input	[7:0]	DataOut_i;
input		TxValid_i;
output		TxReady_o;

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

parameter	IDLE	= 3'd0,
		SOP	= 3'h1,
		DATA	= 3'h2,
		EOP1	= 3'h3,
		EOP2	= 3'h4,
		WAIT	= 3'h5;

reg		TxReady_o;
reg	[2:0]	state, next_state;
reg		tx_ready;
reg		tx_ready_d;
reg		ld_sop_d;
reg		ld_data_d;
reg		ld_eop_d;
reg		tx_ip;
reg		tx_ip_sync;
reg	[2:0]	bit_cnt;
reg	[7:0]	hold_reg;
reg		sd_raw_o;
wire		hold;
reg		data_done;
reg		sft_done;
reg		sft_done_r;
wire		sft_done_e;
reg		ld_data;
wire		eop_done;
reg	[2:0]	one_cnt;
wire		stuff;
reg		sd_bs_o;
reg		sd_nrzi_o;
reg		append_eop;
reg		append_eop_sync1;
reg		append_eop_sync2;
reg		append_eop_sync3;
reg		txdp, txdn;
reg		txoe_r1, txoe_r2;
reg		txoe;

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

always @(posedge clk)
	tx_ready <= #1 tx_ready_d;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	TxReady_o <= #1 1'b0;
	else		TxReady_o <= #1 tx_ready_d & TxValid_i;

always @(posedge clk)
	ld_data <= #1 ld_data_d;

///////////////////////////////////////////////////////////////////
//
// Transmit in progress indicator
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	tx_ip <= #1 1'b0;
	else
	if(ld_sop_d)	tx_ip <= #1 1'b1;
	else
	if(eop_done)	tx_ip <= #1 1'b0;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		tx_ip_sync <= #1 1'b0;
	else
	if(fs_ce)		tx_ip_sync <= #1 tx_ip;

// data_done helps us to catch cases where TxValid drops due to
// packet end and then gets re-asserted as a new packet starts.
// We might not see this because we are still transmitting.
// data_done should solve those cases ...
`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		data_done <= #1 1'b0;
	else
	if(TxValid_i & ! tx_ip)	data_done <= #1 1'b1;
	else
	if(!TxValid_i)		data_done <= #1 1'b0;

///////////////////////////////////////////////////////////////////
//
// Shift Register
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		bit_cnt <= #1 3'h0;
	else
	if(!tx_ip_sync)		bit_cnt <= #1 3'h0;
	else
	if(fs_ce & !hold)	bit_cnt <= #1 bit_cnt + 3'h1;

assign hold = stuff;

always @(posedge clk)
	if(!tx_ip_sync)		sd_raw_o <= #1 1'b0;
	else
	case(bit_cnt)	// synopsys full_case parallel_case
	   3'h0: sd_raw_o <= #1 hold_reg[0];
	   3'h1: sd_raw_o <= #1 hold_reg[1];
	   3'h2: sd_raw_o <= #1 hold_reg[2];
	   3'h3: sd_raw_o <= #1 hold_reg[3];
	   3'h4: sd_raw_o <= #1 hold_reg[4];
	   3'h5: sd_raw_o <= #1 hold_reg[5];
	   3'h6: sd_raw_o <= #1 hold_reg[6];
	   3'h7: sd_raw_o <= #1 hold_reg[7];
	endcase

always @(posedge clk)
	sft_done <= #1 !hold & (bit_cnt == 3'h7);

always @(posedge clk)
	sft_done_r <= #1 sft_done;

assign sft_done_e = sft_done & !sft_done_r;

// Out Data Hold Register
always @(posedge clk)
	if(ld_sop_d)	hold_reg <= #1 8'h80;
	else
	if(ld_data)	hold_reg <= #1 DataOut_i;

///////////////////////////////////////////////////////////////////
//
// Bit Stuffer
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	one_cnt <= #1 3'h0;
	else
	if(!tx_ip_sync)	one_cnt <= #1 3'h0;
	else
	if(fs_ce)
	   begin
		if(!sd_raw_o | stuff)	one_cnt <= #1 3'h0;
		else			one_cnt <= #1 one_cnt + 3'h1;
	   end

assign stuff = (one_cnt==3'h6);

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	sd_bs_o <= #1 1'h0;
	else
	if(fs_ce)	sd_bs_o <= #1 !tx_ip_sync ? 1'b0 :
				(stuff ? 1'b0 : sd_raw_o);

///////////////////////////////////////////////////////////////////
//
// NRZI Encoder
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	sd_nrzi_o <= #1 1'b1;
	else
	if(!tx_ip_sync | !txoe_r1)	sd_nrzi_o <= #1 1'b1;
	else
	if(fs_ce)	sd_nrzi_o <= #1 sd_bs_o ? sd_nrzi_o : ~sd_nrzi_o;

///////////////////////////////////////////////////////////////////
//
// EOP append logic
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		append_eop <= #1 1'b0;
	else
	if(ld_eop_d)		append_eop <= #1 1'b1;
	else
	if(append_eop_sync2)	append_eop <= #1 1'b0;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	append_eop_sync1 <= #1 1'b0;
	else
	if(fs_ce)	append_eop_sync1 <= #1 append_eop;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	append_eop_sync2 <= #1 1'b0;
	else
	if(fs_ce)	append_eop_sync2 <= #1 append_eop_sync1;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	append_eop_sync3 <= #1 1'b0;
	else
	if(fs_ce)	append_eop_sync3 <= #1 append_eop_sync2;

assign eop_done = append_eop_sync3;

///////////////////////////////////////////////////////////////////
//
// Output Enable Logic
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txoe_r1 <= #1 1'b0;
	else
	if(fs_ce)	txoe_r1 <= #1 tx_ip_sync;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txoe_r2 <= #1 1'b0;
	else
	if(fs_ce)	txoe_r2 <= #1 txoe_r1;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txoe <= #1 1'b1;
	else
	if(fs_ce)	txoe <= #1 !(txoe_r1 | txoe_r2);

///////////////////////////////////////////////////////////////////
//
// Output Registers
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txdp <= #1 1'b1;
	else
	if(fs_ce)	txdp <= #1 phy_mode ?
					(!append_eop_sync3 &  sd_nrzi_o) :
					sd_nrzi_o;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txdn <= #1 1'b0;
	else
	if(fs_ce)	txdn <= #1 phy_mode ?
					(!append_eop_sync3 & ~sd_nrzi_o) :
					append_eop_sync3;

///////////////////////////////////////////////////////////////////
//
// Tx Statemashine
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	state <= #1 IDLE;
	else		state <= #1 next_state;

always @(state or TxValid_i or data_done or sft_done_e or eop_done or fs_ce)
   begin
	next_state = state;
	tx_ready_d = 1'b0;

	ld_sop_d = 1'b0;
	ld_data_d = 1'b0;
	ld_eop_d = 1'b0;

	case(state)	// synopsys full_case parallel_case
	   IDLE:
		   begin
			if(TxValid_i)
			   begin
				ld_sop_d = 1'b1;
				next_state = SOP;
			   end
		   end
	   SOP:
		   begin
			if(sft_done_e)
			   begin
				tx_ready_d = 1'b1;
				ld_data_d = 1'b1;
				next_state = DATA;
			   end
		   end
	   DATA:
		   begin
			if(!data_done & sft_done_e)
			   begin
				ld_eop_d = 1'b1;
				next_state = EOP1;
			   end
			
			if(data_done & sft_done_e)
			   begin
				tx_ready_d = 1'b1;
				ld_data_d = 1'b1;
			   end
		   end
	   EOP1:
		   begin
			if(eop_done)		next_state = EOP2;
		   end
	   EOP2:
		   begin
			if(!eop_done & fs_ce)	next_state = WAIT;
		   end
	   WAIT:
		   begin
			if(fs_ce)		next_state = IDLE;
		   end
	endcase
	
   end

endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品app| 国产在线日韩欧美| 91国偷自产一区二区三区观看| 国产精品久久久久久久裸模| 成人午夜激情影院| 1024成人网| 欧美私模裸体表演在线观看| 日韩精品色哟哟| 久久网站热最新地址| 不卡在线观看av| 亚洲资源中文字幕| 欧美一级精品在线| 国产成人欧美日韩在线电影| 亚洲蜜臀av乱码久久精品| 欧美日韩一区精品| 韩国女主播一区| 国产精品久久三| 欧美精品久久一区二区三区| 另类小说综合欧美亚洲| 国产欧美日韩不卡免费| 欧美又粗又大又爽| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品伦理一区二区| 欧美视频一区二区三区在线观看| 首页国产欧美久久| 亚洲午夜久久久久| 日韩亚洲欧美在线| 99久久免费国产| 麻豆一区二区三| 成人欧美一区二区三区白人 | 欧美精品乱码久久久久久按摩| 麻豆久久久久久| 亚洲欧美成人一区二区三区| 欧美成人免费网站| 91啪亚洲精品| 国产一区二区主播在线| 有坂深雪av一区二区精品| 精品国产一区二区亚洲人成毛片| 91污片在线观看| 精品在线一区二区三区| 亚洲一级二级三级| 中文字幕一区二区三区不卡 | 首页国产丝袜综合| 国产精品福利影院| 欧美精品一区二区久久久| 色婷婷av一区二区三区之一色屋| 久久机这里只有精品| 一区二区三区视频在线观看| 国产欧美综合在线| 日韩一区二区三区免费看| 91蝌蚪porny成人天涯| 国产一区美女在线| 美女视频免费一区| 亚洲成人在线观看视频| 中文字幕一区不卡| 国产欧美一区二区精品忘忧草| 欧美一区国产二区| 欧美日韩国产片| 91传媒视频在线播放| www.成人在线| 成人永久看片免费视频天堂| 国产一区啦啦啦在线观看| 免费欧美日韩国产三级电影| 亚洲国产精品久久人人爱蜜臀| 亚洲色图欧洲色图| 中文字幕日本乱码精品影院| 国产欧美一区视频| 久久精品亚洲国产奇米99| 亚洲精品在线免费观看视频| 欧美一区二区成人6969| 3d动漫精品啪啪1区2区免费| 欧美日韩一区 二区 三区 久久精品| 91麻豆产精品久久久久久| 99天天综合性| 91农村精品一区二区在线| 91视频免费看| 色系网站成人免费| 色八戒一区二区三区| 色老汉av一区二区三区| 91久久精品一区二区三| 在线观看免费亚洲| 欧美日韩国产综合久久| 欧美美女黄视频| 91麻豆精品国产91久久久久久久久| 欧美午夜片在线观看| 欧美日韩电影一区| 欧美一区欧美二区| 精品国产成人在线影院 | 奇米精品一区二区三区在线观看一| 亚洲国产综合色| 婷婷夜色潮精品综合在线| 日韩电影一区二区三区| 久久爱www久久做| 国产高清视频一区| 成人黄色在线网站| 91九色02白丝porn| 91精品福利在线一区二区三区| 精品欧美乱码久久久久久 | 欧美日韩午夜影院| 欧美一级午夜免费电影| 久久久久久久国产精品影院| 国产精品卡一卡二卡三| 一个色妞综合视频在线观看| 午夜精品123| 国产美女主播视频一区| 成人一区二区三区视频在线观看| 91麻豆精品在线观看| 欧美精品第一页| 国产亚洲一二三区| 一区二区三区日韩欧美| 久久爱www久久做| 99久久99久久综合| 日韩欧美中文字幕一区| 亚洲国产精品国自产拍av| 麻豆91小视频| 91亚洲男人天堂| 日韩视频免费直播| 成人欧美一区二区三区白人| 奇米精品一区二区三区在线观看一 | 亚洲免费观看高清完整版在线| 日韩国产欧美在线视频| 成人免费视频免费观看| 精品视频资源站| 中日韩免费视频中文字幕| 五月婷婷综合激情| 不卡影院免费观看| 日韩女优制服丝袜电影| 亚洲柠檬福利资源导航| 国产一区二区三区av电影| 欧日韩精品视频| 欧美激情在线一区二区三区| 日韩福利电影在线| 色婷婷精品大在线视频| 久久久精品蜜桃| 天天综合日日夜夜精品| 99久久er热在这里只有精品15 | 欧美成人vps| 亚洲愉拍自拍另类高清精品| 国产suv一区二区三区88区| 欧美福利视频导航| 亚洲欧美国产毛片在线| 国产a区久久久| 精品成人免费观看| 午夜亚洲福利老司机| 91免费国产在线观看| 中文字幕免费不卡| 精品一区精品二区高清| 91精品欧美福利在线观看| 一级特黄大欧美久久久| 91丝袜美女网| 国产精品久久久久aaaa樱花| 国产精品资源站在线| 日韩精品一区二区在线观看| 午夜精品福利一区二区三区av| 色综合久久九月婷婷色综合| 国产精品欧美一区二区三区| 国产精品69久久久久水密桃| 日韩精品中文字幕一区| 丝袜亚洲精品中文字幕一区| 欧美日韩免费观看一区二区三区| 国产成人综合网站| 日韩一卡二卡三卡| 久久99精品久久久久久动态图| 欧美精品 日韩| 日韩电影网1区2区| 日韩精品一区二区三区蜜臀| 美女视频黄频大全不卡视频在线播放| 欧美日韩国产首页在线观看| 亚洲成人在线网站| 制服视频三区第一页精品| 亚洲成人av一区二区| 69堂成人精品免费视频| 肉色丝袜一区二区| 日韩一区二区三区精品视频| 看国产成人h片视频| 精品国产髙清在线看国产毛片| 精彩视频一区二区| 国产欧美日韩不卡| 99久久夜色精品国产网站| 亚洲女人****多毛耸耸8| 在线视频观看一区| 日韩精品一级中文字幕精品视频免费观看 | 99在线精品免费| 一区二区三区四区亚洲| 欧美色老头old∨ideo| 日韩中文字幕一区二区三区| 日韩精品一区二区三区视频播放| 激情欧美一区二区| 国产精品蜜臀av| 欧美中文字幕不卡| 日韩av电影免费观看高清完整版 | 亚洲第一av色| 日韩午夜电影av| 国产经典欧美精品| 亚洲人成在线观看一区二区| 欧美日韩不卡在线| 国产精品中文字幕日韩精品| 亚洲欧美日韩一区二区| 欧美一区三区二区| 不卡的av在线播放|