www.pudn.com > USB2.0_rtl_ipcore_verilog.rar > usbf_rf.v


///////////////////////////////////////////////////////////////////// 
////                                                             //// 
////  Register File                                              //// 
////  This module contains all top level registers and           //// 
////  instantiates the register files for endpoints              //// 
////                                                             //// 
////  Author: Rudolf Usselmann                                   //// 
////          rudi@asics.ws                                      //// 
////                                                             //// 
////                                                             //// 
////  Downloaded from: http://www.opencores.org/cores/usb/       //// 
////                                                             //// 
///////////////////////////////////////////////////////////////////// 
////                                                             //// 
//// Copyright (C) 2000-2003 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: usbf_rf.v,v 1.6 2003/10/17 02:36:57 rudi Exp $ 
// 
//  $Date: 2003/10/17 02:36:57 $ 
//  $Revision: 1.6 $ 
//  $Author: rudi $ 
//  $Locker:  $ 
//  $State: Exp $ 
// 
// Change History: 
//               $Log: usbf_rf.v,v $ 
//               Revision 1.6  2003/10/17 02:36:57  rudi 
//               - Disabling bit stuffing and NRZI encoding during speed negotiation 
//               - Now the core can send zero size packets 
//               - Fixed register addresses for some of the higher endpoints 
//                 (conversion between decimal/hex was wrong) 
//               - The core now does properly evaluate the function address to 
//                 determine if the packet was intended for it. 
//               - Various other minor bugs and typos 
// 
//               Revision 1.5  2001/11/04 12:22:45  rudi 
// 
//               - Fixed previous fix (brocke something else ...) 
//               - Majore Synthesis cleanup 
// 
//               Revision 1.4  2001/11/03 03:26:23  rudi 
// 
//               - Fixed several interrupt and error condition reporting bugs 
// 
//               Revision 1.3  2001/09/24 01:15:28  rudi 
// 
//               Changed reset to be active high async. 
// 
//               Revision 1.2  2001/08/10 08:48:33  rudi 
// 
//               - Changed IO names to be more clear. 
//               - Uniquifyed define names to be core specific. 
// 
//               Revision 1.1  2001/08/03 05:30:09  rudi 
// 
// 
//               1) Reorganized directory structure 
// 
//               Revision 1.2  2001/03/31 13:00:52  rudi 
// 
//               - Added Core configuration 
//               - Added handling of OUT packets less than MAX_PL_SZ in DMA mode 
//               - Modified WISHBONE interface and sync logic 
//               - Moved SSRAM outside the core (added interface) 
//               - Many small bug fixes ... 
// 
//               Revision 1.0  2001/03/07 09:17:12  rudi 
// 
// 
//               Changed all revisions to revision 1.0. This is because OpenCores CVS 
//               interface could not handle the original '0.1' revision .... 
// 
//               Revision 0.2  2001/03/07 09:08:13  rudi 
// 
//               Added USB controll signaling (Line Status) block. Fixed some minor 
//               typos, added resume bit and signal. 
// 
//               Revision 0.1.0.1  2001/02/28 08:11:32  rudi 
//               Initial Release 
// 
// 
 
`include "usbf_defines.v" 
 
// Endpoint register File 
module usbf_rf(	clk, wclk, rst, 
 
		// Wishbone Interface 
		adr, re, we, din, dout, inta, intb, 
		dma_req, dma_ack, 
 
		// Internal Interface 
		idin, 
		ep_sel, match, 
		buf0_rl, buf0_set, buf1_set, 
		uc_bsel_set, uc_dpd_set, 
 
		int_buf1_set, int_buf0_set, int_upid_set, 
		int_crc16_set, int_to_set, int_seqerr_set, 
		out_to_small, 
 
		csr, buf0, buf1, 
		funct_adr, 
		dma_in_buf_sz1, dma_out_buf_avail, 
 
		// Misc 
		frm_nat, 
		utmi_vend_stat, utmi_vend_ctrl, utmi_vend_wr, 
		line_stat, usb_attached, mode_hs, suspend, 
		attached, usb_reset, pid_cs_err, nse_err, 
		crc5_err, rx_err, rf_resume_req 
		); 
 
input		clk, wclk, rst; 
input	[6:0]	adr; 
input		re; 
input		we; 
input	[31:0]	din; 
output	[31:0]	dout; 
output		inta, intb; 
output	[15:0]	dma_req; 
input	[15:0]	dma_ack; 
 
input	[31:0]	idin;		// Data Input 
input	[3:0]	ep_sel;		// Endpoint Number Input 
output		match;		// Endpoint Matched 
input		buf0_rl;	// Reload Buf 0 with original values 
 
input		buf0_set;	// Write to buf 0 
input		buf1_set;	// Write to buf 1 
input		uc_bsel_set;	// Write to the uc_bsel field 
input		uc_dpd_set;	// Write to the uc_dpd field 
input		int_buf1_set;	// Set buf1 full/empty interrupt 
input		int_buf0_set;	// Set buf0 full/empty interrupt 
input		int_upid_set;	// Set unsupported PID interrupt 
input		int_crc16_set;	// Set CRC16 error interrupt 
input		int_to_set;	// Set time out interrupt 
input		int_seqerr_set;	// Set PID Sequence Error Interrupt 
input		out_to_small;	// OUT packet was to small for DMA operation 
 
output	[31:0]	csr;		// Internal CSR Output 
output	[31:0]	buf0;		// Internal Buf 0 Output 
output	[31:0]	buf1;		// Internal Buf 1 Output 
output	[6:0]	funct_adr;	// Function Address 
output		dma_in_buf_sz1, dma_out_buf_avail; 
 
input	[31:0]	frm_nat; 
 
input	[7:0]	utmi_vend_stat;	// UTMI Vendor C/S bus 
output	[3:0]	utmi_vend_ctrl; 
output		utmi_vend_wr; 
 
input	[1:0]	line_stat;	// Below are signals for interrupt generation 
input		usb_attached; 
input		mode_hs; 
input		suspend; 
input		attached; 
input		usb_reset; 
input		nse_err; 
input		pid_cs_err; 
input		crc5_err; 
input		rx_err; 
output		rf_resume_req; 
 
/////////////////////////////////////////////////////////////////// 
// 
// Local Wires and Registers 
// 
 
wire	[31:0]	ep0_dout, ep1_dout, ep2_dout, ep3_dout; 
wire	[31:0]	ep4_dout, ep5_dout, ep6_dout, ep7_dout; 
wire	[31:0]	ep8_dout, ep9_dout, ep10_dout, ep11_dout; 
wire	[31:0]	ep12_dout, ep13_dout, ep14_dout, ep15_dout; 
 
wire		ep0_re, ep1_re, ep2_re, ep3_re; 
wire		ep4_re, ep5_re, ep6_re, ep7_re; 
wire		ep8_re, ep9_re, ep10_re, ep11_re; 
wire		ep12_re, ep13_re, ep14_re, ep15_re; 
 
wire		ep0_we, ep1_we, ep2_we, ep3_we; 
wire		ep4_we, ep5_we, ep6_we, ep7_we; 
wire		ep8_we, ep9_we, ep10_we, ep11_we; 
wire		ep12_we, ep13_we, ep14_we, ep15_we; 
 
wire		ep0_inta, ep1_inta, ep2_inta, ep3_inta; 
wire		ep4_inta, ep5_inta, ep6_inta, ep7_inta; 
wire		ep8_inta, ep9_inta, ep10_inta, ep11_inta; 
wire		ep12_inta, ep13_inta, ep14_inta, ep15_inta; 
 
wire		ep0_intb, ep1_intb, ep2_intb, ep3_intb; 
wire		ep4_intb, ep5_intb, ep6_intb, ep7_intb; 
wire		ep8_intb, ep9_intb, ep10_intb, ep11_intb; 
wire		ep12_intb, ep13_intb, ep14_intb, ep15_intb; 
 
wire		ep0_match, ep1_match, ep2_match, ep3_match; 
wire		ep4_match, ep5_match, ep6_match, ep7_match; 
wire		ep8_match, ep9_match, ep10_match, ep11_match; 
wire		ep12_match, ep13_match, ep14_match, ep15_match; 
 
wire	[31:0]	ep0_csr, ep1_csr, ep2_csr, ep3_csr; 
wire	[31:0]	ep4_csr, ep5_csr, ep6_csr, ep7_csr; 
wire	[31:0]	ep8_csr, ep9_csr, ep10_csr, ep11_csr; 
wire	[31:0]	ep12_csr, ep13_csr, ep14_csr, ep15_csr; 
 
wire	[31:0]	ep0_buf0, ep1_buf0, ep2_buf0, ep3_buf0; 
wire	[31:0]	ep4_buf0, ep5_buf0, ep6_buf0, ep7_buf0; 
wire	[31:0]	ep8_buf0, ep9_buf0, ep10_buf0, ep11_buf0; 
wire	[31:0]	ep12_buf0, ep13_buf0, ep14_buf0, ep15_buf0; 
 
wire	[31:0]	ep0_buf1, ep1_buf1, ep2_buf1, ep3_buf1; 
wire	[31:0]	ep4_buf1, ep5_buf1, ep6_buf1, ep7_buf1; 
wire	[31:0]	ep8_buf1, ep9_buf1, ep10_buf1, ep11_buf1; 
wire	[31:0]	ep12_buf1, ep13_buf1, ep14_buf1, ep15_buf1; 
 
wire		ep0_dma_in_buf_sz1, ep1_dma_in_buf_sz1; 
wire		ep2_dma_in_buf_sz1, ep3_dma_in_buf_sz1; 
wire		ep4_dma_in_buf_sz1, ep5_dma_in_buf_sz1; 
wire		ep6_dma_in_buf_sz1, ep7_dma_in_buf_sz1; 
wire		ep8_dma_in_buf_sz1, ep9_dma_in_buf_sz1; 
wire		ep10_dma_in_buf_sz1, ep11_dma_in_buf_sz1; 
wire		ep12_dma_in_buf_sz1, ep13_dma_in_buf_sz1; 
wire		ep14_dma_in_buf_sz1, ep15_dma_in_buf_sz1; 
 
wire		ep0_dma_out_buf_avail, ep1_dma_out_buf_avail; 
wire		ep2_dma_out_buf_avail, ep3_dma_out_buf_avail; 
wire		ep4_dma_out_buf_avail, ep5_dma_out_buf_avail; 
wire		ep6_dma_out_buf_avail, ep7_dma_out_buf_avail; 
wire		ep8_dma_out_buf_avail, ep9_dma_out_buf_avail; 
wire		ep10_dma_out_buf_avail, ep11_dma_out_buf_avail; 
wire		ep12_dma_out_buf_avail, ep13_dma_out_buf_avail; 
wire		ep14_dma_out_buf_avail, ep15_dma_out_buf_avail; 
 
reg		dma_in_buf_sz1; 
reg		dma_out_buf_avail; 
 
reg	[31:0]	dtmp; 
reg	[31:0]	dout; 
 
wire	[31:0]	main_csr; 
reg	[6:0]	funct_adr; 
reg	[8:0]	intb_msk, inta_msk; 
 
reg		match_r1; 
reg	[31:0]	csr; 
reg	[31:0]	buf0; 
reg	[31:0]	buf1; 
 
reg	[3:0]	utmi_vend_ctrl; 
reg		utmi_vend_wr; 
reg	[7:0]	utmi_vend_stat_r; 
 
reg		int_src_re; 
reg	[8:0]	int_srcb; 
reg	[15:0]	int_srca; 
reg		attach_r, attach_r1; 
wire		attach, deattach; 
reg		suspend_r, suspend_r1; 
wire		suspend_start, suspend_end; 
reg		usb_reset_r; 
reg		rx_err_r; 
reg		nse_err_r; 
reg		pid_cs_err_r; 
reg		crc5_err_r; 
 
reg		rf_resume_req_r, rf_resume_req; 
 
wire		inta_ep, intb_ep; 
wire		inta_rf, intb_rf; 
reg		inta, intb; 
 
/////////////////////////////////////////////////////////////////// 
// 
// WISHBONE Access 
// 
 
// Main CSR Alias 
assign main_csr = {27'h0, line_stat, usb_attached, mode_hs, suspend}; 
 
// Read Registers Logic 
always @(adr or main_csr or funct_adr or inta_msk or intb_msk or int_srca 
	or int_srcb or frm_nat or utmi_vend_stat_r) 
	case(adr[2:0])		// synopsys full_case parallel_case 
	   3'h0: dtmp = main_csr; 
	   3'h1: dtmp = { 25'h0, funct_adr}; 
	   3'h2: dtmp = {  7'h0, intb_msk, 7'h0, inta_msk}; 
	   3'h3: dtmp = {  3'h0, int_srcb, 4'h0, int_srca}; 
	   3'h4: dtmp = frm_nat; 
	   3'h5: dtmp = { 24'h0, utmi_vend_stat_r}; 
	endcase 
 
// Interrupt Source Read Register 
always @(posedge wclk) 
	int_src_re <= re & (adr[6:0] == 7'h3) ; 
 
// UTMI Vendor Control Stuff 
always @(posedge wclk) 
	utmi_vend_stat_r <= utmi_vend_stat; 
 
reg		utmi_vend_wr_r; 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)			utmi_vend_wr_r <= 1'b0; 
	else 
	if(adr[6:0] == 7'h5 && we)	utmi_vend_wr_r <= 1'b1;	 
	else 
	if(utmi_vend_wr)		utmi_vend_wr_r <= 1'b0; 
 
always @(posedge clk)	// Second Stage sync 
	utmi_vend_wr <= utmi_vend_wr_r; 
 
 
reg	[3:0]	utmi_vend_ctrl_r; 
always @(posedge wclk) 
	if(adr[6:0] == 7'h5 && we)	utmi_vend_ctrl_r <= din[3:0]; 
 
always @(posedge clk)	// Second Stage sync 
	utmi_vend_ctrl <= utmi_vend_ctrl_r; 
 
// Resume Request 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)			rf_resume_req_r <= 1'b0; 
	else 
	if(adr[6:0] == 7'h0 && we)	rf_resume_req_r <= din[5]; 
	else 
	if(rf_resume_req)		rf_resume_req_r <= 1'b0; 
 
always @(posedge clk)	// Second Stage sync 
	rf_resume_req <= rf_resume_req_r; 
 
// Function Address Register 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)			funct_adr <= 7'h0; 
	else 
	if(adr[6:0] == 7'h1 && we)	funct_adr <= din[6:0]; 
 
// Interrup Mask Register 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst) 
	   begin 
		inta_msk <= 9'h0; 
		intb_msk <= 9'h0; 
	   end 
	else 
	if(adr[6:0] == 7'h2 && we) 
	   begin 
		intb_msk <= din[24:16]; 
		inta_msk <= din[08:00]; 
	   end 
 
always @(posedge wclk) 
	case(adr[6:2])		// synopsys full_case parallel_case 
	 5'h00: dout <= dtmp;		// Addr: 0h 
	 5'h01: dout <= dtmp; 
	 5'h02: dout <= 32'h0; 
	 5'h03: dout <= 32'h0; 
	 5'h04: dout <= ep0_dout; 
	 5'h05: dout <= ep1_dout; 
	 5'h06: dout <= ep2_dout; 
	 5'h07: dout <= ep3_dout; 
	 5'h08: dout <= ep4_dout; 
	 5'h09: dout <= ep5_dout; 
	 5'h0a: dout <= ep6_dout; 
	 5'h0b: dout <= ep7_dout; 
	 5'h0c: dout <= ep8_dout; 
	 5'h0d: dout <= ep9_dout; 
	 5'h0e: dout <= ep10_dout; 
	 5'h0f: dout <= ep11_dout; 
	 5'h10: dout <= ep12_dout; 
	 5'h11: dout <= ep13_dout; 
	 5'h12: dout <= ep14_dout; 
	 5'h13: dout <= ep15_dout; 
	endcase 
 
assign ep0_re  = (adr[6:2] == 5'h04) & re; 
assign ep1_re  = (adr[6:2] == 5'h05) & re; 
assign ep2_re  = (adr[6:2] == 5'h06) & re; 
assign ep3_re  = (adr[6:2] == 5'h07) & re; 
assign ep4_re  = (adr[6:2] == 5'h08) & re; 
assign ep5_re  = (adr[6:2] == 5'h09) & re; 
assign ep6_re  = (adr[6:2] == 5'h0a) & re; 
assign ep7_re  = (adr[6:2] == 5'h0b) & re; 
assign ep8_re  = (adr[6:2] == 5'h0c) & re; 
assign ep9_re  = (adr[6:2] == 5'h0d) & re; 
assign ep10_re = (adr[6:2] == 5'h0e) & re; 
assign ep11_re = (adr[6:2] == 5'h0f) & re; 
assign ep12_re = (adr[6:2] == 5'h10) & re; 
assign ep13_re = (adr[6:2] == 5'h11) & re; 
assign ep14_re = (adr[6:2] == 5'h12) & re; 
assign ep15_re = (adr[6:2] == 5'h13) & re; 
 
assign ep0_we  = (adr[6:2] == 5'h04) & we; 
assign ep1_we  = (adr[6:2] == 5'h05) & we; 
assign ep2_we  = (adr[6:2] == 5'h06) & we; 
assign ep3_we  = (adr[6:2] == 5'h07) & we; 
assign ep4_we  = (adr[6:2] == 5'h08) & we; 
assign ep5_we  = (adr[6:2] == 5'h09) & we; 
assign ep6_we  = (adr[6:2] == 5'h0a) & we; 
assign ep7_we  = (adr[6:2] == 5'h0b) & we; 
assign ep8_we  = (adr[6:2] == 5'h0c) & we; 
assign ep9_we  = (adr[6:2] == 5'h0d) & we; 
assign ep10_we = (adr[6:2] == 5'h0e) & we; 
assign ep11_we = (adr[6:2] == 5'h0f) & we; 
assign ep12_we = (adr[6:2] == 5'h10) & we; 
assign ep13_we = (adr[6:2] == 5'h11) & we; 
assign ep14_we = (adr[6:2] == 5'h12) & we; 
assign ep15_we = (adr[6:2] == 5'h13) & we; 
 
/////////////////////////////////////////////////////////////////// 
// 
// Internal Access 
// 
 
assign match = match_r1; 
 
always @(posedge clk) 
	match_r1 <= 	ep0_match | ep1_match | ep2_match | ep3_match | 
			ep4_match | ep5_match | ep6_match | ep7_match | 
			ep8_match | ep9_match | ep10_match | ep11_match | 
			ep12_match | ep13_match | ep14_match | ep15_match; 
 
always @(posedge clk) 
	if(ep0_match)	csr <= ep0_csr; 
	else 
	if(ep1_match)	csr <= ep1_csr; 
	else 
	if(ep2_match)	csr <= ep2_csr; 
	else 
	if(ep3_match)	csr <= ep3_csr; 
	else 
	if(ep4_match)	csr <= ep4_csr; 
	else 
	if(ep5_match)	csr <= ep5_csr; 
	else 
	if(ep6_match)	csr <= ep6_csr; 
	else 
	if(ep7_match)	csr <= ep7_csr; 
	else 
	if(ep8_match)	csr <= ep8_csr; 
	else 
	if(ep9_match)	csr <= ep9_csr; 
	else 
	if(ep10_match)	csr <= ep10_csr; 
	else 
	if(ep11_match)	csr <= ep11_csr; 
	else 
	if(ep12_match)	csr <= ep12_csr; 
	else 
	if(ep13_match)	csr <= ep13_csr; 
	else 
	if(ep14_match)	csr <= ep14_csr; 
	else 
	if(ep15_match)	csr <= ep15_csr; 
 
always @(posedge clk) 
	if(ep0_match)	buf0 <= ep0_buf0; 
	else 
	if(ep1_match)	buf0 <= ep1_buf0; 
	else 
	if(ep2_match)	buf0 <= ep2_buf0; 
	else 
	if(ep3_match)	buf0 <= ep3_buf0; 
	else 
	if(ep4_match)	buf0 <= ep4_buf0; 
	else 
	if(ep5_match)	buf0 <= ep5_buf0; 
	else 
	if(ep6_match)	buf0 <= ep6_buf0; 
	else 
	if(ep7_match)	buf0 <= ep7_buf0; 
	else 
	if(ep8_match)	buf0 <= ep8_buf0; 
	else 
	if(ep9_match)	buf0 <= ep9_buf0; 
	else 
	if(ep10_match)	buf0 <= ep10_buf0; 
	else 
	if(ep11_match)	buf0 <= ep11_buf0; 
	else 
	if(ep12_match)	buf0 <= ep12_buf0; 
	else 
	if(ep13_match)	buf0 <= ep13_buf0; 
	else 
	if(ep14_match)	buf0 <= ep14_buf0; 
	else 
	if(ep15_match)	buf0 <= ep15_buf0; 
 
always @(posedge clk) 
	if(ep0_match)	buf1 <= ep0_buf1; 
	else 
	if(ep1_match)	buf1 <= ep1_buf1; 
	else 
	if(ep2_match)	buf1 <= ep2_buf1; 
	else 
	if(ep3_match)	buf1 <= ep3_buf1; 
	else 
	if(ep4_match)	buf1 <= ep4_buf1; 
	else 
	if(ep5_match)	buf1 <= ep5_buf1; 
	else 
	if(ep6_match)	buf1 <= ep6_buf1; 
	else 
	if(ep7_match)	buf1 <= ep7_buf1; 
	else 
	if(ep8_match)	buf1 <= ep8_buf1; 
	else 
	if(ep9_match)	buf1 <= ep9_buf1; 
	else 
	if(ep10_match)	buf1 <= ep10_buf1; 
	else 
	if(ep11_match)	buf1 <= ep11_buf1; 
	else 
	if(ep12_match)	buf1 <= ep12_buf1; 
	else 
	if(ep13_match)	buf1 <= ep13_buf1; 
	else 
	if(ep14_match)	buf1 <= ep14_buf1; 
	else 
	if(ep15_match)	buf1 <= ep15_buf1; 
 
always @(posedge clk) 
	if(ep0_match)	dma_in_buf_sz1 <= ep0_dma_in_buf_sz1; 
	else 
	if(ep1_match)	dma_in_buf_sz1 <= ep1_dma_in_buf_sz1; 
	else 
	if(ep2_match)	dma_in_buf_sz1 <= ep2_dma_in_buf_sz1; 
	else 
	if(ep3_match)	dma_in_buf_sz1 <= ep3_dma_in_buf_sz1; 
	else 
	if(ep4_match)	dma_in_buf_sz1 <= ep4_dma_in_buf_sz1; 
	else 
	if(ep5_match)	dma_in_buf_sz1 <= ep5_dma_in_buf_sz1; 
	else 
	if(ep6_match)	dma_in_buf_sz1 <= ep6_dma_in_buf_sz1; 
	else 
	if(ep7_match)	dma_in_buf_sz1 <= ep7_dma_in_buf_sz1; 
	else 
	if(ep8_match)	dma_in_buf_sz1 <= ep8_dma_in_buf_sz1; 
	else 
	if(ep9_match)	dma_in_buf_sz1 <= ep9_dma_in_buf_sz1; 
	else 
	if(ep10_match)	dma_in_buf_sz1 <= ep10_dma_in_buf_sz1; 
	else 
	if(ep11_match)	dma_in_buf_sz1 <= ep11_dma_in_buf_sz1; 
	else 
	if(ep12_match)	dma_in_buf_sz1 <= ep12_dma_in_buf_sz1; 
	else 
	if(ep13_match)	dma_in_buf_sz1 <= ep13_dma_in_buf_sz1; 
	else 
	if(ep14_match)	dma_in_buf_sz1 <= ep14_dma_in_buf_sz1; 
	else 
	if(ep15_match)	dma_in_buf_sz1 <= ep15_dma_in_buf_sz1; 
 
always @(posedge clk) 
	if(ep0_match)	dma_out_buf_avail <= ep0_dma_out_buf_avail; 
	else 
	if(ep1_match)	dma_out_buf_avail <= ep1_dma_out_buf_avail; 
	else 
	if(ep2_match)	dma_out_buf_avail <= ep2_dma_out_buf_avail; 
	else 
	if(ep3_match)	dma_out_buf_avail <= ep3_dma_out_buf_avail; 
	else 
	if(ep4_match)	dma_out_buf_avail <= ep4_dma_out_buf_avail; 
	else 
	if(ep5_match)	dma_out_buf_avail <= ep5_dma_out_buf_avail; 
	else 
	if(ep6_match)	dma_out_buf_avail <= ep6_dma_out_buf_avail; 
	else 
	if(ep7_match)	dma_out_buf_avail <= ep7_dma_out_buf_avail; 
	else 
	if(ep8_match)	dma_out_buf_avail <= ep8_dma_out_buf_avail; 
	else 
	if(ep9_match)	dma_out_buf_avail <= ep9_dma_out_buf_avail; 
	else 
	if(ep10_match)	dma_out_buf_avail <= ep10_dma_out_buf_avail; 
	else 
	if(ep11_match)	dma_out_buf_avail <= ep11_dma_out_buf_avail; 
	else 
	if(ep12_match)	dma_out_buf_avail <= ep12_dma_out_buf_avail; 
	else 
	if(ep13_match)	dma_out_buf_avail <= ep13_dma_out_buf_avail; 
	else 
	if(ep14_match)	dma_out_buf_avail <= ep14_dma_out_buf_avail; 
	else 
	if(ep15_match)	dma_out_buf_avail <= ep15_dma_out_buf_avail; 
 
 
/////////////////////////////////////////////////////////////////// 
// 
// Interrupt Generation 
// 
 
always @(posedge wclk) 
	attach_r <= usb_attached; 
 
always @(posedge wclk) 
	attach_r1 <= attach_r; 
 
always @(posedge wclk) 
	suspend_r <= suspend; 
 
always @(posedge wclk) 
	suspend_r1 <= suspend_r; 
 
always @(posedge wclk) 
	usb_reset_r <= usb_reset; 
 
always @(posedge wclk) 
	rx_err_r <= rx_err; 
 
always @(posedge wclk) 
	nse_err_r <= nse_err; 
 
always @(posedge wclk) 
	pid_cs_err_r <= pid_cs_err; 
 
always @(posedge wclk) 
	crc5_err_r <= crc5_err; 
 
assign	attach = !attach_r1 & attach_r; 
assign	deattach = attach_r1 & !attach_r; 
assign	suspend_start = !suspend_r1 & suspend_r; 
assign	suspend_end   = suspend_r1 & !suspend_r; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[8] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[8] <= 1'b0; 
	else 
	if(usb_reset_r)		int_srcb[8] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[7] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[7] <= 1'b0; 
	else 
	if(rx_err_r)		int_srcb[7] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[6] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[6] <= 1'b0; 
	else 
	if(deattach)		int_srcb[6] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[5] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[5] <= 1'b0; 
	else 
	if(attach)		int_srcb[5] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[4] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[4] <= 1'b0; 
	else 
	if(suspend_end)		int_srcb[4] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[3] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[3] <= 1'b0; 
	else 
	if(suspend_start)	int_srcb[3] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[2] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[2] <= 1'b0; 
	else 
	if(nse_err_r)		int_srcb[2] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[1] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[1] <= 1'b0; 
	else 
	if(pid_cs_err_r)	int_srcb[1] <= 1'b1; 
 
`ifdef USBF_ASYNC_RESET 
always @(posedge wclk or negedge rst) 
`else 
always @(posedge wclk) 
`endif 
	if(!rst)		int_srcb[0] <= 1'b0; 
	else 
	if(int_src_re)		int_srcb[0] <= 1'b0; 
	else 
	if(crc5_err_r)		int_srcb[0] <= 1'b1; 
 
