OpenCores
URL https://opencores.org/ocsvn/wb_dma/wb_dma/trunk

Subversion Repositories wb_dma

[/] [wb_dma/] [trunk/] [rtl/] [verilog/] [wb_dma_ch_rf.v] - Diff between revs 8 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 8 Rev 10
Line 35... Line 35...
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: wb_dma_ch_rf.v,v 1.2 2001-08-15 05:40:30 rudi Exp $
//  $Id: wb_dma_ch_rf.v,v 1.3 2001-10-19 04:35:04 rudi Exp $
//
//
//  $Date: 2001-08-15 05:40:30 $
//  $Date: 2001-10-19 04:35:04 $
//  $Revision: 1.2 $
//  $Revision: 1.3 $
//  $Author: rudi $
//  $Author: rudi $
//  $Locker:  $
//  $Locker:  $
//  $State: Exp $
//  $State: Exp $
//
//
// Change History:
// Change History:
//               $Log: not supported by cvs2svn $
//               $Log: not supported by cvs2svn $
 
//               Revision 1.2  2001/08/15 05:40:30  rudi
 
//
 
//               - Changed IO names to be more clear.
 
//               - Uniquifyed define names to be core specific.
 
//               - Added Section 3.10, describing DMA restart.
 
//
//               Revision 1.1  2001/07/29 08:57:02  rudi
//               Revision 1.1  2001/07/29 08:57:02  rudi
//
//
//
//
//               1) Changed Directory Structure
//               1) Changed Directory Structure
//               2) Added restart signal (REST)
//               2) Added restart signal (REST)
Line 92... Line 98...
                        ptr_set
                        ptr_set
 
 
                );
                );
 
 
parameter       [4:0]    CH_NO    = 5'h0;  // This Instances Channel ID
parameter       [4:0]    CH_NO    = 5'h0;  // This Instances Channel ID
 
parameter       [0:0]     CH_EN    = 1'b1;  // This channel exists
parameter       [0:0]     HAVE_ARS = 1'b1;  // 1=this Instance Supports ARS
parameter       [0:0]     HAVE_ARS = 1'b1;  // 1=this Instance Supports ARS
parameter       [0:0]     HAVE_ED  = 1'b1;  // 1=this Instance Supports External Descriptors
parameter       [0:0]     HAVE_ED  = 1'b1;  // 1=this Instance Supports External Descriptors
parameter       [0:0]     HAVE_CBUF= 1'b1;  // 1=this Instance Supports Cyclic Buffers
parameter       [0:0]     HAVE_CBUF= 1'b1;  // 1=this Instance Supports Cyclic Buffers
 
 
input           clk, rst;
input           clk, rst;
Line 191... Line 198...
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Aliases
// Aliases
//
//
 
 
assign ch_adr0          = {ch_adr0_r, 2'h0};
assign ch_adr0          = CH_EN ? {ch_adr0_r, 2'h0}   : 32'h0;
assign ch_adr1          = {ch_adr1_r, 2'h0};
assign ch_adr1          = CH_EN ? {ch_adr1_r, 2'h0}   : 32'h0;
assign ch_am0           = {ch_am0_r, 4'h0};
assign ch_am0           = CH_EN ? {ch_am0_r, 4'h0}    : 32'h0;
assign ch_am1           = {ch_am1_r, 4'h0};
assign ch_am1           = CH_EN ? {ch_am1_r, 4'h0}    : 32'h0;
assign sw_pointer       = {sw_pointer_r,2'h0};
assign sw_pointer       = CH_EN ? {sw_pointer_r,2'h0} : 32'h0;
 
 
assign pointer          = {pointer_r, 3'h0, ptr_valid};
assign pointer          = CH_EN ? {pointer_r, 3'h0, ptr_valid} : 32'h0;
assign pointer_s        = {pointer_sr, 4'h0};
assign pointer_s        = CH_EN ? {pointer_sr, 4'h0}  : 32'h0;
assign ch_csr           = {9'h0, int_src_r, ch_csr_r3, rest_en, ch_csr_r2,
assign ch_csr           = CH_EN ? {9'h0, int_src_r, ch_csr_r3, rest_en, ch_csr_r2,
                                ch_err, ch_done, ch_busy, 1'b0, ch_csr_r[8:1], ch_enable};
                                        ch_err, ch_done, ch_busy, 1'b0, ch_csr_r[8:1], ch_enable} : 32'h0;
assign ch_txsz          = {5'h0, ch_chk_sz_r, ch_sz_inf, 3'h0, ch_tot_sz_r};
assign ch_txsz          = CH_EN ? {5'h0, ch_chk_sz_r, ch_sz_inf, 3'h0, ch_tot_sz_r} : 32'h0;
 
 
assign ch_enable        = ch_csr_r[`WDMA_CH_EN] & (HAVE_CBUF ? !ch_dis : 1'b1);
assign ch_enable        = CH_EN ? (ch_csr_r[`WDMA_CH_EN] & (HAVE_CBUF ? !ch_dis : 1'b1) ) : 1'b0;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// CH0 control signals
// CH0 control signals
//
//
 
 
parameter       [4:0]    CH_ADR = CH_NO + 5'h1;
parameter       [4:0]    CH_ADR = CH_NO + 5'h1;
 
 
assign ch_csr_we        = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
assign ch_csr_we        = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
assign ch_csr_re        = wb_rf_re & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
assign ch_csr_re        = CH_EN & wb_rf_re & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
assign ch_txsz_we       = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h1);
assign ch_txsz_we       = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h1);
assign ch_adr0_we       = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h2);
assign ch_adr0_we       = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h2);
assign ch_am0_we        = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h3);
assign ch_am0_we        = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h3);
assign ch_adr1_we       = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h4);
assign ch_adr1_we       = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h4);
assign ch_am1_we        = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h5);
assign ch_am1_we        = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h5);
assign pointer_we       = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h6);
assign pointer_we       = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h6);
assign sw_pointer_we    = wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h7);
assign sw_pointer_we    = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h7);
 
 
assign ch_done_we       = (((ch_sel==CH_NO) & dma_done_all) | ndnr) &
assign ch_done_we       = CH_EN & (((ch_sel==CH_NO) & dma_done_all) | ndnr) &
                          (ch_csr[`WDMA_USE_ED] ? ch_eol : !ch_csr[`WDMA_ARS]);
                          (ch_csr[`WDMA_USE_ED] ? ch_eol : !ch_csr[`WDMA_ARS]);
assign chunk_done_we    = (ch_sel==CH_NO) & dma_done;
assign chunk_done_we    = CH_EN & (ch_sel==CH_NO) & dma_done;
assign ch_err_we        = (ch_sel==CH_NO) & dma_err;
assign ch_err_we        = CH_EN & (ch_sel==CH_NO) & dma_err;
assign ch_csr_dewe      = de_csr_we & (ch_sel==CH_NO);
assign ch_csr_dewe      = CH_EN & de_csr_we & (ch_sel==CH_NO);
assign ch_txsz_dewe     = de_txsz_we & (ch_sel==CH_NO);
assign ch_txsz_dewe     = CH_EN & de_txsz_we & (ch_sel==CH_NO);
assign ch_adr0_dewe     = de_adr0_we & (ch_sel==CH_NO);
assign ch_adr0_dewe     = CH_EN & de_adr0_we & (ch_sel==CH_NO);
assign ch_adr1_dewe     = de_adr1_we & (ch_sel==CH_NO);
assign ch_adr1_dewe     = CH_EN & de_adr1_we & (ch_sel==CH_NO);
 
 
assign ptr_inv          = ((ch_sel==CH_NO) & dma_done_all) | ndnr;
assign ptr_inv          = CH_EN & ((ch_sel==CH_NO) & dma_done_all) | ndnr;
assign this_ptr_set     = ptr_set & (ch_sel==CH_NO);
assign this_ptr_set     = CH_EN & ptr_set & (ch_sel==CH_NO);
 
 
always @(posedge clk)
always @(posedge clk)
        ch_rl <= #1     HAVE_ARS & (
        ch_rl <= #1     CH_EN & HAVE_ARS & (
                        (rest_en & dma_rest) |
                        (rest_en & dma_rest) |
                        ((ch_sel==CH_NO) & dma_done_all & ch_csr[`WDMA_ARS] & !ch_csr[`WDMA_USE_ED])
                        ((ch_sel==CH_NO) & dma_done_all & ch_csr[`WDMA_ARS] & !ch_csr[`WDMA_USE_ED])
                        );
                        );
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// Pointers
// Pointers
 
 
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                        ptr_valid <= #1 1'b0;
        if(!rst)                        ptr_valid <= #1 1'b0;
        else
        else
        if(HAVE_ED)
        if(CH_EN & HAVE_ED)
           begin
           begin
                if( this_ptr_set | (rest_en & dma_rest) )
                if( this_ptr_set | (rest_en & dma_rest) )
                                        ptr_valid <= #1 1'b1;
                                        ptr_valid <= #1 1'b1;
                else
                else
                if(ptr_inv)             ptr_valid <= #1 1'b0;
                if(ptr_inv)             ptr_valid <= #1 1'b0;
Line 258... Line 265...
        else                            ptr_valid <= #1 1'b0;
        else                            ptr_valid <= #1 1'b0;
 
 
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                        ch_eol <= #1 1'b0;
        if(!rst)                        ch_eol <= #1 1'b0;
        else
        else
        if(HAVE_ED)
        if(CH_EN & HAVE_ED)
           begin
           begin
                if(ch_csr_dewe)         ch_eol <= #1 de_csr[`WDMA_ED_EOL];
                if(ch_csr_dewe)         ch_eol <= #1 de_csr[`WDMA_ED_EOL];
                else
                else
                if(ch_done_we)          ch_eol <= #1 1'b0;
                if(ch_done_we)          ch_eol <= #1 1'b0;
           end
           end
        else                            ch_eol <= #1 1'b0;
        else                            ch_eol <= #1 1'b0;
 
 
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ED)
        if(CH_EN & HAVE_ED)
           begin
           begin
                if(pointer_we)          pointer_r <= #1 wb_rf_din[31:4];
                if(pointer_we)          pointer_r <= #1 wb_rf_din[31:4];
                else
                else
                if(this_ptr_set)        pointer_r <= #1 de_csr[31:4];
                if(this_ptr_set)        pointer_r <= #1 de_csr[31:4];
           end
           end
        else                            pointer_r <= #1 1'b0;
        else                            pointer_r <= #1 1'b0;
 
 
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ED)
        if(CH_EN & HAVE_ED)
           begin
           begin
                if(this_ptr_set)        pointer_sr <= #1 pointer_r;
                if(this_ptr_set)        pointer_sr <= #1 pointer_r;
           end
           end
        else                            pointer_sr <= #1 1'b0;
        else                            pointer_sr <= #1 1'b0;
 
 
Line 288... Line 295...
// CSR
// CSR
 
 
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                ch_csr_r <= #1 1'b0;
        if(!rst)                ch_csr_r <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(ch_csr_we)           ch_csr_r <= #1 wb_rf_din[8:0];
        if(ch_csr_we)           ch_csr_r <= #1 wb_rf_din[8:0];
        else
        else
           begin
           begin
                if(ch_done_we)  ch_csr_r[`WDMA_CH_EN] <= #1 1'b0;
                if(ch_done_we)  ch_csr_r[`WDMA_CH_EN] <= #1 1'b0;
                if(ch_csr_dewe) ch_csr_r[4:1] <= #1 de_csr[19:16];
                if(ch_csr_dewe) ch_csr_r[4:1] <= #1 de_csr[19:16];
           end
           end
 
           end
 
 
// done bit
// done bit
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                ch_done <= #1 1'b0;
        if(!rst)                ch_done <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(ch_csr_we)           ch_done <= #1 !wb_rf_din[`WDMA_CH_EN];
        if(ch_csr_we)           ch_done <= #1 !wb_rf_din[`WDMA_CH_EN];
        else
        else
        if(ch_done_we)          ch_done <= #1 1'b1;
        if(ch_done_we)          ch_done <= #1 1'b1;
 
           end
 
 
// busy bit
// busy bit
always @(posedge clk)
always @(posedge clk)
        ch_busy <= #1 (ch_sel==CH_NO) & dma_busy;
        ch_busy <= #1 CH_EN & (ch_sel==CH_NO) & dma_busy;
 
 
// stop bit
// stop bit
always @(posedge clk)
always @(posedge clk)
        ch_stop <= #1 ch_csr_we & wb_rf_din[`WDMA_STOP];
        ch_stop <= #1 CH_EN & ch_csr_we & wb_rf_din[`WDMA_STOP];
 
 
// error bit
// error bit
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                ch_err <= #1 1'b0;
        if(!rst)                ch_err <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(ch_err_we)           ch_err <= #1 1'b1;
        if(ch_err_we)           ch_err <= #1 1'b1;
        else
        else
        if(ch_csr_re)           ch_err <= #1 1'b0;
        if(ch_csr_re)           ch_err <= #1 1'b0;
 
           end
 
 
// Priority Bits
// Priority Bits
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                ch_csr_r2 <= #1 3'h0;
        if(!rst)                ch_csr_r2 <= #1 3'h0;
        else
        else
        if(ch_csr_we)           ch_csr_r2 <= #1 wb_rf_din[15:13];
        if(CH_EN & ch_csr_we)           ch_csr_r2 <= #1 wb_rf_din[15:13];
 
 
// Restart Enable Bit (REST)
// Restart Enable Bit (REST)
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                rest_en <= #1 1'b0;
        if(!rst)                rest_en <= #1 1'b0;
        else
        else
        if(ch_csr_we)           rest_en <= #1 wb_rf_din[16];
        if(CH_EN & ch_csr_we)           rest_en <= #1 wb_rf_din[16];
 
 
// INT Mask
// INT Mask
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                ch_csr_r3 <= #1 3'h0;
        if(!rst)                ch_csr_r3 <= #1 3'h0;
        else
        else
        if(ch_csr_we)           ch_csr_r3 <= #1 wb_rf_din[19:17];
        if(CH_EN & ch_csr_we)           ch_csr_r3 <= #1 wb_rf_din[19:17];
 
 
// INT Source
// INT Source
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                int_src_r[2] <= #1 1'b0;
        if(!rst)                int_src_r[2] <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(chunk_done_we)       int_src_r[2] <= #1 1'b1;
        if(chunk_done_we)       int_src_r[2] <= #1 1'b1;
        else
        else
        if(ch_csr_re)           int_src_r[2] <= #1 1'b0;
        if(ch_csr_re)           int_src_r[2] <= #1 1'b0;
 
           end
 
 
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                int_src_r[1] <= #1 1'b0;
        if(!rst)                int_src_r[1] <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(ch_done_we)          int_src_r[1] <= #1 1'b1;
        if(ch_done_we)          int_src_r[1] <= #1 1'b1;
        else
        else
        if(ch_csr_re)           int_src_r[1] <= #1 1'b0;
        if(ch_csr_re)           int_src_r[1] <= #1 1'b0;
 
           end
 
 
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                int_src_r[0] <= #1 1'b0;
        if(!rst)                int_src_r[0] <= #1 1'b0;
        else
        else
 
        if(CH_EN)
 
           begin
        if(ch_err_we)           int_src_r[0] <= #1 1'b1;
        if(ch_err_we)           int_src_r[0] <= #1 1'b1;
        else
        else
        if(ch_csr_re)           int_src_r[0] <= #1 1'b0;
        if(ch_csr_re)           int_src_r[0] <= #1 1'b0;
 
           end
 
 
// Interrupt Output
// Interrupt Output
assign int = |(int_src_r & ch_csr_r3);
assign int = |(int_src_r & ch_csr_r3);
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// TXZS
// TXZS
always @(posedge clk)
always @(posedge clk)
 
        if(CH_EN)
 
           begin
        if(ch_txsz_we)
        if(ch_txsz_we)
                {ch_chk_sz_r, ch_tot_sz_r} <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
                {ch_chk_sz_r, ch_tot_sz_r} <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
        else
        else
        if(ch_txsz_dewe)
        if(ch_txsz_dewe)
                ch_tot_sz_r <= #1 de_txsz;
                ch_tot_sz_r <= #1 de_txsz;
        else
        else
        if(ch_rl)
        if(ch_rl)
                {ch_chk_sz_r, ch_tot_sz_r} <= #1 ch_txsz_s;
                {ch_chk_sz_r, ch_tot_sz_r} <= #1 ch_txsz_s;
 
           end
 
 
// txsz shadow register
// txsz shadow register
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(CH_EN & HAVE_ARS)
           begin
           begin
 
 
                if(ch_txsz_we)  ch_txsz_s <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
                if(ch_txsz_we)  ch_txsz_s <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
                else
                else
                if(rest_en & ch_txsz_dewe & de_fetch_descr)
                if(rest_en & ch_txsz_dewe & de_fetch_descr)
                                ch_txsz_s[11:0] <= #1 de_txsz[11:0];
                                ch_txsz_s[11:0] <= #1 de_txsz[11:0];
           end
           end
 
 
// Infinite Size indicator
// Infinite Size indicator
always @(posedge clk)
always @(posedge clk)
 
        if(CH_EN)
 
           begin
        if(ch_txsz_we)          ch_sz_inf <= #1 wb_rf_din[15];
        if(ch_txsz_we)          ch_sz_inf <= #1 wb_rf_din[15];
 
           end
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// ADR0
// ADR0
always @(posedge clk)
always @(posedge clk)
 
        if(CH_EN)
 
           begin
        if(ch_adr0_we)          ch_adr0_r <= #1 wb_rf_din[31:2];
        if(ch_adr0_we)          ch_adr0_r <= #1 wb_rf_din[31:2];
        else
        else
        if(ch_adr0_dewe)        ch_adr0_r <= #1 de_adr0[31:2];
        if(ch_adr0_dewe)        ch_adr0_r <= #1 de_adr0[31:2];
        else
        else
        if(ch_rl)               ch_adr0_r <= #1 ch_adr0_s;
        if(ch_rl)               ch_adr0_r <= #1 ch_adr0_s;
 
           end
 
 
