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
|