always @(posedge wclk) 
   begin 
	int_srca[15] <= ep15_inta | ep15_intb; 
	int_srca[14] <= ep14_inta | ep14_intb; 
	int_srca[13] <= ep13_inta | ep13_intb; 
	int_srca[12] <= ep12_inta | ep12_intb; 
	int_srca[11] <= ep11_inta | ep11_intb; 
	int_srca[10] <= ep10_inta | ep10_intb; 
	int_srca[09] <= ep9_inta | ep9_intb; 
	int_srca[08] <= ep8_inta | ep8_intb; 
	int_srca[07] <= ep7_inta | ep7_intb; 
	int_srca[06] <= ep6_inta | ep6_intb; 
	int_srca[05] <= ep5_inta | ep5_intb; 
	int_srca[04] <= ep4_inta | ep4_intb; 
	int_srca[03] <= ep3_inta | ep3_intb; 
	int_srca[02] <= ep2_inta | ep2_intb; 
	int_srca[01] <= ep1_inta | ep1_intb; 
	int_srca[00] <= ep0_inta | ep0_intb; 
   end 
 
assign inta_ep =ep0_inta  | ep1_inta  | ep2_inta  | ep3_inta  | 
		ep4_inta  | ep5_inta  | ep6_inta  | ep7_inta  | 
		ep8_inta  | ep9_inta  | ep10_inta | ep11_inta | 
		ep12_inta | ep13_inta | ep14_inta | ep15_inta; 
 
