⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_core.cpp

📁 USB 1.1 PHY的代码
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  USB 1.1                                                    ////////  Function IP Core                                           ////////                                                             ////////  SystemC Version: usb_core.cpp                              ////////  Author: Alfredo Luiz Foltran Fialho                        ////////          alfoltran@ig.com.br                                ////////                                                             ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Verilog Version: usb1_core.v                                //////// 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.                                 ////////                                                             /////////////////////////////////////////////////////////////////////////#include "systemc.h"#include "usb_core.h"void usb_core::rst_local_up(void) {	rst_local.write(rst_i.read() && !usb_rst.read());}void usb_core::stat_up(void) {	ep0_ctrl_stat.write(((sc_uint<1>)0, (sc_uint<1>)stat2.read(), (sc_uint<1>)stat1.read(), (sc_uint<1>)0));}void usb_core::frame_no_up(void) {	frame_no.write(frm_nat.read().range(26, 16));}void usb_core::cfg_mux(void) {	switch (ep_sel.read()) {// synopsys full_case parallel_case		case 0:	cfg.write(ep0_size.read() | CTRL); break;		case 1:	cfg.write(ep1_cfg.read()); break;		case 2:	cfg.write(ep2_cfg.read()); break;		case 3:	cfg.write(ep3_cfg.read()); break;		case 4:	cfg.write(ep4_cfg.read()); break;		case 5:	cfg.write(ep5_cfg.read()); break;		case 6:	cfg.write(ep6_cfg.read()); break;		case 7:	cfg.write(ep7_cfg.read()); break;	}}void usb_core::tx_data_mux(void) {	switch (ep_sel.read()) {// synopsys full_case parallel_case		case 0:	tx_data_st.write(ep0_dout.read()); break;		case 1:	tx_data_st.write(ep1_din.read()); break;		case 2:	tx_data_st.write(ep2_din.read()); break;		case 3:	tx_data_st.write(ep3_din.read()); break;		case 4:	tx_data_st.write(ep4_din.read()); break;		case 5:	tx_data_st.write(ep5_din.read()); break;		case 6:	tx_data_st.write(ep6_din.read()); break;		case 7:	tx_data_st.write(ep7_din.read()); break;	}}void usb_core::ep_empty_mux(void) {	switch (ep_sel.read()) {// synopsys full_case parallel_case		case 0:	ep_empty.write(ep0_empty.read()); break;		case 1:	ep_empty.write(ep1_empty.read()); break;		case 2:	ep_empty.write(ep2_empty.read()); break;		case 3:	ep_empty.write(ep3_empty.read()); break;		case 4:	ep_empty.write(ep4_empty.read()); break;		case 5:	ep_empty.write(ep5_empty.read()); break;		case 6:	ep_empty.write(ep6_empty.read()); break;		case 7:	ep_empty.write(ep7_empty.read()); break;	}}void usb_core::ep_full_mux(void) {	switch (ep_sel.read()) {// synopsys full_case parallel_case		case 0:	ep_full.write(ep0_full.read()); break;		case 1:	ep_full.write(ep1_full.read()); break;		case 2:	ep_full.write(ep2_full.read()); break;		case 3:	ep_full.write(ep3_full.read()); break;		case 4:	ep_full.write(ep4_full.read()); break;		case 5:	ep_full.write(ep5_full.read()); break;		case 6:	ep_full.write(ep6_full.read()); break;		case 7:	ep_full.write(ep7_full.read()); break;	}}void usb_core::ep_dout_deco(void) {	ep1_dout.write(rx_data_st.read());	ep2_dout.write(rx_data_st.read());	ep3_dout.write(rx_data_st.read());	ep4_dout.write(rx_data_st.read());	ep5_dout.write(rx_data_st.read());	ep6_dout.write(rx_data_st.read());	ep7_dout.write(rx_data_st.read());}void usb_core::ep_re_deco(void) {	ep0_re.write(idma_re.read() && (ep_sel.read() == 0));	ep1_re.write(idma_re.read() && (ep_sel.read() == 1) && !ep1_empty.read());	ep2_re.write(idma_re.read() && (ep_sel.read() == 2) && !ep2_empty.read());	ep3_re.write(idma_re.read() && (ep_sel.read() == 3) && !ep3_empty.read());	ep4_re.write(idma_re.read() && (ep_sel.read() == 4) && !ep4_empty.read());	ep5_re.write(idma_re.read() && (ep_sel.read() == 5) && !ep5_empty.read());	ep6_re.write(idma_re.read() && (ep_sel.read() == 6) && !ep6_empty.read());	ep7_re.write(idma_re.read() && (ep_sel.read() == 7) && !ep7_empty.read());}void usb_core::ep_we_deco(void) {	ep0_we.write(idma_we.read() && (ep_sel.read() == 0));	ep1_we.write(idma_we.read() && (ep_sel.read() == 1) && !ep1_full.read());	ep2_we.write(idma_we.read() && (ep_sel.read() == 2) && !ep2_full.read());	ep3_we.write(idma_we.read() && (ep_sel.read() == 3) && !ep3_full.read());	ep4_we.write(idma_we.read() && (ep_sel.read() == 4) && !ep4_full.read());	ep5_we.write(idma_we.read() && (ep_sel.read() == 5) && !ep5_full.read());	ep6_we.write(idma_we.read() && (ep_sel.read() == 6) && !ep6_full.read());	ep7_we.write(idma_we.read() && (ep_sel.read() == 7) && !ep7_full.read());}/*usb_core::~usb_core(void) {	if (i_phy)		delete i_phy;	if (i_sie)		delete i_sie;	if (i_ep0)		delete i_ep0;	if (i_rom)		delete i_rom;	if (i_ff_in)		delete i_ff_in;	if (i_ff_out)		delete i_ff_out;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -