blob: f61c1b291db08c712eadd705b332a8b1de7c083a [file] [log] [blame]
//////////////////////////////////////////////////////////////////////
//// ////
//// ////
//// Description ////
//// USB Device level integration. ////
//// Following modules are integrated ////
//// 1. usb1_phy ////
//// 2. usb1_core ////
//// Ver 0.1 : 01.Mar.2013 ////
//// ////
//// To Do: ////
//// nothing ////
//// ////
//// Author(s): ////
//// - Dinesh Annayya, dinesha@opencores.org ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
//// ////
//// 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 source file is free software; you can redistribute it ////
//// and/or modify it under the terms of the GNU Lesser General ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any ////
//// later version. ////
//// ////
//// This source is distributed in the hope that it will be ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
//// PURPOSE. See the GNU Lesser General Public License for more ////
//// details. ////
//// ////
//// You should have received a copy of the GNU Lesser General ////
//// Public License along with this source; if not, download it ////
//// from http://www.opencores.org/lgpl.shtml ////
//// ////
//////////////////////////////////////////////////////////////////////
module usb1d_top(
clk_i,
rstn_i,
// Transciever Interface
usb_dp,
usb_dn,
// USB Misc
phy_tx_mode ,
usb_rst,
// Interrupts
dropped_frame,
misaligned_frame,
crc16_err,
// Vendor Features
v_set_int,
v_set_feature,
wValue,
wIndex,
vendor_data,
// USB Status
usb_busy,
ep_sel,
// Endpoint Interface
ep1_cfg,
ep1_din,
ep1_we,
ep1_full,
ep1_dout,
ep1_re,
ep1_empty,
ep1_bf_en,
ep1_bf_size,
ep2_cfg,
ep2_din,
ep2_we,
ep2_full,
ep2_dout,
ep2_re,
ep2_empty,
ep2_bf_en,
ep2_bf_size,
ep3_cfg,
ep3_din,
ep3_we,
ep3_full,
ep3_dout,
ep3_re,
ep3_empty,
ep3_bf_en,
ep3_bf_size,
ep4_cfg,
ep4_din,
ep4_we,
ep4_full,
ep4_dout,
ep4_re,
ep4_empty,
ep4_bf_en,
ep4_bf_size,
ep5_cfg,
ep5_din,
ep5_we,
ep5_full,
ep5_dout,
ep5_re,
ep5_empty,
ep5_bf_en,
ep5_bf_size,
ep6_cfg,
ep6_din,
ep6_we, ep6_full,
ep6_dout, ep6_re, ep6_empty,
ep6_bf_en, ep6_bf_size,
ep7_cfg,
ep7_din, ep7_we, ep7_full,
ep7_dout, ep7_re, ep7_empty,
ep7_bf_en, ep7_bf_size,
// Register Interface
reg_addr,
reg_rdwrn,
reg_req,
reg_wdata,
reg_rdata,
reg_ack
);
input clk_i;
input rstn_i;
inout usb_dp;
inout usb_dn;
input phy_tx_mode;
output usb_rst;
output dropped_frame, misaligned_frame;
output crc16_err;
output v_set_int;
output v_set_feature;
output [15:0] wValue;
output [15:0] wIndex;
input [15:0] vendor_data;
output usb_busy;
output [3:0] ep_sel;
// Endpoint Interfaces
input [13:0] ep1_cfg;
input [7:0] ep1_din;
output [7:0] ep1_dout;
output ep1_we, ep1_re;
input ep1_empty, ep1_full;
input ep1_bf_en;
input [6:0] ep1_bf_size;
input [13:0] ep2_cfg;
input [7:0] ep2_din;
output [7:0] ep2_dout;
output ep2_we, ep2_re;
input ep2_empty, ep2_full;
input ep2_bf_en;
input [6:0] ep2_bf_size;
input [13:0] ep3_cfg;
input [7:0] ep3_din;
output [7:0] ep3_dout;
output ep3_we, ep3_re;
input ep3_empty, ep3_full;
input ep3_bf_en;
input [6:0] ep3_bf_size;
input [13:0] ep4_cfg;
input [7:0] ep4_din;
output [7:0] ep4_dout;
output ep4_we, ep4_re;
input ep4_empty, ep4_full;
input ep4_bf_en;
input [6:0] ep4_bf_size;
input [13:0] ep5_cfg;
input [7:0] ep5_din;
output [7:0] ep5_dout;
output ep5_we, ep5_re;
input ep5_empty, ep5_full;
input ep5_bf_en;
input [6:0] ep5_bf_size;
input [13:0] ep6_cfg;
input [7:0] ep6_din;
output [7:0] ep6_dout;
output ep6_we, ep6_re;
input ep6_empty, ep6_full;
input ep6_bf_en;
input [6:0] ep6_bf_size;
input [13:0] ep7_cfg;
input [7:0] ep7_din;
output [7:0] ep7_dout;
output ep7_we, ep7_re;
input ep7_empty, ep7_full;
input ep7_bf_en;
input [6:0] ep7_bf_size;
//-----------------------------------
// Register Interface
// ----------------------------------
output [31:0] reg_addr; // Register Address
output reg_rdwrn; // 0 -> write, 1-> read
output reg_req; // Register Req
output [31:0] reg_wdata; // Register write data
input [31:0] reg_rdata; // Register Read Data
input reg_ack; // Register Ack
///////////////////////////////////////////////////////////////////
// Local Wires and Registers
///////////////////////////////////////////////////////////////////
//------------------------------------
// UTMI Interface
// -----------------------------------
wire [7:0] DataOut;
wire TxValid;
wire TxReady;
wire [7:0] DataIn;
wire RxValid;
wire RxActive;
wire RxError;
wire [1:0] LineState;
wire clk;
wire rst;
wire phy_tx_mode;
wire usb_rst;
// USB Traceiver interface
wire usb_txdp; // USB TX +
wire usb_txdn; // USB TX -
wire usb_txoe; // USB TX OEN, Output driven at txoe=0
wire usb_rxd;
wire usb_rxdp; // USB RX+
wire usb_rxdn; // USB RX-
assign usb_dp = (usb_txoe == 1'b0) ? usb_txdp : 1'bz;
assign usb_dn = (usb_txoe == 1'b0) ? usb_txdn : 1'bz;
assign usb_rxd = usb_dp;
assign usb_rxdp = usb_dp;
assign usb_rxdn = usb_dn;
usb1d_phy u_usb_phy(
.clk ( clk_i ),
.rstn ( rstn_i ),
.phy_tx_mode ( phy_tx_mode ),
.usb_rst ( usb_rst ),
// Transceiver Interface
.rxd ( usb_rxd ),
.rxdp ( usb_rxdp ),
.rxdn ( usb_rxdn ),
.txdp ( usb_txdp ),
.txdn ( usb_txdn ),
.txoe ( usb_txoe ),
// UTMI Interface
.DataIn_o ( DataIn ),
.RxValid_o ( RxValid ),
.RxActive_o ( RxActive ),
.RxError_o ( RxError ),
.DataOut_i ( DataOut ),
.TxValid_i ( TxValid ),
.TxReady_o ( TxReady ),
.LineState_o ( LineState )
);
usb1d_core u_usb_core(
.clk_i ( clk_i ),
.rst_i ( rstn_i ),
// USB Misc
.phy_tx_mode ( phy_tx_mode ),
.usb_rst ( usb_rst ),
// UTMI Interface
.DataIn ( DataIn ),
.RxValid ( RxValid ),
.RxActive ( RxActive ),
.RxError ( RxError ),
.DataOut ( DataOut ),
.TxValid ( TxValid ),
.TxReady ( TxReady ),
.LineState ( LineState ),
// Interrupts
.dropped_frame ( dropped_frame ),
.misaligned_frame ( misaligned_frame ),
.crc16_err ( crc16_err ),
// Vendor Features
.v_set_int ( v_set_int ),
.v_set_feature ( v_set_feature ),
.wValue ( wValue ),
.wIndex ( wIndex ),
.vendor_data ( vendor_data ),
// USB Status
.usb_busy ( usb_busy ),
.ep_sel ( ep_sel ),
// Endpoint Interface
.ep1_cfg ( ep1_cfg ),
.ep1_din ( ep1_din ),
.ep1_we ( ep1_we ),
.ep1_full ( ep1_full ),
.ep1_dout ( ep1_dout ),
.ep1_re ( ep1_re ),
.ep1_empty ( ep1_empty ),
.ep1_bf_en ( ep1_bf_en ),
.ep1_bf_size ( ep1_bf_size ),
.ep2_cfg ( ep2_cfg ),
.ep2_din ( ep2_din ),
.ep2_we ( ep2_we ),
.ep2_full ( ep2_full ),
.ep2_dout ( ep2_dout ),
.ep2_re ( ep2_re ),
.ep2_empty ( ep2_empty ),
.ep2_bf_en ( ep2_bf_en ),
.ep2_bf_size ( ep2_bf_size ),
.ep3_cfg ( ep3_cfg ),
.ep3_din ( ep3_din ),
.ep3_we ( ep3_we ),
.ep3_full ( ep3_full ),
.ep3_dout ( ep3_dout ),
.ep3_re ( ep3_re ),
.ep3_empty ( ep3_empty ),
.ep3_bf_en ( ep3_bf_en ),
.ep3_bf_size ( ep3_bf_size ),
.ep4_cfg ( ep4_cfg ),
.ep4_din ( ep4_din ),
.ep4_we ( ep4_we ),
.ep4_full ( ep4_full ),
.ep4_dout ( ep4_dout ),
.ep4_re ( ep4_re ),
.ep4_empty ( ep4_empty ),
.ep4_bf_en ( ep4_bf_en ),
.ep4_bf_size ( ep4_bf_size ),
.ep5_cfg ( ep5_cfg ),
.ep5_din ( ep5_din ),
.ep5_we ( ep5_we ),
.ep5_full ( ep5_full ),
.ep5_dout ( ep5_dout ),
.ep5_re ( ep5_re ),
.ep5_empty ( ep5_empty ),
.ep5_bf_en ( ep5_bf_en ),
.ep5_bf_size ( ep5_bf_size ),
.ep6_cfg ( ep6_cfg ),
.ep6_din ( ep6_din ),
.ep6_we ( ep6_we ),
.ep6_full ( ep6_full ),
.ep6_dout ( ep6_dout ),
.ep6_re ( ep6_re ),
.ep6_empty ( ep6_empty ),
.ep6_bf_en ( ep6_bf_en ),
.ep6_bf_size ( ep6_bf_size ),
.ep7_cfg ( ep7_cfg ),
.ep7_din ( ep7_din ),
.ep7_we ( ep7_we ),
.ep7_full ( ep7_full ),
.ep7_dout ( ep7_dout ),
.ep7_re ( ep7_re ),
.ep7_empty ( ep7_empty ),
.ep7_bf_en ( ep7_bf_en ),
.ep7_bf_size ( ep7_bf_size ),
// Register Interface
.reg_addr ( reg_addr ),
.reg_rdwrn ( reg_rdwrn ),
.reg_req ( reg_req ),
.reg_wdata ( reg_wdata ),
.reg_rdata ( reg_rdata ),
.reg_ack ( reg_ack )
);
endmodule