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

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

?? usb_rx_phy.v

?? USB v1.1 RTL and design specification
?? V
字號:
/////////////////////////////////////////////////////////////////////
////                                                             ////
////  USB 1.1 PHY                                                ////
////  RX & DPLL                                                  ////
////                                                             ////
////                                                             ////
////  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_rx_phy.v,v 1.1.1.1 2002/09/16 14:27:01 rudi Exp $
//
//  $Date: 2002/09/16 14:27:01 $
//  $Revision: 1.1.1.1 $
//  $Author: rudi $
//  $Locker:  $
//  $State: Exp $
//
// Change History:
//               $Log: usb_rx_phy.v,v $
//               Revision 1.1.1.1  2002/09/16 14:27:01  rudi
//               Created Directory Structure
//
//
//
//
//
//
//
//

`include "timescale.v"

module usb_rx_phy(	clk, rst, fs_ce,
	
			// Transciever Interface
			rxd, rxdp, rxdn,

			// UTMI Interface
			RxValid_o, RxActive_o, RxError_o, DataIn_o,
			RxEn_i, LineState);

input		clk;
input		rst;
output		fs_ce;
input		rxd, rxdp, rxdn;
output	[7:0]	DataIn_o;
output		RxValid_o;
output		RxActive_o;
output		RxError_o;
input		RxEn_i;
output	[1:0]	LineState;

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

reg		rxd_t1,  rxd_s1,  rxd_s;
reg		rxdp_t1, rxdp_s1, rxdp_s;
reg		rxdn_t1, rxdn_s1, rxdn_s;
reg		synced_d;
wire		k, j, se0;
reg		rx_en;
reg		rx_active;
reg	[2:0]	bit_cnt;
reg		rx_valid1, rx_valid;
reg		shift_en;
reg		sd_r;
reg		sd_nrzi;
reg	[7:0]	hold_reg;
wire		drop_bit;	// Indicates a stuffed bit
reg	[2:0]	one_cnt;

reg	[1:0]	dpll_state, dpll_next_state;
reg		fs_ce_d, fs_ce;
wire		change;
reg		rxdp_s1r, rxdn_s1r;
wire		lock_en;
reg		fs_ce_r1, fs_ce_r2, fs_ce_r3;
reg	[2:0]	fs_state, fs_next_state;
reg		rx_valid_r;

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

assign RxActive_o = rx_active;
assign RxValid_o = rx_valid;
assign RxError_o = 0;
assign DataIn_o = hold_reg;
assign LineState = {rxdp_s1, rxdn_s1};

always @(posedge clk)
	rx_en <= #1 RxEn_i;

///////////////////////////////////////////////////////////////////
//
// Synchronize Inputs
//

// First synchronize to the local system clock to
// avoid metastability outside the sync block (*_s1)
// Second synchronise to the internal bit clock (*_s)
always @(posedge clk)
	rxd_t1 <= #1 rxd;

always @(posedge clk)
	rxd_s1 <= #1 rxd_t1;

always @(posedge clk)
	rxd_s <= #1 rxd_s1;

always @(posedge clk)
	rxdp_t1 <= #1 rxdp;

always @(posedge clk)
	rxdp_s1 <= #1 rxdp_t1;

always @(posedge clk)
	rxdp_s <= #1 rxdp_s1;

always @(posedge clk)
	rxdn_t1 <= #1 rxdn;

always @(posedge clk)
	rxdn_s1 <= #1 rxdn_t1;

always @(posedge clk)
	rxdn_s <= #1 rxdn_s1;

assign k = !rxdp_s &  rxdn_s;
assign j =  rxdp_s & !rxdn_s;
assign se0 = !rxdp_s & !rxdn_s;

///////////////////////////////////////////////////////////////////
//
// DPLL
//

// This design uses a clock enable to do 12Mhz timing and not a
// real 12Mhz clock. Everything always runs at 48Mhz. We want to
// make sure however, that the clock enable is always exactly in
// the middle between two virtual 12Mhz rising edges.
// We monitor rxdp and rxdn for any changes and do the appropiate
// adjustments.
// In addition to the locking done in the dpll FSM, we adjust the
// final latch enable to compensate for various sync registers ...

// Allow lockinf only when we are receiving
assign	lock_en = rx_en;

// Edge detector
always @(posedge clk)
	rxdp_s1r <= #1 rxdp_s1;

always @(posedge clk)
	rxdn_s1r <= #1 rxdn_s1;

assign change = (rxdp_s1r != rxdp_s1) | (rxdn_s1r != rxdn_s1);

// DPLL FSM
`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	dpll_state <= #1 2'h1;
	else		dpll_state <= #1 dpll_next_state;

always @(dpll_state or lock_en or change)
   begin
	fs_ce_d = 1'b0;
	case(dpll_state)	// synopsys full_case parallel_case
	   2'h0:
		if(lock_en & change)	dpll_next_state = 3'h0;
		else			dpll_next_state = 3'h1;
	   2'h1:begin
		fs_ce_d = 1'b1;
		//if(lock_en & change)	dpll_next_state = 3'h0;
		if(lock_en & change)	dpll_next_state = 3'h3;
		else			dpll_next_state = 3'h2;
		end
	   2'h2:
		if(lock_en & change)	dpll_next_state = 3'h0;
		else			dpll_next_state = 3'h3;
	   2'h3:
		if(lock_en & change)	dpll_next_state = 3'h0;
		else			dpll_next_state = 3'h0;
	endcase
   end

// Compensate for sync registers at the input - allign full speed
// clock enable to be in the middle between two bit changes ...
always @(posedge clk)
	fs_ce_r1 <= #1 fs_ce_d;

always @(posedge clk)
	fs_ce_r2 <= #1 fs_ce_r1;

always @(posedge clk)
	fs_ce_r3 <= #1 fs_ce_r2;

always @(posedge clk)
	fs_ce <= #1 fs_ce_r3;

///////////////////////////////////////////////////////////////////
//
// Find Sync Pattern FSM
//

parameter	FS_IDLE	= 3'h0,
		K1	= 3'h1,
		J1	= 3'h2,
		K2	= 3'h3,
		J2	= 3'h4,
		K3	= 3'h5,
		J3	= 3'h6,
		K4	= 3'h7;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)	fs_state <= #1 FS_IDLE;
	else		fs_state <= #1 fs_next_state;

always @(fs_state or fs_ce or k or j or rx_en)
   begin
	synced_d = 1'b0;
	fs_next_state = fs_state;
	if(fs_ce)
	   case(fs_state)	// synopsys full_case parallel_case
		FS_IDLE:
		     begin
			if(k & rx_en)	fs_next_state = K1;
		     end
		K1:
		     begin
			if(j & rx_en)	fs_next_state = J1;
			else		fs_next_state = FS_IDLE;
		     end
		J1:
		     begin
			if(k & rx_en)	fs_next_state = K2;
			else		fs_next_state = FS_IDLE;
		     end
		K2:
		     begin
			if(j & rx_en)	fs_next_state = J2;
			else		fs_next_state = FS_IDLE;
		     end
		J2:
		     begin
			if(k & rx_en)	fs_next_state = K3;
			else		fs_next_state = FS_IDLE;
		     end
		K3:
		     begin
			if(j & rx_en)	fs_next_state = J3;
			else
			if(k & rx_en)	fs_next_state = K4;	// Allow missing one J
			else		fs_next_state = FS_IDLE;
		     end
		J3:
		     begin
			if(k & rx_en)	fs_next_state = K4;
			else		fs_next_state = FS_IDLE;
		     end
		K4:
		     begin
			if(k)	synced_d = 1'b1;
			fs_next_state = FS_IDLE;
		     end
	   endcase
   end

///////////////////////////////////////////////////////////////////
//
// Generate RxActive
//

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		rx_active <= #1 1'b0;
	else
	if(synced_d & rx_en)	rx_active <= #1 1'b1;
	else
	if(se0 & rx_valid_r )	rx_active <= #1 1'b0;

