📄 usbf_rf.v
字号:
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 u0(
.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 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 )
);
`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 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 )
);
`else
usbf_ep_rf_dummy u2( .clk( clk ),
.wclk( wclk ),
.rst( rst ),
.adr( adr[1:0] ),
.re( ep2_re ),
.we( ep2_we ),
.din( din ),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -