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

📄 usb_ep0.h

📁 这是usb1.1协议,对于了解通用串行总线有很好的帮助,
💻 H
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  USB Control Endpoint (Endpoint Zero)                       ////////  Internal Setup Engine                                      ////////                                                             ////////  SystemC Version: usb_ep0.h                                 ////////  Author: Alfredo Luiz Foltran Fialho                        ////////          alfoltran@ig.com.br                                ////////                                                             ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Verilog Version: usb1_ctrl.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.                                 ////////                                                             /////////////////////////////////////////////////////////////////////////#ifndef USB_EP0_H#define USB_EP0_H#include "usb_defines.h"// State Decodingenum EP0_STATE {	EP0_IDLE = 1,					EP0_GET_HDR = 2,					EP0_GET_STATUS = 4,					EP0_CLEAR_FEATURE = 8,					EP0_SET_FEATURE = 16,					EP0_SET_ADDRESS = 32,					EP0_GET_DESCRIPTOR = 64,					EP0_SET_DESCRIPTOR = 128,					EP0_GET_CONFIG = 256,					EP0_SET_CONFIG = 512,					EP0_GET_INTERFACE = 1024,					EP0_SET_INTERFACE = 2048,					EP0_SYNCH_FRAME = 4096,					EP0_WAIT_IN_DATA = 8192,					EP0_STATUS_IN = 16384,					EP0_STATUS_OUT = 32768,					EP0_V_SET_INT = 65536,					EP0_V_GET_STATUS = 131072};// Data Source (To Send to Host)enum EP0_DATA_SOURCE {	ZERO_DATA = 1,						ZERO_ONE_DATA = 2,						CONFIG_DATA = 4,						SYNC_FRAME_DATA = 8,						VEND_DATA = 16};// Standard Request Codesenum EP0_STD_REQUEST {	GET_STATUS = 0,						CLEAR_FEATURE = 1,						// Reserved for future use						SET_FEATURE = 3,						// Reserved for future use						SET_ADDRESS = 5,						GET_DESCRIPTOR = 6,						SET_DESCRIPTOR = 7,						GET_CONFIG = 8,						SET_CONFIG = 9,						GET_INTERFACE = 10,						SET_INTERFACE = 11,						SYNCH_FRAME = 12,						V_SET_INT = 15};SC_MODULE(usb_ep0) {  public:	sc_in<bool>			clk;	sc_in<bool>			rst;	// ROM Interface	sc_out<sc_uint<8> >	rom_adr;	sc_in<sc_uint<8> >	rom_data;	// From PL	sc_in<bool>			ctrl_setup;	sc_in<bool>			ctrl_in;	sc_in<bool>			ctrl_out;	sc_in<sc_uint<11> >	frame_no;	// To PL	sc_out<bool>		send_stall;	sc_out<sc_uint<7> >	funct_adr;	sc_out<bool>		addressed;	sc_out<bool>		configured;	sc_out<bool>		halt;	// FIFOs Interface	sc_in<sc_uint<8> >	ep0_din;	sc_out<sc_uint<8> >	ep0_dout;	sc_out<bool>		ep0_re, ep0_we;	sc_in<sc_uint<4> >	ep0_stat;	sc_out<sc_uint<8> >	ep0_size;	// Function Interface	sc_out<bool>		v_set_int;	sc_out<bool>		v_set_feature;	sc_out<sc_uint<16> >wValue;	sc_out<sc_uint<16> >wIndex;	sc_in<sc_uint<16> >	vendor_data;	// Local Signals	// Setup Data Fields	sc_signal<sc_uint<8> >	bmReqType, bRequest;	sc_signal<sc_uint<16> >	wLength;	sc_signal<bool>			bm_req_dir;	sc_signal<sc_uint<2> >	bm_req_type;	sc_signal<sc_uint<5> >	bm_req_recp;	// Standard Device Requests - Status Registers	sc_signal<bool>			get_status, clear_feature, set_feature, set_address;	sc_signal<bool>			get_descriptor, set_descriptor, get_config, set_config;	sc_signal<bool>			get_interface, set_interface, synch_frame;	sc_signal<bool>			hdr_done_r, config_err;	sc_signal<bool>			v_get_status;	// FIFOs Signals	sc_signal<bool>			fifo_re1, fifo_full, fifo_empty;	sc_signal<bool>			fifo_we_d;	sc_signal<sc_uint<5> >	data_sel;	// EP0 FSM Signals	sc_signal<sc_uint<20> >	state, next_state;	sc_signal<bool>			get_hdr;	sc_signal<sc_uint<8> >	le;	sc_signal<bool>			hdr_done;	sc_signal<bool>			adv;	sc_signal<sc_uint<8> >	hdr0, hdr1, hdr2, hdr3, hdr4, hdr5, hdr6, hdr7;	sc_signal<bool>			set_adr_pending;	sc_signal<sc_uint<7> >	funct_adr_tmp;	sc_signal<bool>			in_size_0, in_size_1, in_size_2;	sc_signal<bool>			high_sel;	sc_signal<bool>			write_done, write_done_r;	// Halt Signals	sc_signal<bool>			clr_halt;	sc_signal<bool>			set_halt;	// ROM Signals	sc_signal<bool>			rom_sel, rom_sel_r;	sc_signal<bool>			rom_done;	sc_signal<sc_uint<7> >	rom_size, rom_size_d, rom_size_dd;	sc_signal<bool>			fifo_we_rom, fifo_we_rom_r, fifo_we_rom_r2;	sc_signal<sc_uint<8> >	rom_start_d;	// FIFOs Functions	void ep0_re_up(void);	void fifo_empty_up(void);	void fifo_full_up(void);	// Current State Functions	void clr_halt_up(void);	void addressed_up(void);	void configured_up(void);	void halt_up(void);	// ROM Functions	void rom_adr_up1(void);	void rom_adr_up2(void);	void rom_size_up1(void);	void rom_size_up2(void);	void rom_size_up3(void);	void rom_sel_up(void);	void fifo_we_rom_up1(void);	void fifo_we_rom_up2(void);	void fifo_we_rom_up3(void);	void rom_done_up(void);	// Get Header Functions	void fifo_re_up(void);	void adv_up(void);	void le_up(void);	void hdr_deco0(void);	void hdr_deco1(void);	void hdr_deco2(void);	void hdr_deco3(void);	void hdr_deco4(void);	void hdr_deco5(void);	void hdr_deco6(void);	void hdr_deco7(void);	void hdr_done_up(void);	// Send Data to Host Functions	void high_sel_up(void);	void ep0_dout_up(void);	void ep0_we_up(void);	void ep0_size_up(void);	void write_done_up1(void);	void write_done_up2(void);	// Header Decoder Functions	void bmReqType_up(void);	void bmReqType_Decoder(void);	void bRequest_up(void);	void wValue_up(void);	void wIndex_up(void);	void wLength_up(void);	void hdr_done_r_up(void);	void get_status_up(void);	void clear_feature_up(void);	void set_feature_up(void);	void set_address_up(void);	void get_descriptor_up(void);	void set_descriptor_up(void);	void get_config_up(void);	void set_config_up(void);	void get_interface_up(void);	void set_interface_up(void);	void synch_frame_up(void);	void v_set_int_up(void);	void v_set_feature_up(void);	void v_get_status_up(void);	void config_err_up(void);	void send_stall_up(void);	// Set Address Functions	void set_adr_pending_up(void);	void funct_adr_tmp_up(void);	void funct_adr_up(void);	// Control Pipe FSM Functions	void state_up(void);	void ep0_statemachine(void);	SC_CTOR(usb_ep0) {		set_halt.write(false);		SC_METHOD(ep0_re_up);		sensitive << fifo_re1;		SC_METHOD(fifo_empty_up);		sensitive << ep0_stat;		SC_METHOD(fifo_full_up);		sensitive << ep0_stat;		SC_METHOD(clr_halt_up);		sensitive << ctrl_setup;		SC_METHOD(addressed_up);		sensitive << clk.pos();		SC_METHOD(configured_up);		sensitive << clk.pos();		SC_METHOD(halt_up);		sensitive << clk.pos();		SC_METHOD(rom_adr_up1);		sensitive << wValue;		SC_METHOD(rom_adr_up2);		sensitive << clk.pos();		SC_METHOD(rom_size_up1);		sensitive << wValue;		SC_METHOD(rom_size_up2);		sensitive << rom_size_dd << wLength;		SC_METHOD(rom_size_up3);		sensitive << clk.pos();		SC_METHOD(rom_sel_up);		sensitive << clk.pos();		SC_METHOD(fifo_we_rom_up1);		sensitive << clk.pos();		SC_METHOD(fifo_we_rom_up2);		sensitive << clk.pos();		SC_METHOD(fifo_we_rom_up3);		sensitive << rom_sel << fifo_we_rom_r2;		SC_METHOD(rom_done_up);		sensitive << rom_size << rom_sel << rom_sel_r;		SC_METHOD(fifo_re_up);		sensitive << get_hdr << fifo_empty;		SC_METHOD(adv_up);		sensitive << clk.pos();		SC_METHOD(le_up);		sensitive << clk.pos();		SC_METHOD(hdr_deco0);		sensitive << clk.pos();		SC_METHOD(hdr_deco1);		sensitive << clk.pos();		SC_METHOD(hdr_deco2);		sensitive << clk.pos();		SC_METHOD(hdr_deco3);		sensitive << clk.pos();		SC_METHOD(hdr_deco4);		sensitive << clk.pos();		SC_METHOD(hdr_deco5);		sensitive << clk.pos();		SC_METHOD(hdr_deco6);		sensitive << clk.pos();		SC_METHOD(hdr_deco7);		sensitive << clk.pos();		SC_METHOD(hdr_done_up);		sensitive << le << adv;		SC_METHOD(high_sel_up);		sensitive << write_done_r;		SC_METHOD(ep0_dout_up);		sensitive << clk.pos();		SC_METHOD(ep0_we_up);		sensitive << clk.pos();		SC_METHOD(ep0_size_up);		sensitive << clk.pos();		SC_METHOD(write_done_up1);		sensitive << clk.pos();		SC_METHOD(write_done_up2);		sensitive << clk.pos();		SC_METHOD(bmReqType_up);		sensitive << hdr0;		SC_METHOD(bmReqType_Decoder);		sensitive << bmReqType;		SC_METHOD(bRequest_up);		sensitive << hdr1;		SC_METHOD(wValue_up);		sensitive << hdr2 << hdr3;		SC_METHOD(wIndex_up);		sensitive << hdr4 << hdr5;		SC_METHOD(wLength_up);		sensitive << hdr6 << hdr7;		SC_METHOD(hdr_done_r_up);		sensitive << clk.pos();		SC_METHOD(get_status_up);		sensitive << clk.pos();		SC_METHOD(clear_feature_up);		sensitive << clk.pos();		SC_METHOD(set_feature_up);		sensitive << clk.pos();		SC_METHOD(set_address_up);		sensitive << clk.pos();		SC_METHOD(get_descriptor_up);		sensitive << clk.pos();		SC_METHOD(set_descriptor_up);		sensitive << clk.pos();		SC_METHOD(get_config_up);		sensitive << clk.pos();		SC_METHOD(set_config_up);		sensitive << clk.pos();		SC_METHOD(set_interface_up);		sensitive << clk.pos();		SC_METHOD(get_interface_up);		sensitive << clk.pos();		SC_METHOD(synch_frame_up);		sensitive << clk.pos();		SC_METHOD(v_set_int_up);		sensitive << clk.pos();		SC_METHOD(v_set_feature_up);		sensitive << clk.pos();		SC_METHOD(v_get_status_up);		sensitive << clk.pos();		SC_METHOD(config_err_up);		sensitive << clk.pos();		SC_METHOD(send_stall_up);		sensitive << clk.pos();		SC_METHOD(set_adr_pending_up);		sensitive << clk.pos();		SC_METHOD(funct_adr_tmp_up);		sensitive << clk.pos();		SC_METHOD(funct_adr_up);		sensitive << clk.pos();		SC_METHOD(state_up);		sensitive << clk.pos();		SC_METHOD(ep0_statemachine);		sensitive << state << ctrl_setup << ctrl_in << ctrl_out;		sensitive << hdr_done << fifo_full << rom_done << write_done_r;		sensitive << wValue << bm_req_recp << get_status << clear_feature;		sensitive << set_feature << set_address << get_descriptor << set_descriptor;		sensitive << get_config << set_config << get_interface << set_interface;		sensitive << synch_frame << v_set_int << v_set_feature << v_get_status;	}};#endif

⌨️ 快捷键说明

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