always @(posedge clk)
	if(rx_valid)	rx_valid_r <= #1 1'b1;
	else
	if(fs_ce)	rx_valid_r <= #1 1'b0;

///////////////////////////////////////////////////////////////////
//
// NRZI Decoder
//

always @(posedge clk)
	if(fs_ce)	sd_r <= #1 rxd_s;

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)		sd_nrzi <= #1 1'b0;
	else
	if(rx_active & fs_ce)	sd_nrzi <= #1 !(rxd_s ^ sd_r);

///////////////////////////////////////////////////////////////////
//
// Bit Stuff Detect
//

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

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

///////////////////////////////////////////////////////////////////
//
// Serial => Parallel converter
//

always @(posedge clk)
	if(fs_ce)	shift_en <= #1 synced_d | rx_active;

always @(posedge clk)
	if(fs_ce & shift_en & !drop_bit)
		hold_reg <= #1 {sd_nrzi, hold_reg[7:1]};

///////////////////////////////////////////////////////////////////
//
// Generate RxValid
//

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

`ifdef USB_ASYNC_REST
always @(posedge clk or negedge rst)
`else
always @(posedge clk)
`endif
	if(!rst)				rx_valid1 <= #1 1'b0;
	else
	if(fs_ce & !drop_bit & (bit_cnt==3'h7))	rx_valid1 <= #1 1'b1;
	else
	if(rx_valid1 & fs_ce & !drop_bit)	rx_valid1 <= #1 1'b0;

always @(posedge clk)
	rx_valid <= #1 !drop_bit & rx_valid1 & fs_ce;

endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲在线成人精品| 欧美日韩一区二区在线视频| 日韩在线一二三区| 亚洲欧美日韩中文播放| 国产精品情趣视频| 国产精品视频第一区| 亚洲视频图片小说| 亚洲无人区一区| 午夜国产不卡在线观看视频| 青青草91视频| 久久69国产一区二区蜜臀| 国产一区二区影院| a美女胸又www黄视频久久| 91欧美一区二区| 欧美挠脚心视频网站| 欧美精品九九99久久| 精品国产伦一区二区三区观看方式| 精品国产乱码久久久久久牛牛 | 久久精品国产久精国产| 全国精品久久少妇| 国产传媒日韩欧美成人| 色综合中文字幕国产| 在线观看亚洲a| 日韩欧美综合一区| 国产精品电影一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 视频一区二区中文字幕| 国产另类ts人妖一区二区| av不卡在线观看| 欧美一区二区三区色| 国产欧美精品一区二区色综合| 成人欧美一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美视频在线一区| 精品国产一区二区三区四区四| 国产精品福利电影一区二区三区四区| 亚洲欧美激情一区二区| 精品一区二区三区视频在线观看| 成人av手机在线观看| 制服丝袜一区二区三区| 中文av一区二区| 另类小说综合欧美亚洲| 91福利社在线观看| 日本一区二区三区国色天香 | 国产精品初高中害羞小美女文| 日韩精品午夜视频| 色综合一区二区| 国产日韩av一区| 麻豆一区二区三| 欧美精三区欧美精三区| 亚洲女女做受ⅹxx高潮| 国产精品中文欧美| 日韩欧美综合一区| 亚洲国产精品久久久久秋霞影院 | 国产精品99久久久久久有的能看| 欧美日韩精品福利| 亚洲精品菠萝久久久久久久| 成人一区在线看| 欧美精品一区二区在线观看| 日韩精品欧美成人高清一区二区| 色婷婷激情久久| 国产精品传媒在线| 成人综合婷婷国产精品久久蜜臀| 欧美电视剧在线看免费| 日韩不卡在线观看日韩不卡视频| 在线免费亚洲电影| 依依成人综合视频| 色综合色狠狠天天综合色| 国产精品萝li| 97国产一区二区| 亚洲视频你懂的| 91麻豆免费视频| 亚洲免费在线播放| 91免费国产在线| 亚洲视频一二区| 欧美综合色免费| 亚洲国产三级在线| 欧美日韩aaa| 日韩激情一二三区| 欧美成人三级在线| 国产精品一区久久久久| 欧美极品aⅴ影院| 不卡一区中文字幕| 一区二区三区.www| 欧美日韩一区久久| 精品亚洲成a人| 国产女人aaa级久久久级| thepron国产精品| 一区二区三区四区亚洲| 欧美日韩不卡视频| 狠狠v欧美v日韩v亚洲ⅴ| 国产视频在线观看一区二区三区| 粉嫩久久99精品久久久久久夜| 中文字幕亚洲在| 欧美精品 日韩| 激情图区综合网| 国产精品美女久久久久aⅴ| 91免费视频网址| 日韩**一区毛片| 国产女同性恋一区二区| 色久优优欧美色久优优| 麻豆精品视频在线| 国产精品日日摸夜夜摸av| 在线一区二区三区四区五区| 麻豆一区二区99久久久久| 亚洲欧洲日韩av| 91精品在线麻豆| 99久久精品费精品国产一区二区| 亚洲国产精品久久久久婷婷884| 欧美成人女星排行榜| 91啪亚洲精品| 精品一区二区综合| 一区二区三区在线观看网站| 日韩欧美123| 日本高清不卡aⅴ免费网站| 经典三级在线一区| 亚洲一区影音先锋| 欧美激情艳妇裸体舞| 在线播放亚洲一区| 91在线精品一区二区三区| 久久成人av少妇免费| 亚洲一区二区三区精品在线| 久久亚洲综合av| 91精品麻豆日日躁夜夜躁| 91色九色蝌蚪| 成人黄色国产精品网站大全在线免费观看 | 国产精品99久久久久久有的能看| 亚洲国产aⅴ天堂久久| 国产精品久久午夜| 久久蜜桃av一区二区天堂| 欧美精品1区2区3区| 色哟哟国产精品| 成人精品在线视频观看| 卡一卡二国产精品| 热久久国产精品| 首页综合国产亚洲丝袜| 亚洲一区在线观看免费观看电影高清 | 色综合久久88色综合天天免费| 狠狠色综合日日| 久久精品理论片| 日本不卡中文字幕| 日韩精品视频网站| 午夜精品久久久久久久| 亚洲一区二区三区四区五区中文 | 不卡一区在线观看| 国产精品白丝jk白祙喷水网站| 久久99精品久久久久久国产越南| 五月激情综合婷婷| 亚洲1区2区3区4区| 三级亚洲高清视频| 石原莉奈在线亚洲二区| 日一区二区三区| 天天色综合天天| 蜜桃av一区二区三区| 蜜桃久久精品一区二区| 紧缚奴在线一区二区三区| 精品一二线国产| 国产成人午夜99999| 国产成人精品影视| av电影在线观看完整版一区二区| 成人免费av在线| 99国产欧美久久久精品| 色乱码一区二区三区88| 欧美日韩视频在线观看一区二区三区 | 久久综合给合久久狠狠狠97色69| 欧美sm美女调教| 中文字幕精品在线不卡| 亚洲人成人一区二区在线观看| 一区二区日韩av| 奇米一区二区三区| 国产精品66部| 色偷偷久久人人79超碰人人澡 | 裸体歌舞表演一区二区| 国产美女av一区二区三区| www.亚洲精品| 欧美日韩1234| 精品国产伦一区二区三区观看方式 | 亚洲乱码精品一二三四区日韩在线| 一区二区三区欧美| 伦理电影国产精品| 91免费在线看| 精品国产伦一区二区三区观看体验| 欧美国产精品中文字幕| 亚洲一区二区三区四区的| 国产主播一区二区三区| 91丨porny丨在线| 日韩精品一区二区三区视频播放| 久久久精品欧美丰满| 一区二区三区四区乱视频| 精品一区二区三区免费观看| 99久久精品国产精品久久| 日韩一级黄色大片| 亚洲色图视频网| 精品一区二区在线播放| 欧美三级韩国三级日本一级| 国产偷国产偷精品高清尤物 | 久久美女高清视频| 尤物av一区二区| 国产成人av在线影院| 91麻豆精品国产综合久久久久久|