assign intb_ep =ep0_intb  | ep1_intb  | ep2_intb  | ep3_intb  | 
		ep4_intb  | ep5_intb  | ep6_intb  | ep7_intb  | 
		ep8_intb  | ep9_intb  | ep10_intb | ep11_intb | 
		ep12_intb | ep13_intb | ep14_intb | ep15_intb; 
 
assign inta_rf = |(int_srcb & inta_msk); 
assign intb_rf = |(int_srcb & intb_msk); 
 
always @(posedge wclk) 
	inta <= inta_ep | inta_rf; 
 
always @(posedge wclk) 
	intb <= intb_ep | intb_rf; 
 
/////////////////////////////////////////////////////////////////// 
// 
// Endpoint Register Files 
// 
 
usbf_ep_rf	EpRegF0( 
		.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep0_re			), 
		.we(			ep0_we			), 
		.din(			din			), 
		.dout(			ep0_dout		), 
		.inta(			ep0_inta		), 
		.intb(			ep0_intb		), 
		.dma_req(		dma_req[0]		), 
		.dma_ack(		dma_ack[0]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep0_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep0_csr			), 
		.buf0(			ep0_buf0		), 
		.buf1(			ep0_buf1		), 
		.dma_in_buf_sz1(	ep0_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep0_dma_out_buf_avail	) 
		); 
 
