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

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

?? usb_tx_phy.v

?? USB 1.1的verilog代碼
?? 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.4 2004/10/19 09:29:07 rudi Exp $
//
//  $Date: 2004/10/19 09:29:07 $
//  $Revision: 1.4 $
//  $Author: rudi $
//  $Locker:  $
//  $State: Exp $
//
// Change History:
//               $Log: usb_tx_phy.v,v $
//               Revision 1.4  2004/10/19 09:29:07  rudi
//               Fixed DPLL alignment in the rx_phy and bit stuffing errors in the tx_phy (if last bit bit was a stuff bit in a packet it was omitted).
//
//               Revision 1.3  2003/10/21 05:58:41  rudi
//               usb_rst is no longer or'ed with the incomming reset internally.
//               Now usb_rst is simply an output, the application can decide how
//               to utilize it.
//
//               Revision 1.2  2003/10/19 17:40:13  rudi
//               - Made core more robust against line noise
//               - Added Error Checking and Reporting
//               (See README.txt for more info)
//
//               Revision 1.1.1.1  2002/09/16 14:27:02  rudi
//               Created Directory Structure
//
//
//
//
//
//
//

`include "timescale.v"
`define USB_ASYNC_REST    1

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_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	[7:0]	hold_reg_d;

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		append_eop_sync4;
reg		txdp, txdn;
reg		txoe_r1, txoe_r2;
reg		txoe;

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

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

always @(posedge clk) ld_data <= 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'b0;
	else
	if(ld_sop_d)	tx_ip <= 1'b1;
	else
	if(eop_done)	tx_ip <= 1'b0;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		tx_ip_sync <= 1'b0;
	else
	if(fs_ce)		tx_ip_sync <= 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'b0;
	else
	if(TxValid_i && ! tx_ip)	data_done <= 1'b1;
	else
	if(!TxValid_i)			data_done <= 1'b0;

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

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

assign hold = stuff;

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

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

always @(posedge clk)
	sft_done_r <= sft_done;

assign sft_done_e = sft_done & !sft_done_r;

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

always @(posedge clk) hold_reg_d <= hold_reg;

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

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	one_cnt <= 3'h0;
	else
	if(!tx_ip_sync)	one_cnt <= 3'h0;
	else
	if(fs_ce)
	   begin
		if(!sd_raw_o || stuff)	one_cnt <= 3'h0;
		else			one_cnt <= 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'h0;
	else
	if(fs_ce)	sd_bs_o <= !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'b1;
	else
	if(!tx_ip_sync || !txoe_r1)	sd_nrzi_o <= 1'b1;
	else
	if(fs_ce)			sd_nrzi_o <= 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'b0;
	else
	if(ld_eop_d)		append_eop <= 1'b1;
	else
	if(append_eop_sync2)	append_eop <= 1'b0;

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

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

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	append_eop_sync3 <= 1'b0;
	else
	if(fs_ce)	append_eop_sync3 <= append_eop_sync2 |
			(append_eop_sync3 & !append_eop_sync4);	// Make sure always 2 bit wide

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

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'b0;
	else
	if(fs_ce)	txoe_r1 <= tx_ip_sync;

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

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	txoe <= 1'b1;
	else
	if(fs_ce)	txoe <= !(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'b1;
	else
	if(fs_ce)	txdp <= 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'b0;
	else
	if(fs_ce)	txdn <= 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 <= IDLE;
	else		state <= 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:
			if(TxValid_i)
			   begin
				ld_sop_d = 1'b1;
				next_state = SOP;
			   end
	   SOP:
			if(sft_done_e)
			   begin
				tx_ready_d = 1'b1;
				ld_data_d = 1'b1;
				next_state = DATA;
			   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:
			if(eop_done)		next_state = EOP2;
	   EOP2:
			if(!eop_done && fs_ce)	next_state = WAIT;
	   WAIT:
			if(fs_ce)		next_state = IDLE;
	endcase
   end

endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久综合| 国产一区二区美女诱惑| 日本在线播放一区二区三区| 国产伦理精品不卡| 欧美午夜精品久久久久久孕妇| 久久亚洲二区三区| 午夜久久久久久久久久一区二区| 岛国av在线一区| 欧美成人精精品一区二区频| 亚洲欧美另类小说| 丁香激情综合五月| 精品久久久久久久久久久院品网| 亚洲一区二区精品久久av| 懂色av中文字幕一区二区三区| 欧美日韩另类一区| 一区二区三区欧美久久| bt欧美亚洲午夜电影天堂| 精品国产凹凸成av人网站| 日韩不卡在线观看日韩不卡视频| 色诱亚洲精品久久久久久| 国产精品久久久久久久久免费丝袜 | 欧美性感一区二区三区| 中文字幕人成不卡一区| voyeur盗摄精品| 国产欧美一区二区精品性| 国内精品免费**视频| 欧美大片拔萝卜| 国产主播一区二区三区| www国产精品av| 国产伦精品一区二区三区免费迷 | 精品一区二区三区免费播放| 欧美高清视频一二三区 | 丰满白嫩尤物一区二区| 欧美国产精品一区二区| 成人av在线网站| 亚洲女与黑人做爰| 欧美午夜在线一二页| 亚洲成人综合网站| 91精品综合久久久久久| 精油按摩中文字幕久久| 国产视频不卡一区| 国产成人亚洲综合a∨婷婷图片 | 91丨九色丨国产丨porny| 自拍偷拍亚洲综合| 欧美午夜精品一区二区三区| 亚洲成人自拍网| 日韩精品中文字幕一区| 国产成人午夜精品影院观看视频| 日本一区二区久久| 91久久精品网| 蜜桃av噜噜一区| 国产欧美一区二区三区在线看蜜臀| 成人美女视频在线观看18| 一区二区不卡在线播放 | 欧美人与禽zozo性伦| 免费成人在线影院| 国产欧美日韩不卡| 欧美性色欧美a在线播放| 美女一区二区在线观看| 中文字幕不卡三区| 欧美日韩亚洲国产综合| 久久99精品国产| 亚洲精品国产精华液| 精品国精品国产尤物美女| 国产精品一区二区在线观看网站| 亚洲精品老司机| 精品久久久久99| 在线观看网站黄不卡| 激情小说欧美图片| 亚洲一级二级在线| 国产亲近乱来精品视频| 欧美精品在线观看播放| 国产a级毛片一区| 午夜成人免费视频| 中文字幕不卡三区| 欧美不卡视频一区| 欧美在线不卡一区| 成人性生交大片| 蜜桃视频在线一区| 一区二区三区 在线观看视频| 久久午夜电影网| 欧美日本一道本在线视频| 99精品国产91久久久久久| 久久精品国产精品亚洲精品| 亚洲人成在线播放网站岛国| 26uuu国产电影一区二区| 精品污污网站免费看| 成人黄色av网站在线| 国产精品资源在线观看| 日韩精品三区四区| 亚洲一区二区精品久久av| 一区在线观看免费| 国产日韩欧美亚洲| 久久一二三国产| 日韩免费一区二区三区在线播放| 欧美日韩在线精品一区二区三区激情| 99精品黄色片免费大全| zzijzzij亚洲日本少妇熟睡| 国产精品1区2区| 国产精品一区2区| 久久99国产乱子伦精品免费| 日本网站在线观看一区二区三区| 一区二区三区四区中文字幕| 亚洲欧美日韩一区二区| 中文字幕一区二区三区在线不卡| 国产欧美精品一区二区色综合朱莉| 日韩视频中午一区| 日韩一级黄色大片| 欧美成人三级在线| 亚洲精品一区二区三区福利 | 欧美日本在线播放| 欧美天堂亚洲电影院在线播放| 色综合久久久久| 在线免费观看视频一区| 欧美午夜理伦三级在线观看| 欧美日韩国产精品自在自线| 欧美日本在线播放| 日韩欧美一区二区不卡| 精品国产乱码久久久久久夜甘婷婷| 日韩午夜精品电影| 久久精品亚洲精品国产欧美 | a美女胸又www黄视频久久| 成人免费视频app| 色综合一区二区三区| 91国模大尺度私拍在线视频| 91精品国产综合久久福利| 在线观看亚洲a| 91精品国产综合久久久久久漫画| 日韩视频国产视频| 久久久精品国产99久久精品芒果 | 日韩免费电影一区| 久久免费电影网| 中文字幕亚洲视频| 五月婷婷久久丁香| 精品一区二区三区在线观看| 国产精品456露脸| 色成人在线视频| 欧美一级黄色录像| 国产精品入口麻豆九色| 亚洲一二三四区不卡| 麻豆精品国产91久久久久久 | 国产一区二区女| 99久久精品费精品国产一区二区| 欧美这里有精品| 精品国产一区二区三区久久久蜜月| 中文字幕免费不卡| 五月婷婷综合在线| 夫妻av一区二区| 欧美狂野另类xxxxoooo| 国产视频一区在线播放| 一区二区三区免费观看| 国产一区二区三区国产| 欧美性猛片xxxx免费看久爱| 日韩欧美高清dvd碟片| 亚洲裸体在线观看| 极品销魂美女一区二区三区| 一本大道av一区二区在线播放| 日韩精品在线一区二区| 亚洲美女精品一区| 国内精品伊人久久久久av影院| 一本久久a久久免费精品不卡| 26uuu亚洲| 日韩国产高清影视| 91在线观看地址| 精品国产一二三| 一区二区三区欧美视频| 粉嫩av一区二区三区在线播放| 欧美一区二区女人| 亚洲精品日韩一| 不卡免费追剧大全电视剧网站| 欧美电影精品一区二区| 亚洲黄色小说网站| 风流少妇一区二区| 欧美精品一区二区久久久| 亚洲国产视频一区| 99国产精品国产精品久久| 国产目拍亚洲精品99久久精品| 久久福利视频一区二区| 91精品视频网| 亚洲午夜私人影院| 色综合久久六月婷婷中文字幕| 国产精品网站在线观看| 91在线一区二区| 国产三级欧美三级日产三级99| 久久超碰97中文字幕| 91精品国产色综合久久ai换脸 | 高清在线成人网| 久久久精品影视| 国产剧情一区在线| 欧美大片拔萝卜| 另类中文字幕网| 91精品国产欧美一区二区成人 | 国产成人在线观看免费网站| 2020国产精品久久精品美国| 麻豆国产精品官网| 亚洲精品一区二区三区在线观看| 老司机午夜精品| 久久久久久99久久久精品网站| 国产一区二区日韩精品| 中文字幕不卡三区|