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 5 and 8

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

Rev 5 Rev 8
Line 35... Line 35...
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: wb_dma_ch_rf.v,v 1.1 2001-07-29 08:57:02 rudi Exp $
//  $Id: wb_dma_ch_rf.v,v 1.2 2001-08-15 05:40:30 rudi Exp $
//
//
//  $Date: 2001-07-29 08:57:02 $
//  $Date: 2001-08-15 05:40:30 $
//  $Revision: 1.1 $
//  $Revision: 1.2 $
//  $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.1  2001/07/29 08:57:02  rudi
 
//
 
//
 
//               1) Changed Directory Structure
 
//               2) Added restart signal (REST)
 
//
//               Revision 1.3  2001/06/14 08:50:01  rudi
//               Revision 1.3  2001/06/14 08:50:01  rudi
//
//
//               Changed Module Name to match file name.
//               Changed Module Name to match file name.
//
//
//               Revision 1.2  2001/06/13 02:26:48  rudi
//               Revision 1.2  2001/06/13 02:26:48  rudi
Line 197... Line 203...
assign pointer_s        = {pointer_sr, 4'h0};
assign pointer_s        = {pointer_sr, 4'h0};
assign ch_csr           = {9'h0, int_src_r, ch_csr_r3, rest_en, ch_csr_r2,
assign ch_csr           = {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};
assign ch_txsz          = {5'h0, ch_chk_sz_r, ch_sz_inf, 3'h0, ch_tot_sz_r};
assign ch_txsz          = {5'h0, ch_chk_sz_r, ch_sz_inf, 3'h0, ch_tot_sz_r};
 
 
assign ch_enable        = ch_csr_r[0] & (HAVE_CBUF ? !ch_dis : 1'b1);
assign ch_enable        = ch_csr_r[`WDMA_CH_EN] & (HAVE_CBUF ? !ch_dis : 1'b1);
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// CH0 control signals
// CH0 control signals
//
//
Line 217... Line 223...
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        = 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       = 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    = 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_sel==CH_NO) & dma_done_all) | ndnr) &
                          (ch_csr[`USE_ED] ? ch_eol : !ch_csr[`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_sel==CH_NO) & dma_done;
assign ch_err_we        = (ch_sel==CH_NO) & dma_err;
assign ch_err_we        = (ch_sel==CH_NO) & dma_err;
assign ch_csr_dewe      = de_csr_we & (ch_sel==CH_NO);
assign ch_csr_dewe      = de_csr_we & (ch_sel==CH_NO);
assign ch_txsz_dewe     = de_txsz_we & (ch_sel==CH_NO);
assign ch_txsz_dewe     = de_txsz_we & (ch_sel==CH_NO);
assign ch_adr0_dewe     = de_adr0_we & (ch_sel==CH_NO);
assign ch_adr0_dewe     = de_adr0_we & (ch_sel==CH_NO);
Line 231... Line 237...
assign this_ptr_set     = ptr_set & (ch_sel==CH_NO);
assign this_ptr_set     = ptr_set & (ch_sel==CH_NO);
 
 
always @(posedge clk)
always @(posedge clk)
        ch_rl <= #1     HAVE_ARS & (
        ch_rl <= #1     HAVE_ARS & (
                        (rest_en & dma_rest) |
                        (rest_en & dma_rest) |
                        ((ch_sel==CH_NO) & dma_done_all & ch_csr[`ARS] & !ch_csr[`USE_ED])
                        ((ch_sel==CH_NO) & dma_done_all & ch_csr[`WDMA_ARS] & !ch_csr[`WDMA_USE_ED])
                        );
                        );
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// Pointers
// Pointers
 
 
Line 254... Line 260...
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(HAVE_ED)
           begin
           begin
                if(ch_csr_dewe)         ch_eol <= #1 de_csr[`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;
 
 
Line 285... Line 291...
        if(!rst)                ch_csr_r <= #1 1'b0;
        if(!rst)                ch_csr_r <= #1 1'b0;
        else
        else
        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[`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
 
 
// 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_csr_we)           ch_done <= #1 !wb_rf_din[`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;
 
 
// busy bit
// busy bit
always @(posedge clk)
always @(posedge clk)
        ch_busy <= #1 (ch_sel==CH_NO) & dma_busy;
        ch_busy <= #1 (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[`STOP];
        ch_stop <= #1 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
Line 369... Line 375...
        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;
 
 
// txsz shadow register
// txsz shadow register
/*
 
always @(posedge clk)
 
        if((ch_txsz_we | (rest_en & ch_txsz_dewe & de_fetch_descr) )
 
                & HAVE_ARS)     ch_txsz_s <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
 
*/
 
 
 
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(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_txsz_we)          ch_sz_inf <= #1 wb_rf_din[15];
        if(ch_txsz_we)          ch_sz_inf <= #1 wb_rf_din[15];
 
 
// ---------------------------------------------------
// ---------------------------------------------------
Line 402... Line 399...
        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;
 
 
// Adr0 shadow register
// Adr0 shadow register
/*
 
always @(posedge clk)
 
        if((ch_adr0_we | (rest_en & ch_adr0_dewe & de_fetch_descr) )
 
                & HAVE_ARS)     ch_adr0_s <= #1 wb_rf_din[31:2];
 
*/
 
 
 
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(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];
           end
           end
 
 
 
 
// ---------------------------------------------------
// ---------------------------------------------------
// AM0
// AM0
always @(posedge clk or negedge rst)
always @(posedge clk or negedge rst)
        if(!rst)                        ch_am0_r <= #1 28'hfffffff;
        if(!rst)                        ch_am0_r <= #1 28'hfffffff;
        else
        else
Line 435... Line 425...
        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;
 
 
// Adr1 shadow register
// Adr1 shadow register
/*
 
always @(posedge clk)
 
        if((ch_adr1_we | (rest_en & ch_adr1_dewe & de_fetch_descr) )
 
                & HAVE_ARS)     ch_adr1_s <= #1 wb_rf_din[31:2];
 
*/
 
 
 
always @(posedge clk)
always @(posedge clk)
        if(HAVE_ARS)
        if(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

powered by: WebSVN 2.1.0

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