`ifdef USBF_HAVE_EP1 
usbf_ep_rf	EpRegF1( 
		.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep1_re			), 
		.we(			ep1_we			), 
		.din(			din			), 
		.dout(			ep1_dout		), 
		.inta(			ep1_inta		), 
		.intb(			ep1_intb		), 
		.dma_req(		dma_req[1]		), 
		.dma_ack(		dma_ack[1]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep1_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep1_csr			), 
		.buf0(			ep1_buf0		), 
		.buf1(			ep1_buf1		), 
		.dma_in_buf_sz1(	ep1_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep1_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u1(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep1_re			), 
		.we(			ep1_we			), 
		.din(			din			), 
		.dout(			ep1_dout		), 
		.inta(			ep1_inta		), 
		.intb(			ep1_intb		), 
		.dma_req(		dma_req[1]		), 
		.dma_ack(		dma_ack[1]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep1_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep1_csr			), 
		.buf0(			ep1_buf0		), 
		.buf1(			ep1_buf1		), 
		.dma_in_buf_sz1(	ep1_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep1_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP2 
usbf_ep_rf	EpRegF2(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep2_re			), 
		.we(			ep2_we			), 
		.din(			din			), 
		.dout(			ep2_dout		), 
		.inta(			ep2_inta		), 
		.intb(			ep2_intb		), 
		.dma_req(		dma_req[2]		), 
		.dma_ack(		dma_ack[2]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep2_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep2_csr			), 
		.buf0(			ep2_buf0		), 
		.buf1(			ep2_buf1		), 
		.dma_in_buf_sz1(	ep2_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep2_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u2(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep2_re			), 
		.we(			ep2_we			), 
		.din(			din			), 
		.dout(			ep2_dout		), 
		.inta(			ep2_inta		), 
		.intb(			ep2_intb		), 
		.dma_req(		dma_req[2]		), 
		.dma_ack(		dma_ack[2]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep2_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep2_csr			), 
		.buf0(			ep2_buf0		), 
		.buf1(			ep2_buf1		), 
		.dma_in_buf_sz1(	ep2_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep2_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP3 
usbf_ep_rf	EpRegF3(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep3_re			), 
		.we(			ep3_we			), 
		.din(			din			), 
		.dout(			ep3_dout		), 
		.inta(			ep3_inta		), 
		.intb(			ep3_intb		), 
		.dma_req(		dma_req[3]		), 
		.dma_ack(		dma_ack[3]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep3_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep3_csr			), 
		.buf0(			ep3_buf0		), 
		.buf1(			ep3_buf1		), 
		.dma_in_buf_sz1(	ep3_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep3_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u3(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep3_re			), 
		.we(			ep3_we			), 
		.din(			din			), 
		.dout(			ep3_dout		), 
		.inta(			ep3_inta		), 
		.intb(			ep3_intb		), 
		.dma_req(		dma_req[3]		), 
		.dma_ack(		dma_ack[3]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep3_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep3_csr			), 
		.buf0(			ep3_buf0		), 
		.buf1(			ep3_buf1		), 
		.dma_in_buf_sz1(	ep3_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep3_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP4 
usbf_ep_rf	u4(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep4_re			), 
		.we(			ep4_we			), 
		.din(			din			), 
		.dout(			ep4_dout		), 
		.inta(			ep4_inta		), 
		.intb(			ep4_intb		), 
		.dma_req(		dma_req[4]		), 
		.dma_ack(		dma_ack[4]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep4_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep4_csr			), 
		.buf0(			ep4_buf0		), 
		.buf1(			ep4_buf1		), 
		.dma_in_buf_sz1(	ep4_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep4_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u4(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep4_re			), 
		.we(			ep4_we			), 
		.din(			din			), 
		.dout(			ep4_dout		), 
		.inta(			ep4_inta		), 
		.intb(			ep4_intb		), 
		.dma_req(		dma_req[4]		), 
		.dma_ack(		dma_ack[4]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep4_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep4_csr			), 
		.buf0(			ep4_buf0		), 
		.buf1(			ep4_buf1		), 
		.dma_in_buf_sz1(	ep4_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep4_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP5 
usbf_ep_rf	u5(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep5_re			), 
		.we(			ep5_we			), 
		.din(			din			), 
		.dout(			ep5_dout		), 
		.inta(			ep5_inta		), 
		.intb(			ep5_intb		), 
		.dma_req(		dma_req[5]		), 
		.dma_ack(		dma_ack[5]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep5_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep5_csr			), 
		.buf0(			ep5_buf0		), 
		.buf1(			ep5_buf1		), 
		.dma_in_buf_sz1(	ep5_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep5_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u5(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep5_re			), 
		.we(			ep5_we			), 
		.din(			din			), 
		.dout(			ep5_dout		), 
		.inta(			ep5_inta		), 
		.intb(			ep5_intb		), 
		.dma_req(		dma_req[5]		), 
		.dma_ack(		dma_ack[5]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep5_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep5_csr			), 
		.buf0(			ep5_buf0		), 
		.buf1(			ep5_buf1		), 
		.dma_in_buf_sz1(	ep5_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep5_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP6 
usbf_ep_rf	u6(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep6_re			), 
		.we(			ep6_we			), 
		.din(			din			), 
		.dout(			ep6_dout		), 
		.inta(			ep6_inta		), 
		.intb(			ep6_intb		), 
		.dma_req(		dma_req[6]		), 
		.dma_ack(		dma_ack[6]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep6_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep6_csr			), 
		.buf0(			ep6_buf0		), 
		.buf1(			ep6_buf1		), 
		.dma_in_buf_sz1(	ep6_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep6_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u6(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep6_re			), 
		.we(			ep6_we			), 
		.din(			din			), 
		.dout(			ep6_dout		), 
		.inta(			ep6_inta		), 
		.intb(			ep6_intb		), 
		.dma_req(		dma_req[6]		), 
		.dma_ack(		dma_ack[6]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep6_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep6_csr			), 
		.buf0(			ep6_buf0		), 
		.buf1(			ep6_buf1		), 
		.dma_in_buf_sz1(	ep6_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep6_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP7 
usbf_ep_rf	u7(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep7_re			), 
		.we(			ep7_we			), 
		.din(			din			), 
		.dout(			ep7_dout		), 
		.inta(			ep7_inta		), 
		.intb(			ep7_intb		), 
		.dma_req(		dma_req[7]		), 
		.dma_ack(		dma_ack[7]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep7_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep7_csr			), 
		.buf0(			ep7_buf0		), 
		.buf1(			ep7_buf1		), 
		.dma_in_buf_sz1(	ep7_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep7_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u7(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep7_re			), 
		.we(			ep7_we			), 
		.din(			din			), 
		.dout(			ep7_dout		), 
		.inta(			ep7_inta		), 
		.intb(			ep7_intb		), 
		.dma_req(		dma_req[7]		), 
		.dma_ack(		dma_ack[7]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep7_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep7_csr			), 
		.buf0(			ep7_buf0		), 
		.buf1(			ep7_buf1		), 
		.dma_in_buf_sz1(	ep7_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep7_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP8 
usbf_ep_rf	u8(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep8_re			), 
		.we(			ep8_we			), 
		.din(			din			), 
		.dout(			ep8_dout		), 
		.inta(			ep8_inta		), 
		.intb(			ep8_intb		), 
		.dma_req(		dma_req[8]		), 
		.dma_ack(		dma_ack[8]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep8_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep8_csr			), 
		.buf0(			ep8_buf0		), 
		.buf1(			ep8_buf1		), 
		.dma_in_buf_sz1(	ep8_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep8_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u8(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep8_re			), 
		.we(			ep8_we			), 
		.din(			din			), 
		.dout(			ep8_dout		), 
		.inta(			ep8_inta		), 
		.intb(			ep8_intb		), 
		.dma_req(		dma_req[8]		), 
		.dma_ack(		dma_ack[8]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep8_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep8_csr			), 
		.buf0(			ep8_buf0		), 
		.buf1(			ep8_buf1		), 
		.dma_in_buf_sz1(	ep8_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep8_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP9 
usbf_ep_rf	u9(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep9_re			), 
		.we(			ep9_we			), 
		.din(			din			), 
		.dout(			ep9_dout		), 
		.inta(			ep9_inta		), 
		.intb(			ep9_intb		), 
		.dma_req(		dma_req[9]		), 
		.dma_ack(		dma_ack[9]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep9_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep9_csr			), 
		.buf0(			ep9_buf0		), 
		.buf1(			ep9_buf1		), 
		.dma_in_buf_sz1(	ep9_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep9_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u9(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep9_re			), 
		.we(			ep9_we			), 
		.din(			din			), 
		.dout(			ep9_dout		), 
		.inta(			ep9_inta		), 
		.intb(			ep9_intb		), 
		.dma_req(		dma_req[9]		), 
		.dma_ack(		dma_ack[9]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep9_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep9_csr			), 
		.buf0(			ep9_buf0		), 
		.buf1(			ep9_buf1		), 
		.dma_in_buf_sz1(	ep9_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep9_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP10 
usbf_ep_rf	u10(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep10_re			), 
		.we(			ep10_we			), 
		.din(			din			), 
		.dout(			ep10_dout		), 
		.inta(			ep10_inta		), 
		.intb(			ep10_intb		), 
		.dma_req(		dma_req[10]		), 
		.dma_ack(		dma_ack[10]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep10_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep10_csr			), 
		.buf0(			ep10_buf0		), 
		.buf1(			ep10_buf1		), 
		.dma_in_buf_sz1(	ep10_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep10_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u10(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep10_re			), 
		.we(			ep10_we			), 
		.din(			din			), 
		.dout(			ep10_dout		), 
		.inta(			ep10_inta		), 
		.intb(			ep10_intb		), 
		.dma_req(		dma_req[10]		), 
		.dma_ack(		dma_ack[10]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep10_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep10_csr			), 
		.buf0(			ep10_buf0		), 
		.buf1(			ep10_buf1		), 
		.dma_in_buf_sz1(	ep10_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep10_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP11 
usbf_ep_rf	u11(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep11_re			), 
		.we(			ep11_we			), 
		.din(			din			), 
		.dout(			ep11_dout		), 
		.inta(			ep11_inta		), 
		.intb(			ep11_intb		), 
		.dma_req(		dma_req[11]		), 
		.dma_ack(		dma_ack[11]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep11_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep11_csr			), 
		.buf0(			ep11_buf0		), 
		.buf1(			ep11_buf1		), 
		.dma_in_buf_sz1(	ep11_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep11_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u11(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep11_re			), 
		.we(			ep11_we			), 
		.din(			din			), 
		.dout(			ep11_dout		), 
		.inta(			ep11_inta		), 
		.intb(			ep11_intb		), 
		.dma_req(		dma_req[11]		), 
		.dma_ack(		dma_ack[11]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep11_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep11_csr			), 
		.buf0(			ep11_buf0		), 
		.buf1(			ep11_buf1		), 
		.dma_in_buf_sz1(	ep11_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep11_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP12 
usbf_ep_rf	u12(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep12_re			), 
		.we(			ep12_we			), 
		.din(			din			), 
		.dout(			ep12_dout		), 
		.inta(			ep12_inta		), 
		.intb(			ep12_intb		), 
		.dma_req(		dma_req[12]		), 
		.dma_ack(		dma_ack[12]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep12_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep12_csr			), 
		.buf0(			ep12_buf0		), 
		.buf1(			ep12_buf1		), 
		.dma_in_buf_sz1(	ep12_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep12_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u12(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep12_re			), 
		.we(			ep12_we			), 
		.din(			din			), 
		.dout(			ep12_dout		), 
		.inta(			ep12_inta		), 
		.intb(			ep12_intb		), 
		.dma_req(		dma_req[12]		), 
		.dma_ack(		dma_ack[12]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep12_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep12_csr			), 
		.buf0(			ep12_buf0		), 
		.buf1(			ep12_buf1		), 
		.dma_in_buf_sz1(	ep12_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep12_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP13 
usbf_ep_rf	u13(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep13_re			), 
		.we(			ep13_we			), 
		.din(			din			), 
		.dout(			ep13_dout		), 
		.inta(			ep13_inta		), 
		.intb(			ep13_intb		), 
		.dma_req(		dma_req[13]		), 
		.dma_ack(		dma_ack[13]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep13_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep13_csr			), 
		.buf0(			ep13_buf0		), 
		.buf1(			ep13_buf1		), 
		.dma_in_buf_sz1(	ep13_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep13_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u13(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep13_re			), 
		.we(			ep13_we			), 
		.din(			din			), 
		.dout(			ep13_dout		), 
		.inta(			ep13_inta		), 
		.intb(			ep13_intb		), 
		.dma_req(		dma_req[13]		), 
		.dma_ack(		dma_ack[13]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep13_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep13_csr			), 
		.buf0(			ep13_buf0		), 
		.buf1(			ep13_buf1		), 
		.dma_in_buf_sz1(	ep13_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep13_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP14 
usbf_ep_rf	u14(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep14_re			), 
		.we(			ep14_we			), 
		.din(			din			), 
		.dout(			ep14_dout		), 
		.inta(			ep14_inta		), 
		.intb(			ep14_intb		), 
		.dma_req(		dma_req[14]		), 
		.dma_ack(		dma_ack[14]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep14_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep14_csr			), 
		.buf0(			ep14_buf0		), 
		.buf1(			ep14_buf1		), 
		.dma_in_buf_sz1(	ep14_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep14_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u14(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep14_re			), 
		.we(			ep14_we			), 
		.din(			din			), 
		.dout(			ep14_dout		), 
		.inta(			ep14_inta		), 
		.intb(			ep14_intb		), 
		.dma_req(		dma_req[14]		), 
		.dma_ack(		dma_ack[14]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep14_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep14_csr			), 
		.buf0(			ep14_buf0		), 
		.buf1(			ep14_buf1		), 
		.dma_in_buf_sz1(	ep14_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep14_dma_out_buf_avail	) 
		); 
`endif 
 
`ifdef USBF_HAVE_EP15 
usbf_ep_rf	u15(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep15_re			), 
		.we(			ep15_we			), 
		.din(			din			), 
		.dout(			ep15_dout		), 
		.inta(			ep15_inta		), 
		.intb(			ep15_intb		), 
		.dma_req(		dma_req[15]		), 
		.dma_ack(		dma_ack[15]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep15_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep15_csr			), 
		.buf0(			ep15_buf0		), 
		.buf1(			ep15_buf1		), 
		.dma_in_buf_sz1(	ep15_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep15_dma_out_buf_avail	) 
		); 
 
`else 
usbf_ep_rf_dummy u15(	.clk(			clk			), 
		.wclk(			wclk			), 
		.rst(			rst			), 
		.adr(			adr[1:0]		), 
		.re(			ep15_re			), 
		.we(			ep15_we			), 
		.din(			din			), 
		.dout(			ep15_dout		), 
		.inta(			ep15_inta		), 
		.intb(			ep15_intb		), 
		.dma_req(		dma_req[15]		), 
		.dma_ack(		dma_ack[15]		), 
		.idin(			idin			), 
		.ep_sel(		ep_sel			), 
		.ep_match(		ep15_match		), 
		.buf0_rl(		buf0_rl			), 
		.buf0_set(		buf0_set		), 
		.buf1_set(		buf1_set		), 
		.uc_bsel_set(		uc_bsel_set		), 
		.uc_dpd_set(		uc_dpd_set		), 
		.int_buf1_set(		int_buf1_set		), 
		.int_buf0_set(		int_buf0_set		), 
		.int_upid_set(		int_upid_set		), 
		.int_crc16_set(		int_crc16_set		), 
		.int_to_set(		int_to_set		), 
		.int_seqerr_set(	int_seqerr_set		), 
		.out_to_small(		out_to_small		), 
		.csr(			ep15_csr			), 
		.buf0(			ep15_buf0		), 
		.buf1(			ep15_buf1		), 
		.dma_in_buf_sz1(	ep15_dma_in_buf_sz1	), 
		.dma_out_buf_avail(	ep15_dma_out_buf_avail	) 
		); 
`endif 
 
endmodule