usb_xcvr.v 3.67 KB
//**************************************************************************************
//
//	Model Name	: usb_xcvr.v
//	Revision	: $Revision: 1.6 $
//	Date		: $Date: 2003/02/13 02:49:12 $
//	Author		: Bill Saperstein
//	Description	: USB high speed tranceiver
//
//**************************************************************************************


//**************************************************************************************
// Module Definition
//**************************************************************************************
`timescale 1ps / 1ps 
module usb_xcvr
		(
	// Inputs
		usb_dpo ,		// positive input to differential driver
		usbxr_ose ,		// force single sided zero
		usbxr_oen ,		// driver output enable
		usbxr_ien ,		// driver input enable
		usbxr_fl ,		// speed select
		usb_vbus_vld ,		// B session valid - VBUS valid
		
	// Outputs
		usbxr_y1 ,		// usb receive data
		usb_dp ,		// gated version of D+
		usb_dm ,		// gated version of D-
	// Bi-directionals
		dp_o ,			// D+ data
		dm_o			// D- data
		) ;


//**************************************************************************************
// Define Parameters (optional)
//**************************************************************************************

// Not Applicable

//**************************************************************************************
// Port Declarations
//**************************************************************************************

	input
		usb_dpo, usbxr_ose, 
		usbxr_oen, usbxr_ien, usbxr_fl, usb_vbus_vld ;

	output
		usbxr_y1, usb_dp, usb_dm;

	inout
		dp_o, dm_o ;


//**************************************************************************************
// Net Assignments and Declarations
//**************************************************************************************

	wire rfv, ben ;
	wire usb_dp_p, usb_dm_p ;
	wire usb_vbus_vld_l ;
	wire usb_dpo_in ;
	
	assign usb_vbus_vld_l = ~usb_vbus_vld ;
	assign usb_dp = usb_vbus_vld & usb_dp_p ;
	assign usb_dm = usb_vbus_vld & usb_dm_p ;
	assign usb_dpo_in = usbxr_fl ^ usb_dpo ;

//**************************************************************************************
// Pre-Defined Module Instantiations
//**************************************************************************************

	TDBIAUSBNNFPOC		plus_buf
				(
				.N01(dp_o) ,
				.N02(usbxr_y1) ,
				.N03() ,
				.N04(usb_dp_p) ,
				.N05(usb_dm_p) ,
				.H01(usb_dpo_in) ,
				.H02(usbxr_oen) ,
				.H03(usbxr_ose) ,
				.H04(usbxr_fl) ,
				.H05(rfv) ,
				.H06(usbxr_ien) ,
				.H07(usb_vbus_vld_l) ,
				.H08(ben)
				);

	TDBIAUSBNNFMOC		minus_buf
				(
				.N01(dm_o) ,
				.N02(rfv) ,
				.H01(usb_dpo_in) ,
				.H02(usbxr_oen) ,
				.H03(usbxr_ose) ,
				.H04(usbxr_fl) ,
				.H05(ben)
				) ;

	TDVSAUSBN		bias
				(
				.H01(usbxr_fl) ,
				.N01(ben)
				) ;

//**************************************************************************************
// Gate and Structural Declarations
//**************************************************************************************

// Not Applicable

//**************************************************************************************
// Procedural Assignments
//**************************************************************************************

// Not Applicable

//**************************************************************************************
// Task and Function Definitions
//**************************************************************************************

// Not Applicable

//**************************************************************************************
// End of Model
//**************************************************************************************
endmodule // usb_xcvr