// Adr0 shadow register
// Adr0 shadow register
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(CH_EN & HAVE_ARS)
           begin
           begin
                if(ch_adr0_we)  ch_adr0_s <= #1 wb_rf_din[31:2];
                if(ch_adr0_we)  ch_adr0_s <= #1 wb_rf_din[31:2];
                else
                else
                if(rest_en & ch_adr0_dewe & de_fetch_descr)
                if(rest_en & ch_adr0_dewe & de_fetch_descr)
                                ch_adr0_s <= #1 de_adr0[31:2];
                                ch_adr0_s <= #1 de_adr0[31:2];
Line 418... Line 452...
        if(ch_am0_we & HAVE_CBUF)       ch_am0_r <= #1 wb_rf_din[31:4];
        if(ch_am0_we & HAVE_CBUF)       ch_am0_r <= #1 wb_rf_din[31:4];
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// ADR1
// ADR1
always @(posedge clk)
always @(posedge clk)
 
        if(CH_EN)
 
           begin
        if(ch_adr1_we)          ch_adr1_r <= #1 wb_rf_din[31:2];
        if(ch_adr1_we)          ch_adr1_r <= #1 wb_rf_din[31:2];
        else
        else
        if(ch_adr1_dewe)        ch_adr1_r <= #1 de_adr1[31:2];
        if(ch_adr1_dewe)        ch_adr1_r <= #1 de_adr1[31:2];
        else
        else
        if(ch_rl)               ch_adr1_r <= #1 ch_adr1_s;
        if(ch_rl)               ch_adr1_r <= #1 ch_adr1_s;
 
           end
 
 
// Adr1 shadow register
// Adr1 shadow register
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(CH_EN & HAVE_ARS)
           begin
           begin
                if(ch_adr1_we)  ch_adr1_s <= #1 wb_rf_din[31:2];
                if(ch_adr1_we)  ch_adr1_s <= #1 wb_rf_din[31:2];
                else
                else
                if(rest_en & ch_adr1_dewe & de_fetch_descr)
                if(rest_en & ch_adr1_dewe & de_fetch_descr)
                                ch_adr1_s <= #1 de_adr1[31:2];
                                ch_adr1_s <= #1 de_adr1[31:2];
Line 439... Line 476...
// ---------------------------------------------------
// ---------------------------------------------------
// AM1
// AM1
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                        ch_am1_r <= #1 28'hfffffff;
        if(!rst)                        ch_am1_r <= #1 28'hfffffff;
        else
        else
        if(ch_am1_we & HAVE_CBUF)       ch_am1_r <= #1 wb_rf_din[31:4];
        if(ch_am1_we & CH_EN & HAVE_CBUF)       ch_am1_r <= #1 wb_rf_din[31:4];
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// Software Pointer
// Software Pointer
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                        sw_pointer_r <= #1 28'h0;
        if(!rst)                        sw_pointer_r <= #1 28'h0;
        else
        else
        if(sw_pointer_we & HAVE_CBUF)   sw_pointer_r <= #1 wb_rf_din[31:4];
        if(sw_pointer_we & CH_EN & HAVE_CBUF)   sw_pointer_r <= #1 wb_rf_din[31:4];
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// Software Pointer Match logic
// Software Pointer Match logic
 
 
assign cmp_adr = ch_csr[2] ? ch_adr1[30:2] : ch_adr0[30:2];
assign cmp_adr = ch_csr[2] ? ch_adr1[30:2] : ch_adr0[30:2];
 
 
always @(posedge clk)
always @(posedge clk)
        ch_dis <= #1 HAVE_CBUF ? ((sw_pointer[30:2] == cmp_adr) & sw_pointer[31]) : 1'b0;
        ch_dis <= #1 (CH_EN & HAVE_CBUF) ? ((sw_pointer[30:2] == cmp_adr) & sw_pointer[31]) : 1'b0;
 
 
endmodule
endmodule
 
 
 
 
module wb_dma_ch_rf_dummy(clk, rst,
module wb_dma_ch_rf_dummy(clk, rst,

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.