URL
https://opencores.org/ocsvn/wb_dma/wb_dma/trunk
Subversion Repositories wb_dma
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 16 to Rev 17
- ↔ Reverse comparison
Rev 16 → Rev 17
/tags/start/doc/STATUS.txt
File deleted
/tags/start/doc/README.txt
File deleted
/trunk/doc/README.txt
File deleted
/trunk/doc/dma_doc.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
trunk/doc/dma_doc.pdf
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: trunk/doc/STATUS.txt
===================================================================
--- trunk/doc/STATUS.txt (revision 16)
+++ trunk/doc/STATUS.txt (nonexistent)
@@ -1,60 +0,0 @@
-This file describes the current status of the checked in HDL code.
-Please submit all bugs/comments/suggestions regarding the DMA core
-to: cores@opencores.org
-
-Need Help
----------
-I'm looking for help in verifying the core. If you think you can help,
-please send an email to the list or to me directly.
-Even though I have written a test bench and a few test, I would prefer
-if someone else could verify the core as well.
-
-
-STATUS
-======
-
-Latest Release (10/19/2001)
----------------------------
-- Made the core parameterizable - no more editing of the
- wb_defines.v file, just pass the configuration to the core
- when instantiating it !
-
-Third Release (7/27/2001)
---------------------------
-- Added dma_rest_i. It allows to restart the current transfer at
- the beginning. Beginning is defined as the original values that
- where either written to the channel registers, or where fetched
- from the last external descriptor fetch.
-- Made some minor changes:
- - Parametarized HW handshake signals (ack, req, nd, rest)
-- There still might be many bugs ! Only little testing has been done !
-- Please do not modify the sources (yet !) ! I'm still working on the core.
-- Things that are not implemented yet, or are known not to work yet:
- - The DMA currently ignores the RTY_I (retry) input.
-
-
-Second Release (5/6/2001)
--------------------------
-- Made many, many changes, almost rewrote the entire thing !
- The main changes are:
-
- - Added Support of up to 31 channels
- - Added support for 2,4 and 8 priority levels
- - Now can have up to 31 channels
- - Added many configuration items
- - Changed reset to async
-
-- There still might be many bugs ! Only little testing has been done !
-- Please do not modify the sources (yet !) ! I'm still working on the core.
-- Things that are not implemented yet, or are known not to work yet:
- - The DMA currently ignores the RTY_I (retry) input.
-
-
-Initial Release (19/3/2001)
----------------------------
-- This is the very first release of the core
-- There might be still many bugs ! Only little testing has been done !
-- Please do not modify the sources (yet !) ! I'm still working on the core.
-- Things that are not implemented yet, or are known not to work yet:
- - The DMA currently ignores the RTY_I (retry) input.
-
Index: trunk/sim/rtl_sim/bin/Makefile
===================================================================
--- trunk/sim/rtl_sim/bin/Makefile (revision 16)
+++ trunk/sim/rtl_sim/bin/Makefile (nonexistent)
@@ -1,93 +0,0 @@
-
-all: sim
-SHELL = /bin/sh
-MS=-s
-
-##########################################################################
-#
-# DUT Sources
-#
-##########################################################################
-DUT_SRC_DIR=../../../rtl/verilog
-_TARGETS_= $(DUT_SRC_DIR)/wb_dma_ch_pri_enc.v \
- $(DUT_SRC_DIR)/wb_dma_ch_arb.v \
- $(DUT_SRC_DIR)/wb_dma_pri_enc_sub.v \
- $(DUT_SRC_DIR)/wb_dma_ch_sel.v \
- $(DUT_SRC_DIR)/wb_dma_top.v \
- $(DUT_SRC_DIR)/wb_dma_ch_rf.v \
- $(DUT_SRC_DIR)/wb_dma_rf.v \
- $(DUT_SRC_DIR)/wb_dma_wb_if.v \
- $(DUT_SRC_DIR)/wb_dma_wb_mast.v \
- $(DUT_SRC_DIR)/wb_dma_wb_slv.v \
- $(DUT_SRC_DIR)/wb_dma_de.v \
- $(DUT_SRC_DIR)/wb_dma_inc30r.v
-
-##########################################################################
-#
-# Test Bench Sources
-#
-##########################################################################
-_TOP_=test
-TB_SRC_DIR=../../../bench/verilog
-_TB_= $(TB_SRC_DIR)/test_bench_top.v \
- $(TB_SRC_DIR)/wb_slv_model.v \
- $(TB_SRC_DIR)/wb_mast_model.v
-
-##########################################################################
-#
-# Misc Variables
-#
-##########################################################################
-
-#INCDIR="-INCDIR ./$(DUT_SRC_DIR)/ -INCDIR ./$(TB_SRC_DIR)/"
-#LOGF=-LOGFILE .nclog
-#NCCOMMON=-CDSLIB ncwork/cds.lib -HDLVAR ncwork/hdl.var -NOCOPYRIGHT
-
-INCDIR=+incdir+./$(DUT_SRC_DIR)/ +incdir+./$(TB_SRC_DIR)/
-LOGF=-l .nclog
-
-UMC_LIB=/tools/dc_libraries/virtual_silicon/umc_lib.v
-GATE_NETLIST = ../../../syn/out/wb_dma_top_ps.v
-
-##########################################################################
-#
-# Make Targets
-#
-##########################################################################
-
-ss:
- signalscan -do waves/waves.do -waves waves/waves.trn &
-
-simxl:
- verilog +incdir+$(DUT_SRC_DIR) +incdir+$(TB_SRC_DIR) \
- $(_TARGETS_) $(_TB_)
-
-simw:
- @$(MAKE) -s sim ACCESS="+access+r " WAVES="+define+WAVES"
-
-sim:
- ncverilog -q +define+RUDIS_TB $(_TARGETS_) $(_TB_) \
- $(INCDIR) $(WAVES) $(ACCESS) $(LOGF) +ncstatus \
- +ncuid+`hostname`
-
-gatew:
- @$(MAKE) -s gate ACCESS="+access+r" WAVES="+define+WAVES"
-
-gate:
- ncverilog -q +define+RUDIS_TB $(_TB_) $(UMC_LIB) \
- $(GATE_NETLIST) $(INCDIR) $(WAVES) $(ACCESS) \
- $(LOGF) +ncstatus +ncuid+`hostname`
-
-hal:
- @echo ""
- @echo "----- Running HAL ... ----------"
- @hal -NOP -NOS -nocheck STYVAL:USEPRT:NOBLKN:DLNBLK \
- +incdir+$(DUT_SRC_DIR) $(_TARGETS_)
- @echo "----- DONE ... ----------"
-
-clean:
- rm -rf ./waves/*.dsn ./waves/*.trn \
- ncwork/inc* ncwork/.inc* ncverilog.key \
- ./verilog.* .nclog hal.log INCA_libs
-
-##########################################################################
trunk/sim/rtl_sim/bin/Makefile
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/syn/bin/comp.dc
===================================================================
--- trunk/syn/bin/comp.dc (revision 16)
+++ trunk/syn/bin/comp.dc (nonexistent)
@@ -1,121 +0,0 @@
-#################################################################################
-#
-# Actual Synthesis Script
-#
-# This script does the actual synthesis
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-#################################################################################
-
-# ==============================================
-# Setup Design Parameters
-source ../bin/design_spec.dc
-
-# ==============================================
-# Setup Libraries
-source ../bin/lib_spec.dc
-
-# ==============================================
-# Setup IO Files
-
-append log_file ../log/$active_design "_cmp.log"
-append pre_comp_db_file ../out/$design_name "_pre.db"
-append post_comp_db_file ../out/$design_name ".db"
-append post_syn_verilog_file ../out/$design_name "_ps.v"
-
-set junk_file /dev/null
-sh rm -f $log_file
-
-# ==============================================
-# Setup Misc Variables
-
-set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
-
-# ==============================================
-# Read Design
-
-echo "+++++++++ Reading Design ..." >> $log_file
-read_file $pre_comp_db_file >> $log_file
-
-# ==============================================
-# Operating conditions
-
-echo "+++++++++ Setting up Operation Conditions ..." >> $log_file
-current_design $design_name
-set_operating_conditions WORST >> $log_file
-
-# Turn off automatic wire load selection, as this
-# always (WHY ???) defaults to "zero_load"
-#set auto_wire_load_selection false
-
-#set_wire_load_mode enclosed >> $log_file
-#set_wire_load_mode top >> $log_file
-#set_wire_load_model -name suggested_40K >> $log_file
-
-# ==============================================
-# Setup Clocks and Resets
-
-echo "+++++++++ Setting up Clocks ..." >> $log_file
-
-set_drive 0 [find port {clk_i}]
-
-# !!! WISHBONE Clock !!!
-set clock_period 5
-create_clock -period $clock_period clk_i
-set_clock_skew -uncertainty 0.2 clk_i
-set_clock_transition 0.2 clk_i
-set_dont_touch_network clk_i
-
-# !!! Reset !!!
-set_drive 0 [find port {rst*}]
-set_dont_touch_network [find port {rst*}]
-
-# ==============================================
-# Setup IOs
-
-echo "+++++++++ Setting up IOs ..." >> $log_file
-
-# Need to spell out external IOs
-
-set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file
-set_load 0.2 [all_outputs]
-
-set_input_delay 2.0 -clock clk_i [all_inputs]
-set_output_delay 2.0 -clock clk_i [all_outputs]
-
-# ==============================================
-# Setup Area Constrains
-set_max_area 0.0
-set compile_sequential_area_recovery true
-
-# ==============================================
-# Force Ultra
-set_ultra_optimization -f
-
-# ==============================================
-# Compile Design
-
-echo "+++++++++ Starting Compile ..." >> $log_file
-compile -map_effort low -area_effort low >> $log_file
-#compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file
-
-# ==============================================
-# Write Out the optimized design
-
-echo "+++++++++ Saving Optimized Design ..." >> $log_file
-write_file -hierarchy -format verilog -output $post_syn_verilog_file
-write_file -hierarchy -format db -output $post_comp_db_file
-
-# ==============================================
-# Create Some Basic Reports
-
-echo "+++++++++ Reporting Final Results ..." >> $log_file
-report_timing -nworst 10 >> $log_file
-report_area >> $log_file
-
Index: trunk/syn/bin/lib_spec.dc
===================================================================
--- trunk/syn/bin/lib_spec.dc (revision 16)
+++ trunk/syn/bin/lib_spec.dc (nonexistent)
@@ -1,36 +0,0 @@
-#################################################################################
-#
-# Library Specification
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-#################################################################################
-
-# ==============================================
-# Setup Libraries
-
-set search_path [list $search_path . \
- /tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \
- $hdl_src_dir]
-
-set snps [getenv "SYNOPSYS"]
-
-set synthetic_library ""
-append synthetic_library $snps "/libraries/syn/dw01.sldb "
-append synthetic_library $snps "/libraries/syn/dw02.sldb "
-append synthetic_library $snps "/libraries/syn/dw03.sldb "
-append synthetic_library $snps "/libraries/syn/dw04.sldb "
-append synthetic_library $snps "/libraries/syn/dw05.sldb "
-append synthetic_library $snps "/libraries/syn/dw06.sldb "
-append synthetic_library $snps "/libraries/syn/dw07.sldb "
-
-set target_library { umcl18u250t2_wc.db }
-set link_library ""
-append link_library $target_library " " $synthetic_library
-set symbol_library { umcl18u250t2.sdb }
-
Index: trunk/syn/bin/design_spec.dc
===================================================================
--- trunk/syn/bin/design_spec.dc (revision 16)
+++ trunk/syn/bin/design_spec.dc (nonexistent)
@@ -1,26 +0,0 @@
-#################################################################################
-#
-# Design Specification
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-#################################################################################
-
-# ==============================================
-# Setup Design Parameters
-
-set design_files {wb_dma_inc30r wb_dma_ch_arb wb_dma_pri_enc_sub wb_dma_ch_pri_enc wb_dma_ch_sel wb_dma_ch_rf wb_dma_rf wb_dma_wb_mast wb_dma_wb_slv wb_dma_wb_if wb_dma_de wb_dma_top }
-
-set design_name wb_dma_top
-set active_design wb_dma_top
-
-# Next Statement defines all clocks and resets in the design
-set special_net {rst clk}
-
-set hdl_src_dir ../../rtl/verilog/
-
Index: trunk/syn/bin/read.dc
===================================================================
--- trunk/syn/bin/read.dc (revision 16)
+++ trunk/syn/bin/read.dc (nonexistent)
@@ -1,65 +0,0 @@
-#################################################################################
-#
-# Pre Synthesis Script
-#
-# This script only reads in the design and saves it in a DB file
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-#################################################################################
-
-# ==============================================
-# Setup Design Parameters
-source ../bin/design_spec.dc
-
-# ==============================================
-# Setup Libraries
-source ../bin/lib_spec.dc
-
-# ==============================================
-# Setup IO Files
-
-append log_file ../log/$active_design "_pre.log"
-append pre_comp_db_file ../out/$design_name "_pre.db"
-sh rm -f $log_file
-
-# ==============================================
-# Setup Misc Variables
-
-set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
-
-# ==============================================
-# Read Design
-
-echo "+++++++++ Analyzing all design files ..." >> $log_file
-
-foreach module $design_files {
- echo "+++++++++ Reading: $module" >> $log_file
- echo +++++++++ Reading: $module
- set module_file_name ""
- append module_file_name $module ".v"
- analyze -f verilog $module_file_name >> $log_file
- elaborate $module >> $log_file
- }
-
-current_design $active_design
-
-echo "+++++++++ Linking Design ..." >> $log_file
-link >> $log_file
-
-echo "+++++++++ Uniquifying Design ..." >> $log_file
-uniquify >> $log_file
-
-echo "+++++++++ Checking Design ..." >> $log_file
-check_design >> $log_file
-
-# ==============================================
-# Save Design
-echo "+++++++++ Saving Design ..." >> $log_file
-write_file -hierarchy -format db -output $pre_comp_db_file
-
Index: trunk/bench/verilog/wb_mast_model.v
===================================================================
--- trunk/bench/verilog/wb_mast_model.v (revision 16)
+++ trunk/bench/verilog/wb_mast_model.v (nonexistent)
@@ -1,687 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE Master Model ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_mast_model.v,v 1.3 2002-02-01 01:55:44 rudi Exp $
-//
-// $Date: 2002-02-01 01:55:44 $
-// $Revision: 1.3 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.2 2001/09/07 15:34:36 rudi
-//
-// Changed reset to active high.
-//
-// Revision 1.1 2001/07/29 08:57:02 rudi
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.1.1.1 2001/03/19 13:11:34 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_model_defines.v"
-
-module wb_mast(clk, rst, adr, din, dout, cyc, stb, sel, we, ack, err, rty);
-
-input clk, rst;
-output [31:0] adr;
-input [31:0] din;
-output [31:0] dout;
-output cyc, stb;
-output [3:0] sel;
-output we;
-input ack, err, rty;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-parameter mem_size = 4096;
-
-reg [31:0] adr;
-reg [31:0] dout;
-reg cyc, stb;
-reg [3:0] sel;
-reg we;
-
-reg [31:0] rd_mem[mem_size:0];
-reg [31:0] wr_mem[mem_size:0];
-integer rd_cnt;
-integer wr_cnt;
-
-////////////////////////////////////////////////////////////////////
-//
-// Memory Logic
-//
-
-initial
- begin
- //adr = 32'hxxxx_xxxx;
- //adr = 0;
- adr = 32'hffff_ffff;
- dout = 32'hxxxx_xxxx;
- cyc = 0;
- stb = 0;
- sel = 4'hx;
- we = 1'hx;
- rd_cnt = 0;
- wr_cnt = 0;
- #1;
- $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)\n");
- end
-
-
-
-task mem_fill;
-
-integer n;
-begin
-rd_cnt = 0;
-wr_cnt = 0;
-for(n=0;n5000)
- begin
- $display("\n\n*************************************\n");
- $display("ERROR: Watch Dog Counter Expired\n");
- $display("*************************************\n\n\n");
- $finish;
- end
-
-always #5 clk = ~clk;
-
-/////////////////////////////////////////////////////////////////////
-//
-// WISHBONE DMA IP Core
-//
-
-
-// Module Prototype
-
-wb_dma_top
- #( 4'hb, // register file address
- 2'd1, // Number of priorities (4)
- `CH_COUNT, // Number of channels
- 4'hf,
- 4'hf,
- 4'hf,
- 4'hf,
- 4'hf,
- 4'hf,
- 4'hf,
- 4'hf
- )
- u0(
- .clk_i( clk ),
- .rst_i( rst ),
- .wb0s_data_i( wb0s_data_i ),
- .wb0s_data_o( wb0s_data_o ),
- .wb0_addr_i( wb0_addr_i ),
- .wb0_sel_i( wb0_sel_i ),
- .wb0_we_i( wb0_we_i ),
- .wb0_cyc_i( wb0_cyc_i ),
- .wb0_stb_i( wb0_stb_i ),
- .wb0_ack_o( wb0_ack_o ),
- .wb0_err_o( wb0_err_o ),
- .wb0_rty_o( wb0_rty_o ),
- .wb0m_data_i( wb0m_data_i ),
- .wb0m_data_o( wb0m_data_o ),
- .wb0_addr_o( wb0_addr_o ),
- .wb0_sel_o( wb0_sel_o ),
- .wb0_we_o( wb0_we_o ),
- .wb0_cyc_o( wb0_cyc_o ),
- .wb0_stb_o( wb0_stb_o ),
- .wb0_ack_i( wb0_ack_i ),
- .wb0_err_i( wb0_err_i ),
- .wb0_rty_i( wb0_rty_i ),
- .wb1s_data_i( wb1s_data_i ),
- .wb1s_data_o( wb1s_data_o ),
- .wb1_addr_i( wb1_addr_i ),
- .wb1_sel_i( wb1_sel_i ),
- .wb1_we_i( wb1_we_i ),
- .wb1_cyc_i( wb1_cyc_i ),
- .wb1_stb_i( wb1_stb_i ),
- .wb1_ack_o( wb1_ack_o ),
- .wb1_err_o( wb1_err_o ),
- .wb1_rty_o( wb1_rty_o ),
- .wb1m_data_i( wb1m_data_i ),
- .wb1m_data_o( wb1m_data_o ),
- .wb1_addr_o( wb1_addr_o ),
- .wb1_sel_o( wb1_sel_o ),
- .wb1_we_o( wb1_we_o ),
- .wb1_cyc_o( wb1_cyc_o ),
- .wb1_stb_o( wb1_stb_o ),
- .wb1_ack_i( wb1_ack_i ),
- .wb1_err_i( wb1_err_i ),
- .wb1_rty_i( wb1_rty_i ),
- .dma_req_i( req_i ),
- .dma_ack_o( ack_o ),
- .dma_nd_i( nd_i ),
- .dma_rest_i( rest_i ),
- .inta_o( inta_o ),
- .intb_o( intb_o )
- );
-
-wb_slv #(14) s0(
- .clk( clk ),
- .rst( ~rst ),
- .adr( wb0_addr_o ),
- .din( wb0s_data_o ),
- .dout( wb0s_data_i ),
- .cyc( wb0_cyc_o ),
- .stb( wb0_stb_o ),
- .sel( wb0_sel_o ),
- .we( wb0_we_o ),
- .ack( wb0_ack_i ),
- .err( wb0_err_i ),
- .rty( wb0_rty_i )
- );
-
-wb_slv #(14) s1(
- .clk( clk ),
- .rst( ~rst ),
- .adr( wb1_addr_o ),
- .din( wb1s_data_o ),
- .dout( wb1s_data_i ),
- .cyc( wb1_cyc_o ),
- .stb( wb1_stb_o ),
- .sel( wb1_sel_o ),
- .we( wb1_we_o ),
- .ack( wb1_ack_i ),
- .err( wb1_err_i ),
- .rty( wb1_rty_i )
- );
-
-wb_mast m0(
- .clk( clk ),
- .rst( ~rst ),
- .adr( wb0_addr_i ),
- .din( wb0m_data_o ),
- .dout( wb0m_data_i ),
- .cyc( wb0_cyc_i ),
- .stb( wb0_stb_i ),
- .sel( wb0_sel_i ),
- .we( wb0_we_i ),
- .ack( wb0_ack_o ),
- .err( wb0_err_o ),
- .rty( wb0_rty_o )
- );
-
-wb_mast m1(
- .clk( clk ),
- .rst( ~rst ),
- .adr( wb1_addr_i ),
- .din( wb1m_data_o ),
- .dout( wb1m_data_i ),
- .cyc( wb1_cyc_i ),
- .stb( wb1_stb_i ),
- .sel( wb1_sel_i ),
- .we( wb1_we_i ),
- .ack( wb1_ack_o ),
- .err( wb1_err_o ),
- .rty( wb1_rty_o )
- );
-
-`include "tests.v"
-
-endmodule
-
Index: trunk/bench/verilog/tests.v
===================================================================
--- trunk/bench/verilog/tests.v (revision 16)
+++ trunk/bench/verilog/tests.v (nonexistent)
@@ -1,2502 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// DMA Test Cases ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000 Rudolf Usselmann ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: tests.v,v 1.3 2001-09-07 15:34:36 rudi Exp $
-//
-// $Date: 2001-09-07 15:34:36 $
-// $Revision: 1.3 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.2 2001/08/15 05:40:29 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.1.1.1 2001/03/19 13:12:39 rudi
-// Initial Release
-//
-//
-//
-
-task sw_ext_desc1;
-input quick;
-
-integer quick, tot_sz_max, chunk_sz_max, del_max;
-
-reg [7:0] mode;
-reg [15:0] tot_sz;
-reg [15:0] chunk_sz;
-integer ii, n,del;
-reg [31:0] int_src, d0, d1;
-
-begin
-$display("\n\n");
-$display("*****************************************************");
-$display("*** SW DMA No Buffer Ext. Descr LL ... ***");
-$display("*****************************************************\n");
-
-rst = 1;
-repeat(10) @(posedge clk);
-rst = 0;
-repeat(10) @(posedge clk);
-
-if(quick)
- begin
- tot_sz_max = 32;
- del_max = 2;
- chunk_sz_max = 4;
- end
-else
- begin
- tot_sz_max = 128;
- del_max = 6;
- chunk_sz_max = 8;
- end
-
-
-mode = 1;
-tot_sz = 64;
-chunk_sz=3;
-del = 0;
-
-for(del=0;del8) tot_sz = tot_sz + 2;
-if(tot_sz>16) tot_sz = tot_sz + 2;
-if(tot_sz>32) tot_sz = tot_sz + 12;
-
-
-for(chunk_sz=0;chunk_sz0, ");
- 1: $write("Mode: 0->1, ");
- 2: $write("Mode: 1->0, ");
- 3: $write("Mode: 1->1, ");
- endcase
- $display("Total Size: %0d, Chunk Size: %0d, Slave Delay: %0d",
- tot_sz, chunk_sz, del);
-
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- s0.delay = del;
- s1.delay = del;
-
- s0.fill_mem(1);
- s1.fill_mem(1);
-
- s0.mem[0] = (32'h000c_0000 | (mode[1:0]<<16)) + tot_sz;
- s0.mem[1] = 32'h0000_0100;
- s0.mem[2] = 32'h0000_0400;
- s0.mem[3] = 32'h0000_0010;
-
- s0.mem[4] = (32'h001c_0000 | (mode[1:0]<<16)) + tot_sz;
- s0.mem[5] = 32'h0000_0100 + (tot_sz * 4);
- s0.mem[6] = 32'h0000_0400 + (tot_sz * 4);
- s0.mem[7] = 32'h0000_0000;
-
-
- s0.mem[8] = (32'h000c_0000 | (mode[1:0]<<16)) + tot_sz;
- s0.mem[9] = 32'h0000_0800;
- s0.mem[10] = 32'h0000_0c00;
- s0.mem[11] = 32'h0000_0030;
-
- s0.mem[12] = (32'h001c_0000 | (mode[1:0]<<16)) + tot_sz;
- s0.mem[13] = 32'h0000_0800 + (tot_sz * 4);
- s0.mem[14] = 32'h0000_0c00 + (tot_sz * 4);
- s0.mem[15] = 32'h0000_0000;
-
-
- m0.wb_wr1(`REG_BASE + `INT_MASKA,4'hf,32'hffff_ffff);
-
- m0.wb_wr1(`REG_BASE + `PTR0, 4'hf, 32'h0000_0020);
- m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz, 12'h0});
- m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0080);
- m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
-
- m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
- {15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
-
-
- m0.wb_wr1(`REG_BASE + `PTR1, 4'hf, 32'h0000_0000);
- m0.wb_wr1(`REG_BASE + `CH1_TXSZ,4'hf, {chunk_sz, 12'h0});
- m0.wb_wr1(`REG_BASE + `CH1_ADR0,4'hf,32'h0000_0080);
- m0.wb_wr1(`REG_BASE + `CH1_ADR1,4'hf,32'h0000_4000);
-
- m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
- {15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
-
-
-for(ii=0;ii<2;ii=ii+1)
-begin
- repeat(5) @(posedge clk);
- while(!inta_o) @(posedge clk);
-
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
- if(int_src[0])
- begin
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[9]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
- else d1=s0.mem[(s0.mem[10]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
- d0 = {24'h0064_089, 1'b1, mode[1:0], 1'b0};
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
-
-
- if(int_src[1])
- begin
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[1]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
- else d1=s0.mem[(s0.mem[2]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d1);
- d0 = {24'h0064_089, 1'b1, mode[1:0], 1'b0};
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
-
-end
-
- if(ack_cnt != ((tot_sz*4)+(4*2))*2 )
- begin
- $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
- ((tot_sz*4)+(4*2)), ack_cnt, $time);
- error_cnt = error_cnt + 1;
- end
-
- repeat(5) @(posedge clk);
-
-end
-end
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n\n");
-end
-
-
-endtask
-
-
-
-task arb_test1;
-
-reg [7:0] mode;
-reg [15:0] tot_sz;
-reg [15:0] chunk_sz0;
-reg [15:0] chunk_sz1;
-reg [15:0] chunk_sz2;
-reg [15:0] chunk_sz3;
-integer a,n,ptr;
-reg [31:0] d0,d1;
-reg [7:0] pri, order, finish;
-
-begin
-$display("\n\n");
-$display("*****************************************************");
-$display("*** SW DMA No Buffer 4 ch pri ... ***");
-$display("*****************************************************\n");
-
-mode = 0;
-tot_sz = 32;
-chunk_sz0=4;
-chunk_sz1=4;
-chunk_sz2=4;
-chunk_sz3=4;
-a=0;
-
-m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
-
-m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d0);
-
-for(mode=0;mode<4;mode=mode+1)
-for(a=0;a<17;a=a+1)
-begin
-
- chunk_sz0=4;
- chunk_sz1=4;
- chunk_sz2=4;
- chunk_sz3=4;
-
- s0.delay = 0;
- s1.delay = 0;
-
- case(a) // ch3 ch2 ch1 ch0
- 0:
- begin
- pri = 8'b10_10_10_10; // All equal 0,1,2,3
- order = {2'd0, 2'd1, 2'd2, 2'd3};
- end
-
- // One channel with High Priority
- // The other depend oon the ARB state
- 1:
- begin
- pri = 8'b00_00_00_10; // 3,1,0,2
- order = {2'b0, 2'd3, 2'd1, 2'd2};
- end
- 2:
- begin
- pri = 8'b00_00_10_00; // 2,3,0,1
- order = {2'd1, 2'd0, 2'd2, 2'd3};
- end
- 3:
- begin
- pri = 8'b00_10_00_00; // 1,0,2,3
- order = {2'd2, 2'd0, 2'd1, 2'd3};
- end
- 4:
- begin
- pri = 8'b10_00_00_00; // 0,3,1,2
- order = {2'd3, 2'd0, 2'd1, 2'd2};
- end
-
- // Specific order for all Channels
- 5:
- begin
- pri = 8'b10_00_01_11; // 3,0,2,1
- order = {2'd0, 2'd3, 2'd1, 2'd2};
- end
-
- 6:
- begin
- pri = 8'b00_10_11_01; // 2,1,3,0
- order = {2'd1, 2'd2, 2'd0, 2'd3};
- end
-
- 7:
- begin
- pri = 8'b00_11_01_10; // 1,3,2,0
- order = {2'd2, 2'd0, 2'd1, 2'd3};
- end
-
- 8:
- begin
- pri = 8'b00_01_10_11; // 3,2,1,0
- order = {2'd0, 2'd1, 2'd2, 2'd3};
- end
-
- // One channel with High Priority
- // The other depend oon the ARB state
- // Chunk Size varies
- // First channel small chunkc size
- 9:
- begin
- pri = 8'b00_00_00_10; // 3,1,0,2
- order = {2'd0, 2'd1, 2'd2, 2'd3};
- chunk_sz3=1;
- end
- 10:
- begin
- pri = 8'b00_00_10_00; // 2,0,1,3
- order = {2'd1, 2'd0, 2'd3, 2'd2};
- chunk_sz2=1;
- end
- 11:
- begin
- pri = 8'b00_10_00_00; // 1,0,2,3
- order = {2'd2, 2'd0, 2'd3, 2'd1};
- chunk_sz1=1;
- end
- 12:
- begin
- pri = 8'b10_00_00_00; // 0,2,3,1
- order = {2'd3, 2'd1, 2'd2, 2'd0};
- chunk_sz0=1;
- end
-
- // First channel large chunkc size
- 13:
- begin
- pri = 8'b00_00_00_10; // 3,0,2,1
- order = {2'd0, 2'd3, 2'd1, 2'd2};
- chunk_sz3=8;
- end
- 14:
- begin
- pri = 8'b00_00_10_00; // 2,0,3,1
- order = {2'd1, 2'd2, 2'd0, 2'd3};
- chunk_sz2=8;
- end
- 15:
- begin
- pri = 8'b00_10_00_00; // 1,0,3,2
- order = {2'd2, 2'd1, 2'd0, 2'd3};
- chunk_sz1=8;
- end
- 16:
- begin
- pri = 8'b10_00_00_00; // 0,2,3,1
- order = {2'd3, 2'd0, 2'd1, 2'd2};
- chunk_sz0=8;
- end
-
- endcase
-
-case(mode)
- 0: $write("Mode: 0->0, ");
- 1: $write("Mode: 0->1, ");
- 2: $write("Mode: 1->0, ");
- 3: $write("Mode: 1->1, ");
-endcase
-$display("a: %0d", a);
-
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- s0.fill_mem(1);
- s1.fill_mem(1);
-
- m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
- {17'h00000, pri[1:0], 6'h0, 4'b0011, mode[1:0], 1'b0});
-
- m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
- {17'h00000, pri[3:2], 6'h0, 4'b0011, mode[1:0], 1'b0});
-
- m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf,
- {17'h00000, pri[5:4], 6'h0, 4'b0011, mode[1:0], 1'b0});
-
- m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf,
- {17'h00000, pri[7:6], 6'h0, 4'b0011, mode[1:0], 1'b0});
-
- m0.wb_wr1(`REG_BASE + `INT_MASKA,4'hf,32'hffff_ffff);
-
- m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz0, tot_sz});
- m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0000);
- m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
-
- m0.wb_wr1(`REG_BASE + `CH1_TXSZ,4'hf, {chunk_sz1, tot_sz});
- m0.wb_wr1(`REG_BASE + `CH1_ADR0,4'hf,32'h0000_0080);
- m0.wb_wr1(`REG_BASE + `CH1_ADR1,4'hf,32'h0000_4080);
-
- m0.wb_wr1(`REG_BASE + `CH2_TXSZ,4'hf, {chunk_sz2, tot_sz});
- m0.wb_wr1(`REG_BASE + `CH2_ADR0,4'hf,32'h0000_0100);
- m0.wb_wr1(`REG_BASE + `CH2_ADR1,4'hf,32'h0000_4100);
-
- m0.wb_wr1(`REG_BASE + `CH3_TXSZ,4'hf, {chunk_sz3, tot_sz});
- m0.wb_wr1(`REG_BASE + `CH3_ADR0,4'hf,32'h0000_0180);
- m0.wb_wr1(`REG_BASE + `CH3_ADR1,4'hf,32'h0000_4180);
-
-
- m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
- {12'h000, 3'b010, 1'b0, 1'b0, pri[1:0], 6'h0, 4'b0011, mode[1:0], 1'b1});
-
- //{15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
-
- m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
- {12'h000, 3'b010, 1'b0, 1'b0, pri[3:2], 6'h0, 4'b0011, mode[1:0], 1'b1});
-
- m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf,
- {12'h000, 3'b010, 1'b0, 1'b0, pri[5:4], 6'h0, 4'b0011, mode[1:0], 1'b1});
-
-
-
- m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf,
- {12'h0000, 3'b010, 1'b0, 1'b0, pri[7:6], 6'h0, 4'b0011, mode[1:0], 1'b1});
-
- repeat(1) @(posedge clk);
-
- // Wait for interrupt, Check completion order
-
- ptr=0;
- finish = 8'hxx;
-
- while(ptr!=4)
- begin
- while(!inta_o) @(posedge clk);
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d0);
-
- if(d0[0]) d0[1:0] = 0;
- else
- if(d0[1]) d0[1:0] = 1;
- else
- if(d0[2]) d0[1:0] = 2;
- else
- if(d0[3]) d0[1:0] = 3;
-
- case(ptr)
- 0: finish[7:6] = d0[1:0];
- 1: finish[5:4] = d0[1:0];
- 2: finish[3:2] = d0[1:0];
- 3: finish[1:0] = d0[1:0];
- endcase
-
- case(d0[1:0])
- 0: m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
- 1: m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
- 2: m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
- 3: m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
- endcase
-
- ptr=ptr+1;
- repeat(4) @(posedge clk);
- end
-
-
- if(finish !== order)
- begin
- $display("ERROR: Completion Order[%0d] Mismatch: Expected: %b, Got: %b (%0t)",
- a, order, finish, $time);
- error_cnt = error_cnt + 1;
- end
-
-
- for(n=0;n0, chunk_size: %0d", chunk_sz);
- 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
- 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
- 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
-endcase
-
-for(rep=0;rep<4;rep=rep+1)
- begin
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- if(del==4) del = 10;
-
- s0.delay = del;
- s1.delay = del;
-
- if(chunk_sz==0) k = 1;
- else
- begin
- k = tot_sz/chunk_sz;
- if((k*chunk_sz) != tot_sz) k = k + 1;
- end
-
- s0.fill_mem(1);
- s1.fill_mem(1);
-
- fork
- begin
-
- for(m=0;m < k;m=m+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[0] = 1;
- while(!ack_o[0]) @(posedge clk);
- #1;
- req_i[0] = 0;
- end
-
- end
-
- begin
- repeat(1) @(posedge clk);
- while(!u0.dma_done_all) @(posedge clk);
-
-/*
- repeat(5) @(posedge clk);
- while(!inta_o) @(posedge clk);
-
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d1);
- d0 = 32'h0000_0002;
- if( d1 !== d0 )
- begin
- $display("ERROR: INT_SRC Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
-
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
- d0 = {24'h0000_081, 1'b1, mode[1:0], 1'b0};
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
-*/
-
-
- for(n=0;n4) tot_sz = tot_sz + 4;
-if(tot_sz>16) tot_sz = tot_sz + 12;
-if(tot_sz>64) tot_sz = tot_sz + 48;
-
-for(del=0;del0, chunk_size: %0d", chunk_sz);
- 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
- 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
- 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
- endcase
-
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- if(chunk_sz==0) k = 1;
- else
- begin
- k = tot_sz/chunk_sz;
- if((k*chunk_sz) != tot_sz) k = k + 1;
- end
-
- k = k * 2;
-
- fork
- begin
- repeat(5) @(posedge clk);
- for(m0=0;m0 < k;m0=m0+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[0] = 1;
- while(!ack_o[0]) @(posedge clk);
- #1;
- req_i[0] = 0;
- end
- end
-
- begin
- repeat(5) @(posedge clk);
- for(m1=0;m1 < k;m1=m1+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[1] = 1;
- while(!ack_o[1]) @(posedge clk);
- #1;
- req_i[1] = 0;
- end
- end
-
- begin
- repeat(5) @(posedge clk);
- for(m2=0;m2 < k;m2=m2+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[2] = 1;
- while(!ack_o[2]) @(posedge clk);
- #1;
- req_i[2] = 0;
- end
- end
-
- begin
- repeat(5) @(posedge clk);
- for(m3=0;m3 < k;m3=m3+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[3] = 1;
- while(!ack_o[3]) @(posedge clk);
- #1;
- req_i[3] = 0;
- end
- end
-
- for(i=0;i<4;i=i)
- begin
- repeat(5) @(posedge clk);
- while(!inta_o) @(posedge clk);
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
- if(int_src[0])
- begin
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[1]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
- else d1=s0.mem[(s0.mem[2]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[1])
- begin
- m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[9]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
- else d1=s0.mem[(s0.mem[10]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[2])
- begin
- m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[17]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
- else d1=s0.mem[(s0.mem[18]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[3])
- begin
- m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[25]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[26]>>2) + n ];
- else d1=s0.mem[(s0.mem[26]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- end
-
- join
-
-
- if(ack_cnt != ((tot_sz*2*4*2)+(4*4*2)) )
- begin
- $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
- ((tot_sz*2*4*2)+(4*4*2)), ack_cnt, $time);
- error_cnt = error_cnt + 1;
- end
-
- repeat(5) @(posedge clk);
-
-end
-end
-
- s0.delay = 0;
- s1.delay = 0;
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n\n");
-end
-
-endtask
-
-
-
-
-
-
-task hw_dma3;
-input quick;
-
-integer quick, tot_sz_max, chunk_sz_max, del_max;
-
-reg [7:0] mode;
-reg [15:0] chunk_sz, tot_sz;
-integer odd, i, iz, n,m0, m1, m2, m3, k, k1, rep,del;
-reg [31:0] int_src, d0,d1;
-
-begin
-$display("\n\n");
-$display("*****************************************************");
-$display("*** HW DMA Ext Descr. 4 Channels ND Test ... ***");
-$display("*****************************************************\n");
-
-case(quick)
- default:
- begin
- del_max = 6;
- chunk_sz_max = 8;
- end
- 1:
- begin
- del_max = 4;
- chunk_sz_max = 4;
- end
- 2:
- begin
- del_max = 3;
- chunk_sz_max = 4;
- end
-endcase
-
-mode = 0;
-tot_sz = 64;
-chunk_sz=4;
-del = 0;
-
-m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
-m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
-
-m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
-
-for(del=0;del0, chunk_size: %0d", chunk_sz);
- 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
- 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
- 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
- endcase
-
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- if(chunk_sz==0) k = 1;
- else
- begin
- k = tot_sz/chunk_sz;
- if((k*chunk_sz) != tot_sz) k = k + 1;
- if((k*chunk_sz) != tot_sz) odd = 1;
- else odd = 0;
- end
-
- if(chunk_sz==0) k1 = 4;
- else
- begin
- k1 = tot_sz/chunk_sz;
- if((k1*chunk_sz) != tot_sz) k1 = k1 + 1;
- k1 = k1 * 4;
- end
-
- k1 = k * 4;
- iz = k;
-
- fork
- begin
- repeat(5) @(posedge clk);
- for(m0=0;m0 < k1+1;m0=m0+1)
- begin
- repeat(del) @(posedge clk);
- #1;
-
- if(m0==iz) nd_i[0] = 1;
- else
- if(m0==(iz*2)) nd_i[0] = 1;
- else
- if(m0==(iz*3)) nd_i[0] = 1;
- else
- if(m0==(iz*4)) nd_i[0] = 1;
- else req_i[0] = 1;
-
- if(nd_i[0]==1)
- begin
- @(posedge clk);
- #1;
- nd_i[0] = 0;
- repeat(1) @(posedge clk);
- #1;
- req_i[0] = 1;
- end
-
- while(!ack_o[0] & (m0 < k1)) @(posedge clk);
- #1;
- req_i[0] = 0;
- nd_i[0] = 0;
- end
- end
-
- begin
- repeat(5) @(posedge clk);
- for(m1=0;m1 < k1;m1=m1+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- if(m1==k-1) nd_i[1] = 1;
- if(m1==(k*2)-1) nd_i[1] = 1;
- if(m1==(k*3)-1) nd_i[1] = 1;
- if(m1==(k*4)-1) nd_i[1] = 1;
- req_i[1] = 1;
- while(!ack_o[1]) @(posedge clk);
- #1;
- req_i[1] = 0;
- nd_i[1] = 0;
- end
- end
-
- begin
- repeat(5) @(posedge clk);
- for(m2=0;m2 < k1+1;m2=m2+1)
- begin
- repeat(del) @(posedge clk);
- #1;
-
- if(m2==k) nd_i[2] = 1;
- else
- if(m2==(k*2)) nd_i[2] = 1;
- else
- if(m2==(k*3)) nd_i[2] = 1;
- else
- if(m2==(k*4)) nd_i[2] = 1;
- else req_i[2] = 1;
-
- if(nd_i[2]==1)
- begin
- @(posedge clk);
- #1;
- nd_i[2] = 0;
- repeat(1) @(posedge clk);
- #1;
- req_i[2] = 1;
- end
-
- while(!ack_o[2] & (m2 < k1)) @(posedge clk);
- #1;
- req_i[2] = 0;
- nd_i[2] = 0;
- end
- end
-
-
- begin
- repeat(5) @(posedge clk);
- for(m3=0;m3 < k1;m3=m3+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- if(m3==k-1) nd_i[3] = 1;
- if(m3==(k*2)-1) nd_i[3] = 1;
- if(m3==(k*3)-1) nd_i[3] = 1;
- if(m3==(k*4)-1) nd_i[3] = 1;
- req_i[3] = 1;
- while(!ack_o[3]) @(posedge clk);
- #1;
- req_i[3] = 0;
- nd_i[3] = 0;
- end
- end
-
-
- for(i=0;i<4;i=i)
- begin
- repeat(5) @(posedge clk);
- while(!inta_o) @(posedge clk);
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
- if(int_src[0])
- begin
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[1]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
- else d1=s0.mem[(s0.mem[2]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- repeat(1) @(posedge clk);
- d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0: CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
- end
-
- if(int_src[1])
- begin
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[17]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
- else d1=s0.mem[(s0.mem[18]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- repeat(1) @(posedge clk);
- d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
- m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
- repeat(1) @(posedge clk);
- case(chunk_sz)
- default: d1 = 32'h0000_00c0;
- 3: d1 = 32'h0000_00be;
- 5: d1 = 32'h0000_00bf;
- 6: d1 = 32'h0000_00be;
- 7: d1 = 32'h0000_00ba;
- endcase
- d0 = s0.mem[16];
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: DESC_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
- end
-
- if(int_src[2])
- begin
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[33]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[34]>>2) + n ];
- else d1=s0.mem[(s0.mem[34]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- repeat(1) @(posedge clk);
- d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
- m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH2: CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
- end
-
- if(int_src[3])
- begin
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[49]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[50]>>2) + n ];
- else d1=s0.mem[(s0.mem[50]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- repeat(1) @(posedge clk);
- d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
- m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH3: CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
- repeat(1) @(posedge clk);
- case(chunk_sz)
- default: d1 = 32'h0000_00c0;
- 3: d1 = 32'h0000_00be;
- 5: d1 = 32'h0000_00bf;
- 6: d1 = 32'h0000_00be;
- 7: d1 = 32'h0000_00ba;
- endcase
- d0 = s0.mem[48];
- repeat(1) @(posedge clk);
- if( d1 !== d0 )
- begin
- $display("ERROR: CH3: DESC_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d1, d0, $time);
- error_cnt = error_cnt + 1;
- end
-
- end
-
- end
- join
-
- // CH0: 528 Acks
- // CH1: 532 Acks
- // CH2: 528 Acks
- // CH3: 532 Acks
-
- case(chunk_sz)
- default: k = 2120;
- 3: k = 2184;
- 5: k = 2152;
- 6: k = 2184;
- 7: k = 2312;
- endcase
-
- if(ack_cnt != k )
- begin
- $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
- k, ack_cnt, $time);
- error_cnt = error_cnt + 1;
- end
-
- repeat(5) @(posedge clk);
-
-end
-
-s0.delay = 0;
-s1.delay = 0;
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n\n");
-end
-
-endtask
-
-
-
-
-
-task sw_dma1;
-input quick;
-
-integer quick, tot_sz_max, chunk_sz_max;
-reg [7:0] mode;
-reg [15:0] chunk_sz, tot_sz;
-integer n;
-reg [31:0] d0,d1;
-
-begin
-$display("\n\n");
-$display("*****************************************************");
-$display("*** SW DMA No Buffer (tx & chunk size test) ... ***");
-$display("*****************************************************\n");
-
-case(quick)
- default:
- begin
- tot_sz_max = 1024;
- chunk_sz_max = 256;
- end
- 1:
- begin
- tot_sz_max = 128;
- chunk_sz_max = 64;
- end
- 2:
- begin
- tot_sz_max = 32;
- chunk_sz_max = 4;
- end
-endcase
-
-mode = 1;
-tot_sz = 2048;
-tot_sz = 16;
-chunk_sz=4;
-
-for(mode=0;mode<4;mode=mode+1)
-for(tot_sz=1;tot_sz64) tot_sz=tot_sz+4;
-if(tot_sz>128) tot_sz=tot_sz+12;
-case(mode)
- 0: $display("Mode: 0->0, tot_size: %0d", tot_sz);
- 1: $display("Mode: 0->1, tot_size: %0d", tot_sz);
- 2: $display("Mode: 1->0, tot_size: %0d", tot_sz);
- 3: $display("Mode: 1->1, tot_size: %0d", tot_sz);
-endcase
-
-for(chunk_sz=0;chunk_sz128) tot_sz=tot_sz+4;
-
-$write("Slv 0 delay: %0d, Slv 1 Delay: %0d - ",del0, del1);
-case(mode)
- 0: $display("Mode: 0->0, tot_size: %0d", tot_sz);
- 1: $display("Mode: 0->1, tot_size: %0d", tot_sz);
- 2: $display("Mode: 1->0, tot_size: %0d", tot_sz);
- 3: $display("Mode: 1->1, tot_size: %0d", tot_sz);
-endcase
-
-for(chunk_sz=0;chunk_sz 4)) chunk_sz = chunk_sz + 1;
-
- s0.delay = del0;
- s1.delay = del1;
-
- ack_cnt_clr = 1;
- @(posedge clk);
- ack_cnt_clr = 0;
-
- s0.fill_mem(1);
- s1.fill_mem(1);
- m0.wb_wr1(`REG_BASE + `INT_MASKB,4'hf,32'hffff_ffff);
- m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz, tot_sz});
- m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0000);
- m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
- m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
- {12'h0000, 3'b010, 1'b0, 11'h000, 2'b11, mode[1:0], 1'b1});
-
- repeat(5) @(posedge clk);
- while(!intb_o) @(posedge clk);
-
- m0.wb_rd1(`REG_BASE + `INT_SRCB, 4'hf, d1);
- d0 = 32'h0000_0001;
- if( d1 !== d0 )
- begin
- $display("ERROR: INT_SRC Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
-
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
- d0 = {24'h0064_081, 1'b1, mode[1:0], 1'b0};
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
- d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
-
- for(n=0;n0 Read Test .... ***");
-$display("*****************************************************\n");
-
-s0.fill_mem(1);
-s1.fill_mem(1);
-d=0;
-n=16;
-
-for(d=0;d<16;d=d+1)
- begin
- $display("INFO: PT10 RD4, delay %0d",d);
- for(n=0;n<512;n=n+4)
- begin
- m0.wb_rd4(n<<2,4'hf,d,d0,d1,d2,d3);
-
- if( (s1.mem[n+0] !== d0) | (s1.mem[n+1] !== d1) |
- (s1.mem[n+2] !== d2) | (s1.mem[n+3] !== d3) )
- begin
- $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
- $display("D1: Expected: %x, Got %x", s1.mem[n+1], d1);
- $display("D2: Expected: %x, Got %x", s1.mem[n+2], d2);
- $display("D3: Expected: %x, Got %x", s1.mem[n+3], d3);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
-
-$display("\nINFO: PT10 RD1");
- for(n=0;n<512;n=n+1)
- begin
- m0.wb_rd1(n<<2,4'hf,d0);
-
- if( s1.mem[n] !== d0 )
- begin
- $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s1.mem[n], d0);
- error_cnt = error_cnt + 1;
- end
- end
-
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n");
-end
-endtask
-
-
-task pt01_rd;
-
-// Misc Variables
-reg [31:0] d0,d1,d2,d3;
-integer d,n;
-
-begin
-$display("\n");
-$display("*****************************************************");
-$display("*** Running Path Through 0->1 Read Test .... ***");
-$display("*****************************************************\n");
-
-s0.fill_mem(1);
-s1.fill_mem(1);
-
-d=1;
-n=0;
-for(d=0;d<16;d=d+1)
- begin
- $display("INFO: PT01 RD4, delay %0d",d);
- for(n=0;n<512;n=n+4)
- begin
- m1.wb_rd4(n<<2,4'hf,d,d0,d1,d2,d3);
- @(posedge clk);
-
- if( (s0.mem[n+0] !== d0) | (s0.mem[n+1] !== d1) |
- (s0.mem[n+2] !== d2) | (s0.mem[n+3] !== d3) )
- begin
- $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
- $display("D1: Expected: %x, Got %x", s0.mem[n+1], d1);
- $display("D2: Expected: %x, Got %x", s0.mem[n+2], d2);
- $display("D3: Expected: %x, Got %x", s0.mem[n+3], d3);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
-$display("\nINFO: PT01 RD1");
- for(n=0;n<512;n=n+1)
- begin
- m1.wb_rd1(n<<2,4'hf,d0);
-
- if( s0.mem[n+0] !== d0 )
- begin
- $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
- error_cnt = error_cnt + 1;
- end
- end
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n");
-end
-endtask
-
-
-
-
-task pt10_wr;
-
-// Misc Variables
-reg [31:0] d0,d1,d2,d3;
-integer d,n;
-
-begin
-
-$display("\n");
-$display("*****************************************************");
-$display("*** Running Path Through 1->0 Write Test .... ***");
-$display("*****************************************************\n");
-
-
-s0.fill_mem(1);
-s1.fill_mem(1);
-d=1;
-n=0;
-for(d=0;d<16;d=d+1)
- begin
- $display("INFO: PT10 WR4, delay %0d",d);
- for(n=0;n<512;n=n+4)
- begin
-
- d0 = $random;
- d1 = $random;
- d2 = $random;
- d3 = $random;
- m0.wb_wr4(n<<2,4'hf,d,d0,d1,d2,d3);
- @(posedge clk);
-
- if( (s1.mem[n+0] !== d0) | (s1.mem[n+1] !== d1) |
- (s1.mem[n+2] !== d2) | (s1.mem[n+3] !== d3) )
- begin
- $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
- $display("D1: Expected: %x, Got %x", s1.mem[n+1], d1);
- $display("D2: Expected: %x, Got %x", s1.mem[n+2], d2);
- $display("D3: Expected: %x, Got %x", s1.mem[n+3], d3);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
-$display("\nINFO: PT10 WR1");
- for(n=0;n<512;n=n+1)
- begin
- d0 = $random;
- m0.wb_wr1(n<<2,4'hf,d0);
- @(posedge clk);
-
- if( s1.mem[n+0] !== d0 )
- begin
- $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
- error_cnt = error_cnt + 1;
- end
- end
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n");
-end
-endtask
-
-
-
-task pt01_wr;
-
-// Misc Variables
-reg [31:0] d0,d1,d2,d3;
-integer d,n;
-
-begin
-
-$display("\n");
-$display("*****************************************************");
-$display("*** Running Path Through 0->1 Write Test .... ***");
-$display("*****************************************************\n");
-
-
-s0.fill_mem(1);
-s1.fill_mem(1);
-
-d=1;
-n=0;
-for(d=0;d<16;d=d+1)
- begin
- $display("INFO: PT01 WR4, delay %0d",d);
- for(n=0;n<512;n=n+4)
- begin
-
- d0 = $random;
- d1 = $random;
- d2 = $random;
- d3 = $random;
- m1.wb_wr4(n<<2,4'hf,d,d0,d1,d2,d3);
- @(posedge clk);
-
- if( (s0.mem[n+0] !== d0) | (s0.mem[n+1] !== d1) |
- (s0.mem[n+2] !== d2) | (s0.mem[n+3] !== d3) )
- begin
- $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
- $display("D1: Expected: %x, Got %x", s0.mem[n+1], d1);
- $display("D2: Expected: %x, Got %x", s0.mem[n+2], d2);
- $display("D3: Expected: %x, Got %x", s0.mem[n+3], d3);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- $display("\nINFO: PT01 WR1");
- for(n=0;n<512;n=n+1)
- begin
- d0 = $random;
- m1.wb_wr1(n<<2,4'hf,d0);
- @(posedge clk);
-
- if( s0.mem[n+0] !== d0 )
- begin
- $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
- $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
- error_cnt = error_cnt + 1;
- end
- end
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n");
-end
-endtask
-
-
-
-
-
-
-
-task show_errors;
-
-begin
-
-$display("\n");
-$display(" +--------------------+");
-$display(" | Total ERRORS: %0d |", error_cnt);
-$display(" +--------------------+");
-
-end
-endtask
-
-
-
-task hw_dma4;
-input quick;
-
-integer quick, tot_sz_max, chunk_sz_max, del_max;
-
-reg [7:0] mode;
-reg [15:0] chunk_sz, tot_sz;
-integer i, n,m0, m1, m2, m3, k,rep,del;
-reg [31:0] int_src, d0,d1;
-reg do_rest;
-integer rest_del;
-integer rest_del_t;
-
-begin
-$display("\n\n");
-$display("*****************************************************");
-$display("*** HW DMA No Buffer Ext Descr. REST Test ... ***");
-$display("*****************************************************\n");
-
-case(quick)
- default:
- begin
- del_max = 6;
- tot_sz_max = 200;
- chunk_sz_max = 8;
- end
- 1:
- begin
- del_max = 4;
- tot_sz_max = 128;
- chunk_sz_max = 4;
- end
- 2:
- begin
- del_max = 3;
- tot_sz_max = 32;
- chunk_sz_max = 4;
- end
-endcase
-
-mode = 1;
-tot_sz = 32;
-chunk_sz=7;
-del = 0;
-do_rest = 1;
-rest_del = 7;
-
- m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
- m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
- m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
- m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
-
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
-for(tot_sz=1;tot_sz4) tot_sz = tot_sz + 4;
-if(tot_sz>16) tot_sz = tot_sz + 12;
-if(tot_sz>64) tot_sz = tot_sz + 48;
-
-for(del=0;del= k) rest_del_t = k - 1;
- else rest_del_t = rest_del;
-
- k = k * 2;
-
-
- $write("Total Size: %0d, Delay: %0d REST_del: %0d ",tot_sz, del, rest_del_t);
- case(mode)
- 0: $display("Mode: 0->0, chunk_size: %0d", chunk_sz);
- 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
- 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
- 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
- endcase
-
-
-
-//$display("k=%0d",k);
-
- fork
- begin // Hardware Handshake Channel 0
- repeat(5) @(posedge clk);
- for(m0=0;m0 < k;m0=m0+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[0] = 1;
- while(!ack_o[0]) @(posedge clk);
- #1;
- req_i[0] = 0;
- end
- end
-
- begin // Hardware Handshake Channel 1
- repeat(5) @(posedge clk);
- for(m1=0;m1 < (k + rest_del_t + 1);m1=m1+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[1] = 1;
- while(!ack_o[1]) @(posedge clk);
- #1;
- req_i[1] = 0;
-//$display("m1=%0d",m1);
- if( (do_rest==1) & (m1==rest_del_t) )
- //if( do_rest==1 )
- begin
-//$display("Asserting Restart ...");
- @(posedge clk);
- #1;
- rest_i[1] = 1;
- @(posedge clk);
- #1;
- rest_i[1] = 0;
- do_rest = 0;
- @(posedge clk);
- @(posedge clk);
- end
-
- end
- end
-
- begin // Hardware Handshake Channel 2
- repeat(5) @(posedge clk);
- for(m2=0;m2 < k;m2=m2+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[2] = 1;
- while(!ack_o[2]) @(posedge clk);
- #1;
- req_i[2] = 0;
- end
- end
-
- begin // Hardware Handshake Channel 3
- repeat(5) @(posedge clk);
- for(m3=0;m3 < k;m3=m3+1)
- begin
- repeat(del) @(posedge clk);
- #1;
- req_i[3] = 1;
- while(!ack_o[3]) @(posedge clk);
- #1;
- req_i[3] = 0;
- end
- end
-
- for(i=0;i<4;i=i)
- begin
- repeat(5) @(posedge clk);
- while(!inta_o) @(posedge clk);
- m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
-
- if(int_src[0])
- begin
- m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[1]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
- else d1=s0.mem[(s0.mem[2]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[1])
- begin
- m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[9]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
- else d1=s0.mem[(s0.mem[10]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[2])
- begin
- m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[17]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
- else d1=s0.mem[(s0.mem[18]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- if(int_src[3])
- begin
- m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
- i=i+1;
- for(n=0;n>2) + n ];
- else d0=s0.mem[(s0.mem[25]>>2) + n ];
- if(mode[0]) d1=s1.mem[(s0.mem[26]>>2) + n ];
- else d1=s0.mem[(s0.mem[26]>>2) + n ];
-
- if( d1 !== d0 )
- begin
- $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
- n, d0, d1, $time);
- error_cnt = error_cnt + 1;
- end
- end
- end
-
- end
-
- join
-
-
-/*
- if(ack_cnt != ((tot_sz*2*4*2)+(4*4*2)) )
- begin
- $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
- ((tot_sz*2*4*2)+(4*4*2)), ack_cnt, $time);
- error_cnt = error_cnt + 1;
- end
-*/
-
- repeat(5) @(posedge clk);
-
-end
-end
-
- s0.delay = 0;
- s1.delay = 0;
-
-show_errors;
-$display("*****************************************************");
-$display("*** Test DONE ... ***");
-$display("*****************************************************\n\n");
-end
-
-endtask
-
-
-
-
Index: trunk/bench/verilog/wb_model_defines.v
===================================================================
--- trunk/bench/verilog/wb_model_defines.v (revision 16)
+++ trunk/bench/verilog/wb_model_defines.v (nonexistent)
@@ -1,63 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE Model Definitions ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_model_defines.v,v 1.2 2002-02-01 01:55:44 rudi Exp $
-//
-// $Date: 2002-02-01 01:55:44 $
-// $Revision: 1.2 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $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.1.1.1 2001/03/19 13:12:48 rudi
-// Initial Release
-//
-//
-//
-
-`timescale 1ns / 10ps
Index: trunk/rtl/verilog/wb_dma_wb_if.v
===================================================================
--- trunk/rtl/verilog/wb_dma_wb_if.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_wb_if.v (nonexistent)
@@ -1,219 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA WISHBONE Interface ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_wb_if.v,v 1.3 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.3 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.2 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// Revision 1.1 2001/07/29 08:57:02 rudi
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:54 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_wb_if(clk, rst,
-
- // Wishbone
- wbs_data_i, wbs_data_o, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i,
- wb_stb_i, wb_ack_o, wb_err_o, wb_rty_o,
- wbm_data_i, wbm_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o,
- wb_stb_o, wb_ack_i, wb_err_i, wb_rty_i,
-
- // Master
- mast_go, mast_we, mast_adr, mast_din, mast_dout, mast_err,
- mast_drdy, mast_wait, pt_sel_i, mast_pt_in, mast_pt_out,
-
- // Slave
- slv_adr, slv_din, slv_dout, slv_re, slv_we,
- pt_sel_o, slv_pt_out, slv_pt_in
-
- );
-
-parameter rf_addr = 0;
-
-input clk, rst;
-
-// --------------------------------------
-// WISHBONE INTERFACE
-
-// Slave Interface
-input [31:0] wbs_data_i;
-output [31:0] wbs_data_o;
-input [31:0] wb_addr_i;
-input [3:0] wb_sel_i;
-input wb_we_i;
-input wb_cyc_i;
-input wb_stb_i;
-output wb_ack_o;
-output wb_err_o;
-output wb_rty_o;
-
-// Master Interface
-input [31:0] wbm_data_i;
-output [31:0] wbm_data_o;
-output [31:0] wb_addr_o;
-output [3:0] wb_sel_o;
-output wb_we_o;
-output wb_cyc_o;
-output wb_stb_o;
-input wb_ack_i;
-input wb_err_i;
-input wb_rty_i;
-
-// --------------------------------------
-// MASTER INTERFACE
-input mast_go; // Perform a Master Cycle (as long as this
- // line is asserted)
-input mast_we; // Read/Write
-input [31:0] mast_adr; // Address for the transfer
-input [31:0] mast_din; // Internal Input Data
-output [31:0] mast_dout; // Internal Output Data
-output mast_err; // Indicates an error has occurred
-
-output mast_drdy; // Indicated that either data is available
- // during a read, or that the master can accept
- // the next data during a write
-input mast_wait; // Tells the master to insert wait cycles
- // because data can not be accepted/provided
-
-// Pass Through Interface
-input pt_sel_i; // Pass Through Mode Selected
-input [70:0] mast_pt_in; // Grouped WISHBONE inputs
-output [34:0] mast_pt_out; // Grouped WISHBONE outputs
-
-// --------------------------------------
-// Slave INTERFACE
-
-// This is the register File Interface
-output [31:0] slv_adr; // Slave Address
-input [31:0] slv_din; // Slave Input Data
-output [31:0] slv_dout; // Slave Output Data
-output slv_re; // Slave Read Enable
-output slv_we; // Slave Write Enable
-
-// Pass through Interface
-output pt_sel_o; // Pass Through Mode Active
-output [70:0] slv_pt_out; // Grouped WISHBONE out signals
-input [34:0] slv_pt_in; // Grouped WISHBONE in signals
-
-////////////////////////////////////////////////////////////////////
-//
-// Modules
-//
-
-wb_dma_wb_mast u0(
- .clk( clk ),
- .rst( rst ),
- .wb_data_i( wbs_data_i ),
- .wb_data_o( wbs_data_o ),
- .wb_addr_o( wb_addr_o ),
- .wb_sel_o( wb_sel_o ),
- .wb_we_o( wb_we_o ),
- .wb_cyc_o( wb_cyc_o ),
- .wb_stb_o( wb_stb_o ),
- .wb_ack_i( wb_ack_i ),
- .wb_err_i( wb_err_i ),
- .wb_rty_i( wb_rty_i ),
- .mast_go( mast_go ),
- .mast_we( mast_we ),
- .mast_adr( mast_adr ),
- .mast_din( mast_din ),
- .mast_dout( mast_dout ),
- .mast_err( mast_err ),
- .mast_drdy( mast_drdy ),
- .mast_wait( mast_wait ),
- .pt_sel( pt_sel_i ),
- .mast_pt_in( mast_pt_in ),
- .mast_pt_out( mast_pt_out )
- );
-
-
-wb_dma_wb_slv #(rf_addr) u1(
- .clk( clk ),
- .rst( rst ),
- .wb_data_i( wbm_data_i ),
- .wb_data_o( wbm_data_o ),
- .wb_addr_i( wb_addr_i ),
- .wb_sel_i( wb_sel_i ),
- .wb_we_i( wb_we_i ),
- .wb_cyc_i( wb_cyc_i ),
- .wb_stb_i( wb_stb_i ),
- .wb_ack_o( wb_ack_o ),
- .wb_err_o( wb_err_o ),
- .wb_rty_o( wb_rty_o ),
- .slv_adr( slv_adr ),
- .slv_din( slv_din ),
- .slv_dout( slv_dout ),
- .slv_re( slv_re ),
- .slv_we( slv_we ),
- .pt_sel( pt_sel_o ),
- .slv_pt_out( slv_pt_out ),
- .slv_pt_in( slv_pt_in )
- );
-
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_rf.v
===================================================================
--- trunk/rtl/verilog/wb_dma_rf.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_rf.v (nonexistent)
@@ -1,1856 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Register File ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_rf.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.4 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.4 2001/06/14 08:50:46 rudi
-//
-// Changed name of channel register file module.
-//
-// Revision 1.3 2001/06/13 02:26:48 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:11 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_rf(clk, rst,
-
- // WISHBONE Access
- wb_rf_adr, wb_rf_din, wb_rf_dout, wb_rf_re, wb_rf_we,
-
- // WISHBONE Interrupt outputs
- inta_o, intb_o,
-
- // DMA Registers Outputs
- pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1,
- pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1,
- pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1,
- pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1,
- pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1,
- pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1,
- pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1,
- pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1,
- pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1,
- pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1,
- pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1,
- pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1,
- pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1,
- pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1,
- pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1,
- pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1,
- pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1,
- pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1,
- pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1,
- pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1,
- pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1,
- pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1,
- pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1,
- pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1,
- pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1,
- pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1,
- pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1,
- pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1,
- pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1,
- pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1,
- pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1,
-
- // DMA Registers Write Back Channel Select
- ch_sel, ndnr,
-
- // DMA Engine Status
- pause_req, paused, dma_abort, dma_busy, dma_err, dma_done, dma_done_all,
-
- // DMA Engine Reg File Update ctrl signals
- de_csr, de_txsz, de_adr0, de_adr1,
- de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, de_fetch_descr, dma_rest,
- ptr_set
- );
-
-////////////////////////////////////////////////////////////////////
-//
-// Module Parameters
-//
-
-// chXX_conf = { CBUF, ED, ARS, EN }
-parameter [3:0] ch0_conf = 4'h1;
-parameter [3:0] ch1_conf = 4'h0;
-parameter [3:0] ch2_conf = 4'h0;
-parameter [3:0] ch3_conf = 4'h0;
-parameter [3:0] ch4_conf = 4'h0;
-parameter [3:0] ch5_conf = 4'h0;
-parameter [3:0] ch6_conf = 4'h0;
-parameter [3:0] ch7_conf = 4'h0;
-parameter [3:0] ch8_conf = 4'h0;
-parameter [3:0] ch9_conf = 4'h0;
-parameter [3:0] ch10_conf = 4'h0;
-parameter [3:0] ch11_conf = 4'h0;
-parameter [3:0] ch12_conf = 4'h0;
-parameter [3:0] ch13_conf = 4'h0;
-parameter [3:0] ch14_conf = 4'h0;
-parameter [3:0] ch15_conf = 4'h0;
-parameter [3:0] ch16_conf = 4'h0;
-parameter [3:0] ch17_conf = 4'h0;
-parameter [3:0] ch18_conf = 4'h0;
-parameter [3:0] ch19_conf = 4'h0;
-parameter [3:0] ch20_conf = 4'h0;
-parameter [3:0] ch21_conf = 4'h0;
-parameter [3:0] ch22_conf = 4'h0;
-parameter [3:0] ch23_conf = 4'h0;
-parameter [3:0] ch24_conf = 4'h0;
-parameter [3:0] ch25_conf = 4'h0;
-parameter [3:0] ch26_conf = 4'h0;
-parameter [3:0] ch27_conf = 4'h0;
-parameter [3:0] ch28_conf = 4'h0;
-parameter [3:0] ch29_conf = 4'h0;
-parameter [3:0] ch30_conf = 4'h0;
-
-////////////////////////////////////////////////////////////////////
-//
-// Module IOs
-//
-
-input clk, rst;
-
-// WISHBONE Access
-input [7:0] wb_rf_adr;
-input [31:0] wb_rf_din;
-output [31:0] wb_rf_dout;
-input wb_rf_re;
-input wb_rf_we;
-
-// WISHBONE Interrupt outputs
-output inta_o, intb_o;
-
-// Channel Registers Inputs
-output [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
-output [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
-output [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
-output [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
-output [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
-output [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
-output [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
-output [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
-output [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
-output [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
-output [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
-output [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
-output [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
-output [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
-output [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
-output [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
-output [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
-output [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
-output [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
-output [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
-output [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
-output [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
-output [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
-output [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
-output [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
-output [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
-output [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
-output [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
-output [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
-output [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
-output [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
-
-input [4:0] ch_sel; // Write Back Channel Select
-input [30:0] ndnr; // Next Descriptor No Request
-
-// DMA Engine Abort
-output dma_abort;
-
-// DMA Engine Status
-output pause_req;
-input paused;
-input dma_busy, dma_err, dma_done, dma_done_all;
-
-// DMA Engine Reg File Update ctrl signals
-input [31:0] de_csr;
-input [11:0] de_txsz;
-input [31:0] de_adr0;
-input [31:0] de_adr1;
-input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
-input de_fetch_descr;
-input [30:0] dma_rest;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires and Registers
-//
-
-reg [31:0] wb_rf_dout;
-reg inta_o, intb_o;
-reg [30:0] int_maska_r, int_maskb_r;
-wire [31:0] int_maska, int_maskb;
-wire [31:0] int_srca, int_srcb;
-wire int_maska_we, int_maskb_we;
-wire [30:0] ch_int;
-wire csr_we;
-wire [31:0] csr;
-reg [7:0] csr_r;
-
-wire [30:0] ch_stop;
-wire [30:0] ch_dis;
-
-wire [31:0] ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
-wire [31:0] ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
-wire [31:0] ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
-wire [31:0] ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
-wire [31:0] ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
-wire [31:0] ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
-wire [31:0] ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
-wire [31:0] ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
-wire [31:0] ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
-wire [31:0] ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
-wire [31:0] ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
-wire [31:0] ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
-wire [31:0] ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
-wire [31:0] ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
-wire [31:0] ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
-wire [31:0] ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
-wire [31:0] ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
-wire [31:0] ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
-wire [31:0] ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
-wire [31:0] ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
-wire [31:0] ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
-wire [31:0] ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
-wire [31:0] ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
-wire [31:0] ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
-wire [31:0] ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
-wire [31:0] ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
-wire [31:0] ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
-wire [31:0] ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
-wire [31:0] ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
-wire [31:0] ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
-wire [31:0] ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
-
-wire [31:0] sw_pointer0, sw_pointer1, sw_pointer2, sw_pointer3;
-wire [31:0] sw_pointer4, sw_pointer5, sw_pointer6, sw_pointer7;
-wire [31:0] sw_pointer8, sw_pointer9, sw_pointer10, sw_pointer11;
-wire [31:0] sw_pointer12, sw_pointer13, sw_pointer14, sw_pointer15;
-wire [31:0] sw_pointer16, sw_pointer17, sw_pointer18, sw_pointer19;
-wire [31:0] sw_pointer20, sw_pointer21, sw_pointer22, sw_pointer23;
-wire [31:0] sw_pointer24, sw_pointer25, sw_pointer26, sw_pointer27;
-wire [31:0] sw_pointer28, sw_pointer29, sw_pointer30;
-
-////////////////////////////////////////////////////////////////////
-//
-// Aliases
-//
-
-assign int_maska = {1'h0, int_maska_r};
-assign int_maskb = {1'h0, int_maskb_r};
-assign csr = {31'h0, paused};
-
-////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-assign dma_abort = |ch_stop;
-assign pause_req = csr_r[0];
-
-////////////////////////////////////////////////////////////////////
-//
-// WISHBONE Register Read Logic
-//
-
-always @(posedge clk)
- case(wb_rf_adr) // synopsys parallel_case full_case
- 8'h0: wb_rf_dout <= #1 csr;
- 8'h1: wb_rf_dout <= #1 int_maska;
- 8'h2: wb_rf_dout <= #1 int_maskb;
- 8'h3: wb_rf_dout <= #1 int_srca;
- 8'h4: wb_rf_dout <= #1 int_srcb;
-
- 8'h8: wb_rf_dout <= #1 ch0_csr;
- 8'h9: wb_rf_dout <= #1 ch0_txsz;
- 8'ha: wb_rf_dout <= #1 ch0_adr0;
- 8'hb: wb_rf_dout <= #1 ch0_am0;
- 8'hc: wb_rf_dout <= #1 ch0_adr1;
- 8'hd: wb_rf_dout <= #1 ch0_am1;
- 8'he: wb_rf_dout <= #1 pointer0;
- 8'hf: wb_rf_dout <= #1 sw_pointer0;
-
- 8'h10: wb_rf_dout <= #1 ch1_conf[0] ? ch1_csr : 32'h0;
- 8'h11: wb_rf_dout <= #1 ch1_conf[0] ? ch1_txsz : 32'h0;
- 8'h12: wb_rf_dout <= #1 ch1_conf[0] ? ch1_adr0 : 32'h0;
- 8'h13: wb_rf_dout <= #1 ch1_conf[0] ? ch1_am0 : 32'h0;
- 8'h14: wb_rf_dout <= #1 ch1_conf[0] ? ch1_adr1 : 32'h0;
- 8'h15: wb_rf_dout <= #1 ch1_conf[0] ? ch1_am1 : 32'h0;
- 8'h16: wb_rf_dout <= #1 ch1_conf[0] ? pointer1 : 32'h0;
- 8'h17: wb_rf_dout <= #1 ch1_conf[0] ? sw_pointer1 : 32'h0;
-
- 8'h18: wb_rf_dout <= #1 ch2_conf[0] ? ch2_csr : 32'h0;
- 8'h19: wb_rf_dout <= #1 ch2_conf[0] ? ch2_txsz : 32'h0;
- 8'h1a: wb_rf_dout <= #1 ch2_conf[0] ? ch2_adr0 : 32'h0;
- 8'h1b: wb_rf_dout <= #1 ch2_conf[0] ? ch2_am0 : 32'h0;
- 8'h1c: wb_rf_dout <= #1 ch2_conf[0] ? ch2_adr1 : 32'h0;
- 8'h1d: wb_rf_dout <= #1 ch2_conf[0] ? ch2_am1 : 32'h0;
- 8'h1e: wb_rf_dout <= #1 ch2_conf[0] ? pointer2 : 32'h0;
- 8'h1f: wb_rf_dout <= #1 ch2_conf[0] ? sw_pointer2 : 32'h0;
-
- 8'h20: wb_rf_dout <= #1 ch3_conf[0] ? ch3_csr : 32'h0;
- 8'h21: wb_rf_dout <= #1 ch3_conf[0] ? ch3_txsz : 32'h0;
- 8'h22: wb_rf_dout <= #1 ch3_conf[0] ? ch3_adr0 : 32'h0;
- 8'h23: wb_rf_dout <= #1 ch3_conf[0] ? ch3_am0 : 32'h0;
- 8'h24: wb_rf_dout <= #1 ch3_conf[0] ? ch3_adr1 : 32'h0;
- 8'h25: wb_rf_dout <= #1 ch3_conf[0] ? ch3_am1 : 32'h0;
- 8'h26: wb_rf_dout <= #1 ch3_conf[0] ? pointer3 : 32'h0;
- 8'h27: wb_rf_dout <= #1 ch3_conf[0] ? sw_pointer3 : 32'h0;
-
- 8'h28: wb_rf_dout <= #1 ch4_conf[0] ? ch4_csr : 32'h0;
- 8'h29: wb_rf_dout <= #1 ch4_conf[0] ? ch4_txsz : 32'h0;
- 8'h2a: wb_rf_dout <= #1 ch4_conf[0] ? ch4_adr0 : 32'h0;
- 8'h2b: wb_rf_dout <= #1 ch4_conf[0] ? ch4_am0 : 32'h0;
- 8'h2c: wb_rf_dout <= #1 ch4_conf[0] ? ch4_adr1 : 32'h0;
- 8'h2d: wb_rf_dout <= #1 ch4_conf[0] ? ch4_am1 : 32'h0;
- 8'h2e: wb_rf_dout <= #1 ch4_conf[0] ? pointer4 : 32'h0;
- 8'h2f: wb_rf_dout <= #1 ch4_conf[0] ? sw_pointer4 : 32'h0;
-
- 8'h30: wb_rf_dout <= #1 ch5_conf[0] ? ch5_csr : 32'h0;
- 8'h31: wb_rf_dout <= #1 ch5_conf[0] ? ch5_txsz : 32'h0;
- 8'h32: wb_rf_dout <= #1 ch5_conf[0] ? ch5_adr0 : 32'h0;
- 8'h33: wb_rf_dout <= #1 ch5_conf[0] ? ch5_am0 : 32'h0;
- 8'h34: wb_rf_dout <= #1 ch5_conf[0] ? ch5_adr1 : 32'h0;
- 8'h35: wb_rf_dout <= #1 ch5_conf[0] ? ch5_am1 : 32'h0;
- 8'h36: wb_rf_dout <= #1 ch5_conf[0] ? pointer5 : 32'h0;
- 8'h37: wb_rf_dout <= #1 ch5_conf[0] ? sw_pointer5 : 32'h0;
-
- 8'h38: wb_rf_dout <= #1 ch6_conf[0] ? ch6_csr : 32'h0;
- 8'h39: wb_rf_dout <= #1 ch6_conf[0] ? ch6_txsz : 32'h0;
- 8'h3a: wb_rf_dout <= #1 ch6_conf[0] ? ch6_adr0 : 32'h0;
- 8'h3b: wb_rf_dout <= #1 ch6_conf[0] ? ch6_am0 : 32'h0;
- 8'h3c: wb_rf_dout <= #1 ch6_conf[0] ? ch6_adr1 : 32'h0;
- 8'h3d: wb_rf_dout <= #1 ch6_conf[0] ? ch6_am1 : 32'h0;
- 8'h3e: wb_rf_dout <= #1 ch6_conf[0] ? pointer6 : 32'h0;
- 8'h3f: wb_rf_dout <= #1 ch6_conf[0] ? sw_pointer6 : 32'h0;
-
- 8'h40: wb_rf_dout <= #1 ch7_conf[0] ? ch7_csr : 32'h0;
- 8'h41: wb_rf_dout <= #1 ch7_conf[0] ? ch7_txsz : 32'h0;
- 8'h42: wb_rf_dout <= #1 ch7_conf[0] ? ch7_adr0 : 32'h0;
- 8'h43: wb_rf_dout <= #1 ch7_conf[0] ? ch7_am0 : 32'h0;
- 8'h44: wb_rf_dout <= #1 ch7_conf[0] ? ch7_adr1 : 32'h0;
- 8'h45: wb_rf_dout <= #1 ch7_conf[0] ? ch7_am1 : 32'h0;
- 8'h46: wb_rf_dout <= #1 ch7_conf[0] ? pointer7 : 32'h0;
- 8'h47: wb_rf_dout <= #1 ch7_conf[0] ? sw_pointer7 : 32'h0;
-
- 8'h48: wb_rf_dout <= #1 ch8_conf[0] ? ch8_csr : 32'h0;
- 8'h49: wb_rf_dout <= #1 ch8_conf[0] ? ch8_txsz : 32'h0;
- 8'h4a: wb_rf_dout <= #1 ch8_conf[0] ? ch8_adr0 : 32'h0;
- 8'h4b: wb_rf_dout <= #1 ch8_conf[0] ? ch8_am0 : 32'h0;
- 8'h4c: wb_rf_dout <= #1 ch8_conf[0] ? ch8_adr1 : 32'h0;
- 8'h4d: wb_rf_dout <= #1 ch8_conf[0] ? ch8_am1 : 32'h0;
- 8'h4e: wb_rf_dout <= #1 ch8_conf[0] ? pointer8 : 32'h0;
- 8'h4f: wb_rf_dout <= #1 ch8_conf[0] ? sw_pointer8 : 32'h0;
-
- 8'h50: wb_rf_dout <= #1 ch9_conf[0] ? ch9_csr : 32'h0;
- 8'h51: wb_rf_dout <= #1 ch9_conf[0] ? ch9_txsz : 32'h0;
- 8'h52: wb_rf_dout <= #1 ch9_conf[0] ? ch9_adr0 : 32'h0;
- 8'h53: wb_rf_dout <= #1 ch9_conf[0] ? ch9_am0 : 32'h0;
- 8'h54: wb_rf_dout <= #1 ch9_conf[0] ? ch9_adr1 : 32'h0;
- 8'h55: wb_rf_dout <= #1 ch9_conf[0] ? ch9_am1 : 32'h0;
- 8'h56: wb_rf_dout <= #1 ch9_conf[0] ? pointer9 : 32'h0;
- 8'h57: wb_rf_dout <= #1 ch9_conf[0] ? sw_pointer9 : 32'h0;
-
- 8'h58: wb_rf_dout <= #1 ch10_conf[0] ? ch10_csr : 32'h0;
- 8'h59: wb_rf_dout <= #1 ch10_conf[0] ? ch10_txsz : 32'h0;
- 8'h5a: wb_rf_dout <= #1 ch10_conf[0] ? ch10_adr0 : 32'h0;
- 8'h5b: wb_rf_dout <= #1 ch10_conf[0] ? ch10_am0 : 32'h0;
- 8'h5c: wb_rf_dout <= #1 ch10_conf[0] ? ch10_adr1 : 32'h0;
- 8'h5d: wb_rf_dout <= #1 ch10_conf[0] ? ch10_am1 : 32'h0;
- 8'h5e: wb_rf_dout <= #1 ch10_conf[0] ? pointer10 : 32'h0;
- 8'h5f: wb_rf_dout <= #1 ch10_conf[0] ? sw_pointer10 : 32'h0;
-
- 8'h60: wb_rf_dout <= #1 ch11_conf[0] ? ch11_csr : 32'h0;
- 8'h61: wb_rf_dout <= #1 ch11_conf[0] ? ch11_txsz : 32'h0;
- 8'h62: wb_rf_dout <= #1 ch11_conf[0] ? ch11_adr0 : 32'h0;
- 8'h63: wb_rf_dout <= #1 ch11_conf[0] ? ch11_am0 : 32'h0;
- 8'h64: wb_rf_dout <= #1 ch11_conf[0] ? ch11_adr1 : 32'h0;
- 8'h65: wb_rf_dout <= #1 ch11_conf[0] ? ch11_am1 : 32'h0;
- 8'h66: wb_rf_dout <= #1 ch11_conf[0] ? pointer11 : 32'h0;
- 8'h67: wb_rf_dout <= #1 ch11_conf[0] ? sw_pointer11 : 32'h0;
-
- 8'h68: wb_rf_dout <= #1 ch12_conf[0] ? ch12_csr : 32'h0;
- 8'h69: wb_rf_dout <= #1 ch12_conf[0] ? ch12_txsz : 32'h0;
- 8'h6a: wb_rf_dout <= #1 ch12_conf[0] ? ch12_adr0 : 32'h0;
- 8'h6b: wb_rf_dout <= #1 ch12_conf[0] ? ch12_am0 : 32'h0;
- 8'h6c: wb_rf_dout <= #1 ch12_conf[0] ? ch12_adr1 : 32'h0;
- 8'h6d: wb_rf_dout <= #1 ch12_conf[0] ? ch12_am1 : 32'h0;
- 8'h6e: wb_rf_dout <= #1 ch12_conf[0] ? pointer12 : 32'h0;
- 8'h6f: wb_rf_dout <= #1 ch12_conf[0] ? sw_pointer12 : 32'h0;
-
- 8'h70: wb_rf_dout <= #1 ch13_conf[0] ? ch13_csr : 32'h0;
- 8'h71: wb_rf_dout <= #1 ch13_conf[0] ? ch13_txsz : 32'h0;
- 8'h72: wb_rf_dout <= #1 ch13_conf[0] ? ch13_adr0 : 32'h0;
- 8'h73: wb_rf_dout <= #1 ch13_conf[0] ? ch13_am0 : 32'h0;
- 8'h74: wb_rf_dout <= #1 ch13_conf[0] ? ch13_adr1 : 32'h0;
- 8'h75: wb_rf_dout <= #1 ch13_conf[0] ? ch13_am1 : 32'h0;
- 8'h76: wb_rf_dout <= #1 ch13_conf[0] ? pointer13 : 32'h0;
- 8'h77: wb_rf_dout <= #1 ch13_conf[0] ? sw_pointer13 : 32'h0;
-
- 8'h78: wb_rf_dout <= #1 ch14_conf[0] ? ch14_csr : 32'h0;
- 8'h79: wb_rf_dout <= #1 ch14_conf[0] ? ch14_txsz : 32'h0;
- 8'h7a: wb_rf_dout <= #1 ch14_conf[0] ? ch14_adr0 : 32'h0;
- 8'h7b: wb_rf_dout <= #1 ch14_conf[0] ? ch14_am0 : 32'h0;
- 8'h7c: wb_rf_dout <= #1 ch14_conf[0] ? ch14_adr1 : 32'h0;
- 8'h7d: wb_rf_dout <= #1 ch14_conf[0] ? ch14_am1 : 32'h0;
- 8'h7e: wb_rf_dout <= #1 ch14_conf[0] ? pointer14 : 32'h0;
- 8'h7f: wb_rf_dout <= #1 ch14_conf[0] ? sw_pointer14 : 32'h0;
-
- 8'h80: wb_rf_dout <= #1 ch15_conf[0] ? ch15_csr : 32'h0;
- 8'h81: wb_rf_dout <= #1 ch15_conf[0] ? ch15_txsz : 32'h0;
- 8'h82: wb_rf_dout <= #1 ch15_conf[0] ? ch15_adr0 : 32'h0;
- 8'h83: wb_rf_dout <= #1 ch15_conf[0] ? ch15_am0 : 32'h0;
- 8'h84: wb_rf_dout <= #1 ch15_conf[0] ? ch15_adr1 : 32'h0;
- 8'h85: wb_rf_dout <= #1 ch15_conf[0] ? ch15_am1 : 32'h0;
- 8'h86: wb_rf_dout <= #1 ch15_conf[0] ? pointer15 : 32'h0;
- 8'h87: wb_rf_dout <= #1 ch15_conf[0] ? sw_pointer15 : 32'h0;
-
- 8'h88: wb_rf_dout <= #1 ch16_conf[0] ? ch16_csr : 32'h0;
- 8'h89: wb_rf_dout <= #1 ch16_conf[0] ? ch16_txsz : 32'h0;
- 8'h8a: wb_rf_dout <= #1 ch16_conf[0] ? ch16_adr0 : 32'h0;
- 8'h8b: wb_rf_dout <= #1 ch16_conf[0] ? ch16_am0 : 32'h0;
- 8'h8c: wb_rf_dout <= #1 ch16_conf[0] ? ch16_adr1 : 32'h0;
- 8'h8d: wb_rf_dout <= #1 ch16_conf[0] ? ch16_am1 : 32'h0;
- 8'h8e: wb_rf_dout <= #1 ch16_conf[0] ? pointer16 : 32'h0;
- 8'h8f: wb_rf_dout <= #1 ch16_conf[0] ? sw_pointer16 : 32'h0;
-
- 8'h90: wb_rf_dout <= #1 ch17_conf[0] ? ch17_csr : 32'h0;
- 8'h91: wb_rf_dout <= #1 ch17_conf[0] ? ch17_txsz : 32'h0;
- 8'h92: wb_rf_dout <= #1 ch17_conf[0] ? ch17_adr0 : 32'h0;
- 8'h93: wb_rf_dout <= #1 ch17_conf[0] ? ch17_am0 : 32'h0;
- 8'h94: wb_rf_dout <= #1 ch17_conf[0] ? ch17_adr1 : 32'h0;
- 8'h95: wb_rf_dout <= #1 ch17_conf[0] ? ch17_am1 : 32'h0;
- 8'h96: wb_rf_dout <= #1 ch17_conf[0] ? pointer17 : 32'h0;
- 8'h97: wb_rf_dout <= #1 ch17_conf[0] ? sw_pointer17 : 32'h0;
-
- 8'h98: wb_rf_dout <= #1 ch18_conf[0] ? ch18_csr : 32'h0;
- 8'h99: wb_rf_dout <= #1 ch18_conf[0] ? ch18_txsz : 32'h0;
- 8'h9a: wb_rf_dout <= #1 ch18_conf[0] ? ch18_adr0 : 32'h0;
- 8'h9b: wb_rf_dout <= #1 ch18_conf[0] ? ch18_am0 : 32'h0;
- 8'h9c: wb_rf_dout <= #1 ch18_conf[0] ? ch18_adr1 : 32'h0;
- 8'h9d: wb_rf_dout <= #1 ch18_conf[0] ? ch18_am1 : 32'h0;
- 8'h9e: wb_rf_dout <= #1 ch18_conf[0] ? pointer18 : 32'h0;
- 8'h9f: wb_rf_dout <= #1 ch18_conf[0] ? sw_pointer18 : 32'h0;
-
- 8'ha0: wb_rf_dout <= #1 ch19_conf[0] ? ch19_csr : 32'h0;
- 8'ha1: wb_rf_dout <= #1 ch19_conf[0] ? ch19_txsz : 32'h0;
- 8'ha2: wb_rf_dout <= #1 ch19_conf[0] ? ch19_adr0 : 32'h0;
- 8'ha3: wb_rf_dout <= #1 ch19_conf[0] ? ch19_am0 : 32'h0;
- 8'ha4: wb_rf_dout <= #1 ch19_conf[0] ? ch19_adr1 : 32'h0;
- 8'ha5: wb_rf_dout <= #1 ch19_conf[0] ? ch19_am1 : 32'h0;
- 8'ha6: wb_rf_dout <= #1 ch19_conf[0] ? pointer19 : 32'h0;
- 8'ha7: wb_rf_dout <= #1 ch19_conf[0] ? sw_pointer19 : 32'h0;
-
- 8'ha8: wb_rf_dout <= #1 ch20_conf[0] ? ch20_csr : 32'h0;
- 8'ha9: wb_rf_dout <= #1 ch20_conf[0] ? ch20_txsz : 32'h0;
- 8'haa: wb_rf_dout <= #1 ch20_conf[0] ? ch20_adr0 : 32'h0;
- 8'hab: wb_rf_dout <= #1 ch20_conf[0] ? ch20_am0 : 32'h0;
- 8'hac: wb_rf_dout <= #1 ch20_conf[0] ? ch20_adr1 : 32'h0;
- 8'had: wb_rf_dout <= #1 ch20_conf[0] ? ch20_am1 : 32'h0;
- 8'hae: wb_rf_dout <= #1 ch20_conf[0] ? pointer20 : 32'h0;
- 8'haf: wb_rf_dout <= #1 ch20_conf[0] ? sw_pointer20 : 32'h0;
-
- 8'hb0: wb_rf_dout <= #1 ch21_conf[0] ? ch21_csr : 32'h0;
- 8'hb1: wb_rf_dout <= #1 ch21_conf[0] ? ch21_txsz : 32'h0;
- 8'hb2: wb_rf_dout <= #1 ch21_conf[0] ? ch21_adr0 : 32'h0;
- 8'hb3: wb_rf_dout <= #1 ch21_conf[0] ? ch21_am0 : 32'h0;
- 8'hb4: wb_rf_dout <= #1 ch21_conf[0] ? ch21_adr1 : 32'h0;
- 8'hb5: wb_rf_dout <= #1 ch21_conf[0] ? ch21_am1 : 32'h0;
- 8'hb6: wb_rf_dout <= #1 ch21_conf[0] ? pointer21 : 32'h0;
- 8'hb7: wb_rf_dout <= #1 ch21_conf[0] ? sw_pointer21 : 32'h0;
-
- 8'hb8: wb_rf_dout <= #1 ch22_conf[0] ? ch22_csr : 32'h0;
- 8'hb9: wb_rf_dout <= #1 ch22_conf[0] ? ch22_txsz : 32'h0;
- 8'hba: wb_rf_dout <= #1 ch22_conf[0] ? ch22_adr0 : 32'h0;
- 8'hbb: wb_rf_dout <= #1 ch22_conf[0] ? ch22_am0 : 32'h0;
- 8'hbc: wb_rf_dout <= #1 ch22_conf[0] ? ch22_adr1 : 32'h0;
- 8'hbd: wb_rf_dout <= #1 ch22_conf[0] ? ch22_am1 : 32'h0;
- 8'hbe: wb_rf_dout <= #1 ch22_conf[0] ? pointer22 : 32'h0;
- 8'hbf: wb_rf_dout <= #1 ch22_conf[0] ? sw_pointer22 : 32'h0;
-
- 8'hc0: wb_rf_dout <= #1 ch23_conf[0] ? ch23_csr : 32'h0;
- 8'hc1: wb_rf_dout <= #1 ch23_conf[0] ? ch23_txsz : 32'h0;
- 8'hc2: wb_rf_dout <= #1 ch23_conf[0] ? ch23_adr0 : 32'h0;
- 8'hc3: wb_rf_dout <= #1 ch23_conf[0] ? ch23_am0 : 32'h0;
- 8'hc4: wb_rf_dout <= #1 ch23_conf[0] ? ch23_adr1 : 32'h0;
- 8'hc5: wb_rf_dout <= #1 ch23_conf[0] ? ch23_am1 : 32'h0;
- 8'hc6: wb_rf_dout <= #1 ch23_conf[0] ? pointer23 : 32'h0;
- 8'hc7: wb_rf_dout <= #1 ch23_conf[0] ? sw_pointer23 : 32'h0;
-
- 8'hc8: wb_rf_dout <= #1 ch24_conf[0] ? ch24_csr : 32'h0;
- 8'hc9: wb_rf_dout <= #1 ch24_conf[0] ? ch24_txsz : 32'h0;
- 8'hca: wb_rf_dout <= #1 ch24_conf[0] ? ch24_adr0 : 32'h0;
- 8'hcb: wb_rf_dout <= #1 ch24_conf[0] ? ch24_am0 : 32'h0;
- 8'hcc: wb_rf_dout <= #1 ch24_conf[0] ? ch24_adr1 : 32'h0;
- 8'hcd: wb_rf_dout <= #1 ch24_conf[0] ? ch24_am1 : 32'h0;
- 8'hce: wb_rf_dout <= #1 ch24_conf[0] ? pointer24 : 32'h0;
- 8'hcf: wb_rf_dout <= #1 ch24_conf[0] ? sw_pointer24 : 32'h0;
-
- 8'hd0: wb_rf_dout <= #1 ch25_conf[0] ? ch25_csr : 32'h0;
- 8'hd1: wb_rf_dout <= #1 ch25_conf[0] ? ch25_txsz : 32'h0;
- 8'hd2: wb_rf_dout <= #1 ch25_conf[0] ? ch25_adr0 : 32'h0;
- 8'hd3: wb_rf_dout <= #1 ch25_conf[0] ? ch25_am0 : 32'h0;
- 8'hd4: wb_rf_dout <= #1 ch25_conf[0] ? ch25_adr1 : 32'h0;
- 8'hd5: wb_rf_dout <= #1 ch25_conf[0] ? ch25_am1 : 32'h0;
- 8'hd6: wb_rf_dout <= #1 ch25_conf[0] ? pointer25 : 32'h0;
- 8'hd7: wb_rf_dout <= #1 ch25_conf[0] ? sw_pointer25 : 32'h0;
-
- 8'hd8: wb_rf_dout <= #1 ch26_conf[0] ? ch26_csr : 32'h0;
- 8'hd9: wb_rf_dout <= #1 ch26_conf[0] ? ch26_txsz : 32'h0;
- 8'hda: wb_rf_dout <= #1 ch26_conf[0] ? ch26_adr0 : 32'h0;
- 8'hdb: wb_rf_dout <= #1 ch26_conf[0] ? ch26_am0 : 32'h0;
- 8'hdc: wb_rf_dout <= #1 ch26_conf[0] ? ch26_adr1 : 32'h0;
- 8'hdd: wb_rf_dout <= #1 ch26_conf[0] ? ch26_am1 : 32'h0;
- 8'hde: wb_rf_dout <= #1 ch26_conf[0] ? pointer26 : 32'h0;
- 8'hdf: wb_rf_dout <= #1 ch26_conf[0] ? sw_pointer26 : 32'h0;
-
- 8'he0: wb_rf_dout <= #1 ch27_conf[0] ? ch27_csr : 32'h0;
- 8'he1: wb_rf_dout <= #1 ch27_conf[0] ? ch27_txsz : 32'h0;
- 8'he2: wb_rf_dout <= #1 ch27_conf[0] ? ch27_adr0 : 32'h0;
- 8'he3: wb_rf_dout <= #1 ch27_conf[0] ? ch27_am0 : 32'h0;
- 8'he4: wb_rf_dout <= #1 ch27_conf[0] ? ch27_adr1 : 32'h0;
- 8'he5: wb_rf_dout <= #1 ch27_conf[0] ? ch27_am1 : 32'h0;
- 8'he6: wb_rf_dout <= #1 ch27_conf[0] ? pointer27 : 32'h0;
- 8'he7: wb_rf_dout <= #1 ch27_conf[0] ? sw_pointer27 : 32'h0;
-
- 8'he8: wb_rf_dout <= #1 ch28_conf[0] ? ch28_csr : 32'h0;
- 8'he9: wb_rf_dout <= #1 ch28_conf[0] ? ch28_txsz : 32'h0;
- 8'hea: wb_rf_dout <= #1 ch28_conf[0] ? ch28_adr0 : 32'h0;
- 8'heb: wb_rf_dout <= #1 ch28_conf[0] ? ch28_am0 : 32'h0;
- 8'hec: wb_rf_dout <= #1 ch28_conf[0] ? ch28_adr1 : 32'h0;
- 8'hed: wb_rf_dout <= #1 ch28_conf[0] ? ch28_am1 : 32'h0;
- 8'hee: wb_rf_dout <= #1 ch28_conf[0] ? pointer28 : 32'h0;
- 8'hef: wb_rf_dout <= #1 ch28_conf[0] ? sw_pointer28 : 32'h0;
-
- 8'hf0: wb_rf_dout <= #1 ch29_conf[0] ? ch29_csr : 32'h0;
- 8'hf1: wb_rf_dout <= #1 ch29_conf[0] ? ch29_txsz : 32'h0;
- 8'hf2: wb_rf_dout <= #1 ch29_conf[0] ? ch29_adr0 : 32'h0;
- 8'hf3: wb_rf_dout <= #1 ch29_conf[0] ? ch29_am0 : 32'h0;
- 8'hf4: wb_rf_dout <= #1 ch29_conf[0] ? ch29_adr1 : 32'h0;
- 8'hf5: wb_rf_dout <= #1 ch29_conf[0] ? ch29_am1 : 32'h0;
- 8'hf6: wb_rf_dout <= #1 ch29_conf[0] ? pointer29 : 32'h0;
- 8'hf7: wb_rf_dout <= #1 ch29_conf[0] ? sw_pointer29 : 32'h0;
-
- 8'hf8: wb_rf_dout <= #1 ch30_conf[0] ? ch30_csr : 32'h0;
- 8'hf9: wb_rf_dout <= #1 ch30_conf[0] ? ch30_txsz : 32'h0;
- 8'hfa: wb_rf_dout <= #1 ch30_conf[0] ? ch30_adr0 : 32'h0;
- 8'hfb: wb_rf_dout <= #1 ch30_conf[0] ? ch30_am0 : 32'h0;
- 8'hfc: wb_rf_dout <= #1 ch30_conf[0] ? ch30_adr1 : 32'h0;
- 8'hfd: wb_rf_dout <= #1 ch30_conf[0] ? ch30_am1 : 32'h0;
- 8'hfe: wb_rf_dout <= #1 ch30_conf[0] ? pointer30 : 32'h0;
- 8'hff: wb_rf_dout <= #1 ch30_conf[0] ? sw_pointer30 : 32'h0;
-
- endcase
-
-
-////////////////////////////////////////////////////////////////////
-//
-// WISHBONE Register Write Logic
-// And DMA Engine register Update Logic
-//
-
-// Global Registers
-assign csr_we = wb_rf_we & (wb_rf_adr == 8'h0);
-assign int_maska_we = wb_rf_we & (wb_rf_adr == 8'h1);
-assign int_maskb_we = wb_rf_we & (wb_rf_adr == 8'h2);
-
-// ---------------------------------------------------
-
-always @(posedge clk or negedge rst)
- if(!rst) csr_r <= #1 8'h0;
- else
- if(csr_we) csr_r <= #1 wb_rf_din[7:0];
-
-// ---------------------------------------------------
-// INT_MASK
-always @(posedge clk or negedge rst)
- if(!rst) int_maska_r <= #1 31'h0;
- else
- if(int_maska_we) int_maska_r <= #1 wb_rf_din[30:0];
-
-always @(posedge clk or negedge rst)
- if(!rst) int_maskb_r <= #1 31'h0;
- else
- if(int_maskb_we) int_maskb_r <= #1 wb_rf_din[30:0];
-
-////////////////////////////////////////////////////////////////////
-//
-// Interrupts
-//
-
-assign int_srca = {1'b0, (int_maska_r & ch_int) };
-assign int_srcb = {1'b0, (int_maskb_r & ch_int) };
-
-// Interrupt Outputs
-always @(posedge clk)
- inta_o <= #1 |int_srca;
-
-always @(posedge clk)
- intb_o <= #1 |int_srcb;
-
-////////////////////////////////////////////////////////////////////
-//
-// Channel Register File
-//
-
-// chXX_conf = { CBUF, ED, ARS, EN }
-
-wb_dma_ch_rf #(0, ch0_conf[0], ch0_conf[1], ch0_conf[2], ch0_conf[3]) u0(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer0 ),
- .pointer_s( pointer0_s ),
- .ch_csr( ch0_csr ),
- .ch_txsz( ch0_txsz ),
- .ch_adr0( ch0_adr0 ),
- .ch_adr1( ch0_adr1 ),
- .ch_am0( ch0_am0 ),
- .ch_am1( ch0_am1 ),
- .sw_pointer( sw_pointer0 ),
- .ch_stop( ch_stop[0] ),
- .ch_dis( ch_dis[0] ),
- .int( ch_int[0] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[0] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[0] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(1, ch1_conf[0], ch1_conf[1], ch1_conf[2], ch1_conf[3]) u1(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer1 ),
- .pointer_s( pointer1_s ),
- .ch_csr( ch1_csr ),
- .ch_txsz( ch1_txsz ),
- .ch_adr0( ch1_adr0 ),
- .ch_adr1( ch1_adr1 ),
- .ch_am0( ch1_am0 ),
- .ch_am1( ch1_am1 ),
- .sw_pointer( sw_pointer1 ),
- .ch_stop( ch_stop[1] ),
- .ch_dis( ch_dis[1] ),
- .int( ch_int[1] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[1] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[1] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(2, ch2_conf[0], ch2_conf[1], ch2_conf[2], ch2_conf[3]) u2(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer2 ),
- .pointer_s( pointer2_s ),
- .ch_csr( ch2_csr ),
- .ch_txsz( ch2_txsz ),
- .ch_adr0( ch2_adr0 ),
- .ch_adr1( ch2_adr1 ),
- .ch_am0( ch2_am0 ),
- .ch_am1( ch2_am1 ),
- .sw_pointer( sw_pointer2 ),
- .ch_stop( ch_stop[2] ),
- .ch_dis( ch_dis[2] ),
- .int( ch_int[2] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[2] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[2] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(3, ch3_conf[0], ch3_conf[1], ch3_conf[2], ch3_conf[3]) u3(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer3 ),
- .pointer_s( pointer3_s ),
- .ch_csr( ch3_csr ),
- .ch_txsz( ch3_txsz ),
- .ch_adr0( ch3_adr0 ),
- .ch_adr1( ch3_adr1 ),
- .ch_am0( ch3_am0 ),
- .ch_am1( ch3_am1 ),
- .sw_pointer( sw_pointer3 ),
- .ch_stop( ch_stop[3] ),
- .ch_dis( ch_dis[3] ),
- .int( ch_int[3] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[3] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[3] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(4, ch4_conf[0], ch4_conf[1], ch4_conf[2], ch4_conf[3]) u4(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer4 ),
- .pointer_s( pointer4_s ),
- .ch_csr( ch4_csr ),
- .ch_txsz( ch4_txsz ),
- .ch_adr0( ch4_adr0 ),
- .ch_adr1( ch4_adr1 ),
- .ch_am0( ch4_am0 ),
- .ch_am1( ch4_am1 ),
- .sw_pointer( sw_pointer4 ),
- .ch_stop( ch_stop[4] ),
- .ch_dis( ch_dis[4] ),
- .int( ch_int[4] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[4] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[4] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(5, ch5_conf[0], ch5_conf[1], ch5_conf[2], ch5_conf[3]) u5(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer5 ),
- .pointer_s( pointer5_s ),
- .ch_csr( ch5_csr ),
- .ch_txsz( ch5_txsz ),
- .ch_adr0( ch5_adr0 ),
- .ch_adr1( ch5_adr1 ),
- .ch_am0( ch5_am0 ),
- .ch_am1( ch5_am1 ),
- .sw_pointer( sw_pointer5 ),
- .ch_stop( ch_stop[5] ),
- .ch_dis( ch_dis[5] ),
- .int( ch_int[5] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[5] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[5] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(6, ch6_conf[0], ch6_conf[1], ch6_conf[2], ch6_conf[3]) u6(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer6 ),
- .pointer_s( pointer6_s ),
- .ch_csr( ch6_csr ),
- .ch_txsz( ch6_txsz ),
- .ch_adr0( ch6_adr0 ),
- .ch_adr1( ch6_adr1 ),
- .ch_am0( ch6_am0 ),
- .ch_am1( ch6_am1 ),
- .sw_pointer( sw_pointer6 ),
- .ch_stop( ch_stop[6] ),
- .ch_dis( ch_dis[6] ),
- .int( ch_int[6] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[6] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[6] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(7, ch7_conf[0], ch7_conf[1], ch7_conf[2], ch7_conf[3]) u7(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer7 ),
- .pointer_s( pointer7_s ),
- .ch_csr( ch7_csr ),
- .ch_txsz( ch7_txsz ),
- .ch_adr0( ch7_adr0 ),
- .ch_adr1( ch7_adr1 ),
- .ch_am0( ch7_am0 ),
- .ch_am1( ch7_am1 ),
- .sw_pointer( sw_pointer7 ),
- .ch_stop( ch_stop[7] ),
- .ch_dis( ch_dis[7] ),
- .int( ch_int[7] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[7] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[7] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(8, ch8_conf[0], ch8_conf[1], ch8_conf[2], ch8_conf[3]) u8(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer8 ),
- .pointer_s( pointer8_s ),
- .ch_csr( ch8_csr ),
- .ch_txsz( ch8_txsz ),
- .ch_adr0( ch8_adr0 ),
- .ch_adr1( ch8_adr1 ),
- .ch_am0( ch8_am0 ),
- .ch_am1( ch8_am1 ),
- .sw_pointer( sw_pointer8 ),
- .ch_stop( ch_stop[8] ),
- .ch_dis( ch_dis[8] ),
- .int( ch_int[8] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[8] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[8] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(9, ch9_conf[0], ch9_conf[1], ch9_conf[2], ch9_conf[3]) u9(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer9 ),
- .pointer_s( pointer9_s ),
- .ch_csr( ch9_csr ),
- .ch_txsz( ch9_txsz ),
- .ch_adr0( ch9_adr0 ),
- .ch_adr1( ch9_adr1 ),
- .ch_am0( ch9_am0 ),
- .ch_am1( ch9_am1 ),
- .sw_pointer( sw_pointer9 ),
- .ch_stop( ch_stop[9] ),
- .ch_dis( ch_dis[9] ),
- .int( ch_int[9] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[9] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[9] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(10, ch10_conf[0], ch10_conf[1], ch10_conf[2], ch10_conf[3]) u10(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer10 ),
- .pointer_s( pointer10_s ),
- .ch_csr( ch10_csr ),
- .ch_txsz( ch10_txsz ),
- .ch_adr0( ch10_adr0 ),
- .ch_adr1( ch10_adr1 ),
- .ch_am0( ch10_am0 ),
- .ch_am1( ch10_am1 ),
- .sw_pointer( sw_pointer10 ),
- .ch_stop( ch_stop[10] ),
- .ch_dis( ch_dis[10] ),
- .int( ch_int[10] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[10] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[10] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(11, ch11_conf[0], ch11_conf[1], ch11_conf[2], ch11_conf[3]) u11(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer11 ),
- .pointer_s( pointer11_s ),
- .ch_csr( ch11_csr ),
- .ch_txsz( ch11_txsz ),
- .ch_adr0( ch11_adr0 ),
- .ch_adr1( ch11_adr1 ),
- .ch_am0( ch11_am0 ),
- .ch_am1( ch11_am1 ),
- .sw_pointer( sw_pointer11 ),
- .ch_stop( ch_stop[11] ),
- .ch_dis( ch_dis[11] ),
- .int( ch_int[11] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[11] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[11] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(12, ch12_conf[0], ch12_conf[1], ch12_conf[2], ch12_conf[3]) u12(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer12 ),
- .pointer_s( pointer12_s ),
- .ch_csr( ch12_csr ),
- .ch_txsz( ch12_txsz ),
- .ch_adr0( ch12_adr0 ),
- .ch_adr1( ch12_adr1 ),
- .ch_am0( ch12_am0 ),
- .ch_am1( ch12_am1 ),
- .sw_pointer( sw_pointer12 ),
- .ch_stop( ch_stop[12] ),
- .ch_dis( ch_dis[12] ),
- .int( ch_int[12] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[12] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[12] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(13, ch13_conf[0], ch13_conf[1], ch13_conf[2], ch13_conf[3]) u13(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer13 ),
- .pointer_s( pointer13_s ),
- .ch_csr( ch13_csr ),
- .ch_txsz( ch13_txsz ),
- .ch_adr0( ch13_adr0 ),
- .ch_adr1( ch13_adr1 ),
- .ch_am0( ch13_am0 ),
- .ch_am1( ch13_am1 ),
- .sw_pointer( sw_pointer13 ),
- .ch_stop( ch_stop[13] ),
- .ch_dis( ch_dis[13] ),
- .int( ch_int[13] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[13] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[13] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(14, ch14_conf[0], ch14_conf[1], ch14_conf[2], ch14_conf[3]) u14(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer14 ),
- .pointer_s( pointer14_s ),
- .ch_csr( ch14_csr ),
- .ch_txsz( ch14_txsz ),
- .ch_adr0( ch14_adr0 ),
- .ch_adr1( ch14_adr1 ),
- .ch_am0( ch14_am0 ),
- .ch_am1( ch14_am1 ),
- .sw_pointer( sw_pointer14 ),
- .ch_stop( ch_stop[14] ),
- .ch_dis( ch_dis[14] ),
- .int( ch_int[14] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[14] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[14] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(15, ch15_conf[0], ch15_conf[1], ch15_conf[2], ch15_conf[3]) u15(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer15 ),
- .pointer_s( pointer15_s ),
- .ch_csr( ch15_csr ),
- .ch_txsz( ch15_txsz ),
- .ch_adr0( ch15_adr0 ),
- .ch_adr1( ch15_adr1 ),
- .ch_am0( ch15_am0 ),
- .ch_am1( ch15_am1 ),
- .sw_pointer( sw_pointer15 ),
- .ch_stop( ch_stop[15] ),
- .ch_dis( ch_dis[15] ),
- .int( ch_int[15] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[15] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[15] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(16, ch16_conf[0], ch16_conf[1], ch16_conf[2], ch16_conf[3]) u16(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer16 ),
- .pointer_s( pointer16_s ),
- .ch_csr( ch16_csr ),
- .ch_txsz( ch16_txsz ),
- .ch_adr0( ch16_adr0 ),
- .ch_adr1( ch16_adr1 ),
- .ch_am0( ch16_am0 ),
- .ch_am1( ch16_am1 ),
- .sw_pointer( sw_pointer16 ),
- .ch_stop( ch_stop[16] ),
- .ch_dis( ch_dis[16] ),
- .int( ch_int[16] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[16] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[16] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(17, ch17_conf[0], ch17_conf[1], ch17_conf[2], ch17_conf[3]) u17(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer17 ),
- .pointer_s( pointer17_s ),
- .ch_csr( ch17_csr ),
- .ch_txsz( ch17_txsz ),
- .ch_adr0( ch17_adr0 ),
- .ch_adr1( ch17_adr1 ),
- .ch_am0( ch17_am0 ),
- .ch_am1( ch17_am1 ),
- .sw_pointer( sw_pointer17 ),
- .ch_stop( ch_stop[17] ),
- .ch_dis( ch_dis[17] ),
- .int( ch_int[17] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[17] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[17] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(18, ch18_conf[0], ch18_conf[1], ch18_conf[2], ch18_conf[3]) u18(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer18 ),
- .pointer_s( pointer18_s ),
- .ch_csr( ch18_csr ),
- .ch_txsz( ch18_txsz ),
- .ch_adr0( ch18_adr0 ),
- .ch_adr1( ch18_adr1 ),
- .ch_am0( ch18_am0 ),
- .ch_am1( ch18_am1 ),
- .sw_pointer( sw_pointer18 ),
- .ch_stop( ch_stop[18] ),
- .ch_dis( ch_dis[18] ),
- .int( ch_int[18] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[18] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[18] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(19, ch19_conf[0], ch19_conf[1], ch19_conf[2], ch19_conf[3]) u19(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer19 ),
- .pointer_s( pointer19_s ),
- .ch_csr( ch19_csr ),
- .ch_txsz( ch19_txsz ),
- .ch_adr0( ch19_adr0 ),
- .ch_adr1( ch19_adr1 ),
- .ch_am0( ch19_am0 ),
- .ch_am1( ch19_am1 ),
- .sw_pointer( sw_pointer19 ),
- .ch_stop( ch_stop[19] ),
- .ch_dis( ch_dis[19] ),
- .int( ch_int[19] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[19] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[19] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(20, ch20_conf[0], ch20_conf[1], ch20_conf[2], ch20_conf[3]) u20(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer20 ),
- .pointer_s( pointer20_s ),
- .ch_csr( ch20_csr ),
- .ch_txsz( ch20_txsz ),
- .ch_adr0( ch20_adr0 ),
- .ch_adr1( ch20_adr1 ),
- .ch_am0( ch20_am0 ),
- .ch_am1( ch20_am1 ),
- .sw_pointer( sw_pointer20 ),
- .ch_stop( ch_stop[20] ),
- .ch_dis( ch_dis[20] ),
- .int( ch_int[20] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[20] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[20] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(21, ch21_conf[0], ch21_conf[1], ch21_conf[2], ch21_conf[3]) u21(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer21 ),
- .pointer_s( pointer21_s ),
- .ch_csr( ch21_csr ),
- .ch_txsz( ch21_txsz ),
- .ch_adr0( ch21_adr0 ),
- .ch_adr1( ch21_adr1 ),
- .ch_am0( ch21_am0 ),
- .ch_am1( ch21_am1 ),
- .sw_pointer( sw_pointer21 ),
- .ch_stop( ch_stop[21] ),
- .ch_dis( ch_dis[21] ),
- .int( ch_int[21] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[21] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[21] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(22, ch22_conf[0], ch22_conf[1], ch22_conf[2], ch22_conf[3]) u22(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer22 ),
- .pointer_s( pointer22_s ),
- .ch_csr( ch22_csr ),
- .ch_txsz( ch22_txsz ),
- .ch_adr0( ch22_adr0 ),
- .ch_adr1( ch22_adr1 ),
- .ch_am0( ch22_am0 ),
- .ch_am1( ch22_am1 ),
- .sw_pointer( sw_pointer22 ),
- .ch_stop( ch_stop[22] ),
- .ch_dis( ch_dis[22] ),
- .int( ch_int[22] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[22] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[22] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(23, ch23_conf[0], ch23_conf[1], ch23_conf[2], ch23_conf[3]) u23(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer23 ),
- .pointer_s( pointer23_s ),
- .ch_csr( ch23_csr ),
- .ch_txsz( ch23_txsz ),
- .ch_adr0( ch23_adr0 ),
- .ch_adr1( ch23_adr1 ),
- .ch_am0( ch23_am0 ),
- .ch_am1( ch23_am1 ),
- .sw_pointer( sw_pointer23 ),
- .ch_stop( ch_stop[23] ),
- .ch_dis( ch_dis[23] ),
- .int( ch_int[23] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[23] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[23] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(24, ch24_conf[0], ch24_conf[1], ch24_conf[2], ch24_conf[3]) u24(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer24 ),
- .pointer_s( pointer24_s ),
- .ch_csr( ch24_csr ),
- .ch_txsz( ch24_txsz ),
- .ch_adr0( ch24_adr0 ),
- .ch_adr1( ch24_adr1 ),
- .ch_am0( ch24_am0 ),
- .ch_am1( ch24_am1 ),
- .sw_pointer( sw_pointer24 ),
- .ch_stop( ch_stop[24] ),
- .ch_dis( ch_dis[24] ),
- .int( ch_int[24] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[24] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[24] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(25, ch25_conf[0], ch25_conf[1], ch25_conf[2], ch25_conf[3]) u25(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer25 ),
- .pointer_s( pointer25_s ),
- .ch_csr( ch25_csr ),
- .ch_txsz( ch25_txsz ),
- .ch_adr0( ch25_adr0 ),
- .ch_adr1( ch25_adr1 ),
- .ch_am0( ch25_am0 ),
- .ch_am1( ch25_am1 ),
- .sw_pointer( sw_pointer25 ),
- .ch_stop( ch_stop[25] ),
- .ch_dis( ch_dis[25] ),
- .int( ch_int[25] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[25] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[25] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(26, ch26_conf[0], ch26_conf[1], ch26_conf[2], ch26_conf[3]) u26(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer26 ),
- .pointer_s( pointer26_s ),
- .ch_csr( ch26_csr ),
- .ch_txsz( ch26_txsz ),
- .ch_adr0( ch26_adr0 ),
- .ch_adr1( ch26_adr1 ),
- .ch_am0( ch26_am0 ),
- .ch_am1( ch26_am1 ),
- .sw_pointer( sw_pointer26 ),
- .ch_stop( ch_stop[26] ),
- .ch_dis( ch_dis[26] ),
- .int( ch_int[26] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[26] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[26] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(27, ch27_conf[0], ch27_conf[1], ch27_conf[2], ch27_conf[3]) u27(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer27 ),
- .pointer_s( pointer27_s ),
- .ch_csr( ch27_csr ),
- .ch_txsz( ch27_txsz ),
- .ch_adr0( ch27_adr0 ),
- .ch_adr1( ch27_adr1 ),
- .ch_am0( ch27_am0 ),
- .ch_am1( ch27_am1 ),
- .sw_pointer( sw_pointer27 ),
- .ch_stop( ch_stop[27] ),
- .ch_dis( ch_dis[27] ),
- .int( ch_int[27] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[27] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[27] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(28, ch28_conf[0], ch28_conf[1], ch28_conf[2], ch28_conf[3]) u28(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer28 ),
- .pointer_s( pointer28_s ),
- .ch_csr( ch28_csr ),
- .ch_txsz( ch28_txsz ),
- .ch_adr0( ch28_adr0 ),
- .ch_adr1( ch28_adr1 ),
- .ch_am0( ch28_am0 ),
- .ch_am1( ch28_am1 ),
- .sw_pointer( sw_pointer28 ),
- .ch_stop( ch_stop[28] ),
- .ch_dis( ch_dis[28] ),
- .int( ch_int[28] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[28] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[28] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(29, ch29_conf[0], ch29_conf[1], ch29_conf[2], ch29_conf[3]) u29(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer29 ),
- .pointer_s( pointer29_s ),
- .ch_csr( ch29_csr ),
- .ch_txsz( ch29_txsz ),
- .ch_adr0( ch29_adr0 ),
- .ch_adr1( ch29_adr1 ),
- .ch_am0( ch29_am0 ),
- .ch_am1( ch29_am1 ),
- .sw_pointer( sw_pointer29 ),
- .ch_stop( ch_stop[29] ),
- .ch_dis( ch_dis[29] ),
- .int( ch_int[29] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[29] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[29] ),
- .ptr_set( ptr_set )
- );
-
-wb_dma_ch_rf #(30, ch30_conf[0], ch30_conf[1], ch30_conf[2], ch30_conf[3]) u30(
- .clk( clk ),
- .rst( rst ),
- .pointer( pointer30 ),
- .pointer_s( pointer30_s ),
- .ch_csr( ch30_csr ),
- .ch_txsz( ch30_txsz ),
- .ch_adr0( ch30_adr0 ),
- .ch_adr1( ch30_adr1 ),
- .ch_am0( ch30_am0 ),
- .ch_am1( ch30_am1 ),
- .sw_pointer( sw_pointer30 ),
- .ch_stop( ch_stop[30] ),
- .ch_dis( ch_dis[30] ),
- .int( ch_int[30] ),
- .wb_rf_din( wb_rf_din ),
- .wb_rf_adr( wb_rf_adr ),
- .wb_rf_we( wb_rf_we ),
- .wb_rf_re( wb_rf_re ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr[30] ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest[30] ),
- .ptr_set( ptr_set )
- );
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_de.v
===================================================================
--- trunk/rtl/verilog/wb_dma_de.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_de.v (nonexistent)
@@ -1,628 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA DMA Engine Core ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_de.v,v 1.3 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.3 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.3 2001/06/13 02:26:48 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.2 2001/06/05 10:22:36 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:44 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_de(clk, rst,
-
- // WISHBONE MASTER INTERFACE 0
- mast0_go, mast0_we, mast0_adr, mast0_din,
- mast0_dout, mast0_err, mast0_drdy, mast0_wait,
-
- // WISHBONE MASTER INTERFACE 1
- mast1_go, mast1_we, mast1_adr, mast1_din,
- mast1_dout, mast1_err, mast1_drdy, mast1_wait,
-
- // DMA Engine Init & Setup
- de_start, nd, csr, pointer, pointer_s, txsz,
- adr0, adr1, am0, am1,
-
- // DMA Engine Register File Update Outputs
- de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set,
- de_csr, de_txsz, de_adr0, de_adr1, de_fetch_descr,
-
- // DMA Engine Control Outputs
- next_ch, de_ack,
-
- // DMA Engine Status
- pause_req, paused,
- dma_abort, dma_busy, dma_err, dma_done, dma_done_all
- );
-
-input clk, rst;
-
-// --------------------------------------
-// WISHBONE MASTER INTERFACE 0
-
-output mast0_go; // Perform a Master Cycle
-output mast0_we; // Read/Write
-output [31:0] mast0_adr; // Address for the transfer
-input [31:0] mast0_din; // Internal Input Data
-output [31:0] mast0_dout; // Internal Output Data
-input mast0_err; // Indicates an error has occurred
-input mast0_drdy; // Indicated that either data is available
- // during a read, or that the master can accept
- // the next data during a write
-output mast0_wait; // Tells the master to insert wait cycles
- // because data can not be accepted/provided
-
-// --------------------------------------
-// WISHBONE MASTER INTERFACE 1
-
-output mast1_go; // Perform a Master Cycle
-output mast1_we; // Read/Write
-output [31:0] mast1_adr; // Address for the transfer
-input [31:0] mast1_din; // Internal Input Data
-output [31:0] mast1_dout; // Internal Output Data
-input mast1_err; // Indicates an error has occurred
-input mast1_drdy; // Indicated that either data is available
- // during a read, or that the master can accept
- // the next data during a write
-output mast1_wait; // Tells the master to insert wait cycles
- // because data can not be accepted/provided
-
-// --------------------------------------
-// DMA Engine Signals
-
-// DMA Engine Init & Setup
-input de_start; // Start DMA Engine Indicator
-input nd; // Next Descriptor Indicator
-input [31:0] csr; // Selected Channel CSR
-input [31:0] pointer; // Linked List Descriptor pointer
-input [31:0] pointer_s; // Previous Pointer
-input [31:0] txsz; // Selected Channel Transfer Size
-input [31:0] adr0, adr1; // Selected Channel Addresses
-input [31:0] am0, am1; // Selected Channel Address Masks
-
-// DMA Engine Register File Update Outputs
-output de_csr_we; // Write enable for csr register
-output de_txsz_we; // Write enable for txsz register
-output de_adr0_we; // Write enable for adr0 register
-output de_adr1_we; // Write enable for adr1 register
-output ptr_set; // Set Pointer as Valid
-output [31:0] de_csr; // Write Data for CSR when loading External Desc.
-output [11:0] de_txsz; // Write back data for txsz register
-output [31:0] de_adr0; // Write back data for adr0 register
-output [31:0] de_adr1; // Write back data for adr1 register
-output de_fetch_descr; // Indicates that we are fetching a descriptor
-
-// DMA Engine Control Outputs
-output next_ch; // Indicates the DMA Engine is done
-output de_ack;
-
-// DMA Abort from RF (software forced abort)
-input dma_abort;
-
-// DMA Engine Status
-input pause_req;
-output paused;
-output dma_busy, dma_err, dma_done, dma_done_all;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-parameter [10:0] // synopsys enum state
- IDLE = 11'b000_0000_0001,
- READ = 11'b000_0000_0010,
- WRITE = 11'b000_0000_0100,
- UPDATE = 11'b000_0000_1000,
- LD_DESC1 = 11'b000_0001_0000,
- LD_DESC2 = 11'b000_0010_0000,
- LD_DESC3 = 11'b000_0100_0000,
- LD_DESC4 = 11'b000_1000_0000,
- LD_DESC5 = 11'b001_0000_0000,
- WB = 11'b010_0000_0000,
- PAUSE = 11'b100_0000_0000;
-
-reg [10:0] /* synopsys enum state */ state, next_state;
-// synopsys state_vector state
-
-reg [31:0] mast0_adr, mast1_adr;
-
-reg [29:0] adr0_cnt, adr1_cnt;
-wire [29:0] adr0_cnt_next, adr1_cnt_next;
-wire [29:0] adr0_cnt_next1, adr1_cnt_next1;
-reg adr0_inc, adr1_inc;
-
-reg [8:0] chunk_cnt;
-reg chunk_dec;
-
-reg [11:0] tsz_cnt;
-reg tsz_dec;
-
-reg de_txsz_we;
-reg de_csr_we;
-reg de_adr0_we;
-reg de_adr1_we;
-reg ld_desc_sel;
-
-wire chunk_cnt_is_0_d;
-reg chunk_cnt_is_0_r;
-wire tsz_cnt_is_0_d;
-reg tsz_cnt_is_0_r;
-
-reg read, write;
-reg read_r, write_r;
-wire rd_ack, wr_ack;
-reg rd_ack_r;
-
-reg chunk_0;
-wire done;
-reg dma_done_d;
-reg dma_done_r;
-reg dma_abort_r;
-reg next_ch;
-wire read_hold, write_hold;
-reg write_hold_r;
-
-reg [1:0] ptr_adr_low;
-reg m0_go;
-reg m0_we;
-reg ptr_set;
-
-// Aliases
-wire a0_inc_en = csr[4]; // Source Address (Adr 0) increment enable
-wire a1_inc_en = csr[3]; // Dest. Address (Adr 1) increment enable
-wire ptr_valid = pointer[0];
-wire use_ed = csr[`WDMA_USE_ED];
-
-reg mast0_drdy_r;
-reg paused;
-
-reg de_fetch_descr; // Indicates that we are fetching a descriptor
-////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-always @(posedge clk)
- dma_done_r <= #1 dma_done;
-
-// Address Counter 0 (Source Address)
-always @(posedge clk)
- if(de_start | ptr_set) adr0_cnt <= #1 adr0[31:2];
- else
- if(adr0_inc & a0_inc_en) adr0_cnt <= #1 adr0_cnt_next;
-
-// 30 Bit Incrementor (registered)
-wb_dma_inc30r u0( .clk( clk ),
- .in( adr0_cnt ),
- .out( adr0_cnt_next1 ) );
-
-assign adr0_cnt_next[1:0] = adr0_cnt_next1[1:0];
-assign adr0_cnt_next[2] = am0[4] ? adr0_cnt_next1[2] : adr0_cnt[2];
-assign adr0_cnt_next[3] = am0[5] ? adr0_cnt_next1[3] : adr0_cnt[3];
-assign adr0_cnt_next[4] = am0[6] ? adr0_cnt_next1[4] : adr0_cnt[4];
-assign adr0_cnt_next[5] = am0[7] ? adr0_cnt_next1[5] : adr0_cnt[5];
-assign adr0_cnt_next[6] = am0[8] ? adr0_cnt_next1[6] : adr0_cnt[6];
-assign adr0_cnt_next[7] = am0[9] ? adr0_cnt_next1[7] : adr0_cnt[7];
-assign adr0_cnt_next[8] = am0[10] ? adr0_cnt_next1[8] : adr0_cnt[8];
-assign adr0_cnt_next[9] = am0[11] ? adr0_cnt_next1[9] : adr0_cnt[9];
-assign adr0_cnt_next[10] = am0[12] ? adr0_cnt_next1[10] : adr0_cnt[10];
-assign adr0_cnt_next[11] = am0[13] ? adr0_cnt_next1[11] : adr0_cnt[11];
-assign adr0_cnt_next[12] = am0[14] ? adr0_cnt_next1[12] : adr0_cnt[12];
-assign adr0_cnt_next[13] = am0[15] ? adr0_cnt_next1[13] : adr0_cnt[13];
-assign adr0_cnt_next[14] = am0[16] ? adr0_cnt_next1[14] : adr0_cnt[14];
-assign adr0_cnt_next[15] = am0[17] ? adr0_cnt_next1[15] : adr0_cnt[15];
-assign adr0_cnt_next[16] = am0[18] ? adr0_cnt_next1[16] : adr0_cnt[16];
-assign adr0_cnt_next[17] = am0[19] ? adr0_cnt_next1[17] : adr0_cnt[17];
-assign adr0_cnt_next[18] = am0[20] ? adr0_cnt_next1[18] : adr0_cnt[18];
-assign adr0_cnt_next[19] = am0[21] ? adr0_cnt_next1[19] : adr0_cnt[19];
-assign adr0_cnt_next[20] = am0[22] ? adr0_cnt_next1[20] : adr0_cnt[20];
-assign adr0_cnt_next[21] = am0[23] ? adr0_cnt_next1[21] : adr0_cnt[21];
-assign adr0_cnt_next[22] = am0[24] ? adr0_cnt_next1[22] : adr0_cnt[22];
-assign adr0_cnt_next[23] = am0[25] ? adr0_cnt_next1[23] : adr0_cnt[23];
-assign adr0_cnt_next[24] = am0[26] ? adr0_cnt_next1[24] : adr0_cnt[24];
-assign adr0_cnt_next[25] = am0[27] ? adr0_cnt_next1[25] : adr0_cnt[25];
-assign adr0_cnt_next[26] = am0[28] ? adr0_cnt_next1[26] : adr0_cnt[26];
-assign adr0_cnt_next[27] = am0[29] ? adr0_cnt_next1[27] : adr0_cnt[27];
-assign adr0_cnt_next[28] = am0[30] ? adr0_cnt_next1[28] : adr0_cnt[28];
-assign adr0_cnt_next[29] = am0[31] ? adr0_cnt_next1[29] : adr0_cnt[29];
-
-
-// Address Counter 1 (Destination Address)
-always @(posedge clk)
- if(de_start | ptr_set) adr1_cnt <= #1 adr1[31:2];
- else
- if(adr1_inc & a1_inc_en) adr1_cnt <= #1 adr1_cnt_next;
-
-// 30 Bit Incrementor (registered)
-wb_dma_inc30r u1( .clk( clk ),
- .in( adr1_cnt ),
- .out( adr1_cnt_next1 ) );
-
-assign adr1_cnt_next[1:0] = adr1_cnt_next1[1:0];
-assign adr1_cnt_next[2] = am1[4] ? adr1_cnt_next1[2] : adr1_cnt[2];
-assign adr1_cnt_next[3] = am1[5] ? adr1_cnt_next1[3] : adr1_cnt[3];
-assign adr1_cnt_next[4] = am1[6] ? adr1_cnt_next1[4] : adr1_cnt[4];
-assign adr1_cnt_next[5] = am1[7] ? adr1_cnt_next1[5] : adr1_cnt[5];
-assign adr1_cnt_next[6] = am1[8] ? adr1_cnt_next1[6] : adr1_cnt[6];
-assign adr1_cnt_next[7] = am1[9] ? adr1_cnt_next1[7] : adr1_cnt[7];
-assign adr1_cnt_next[8] = am1[10] ? adr1_cnt_next1[8] : adr1_cnt[8];
-assign adr1_cnt_next[9] = am1[11] ? adr1_cnt_next1[9] : adr1_cnt[9];
-assign adr1_cnt_next[10] = am1[12] ? adr1_cnt_next1[10] : adr1_cnt[10];
-assign adr1_cnt_next[11] = am1[13] ? adr1_cnt_next1[11] : adr1_cnt[11];
-assign adr1_cnt_next[12] = am1[14] ? adr1_cnt_next1[12] : adr1_cnt[12];
-assign adr1_cnt_next[13] = am1[15] ? adr1_cnt_next1[13] : adr1_cnt[13];
-assign adr1_cnt_next[14] = am1[16] ? adr1_cnt_next1[14] : adr1_cnt[14];
-assign adr1_cnt_next[15] = am1[17] ? adr1_cnt_next1[15] : adr1_cnt[15];
-assign adr1_cnt_next[16] = am1[18] ? adr1_cnt_next1[16] : adr1_cnt[16];
-assign adr1_cnt_next[17] = am1[19] ? adr1_cnt_next1[17] : adr1_cnt[17];
-assign adr1_cnt_next[18] = am1[20] ? adr1_cnt_next1[18] : adr1_cnt[18];
-assign adr1_cnt_next[19] = am1[21] ? adr1_cnt_next1[19] : adr1_cnt[19];
-assign adr1_cnt_next[20] = am1[22] ? adr1_cnt_next1[20] : adr1_cnt[20];
-assign adr1_cnt_next[21] = am1[23] ? adr1_cnt_next1[21] : adr1_cnt[21];
-assign adr1_cnt_next[22] = am1[24] ? adr1_cnt_next1[22] : adr1_cnt[22];
-assign adr1_cnt_next[23] = am1[25] ? adr1_cnt_next1[23] : adr1_cnt[23];
-assign adr1_cnt_next[24] = am1[26] ? adr1_cnt_next1[24] : adr1_cnt[24];
-assign adr1_cnt_next[25] = am1[27] ? adr1_cnt_next1[25] : adr1_cnt[25];
-assign adr1_cnt_next[26] = am1[28] ? adr1_cnt_next1[26] : adr1_cnt[26];
-assign adr1_cnt_next[27] = am1[29] ? adr1_cnt_next1[27] : adr1_cnt[27];
-assign adr1_cnt_next[28] = am1[30] ? adr1_cnt_next1[28] : adr1_cnt[28];
-assign adr1_cnt_next[29] = am1[31] ? adr1_cnt_next1[29] : adr1_cnt[29];
-
-// Chunk Counter
-always @(posedge clk)
- if(de_start) chunk_cnt <= #1 txsz[24:16];
- else
- if(chunk_dec & !chunk_cnt_is_0_r) chunk_cnt <= #1 chunk_cnt - 9'h1;
-
-assign chunk_cnt_is_0_d = (chunk_cnt == 9'h0);
-
-always @(posedge clk)
- chunk_cnt_is_0_r <= #1 chunk_cnt_is_0_d;
-
-// Total Size Counter
-always @(posedge clk)
- if(de_start | ptr_set) tsz_cnt <= #1 txsz[11:0];
- else
- if(tsz_dec & !tsz_cnt_is_0_r) tsz_cnt <= #1 tsz_cnt - 12'h1;
-
-assign tsz_cnt_is_0_d = (tsz_cnt == 12'h0) & !txsz[15];
-
-always @(posedge clk)
- tsz_cnt_is_0_r <= #1 tsz_cnt_is_0_d;
-
-// Counter Control Logic
-always @(posedge clk)
- chunk_dec <= #1 read & !read_r;
-
-always @(posedge clk)
- tsz_dec <= #1 read & !read_r;
-
-//always @(posedge clk)
-always @(rd_ack or read_r)
- adr0_inc = rd_ack & read_r;
-
-//always @(posedge clk)
-always @(wr_ack or write_r)
- adr1_inc = wr_ack & write_r;
-
-// Done logic
-always @(posedge clk)
- chunk_0 <= #1 (txsz[24:16] == 9'h0);
-
-assign done = chunk_0 ? tsz_cnt_is_0_d : (tsz_cnt_is_0_d | chunk_cnt_is_0_d);
-assign dma_done = dma_done_d & done;
-assign dma_done_all = dma_done_d & (tsz_cnt_is_0_r | (nd & chunk_cnt_is_0_d));
-
-always @(posedge clk)
- next_ch <= #1 dma_done;
-
-// Register Update Outputs
-assign de_txsz = ld_desc_sel ? mast0_din[11:0] : tsz_cnt;
-assign de_adr0 = ld_desc_sel ? mast0_din : {adr0_cnt, 2'b00};
-assign de_adr1 = ld_desc_sel ? mast0_din : {adr1_cnt, 2'b00};
-assign de_csr = mast0_din;
-
-// Abort logic
-always @(posedge clk)
- dma_abort_r <= #1 dma_abort | mast0_err | mast1_err;
-
-assign dma_err = dma_abort_r;
-
-assign dma_busy = (state != IDLE);
-
-////////////////////////////////////////////////////////////////////
-//
-// WISHBONE Interface Logic
-//
-
-always @(posedge clk)
- read_r <= #1 read;
-
-always @(posedge clk)
- write_r <= #1 write;
-
-always @(posedge clk)
- rd_ack_r <= #1 read_r;
-
-// Data Path
-assign mast0_dout = m0_we ? {20'h0, tsz_cnt} : csr[2] ? mast1_din : mast0_din;
-assign mast1_dout = csr[2] ? mast1_din : mast0_din;
-
-// Address Path
-always @(posedge clk)
- mast0_adr <= #1 m0_go ?
- (m0_we ? pointer_s : {pointer[31:4], ptr_adr_low, 2'b00}) :
- read ? {adr0_cnt, 2'b00} : {adr1_cnt, 2'b00};
-
-always @(posedge clk)
- mast1_adr <= #1 read ? {adr0_cnt, 2'b00} : {adr1_cnt, 2'b00};
-
-// CTRL
-assign write_hold = (read | write) & write_hold_r;
-
-always @(posedge clk)
- write_hold_r <= #1 read | write;
-
-assign read_hold = done ? read : (read | write);
-
-assign mast0_go = (!csr[2] & read_hold) | (!csr[1] & write_hold) | m0_go;
-assign mast1_go = ( csr[2] & read_hold) | ( csr[1] & write_hold);
-
-assign mast0_we = m0_go ? m0_we : (!csr[1] & write);
-assign mast1_we = csr[1] & write;
-
-assign rd_ack = (csr[2] ? mast1_drdy : mast0_drdy);
-assign wr_ack = (csr[1] ? mast1_drdy : mast0_drdy);
-
-assign mast0_wait = !((!csr[2] & read) | (!csr[1] & write)) & !m0_go;
-assign mast1_wait = !(( csr[2] & read) | ( csr[1] & write));
-
-always @(posedge clk)
- mast0_drdy_r <= #1 mast0_drdy;
-
-assign de_ack = dma_done;
-
-////////////////////////////////////////////////////////////////////
-//
-// State Machine
-//
-
-always @(posedge clk or negedge rst)
- if(!rst) state <= #1 IDLE;
- else state <= #1 next_state;
-
-always @(state or pause_req or dma_abort_r or de_start or rd_ack or wr_ack or
- done or ptr_valid or use_ed or mast0_drdy or mast0_drdy_r or csr or nd)
- begin
- next_state = state; // Default keep state
- read = 1'b0;
- write = 1'b0;
- dma_done_d = 1'b0;
- de_csr_we = 1'b0;
- de_txsz_we = 1'b0;
- de_adr0_we = 1'b0;
- de_adr1_we = 1'b0;
- de_fetch_descr = 1'b0;
-
- m0_go = 1'b0;
- m0_we = 1'b0;
- ptr_adr_low = 2'h0;
- ptr_set = 1'b0;
- ld_desc_sel = 1'b0;
- paused = 1'b0;
-
- case(state) // synopsys parallel_case full_case
-
- IDLE:
- begin
- if(pause_req) next_state = PAUSE;
- else
- if(de_start & !csr[`WDMA_ERR])
- begin
- if(use_ed & !ptr_valid) next_state = LD_DESC1;
- else next_state = READ;
- end
- end
-
- PAUSE:
- begin
- paused = 1'b1;
- if(!pause_req) next_state = IDLE;
- end
-
- READ: // Read From Source
- begin
- if(dma_abort_r) next_state = UPDATE;
- else
- if(!rd_ack) read = 1'b1;
- else
- begin
- write = 1'b1;
- next_state = WRITE;
- end
- end
-
- WRITE: // Write To Destination
- begin
- if(dma_abort_r) next_state = UPDATE;
- else
- if(!wr_ack) write = 1'b1;
- else
- begin
- if(done) next_state = UPDATE;
- else
- begin
- read = 1'b1;
- next_state = READ;
- end
- end
- end
-
- UPDATE: // Update Registers
- begin
- dma_done_d = 1'b1;
- de_txsz_we = 1'b1;
- de_adr0_we = 1'b1;
- de_adr1_we = 1'b1;
- if(use_ed & csr[`WDMA_WRB] & nd)
- begin
- m0_we = 1'b1;
- m0_go = 1'b1;
- next_state = WB;
- end
- else next_state = IDLE;
- end
-
- WB:
- begin
- m0_we = 1'b1;
- if(mast0_drdy)
- begin
- next_state = IDLE;
- end
- else m0_go = 1'b1;
- end
-
- LD_DESC1: // Load Descriptor from memory to registers
- begin
- ptr_adr_low = 2'h0;
- ld_desc_sel = 1'b1;
- m0_go = 1'b1;
- de_csr_we = 1'b1;
- de_txsz_we = 1'b1;
- de_fetch_descr = 1'b1;
- if(mast0_drdy)
- begin
- ptr_adr_low = 2'h1;
- next_state = LD_DESC2;
- end
- end
-
- LD_DESC2:
- begin
- de_fetch_descr = 1'b1;
- if(mast0_drdy_r) de_csr_we = 1'b1;
- if(mast0_drdy_r) de_txsz_we = 1'b1;
- ptr_adr_low = 2'h1;
- ld_desc_sel = 1'b1;
- m0_go = 1'b1;
- if(mast0_drdy)
- begin
- ptr_adr_low = 2'h2;
- next_state = LD_DESC3;
- end
- end
-
- LD_DESC3:
- begin
- de_fetch_descr = 1'b1;
- if(mast0_drdy_r) de_adr0_we = 1'b1;
- ptr_adr_low = 2'h2;
- ld_desc_sel = 1'b1;
- m0_go = 1'b1;
- if(mast0_drdy)
- begin
- ptr_adr_low = 2'h3;
- next_state = LD_DESC4;
- end
- end
-
- LD_DESC4:
- begin
- de_fetch_descr = 1'b1;
- if(mast0_drdy_r) de_adr1_we = 1'b1;
- ptr_adr_low = 2'h3;
- ld_desc_sel = 1'b1;
- if(mast0_drdy)
- begin
- next_state = LD_DESC5;
- end
- else m0_go = 1'b1;
- end
-
- LD_DESC5:
- begin
- de_fetch_descr = 1'b1;
- ptr_set = 1'b1;
- next_state = READ;
- end
-
- endcase
-
- end
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_pri_enc_sub.v
===================================================================
--- trunk/rtl/verilog/wb_dma_pri_enc_sub.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_pri_enc_sub.v (nonexistent)
@@ -1,142 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Priority Encoder Sub-Module ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_pri_enc_sub.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.4 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// 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/08/07 08:00:43 rudi
-//
-//
-// Split up priority encoder modules to separate files
-//
-//
-//
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-// Priority Encoder
-//
-// Determines the channel with the highest priority, also takes
-// the valid bit in consideration
-
-module wb_dma_pri_enc_sub(valid, pri_in, pri_out);
-
-parameter [3:0] ch_conf = 4'b0000;
-parameter [1:0] pri_sel = 2'd0;
-
-input valid;
-input [2:0] pri_in;
-output [7:0] pri_out;
-
-wire [7:0] pri_out;
-reg [7:0] pri_out_d;
-reg [7:0] pri_out_d0;
-reg [7:0] pri_out_d1;
-reg [7:0] pri_out_d2;
-
-assign pri_out = ch_conf[0] ? pri_out_d : 8'h0;
-
-// Select Configured Priority
-always @(pri_sel or pri_out_d0 or pri_out_d1 or pri_out_d2)
- case(pri_sel) // synopsys parallel_case full_case
- 2'd0: pri_out_d = pri_out_d0;
- 2'd1: pri_out_d = pri_out_d1;
- 2'd2: pri_out_d = pri_out_d2;
- endcase
-
-// 8 Priority Levels
-always @(valid or pri_in)
- if(!valid) pri_out_d2 = 8'b0000_0001;
- else
- if(pri_in==3'h0) pri_out_d2 = 8'b0000_0001;
- else
- if(pri_in==3'h1) pri_out_d2 = 8'b0000_0010;
- else
- if(pri_in==3'h2) pri_out_d2 = 8'b0000_0100;
- else
- if(pri_in==3'h3) pri_out_d2 = 8'b0000_1000;
- else
- if(pri_in==3'h4) pri_out_d2 = 8'b0001_0000;
- else
- if(pri_in==3'h5) pri_out_d2 = 8'b0010_0000;
- else
- if(pri_in==3'h6) pri_out_d2 = 8'b0100_0000;
- else pri_out_d2 = 8'b1000_0000;
-
-// 4 Priority Levels
-always @(valid or pri_in)
- if(!valid) pri_out_d1 = 8'b0000_0001;
- else
- if(pri_in==3'h0) pri_out_d1 = 8'b0000_0001;
- else
- if(pri_in==3'h1) pri_out_d1 = 8'b0000_0010;
- else
- if(pri_in==3'h2) pri_out_d1 = 8'b0000_0100;
- else pri_out_d1 = 8'b0000_1000;
-
-// 2 Priority Levels
-always @(valid or pri_in)
- if(!valid) pri_out_d0 = 8'b0000_0001;
- else
- if(pri_in==3'h0) pri_out_d0 = 8'b0000_0001;
- else pri_out_d0 = 8'b0000_0010;
-
-endmodule
-
Index: trunk/rtl/verilog/wb_dma_ch_pri_enc.v
===================================================================
--- trunk/rtl/verilog/wb_dma_ch_pri_enc.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_ch_pri_enc.v (nonexistent)
@@ -1,380 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Priority Encoder ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_ch_pri_enc.v,v 1.5 2002-02-01 01:54:44 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:44 $
-// $Revision: 1.5 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.4 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// Revision 1.3 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.2 2001/08/07 08:00:43 rudi
-//
-//
-// Split up priority encoder modules to separate files
-//
-// Revision 1.1 2001/07/29 08:57:02 rudi
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.2 2001/06/05 10:22:36 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:50 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-// Priority Encoder
-//
-// Determines the channel with the highest priority, also takes
-// the valid bit in consideration
-
-module wb_dma_ch_pri_enc(clk, valid,
- pri0, pri1, pri2, pri3,
- pri4, pri5, pri6, pri7,
- pri8, pri9, pri10, pri11,
- pri12, pri13, pri14, pri15,
- pri16, pri17, pri18, pri19,
- pri20, pri21, pri22, pri23,
- pri24, pri25, pri26, pri27,
- pri28, pri29, pri30,
- pri_out);
-
-////////////////////////////////////////////////////////////////////
-//
-// Module Parameters
-//
-
-// chXX_conf = { CBUF, ED, ARS, EN }
-parameter [1:0] pri_sel = 2'd0;
-parameter [3:0] ch0_conf = 4'h1;
-parameter [3:0] ch1_conf = 4'h0;
-parameter [3:0] ch2_conf = 4'h0;
-parameter [3:0] ch3_conf = 4'h0;
-parameter [3:0] ch4_conf = 4'h0;
-parameter [3:0] ch5_conf = 4'h0;
-parameter [3:0] ch6_conf = 4'h0;
-parameter [3:0] ch7_conf = 4'h0;
-parameter [3:0] ch8_conf = 4'h0;
-parameter [3:0] ch9_conf = 4'h0;
-parameter [3:0] ch10_conf = 4'h0;
-parameter [3:0] ch11_conf = 4'h0;
-parameter [3:0] ch12_conf = 4'h0;
-parameter [3:0] ch13_conf = 4'h0;
-parameter [3:0] ch14_conf = 4'h0;
-parameter [3:0] ch15_conf = 4'h0;
-parameter [3:0] ch16_conf = 4'h0;
-parameter [3:0] ch17_conf = 4'h0;
-parameter [3:0] ch18_conf = 4'h0;
-parameter [3:0] ch19_conf = 4'h0;
-parameter [3:0] ch20_conf = 4'h0;
-parameter [3:0] ch21_conf = 4'h0;
-parameter [3:0] ch22_conf = 4'h0;
-parameter [3:0] ch23_conf = 4'h0;
-parameter [3:0] ch24_conf = 4'h0;
-parameter [3:0] ch25_conf = 4'h0;
-parameter [3:0] ch26_conf = 4'h0;
-parameter [3:0] ch27_conf = 4'h0;
-parameter [3:0] ch28_conf = 4'h0;
-parameter [3:0] ch29_conf = 4'h0;
-parameter [3:0] ch30_conf = 4'h0;
-
-////////////////////////////////////////////////////////////////////
-//
-// Module IOs
-//
-
-input clk;
-input [30:0] valid; // Channel Valid bits
-input [2:0] pri0, pri1, pri2, pri3; // Channel Priorities
-input [2:0] pri4, pri5, pri6, pri7;
-input [2:0] pri8, pri9, pri10, pri11;
-input [2:0] pri12, pri13, pri14, pri15;
-input [2:0] pri16, pri17, pri18, pri19;
-input [2:0] pri20, pri21, pri22, pri23;
-input [2:0] pri24, pri25, pri26, pri27;
-input [2:0] pri28, pri29, pri30;
-output [2:0] pri_out; // Highest unserviced priority
-
-wire [7:0] pri0_out, pri1_out, pri2_out, pri3_out;
-wire [7:0] pri4_out, pri5_out, pri6_out, pri7_out;
-wire [7:0] pri8_out, pri9_out, pri10_out, pri11_out;
-wire [7:0] pri12_out, pri13_out, pri14_out, pri15_out;
-wire [7:0] pri16_out, pri17_out, pri18_out, pri19_out;
-wire [7:0] pri20_out, pri21_out, pri22_out, pri23_out;
-wire [7:0] pri24_out, pri25_out, pri26_out, pri27_out;
-wire [7:0] pri28_out, pri29_out, pri30_out;
-
-wire [7:0] pri_out_tmp;
-reg [2:0] pri_out;
-reg [2:0] pri_out2;
-reg [2:0] pri_out1;
-reg [2:0] pri_out0;
-
-wb_dma_pri_enc_sub #(ch1_conf,pri_sel) u0( // Use channel config 1 for channel 0 encoder
- .valid( valid[0] ),
- .pri_in( pri0 ),
- .pri_out( pri0_out )
- );
-wb_dma_pri_enc_sub #(ch1_conf,pri_sel) u1(
- .valid( valid[1] ),
- .pri_in( pri1 ),
- .pri_out( pri1_out )
- );
-wb_dma_pri_enc_sub #(ch2_conf,pri_sel) u2(
- .valid( valid[2] ),
- .pri_in( pri2 ),
- .pri_out( pri2_out )
- );
-wb_dma_pri_enc_sub #(ch3_conf,pri_sel) u3(
- .valid( valid[3] ),
- .pri_in( pri3 ),
- .pri_out( pri3_out )
- );
-wb_dma_pri_enc_sub #(ch4_conf,pri_sel) u4(
- .valid( valid[4] ),
- .pri_in( pri4 ),
- .pri_out( pri4_out )
- );
-wb_dma_pri_enc_sub #(ch5_conf,pri_sel) u5(
- .valid( valid[5] ),
- .pri_in( pri5 ),
- .pri_out( pri5_out )
- );
-wb_dma_pri_enc_sub #(ch6_conf,pri_sel) u6(
- .valid( valid[6] ),
- .pri_in( pri6 ),
- .pri_out( pri6_out )
- );
-wb_dma_pri_enc_sub #(ch7_conf,pri_sel) u7(
- .valid( valid[7] ),
- .pri_in( pri7 ),
- .pri_out( pri7_out )
- );
-wb_dma_pri_enc_sub #(ch8_conf,pri_sel) u8(
- .valid( valid[8] ),
- .pri_in( pri8 ),
- .pri_out( pri8_out )
- );
-wb_dma_pri_enc_sub #(ch9_conf,pri_sel) u9(
- .valid( valid[9] ),
- .pri_in( pri9 ),
- .pri_out( pri9_out )
- );
-wb_dma_pri_enc_sub #(ch10_conf,pri_sel) u10(
- .valid( valid[10] ),
- .pri_in( pri10 ),
- .pri_out( pri10_out )
- );
-wb_dma_pri_enc_sub #(ch11_conf,pri_sel) u11(
- .valid( valid[11] ),
- .pri_in( pri11 ),
- .pri_out( pri11_out )
- );
-wb_dma_pri_enc_sub #(ch12_conf,pri_sel) u12(
- .valid( valid[12] ),
- .pri_in( pri12 ),
- .pri_out( pri12_out )
- );
-wb_dma_pri_enc_sub #(ch13_conf,pri_sel) u13(
- .valid( valid[13] ),
- .pri_in( pri13 ),
- .pri_out( pri13_out )
- );
-wb_dma_pri_enc_sub #(ch14_conf,pri_sel) u14(
- .valid( valid[14] ),
- .pri_in( pri14 ),
- .pri_out( pri14_out )
- );
-wb_dma_pri_enc_sub #(ch15_conf,pri_sel) u15(
- .valid( valid[15] ),
- .pri_in( pri15 ),
- .pri_out( pri15_out )
- );
-wb_dma_pri_enc_sub #(ch16_conf,pri_sel) u16(
- .valid( valid[16] ),
- .pri_in( pri16 ),
- .pri_out( pri16_out )
- );
-wb_dma_pri_enc_sub #(ch17_conf,pri_sel) u17(
- .valid( valid[17] ),
- .pri_in( pri17 ),
- .pri_out( pri17_out )
- );
-wb_dma_pri_enc_sub #(ch18_conf,pri_sel) u18(
- .valid( valid[18] ),
- .pri_in( pri18 ),
- .pri_out( pri18_out )
- );
-wb_dma_pri_enc_sub #(ch19_conf,pri_sel) u19(
- .valid( valid[19] ),
- .pri_in( pri19 ),
- .pri_out( pri19_out )
- );
-wb_dma_pri_enc_sub #(ch20_conf,pri_sel) u20(
- .valid( valid[20] ),
- .pri_in( pri20 ),
- .pri_out( pri20_out )
- );
-wb_dma_pri_enc_sub #(ch21_conf,pri_sel) u21(
- .valid( valid[21] ),
- .pri_in( pri21 ),
- .pri_out( pri21_out )
- );
-wb_dma_pri_enc_sub #(ch22_conf,pri_sel) u22(
- .valid( valid[22] ),
- .pri_in( pri22 ),
- .pri_out( pri22_out )
- );
-wb_dma_pri_enc_sub #(ch23_conf,pri_sel) u23(
- .valid( valid[23] ),
- .pri_in( pri23 ),
- .pri_out( pri23_out )
- );
-wb_dma_pri_enc_sub #(ch24_conf,pri_sel) u24(
- .valid( valid[24] ),
- .pri_in( pri24 ),
- .pri_out( pri24_out )
- );
-wb_dma_pri_enc_sub #(ch25_conf,pri_sel) u25(
- .valid( valid[25] ),
- .pri_in( pri25 ),
- .pri_out( pri25_out )
- );
-wb_dma_pri_enc_sub #(ch26_conf,pri_sel) u26(
- .valid( valid[26] ),
- .pri_in( pri26 ),
- .pri_out( pri26_out )
- );
-wb_dma_pri_enc_sub #(ch27_conf,pri_sel) u27(
- .valid( valid[27] ),
- .pri_in( pri27 ),
- .pri_out( pri27_out )
- );
-wb_dma_pri_enc_sub #(ch28_conf,pri_sel) u28(
- .valid( valid[28] ),
- .pri_in( pri28 ),
- .pri_out( pri28_out )
- );
-wb_dma_pri_enc_sub #(ch29_conf,pri_sel) u29(
- .valid( valid[29] ),
- .pri_in( pri29 ),
- .pri_out( pri29_out )
- );
-wb_dma_pri_enc_sub #(ch30_conf,pri_sel) u30(
- .valid( valid[30] ),
- .pri_in( pri30 ),
- .pri_out( pri30_out )
- );
-
-assign pri_out_tmp = pri0_out | pri1_out | pri2_out | pri3_out |
- pri4_out | pri5_out | pri6_out | pri7_out |
- pri8_out | pri9_out | pri10_out | pri11_out |
- pri12_out | pri13_out | pri14_out | pri15_out |
- pri16_out | pri17_out | pri18_out | pri19_out |
- pri20_out | pri21_out | pri22_out | pri23_out |
- pri24_out | pri25_out | pri26_out | pri27_out |
- pri28_out | pri29_out | pri30_out;
-
-// 8 Priority Levels
-always @(posedge clk)
- if(pri_out_tmp[7]) pri_out2 <= #1 3'h7;
- else
- if(pri_out_tmp[6]) pri_out2 <= #1 3'h6;
- else
- if(pri_out_tmp[5]) pri_out2 <= #1 3'h5;
- else
- if(pri_out_tmp[4]) pri_out2 <= #1 3'h4;
- else
- if(pri_out_tmp[3]) pri_out2 <= #1 3'h3;
- else
- if(pri_out_tmp[2]) pri_out2 <= #1 3'h2;
- else
- if(pri_out_tmp[1]) pri_out2 <= #1 3'h1;
- else pri_out2 <= #1 3'h0;
-
-// 4 Priority Levels
-always @(posedge clk)
- if(pri_out_tmp[3]) pri_out1 <= #1 3'h3;
- else
- if(pri_out_tmp[2]) pri_out1 <= #1 3'h2;
- else
- if(pri_out_tmp[1]) pri_out1 <= #1 3'h1;
- else pri_out1 <= #1 3'h0;
-
-// 2 Priority Levels
-always @(posedge clk)
- if(pri_out_tmp[1]) pri_out0 <= #1 3'h1;
- else pri_out0 <= #1 3'h0;
-
-// Select configured priority
-always @(pri_sel or pri_out0 or pri_out1 or pri_out2)
- case(pri_sel) // synopsys parallel_case full_case
- 2'd0: pri_out = pri_out0;
- 2'd1: pri_out = pri_out1;
- 2'd2: pri_out = pri_out2;
- endcase
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_wb_mast.v
===================================================================
--- trunk/rtl/verilog/wb_dma_wb_mast.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_wb_mast.v (nonexistent)
@@ -1,166 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA WISHBONE Master Interface ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_wb_mast.v,v 1.2 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.2 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $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.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:11:05 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_wb_mast(clk, rst,
-
- wb_data_i, wb_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o,
- wb_stb_o, wb_ack_i, wb_err_i, wb_rty_i,
-
- mast_go, mast_we, mast_adr, mast_din, mast_dout, mast_err,
- mast_drdy, mast_wait,
-
- pt_sel, mast_pt_in, mast_pt_out
- );
-
-input clk, rst;
-
-// --------------------------------------
-// WISHBONE INTERFACE
-
-input [31:0] wb_data_i;
-output [31:0] wb_data_o;
-output [31:0] wb_addr_o;
-output [3:0] wb_sel_o;
-output wb_we_o;
-output wb_cyc_o;
-output wb_stb_o;
-input wb_ack_i;
-input wb_err_i;
-input wb_rty_i;
-
-// --------------------------------------
-// INTERNAL DMA INTERFACE
-input mast_go; // Perform a Master Cycle (as long as this
- // line is asserted)
-input mast_we; // Read/Write
-input [31:0] mast_adr; // Address for the transfer
-input [31:0] mast_din; // Internal Input Data
-output [31:0] mast_dout; // Internal Output Data
-output mast_err; // Indicates an error has occurred
-
-output mast_drdy; // Indicated that either data is available
- // during a read, or that the master can accept
- // the next data during a write
-input mast_wait; // Tells the master to insert wait cycles
- // because data can not be accepted/provided
-
-// Pass Through Interface
-input pt_sel; // Pass Through Mode Selected
-input [70:0] mast_pt_in; // Grouped WISHBONE inputs
-output [34:0] mast_pt_out; // Grouped WISHBONE outputs
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-reg mast_cyc, mast_stb;
-reg mast_we_r;
-reg [3:0] mast_be;
-reg [31:0] mast_dout;
-
-////////////////////////////////////////////////////////////////////
-//
-// Pass-Through Interface
-//
-
-assign {wb_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o, wb_stb_o} =
- pt_sel ? mast_pt_in :
- {mast_din, mast_adr, mast_be, mast_we_r, mast_cyc, mast_stb};
-
-assign mast_pt_out = {wb_data_i, wb_ack_i, wb_err_i, wb_rty_i};
-
-////////////////////////////////////////////////////////////////////
-//
-// DMA Engine Interface
-//
-
-always @(posedge clk)
- if(wb_ack_i) mast_dout <= #1 wb_data_i;
-
-always @(posedge clk)
- mast_be <= #1 4'hf;
-
-always @(posedge clk)
- mast_we_r <= #1 mast_we;
-
-always @(posedge clk)
- mast_cyc <= #1 mast_go;
-
-always @(posedge clk)
- mast_stb <= #1 mast_go & !mast_wait;
-
-assign mast_drdy = wb_ack_i;
-assign mast_err = wb_err_i;
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_wb_slv.v
===================================================================
--- trunk/rtl/verilog/wb_dma_wb_slv.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_wb_slv.v (nonexistent)
@@ -1,176 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA WISHBONE Slave Interface ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_wb_slv.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.4 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:59 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_wb_slv(clk, rst,
-
- wb_data_i, wb_data_o, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i,
- wb_stb_i, wb_ack_o, wb_err_o, wb_rty_o,
-
- // This is the register File Interface
- slv_adr, slv_din, slv_dout, slv_re, slv_we,
-
- // Pass through Interface
- pt_sel, slv_pt_out, slv_pt_in
-
- );
-
-parameter rf_addr = 0;
-
-input clk, rst;
-
-// --------------------------------------
-// WISHBONE INTERFACE
-
-input [31:0] wb_data_i;
-output [31:0] wb_data_o;
-input [31:0] wb_addr_i;
-input [3:0] wb_sel_i;
-input wb_we_i;
-input wb_cyc_i;
-input wb_stb_i;
-output wb_ack_o;
-output wb_err_o;
-output wb_rty_o;
-
-// This is the register File Interface
-output [31:0] slv_adr; // Slave Address
-input [31:0] slv_din; // Slave Input Data
-output [31:0] slv_dout; // Slave Output Data
-output slv_re; // Slave Read Enable
-output slv_we; // Slave Write Enable
-
-// Pass through Interface
-output pt_sel; // Pass Through Mode Active
-output [70:0] slv_pt_out; // Grouped WISHBONE out signals
-input [34:0] slv_pt_in; // Grouped WISHBONE in signals
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-reg slv_re, slv_we;
-wire rf_sel;
-reg rf_ack;
-reg [31:0] slv_adr, slv_dout;
-
-////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-assign rf_sel = `WDMA_REG_SEL ;
-
-////////////////////////////////////////////////////////////////////
-//
-// Pass Through Logic
-//
-
-//assign pt_sel = !rf_sel;
-assign pt_sel = !rf_sel & wb_cyc_i;
-
-assign slv_pt_out = {wb_data_i, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i, wb_stb_i};
-assign {wb_data_o, wb_ack_o, wb_err_o, wb_rty_o} = pt_sel ? slv_pt_in :
- {slv_din, rf_ack, 1'b0, 1'b0};
-
-////////////////////////////////////////////////////////////////////
-//
-// Register File Logic
-//
-
-always @(posedge clk)
- slv_adr <= #1 wb_addr_i;
-
-always @(posedge clk)
- slv_re <= #1 rf_sel & wb_cyc_i & wb_stb_i & !wb_we_i & !rf_ack & !slv_re;
-
-always @(posedge clk)
- slv_we <= #1 rf_sel & wb_cyc_i & wb_stb_i & wb_we_i & !rf_ack;
-
-always @(posedge clk)
- slv_dout <= #1 wb_data_i;
-
-always @(posedge clk)
- rf_ack <= #1 (slv_re | slv_we) & wb_cyc_i & wb_stb_i & !rf_ack ;
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_ch_sel.v
===================================================================
--- trunk/rtl/verilog/wb_dma_ch_sel.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_ch_sel.v (nonexistent)
@@ -1,1388 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Channel Select ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_ch_sel.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.4 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.4 2001/06/14 08:52:00 rudi
-//
-//
-// Changed arbiter module name.
-//
-// Revision 1.3 2001/06/13 02:26:48 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.2 2001/06/05 10:22:36 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:35 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_ch_sel(clk, rst,
-
- // DMA Request Lines
- req_i, ack_o, nd_i,
-
- // DMA Registers Inputs
- pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1,
- pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1,
- pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1,
- pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1,
- pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1,
- pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1,
- pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1,
- pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1,
- pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1,
- pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1,
- pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1,
- pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1,
- pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1,
- pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1,
- pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1,
- pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1,
- pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1,
- pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1,
- pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1,
- pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1,
- pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1,
- pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1,
- pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1,
- pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1,
- pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1,
- pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1,
- pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1,
- pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1,
- pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1,
- pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1,
- pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1,
-
- // DMA Registers Write Back Channel Select
- ch_sel, ndnr,
-
- // DMA Engine Interface
- de_start, ndr, csr, pointer, txsz, adr0, adr1, am0, am1,
- pointer_s, next_ch, de_ack, dma_busy
- );
-
-////////////////////////////////////////////////////////////////////
-//
-// Module Parameters
-//
-
-// chXX_conf = { CBUF, ED, ARS, EN }
-parameter [1:0] pri_sel = 2'h0;
-parameter [3:0] ch0_conf = 4'h1;
-parameter [3:0] ch1_conf = 4'h0;
-parameter [3:0] ch2_conf = 4'h0;
-parameter [3:0] ch3_conf = 4'h0;
-parameter [3:0] ch4_conf = 4'h0;
-parameter [3:0] ch5_conf = 4'h0;
-parameter [3:0] ch6_conf = 4'h0;
-parameter [3:0] ch7_conf = 4'h0;
-parameter [3:0] ch8_conf = 4'h0;
-parameter [3:0] ch9_conf = 4'h0;
-parameter [3:0] ch10_conf = 4'h0;
-parameter [3:0] ch11_conf = 4'h0;
-parameter [3:0] ch12_conf = 4'h0;
-parameter [3:0] ch13_conf = 4'h0;
-parameter [3:0] ch14_conf = 4'h0;
-parameter [3:0] ch15_conf = 4'h0;
-parameter [3:0] ch16_conf = 4'h0;
-parameter [3:0] ch17_conf = 4'h0;
-parameter [3:0] ch18_conf = 4'h0;
-parameter [3:0] ch19_conf = 4'h0;
-parameter [3:0] ch20_conf = 4'h0;
-parameter [3:0] ch21_conf = 4'h0;
-parameter [3:0] ch22_conf = 4'h0;
-parameter [3:0] ch23_conf = 4'h0;
-parameter [3:0] ch24_conf = 4'h0;
-parameter [3:0] ch25_conf = 4'h0;
-parameter [3:0] ch26_conf = 4'h0;
-parameter [3:0] ch27_conf = 4'h0;
-parameter [3:0] ch28_conf = 4'h0;
-parameter [3:0] ch29_conf = 4'h0;
-parameter [3:0] ch30_conf = 4'h0;
-
-////////////////////////////////////////////////////////////////////
-//
-// Module IOs
-//
-
-input clk, rst;
-
-// DMA Request Lines
-input [30:0] req_i;
-output [30:0] ack_o;
-input [30:0] nd_i;
-
-// Channel Registers Inputs
-input [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
-input [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
-input [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
-input [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
-input [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
-input [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
-input [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
-input [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
-input [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
-input [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
-input [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
-input [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
-input [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
-input [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
-input [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
-input [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
-input [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
-input [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
-input [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
-input [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
-input [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
-input [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
-input [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
-input [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
-input [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
-input [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
-input [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
-input [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
-input [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
-input [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
-input [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
-
-output [4:0] ch_sel; // Write Back Channel Select
-output [30:0] ndnr; // Next Descriptor No Request
-
-output de_start; // Start DMA Engine Indicator
-output ndr; // Next Descriptor With Request (for current channel)
-output [31:0] csr; // Selected Channel CSR
-output [31:0] pointer; // LL Descriptor pointer
-output [31:0] pointer_s; // LL Descriptor previous pointer
-output [31:0] txsz; // Selected Channel Transfer Size
-output [31:0] adr0, adr1; // Selected Channel Addresses
-output [31:0] am0, am1; // Selected Channel Address Masks
-
-input next_ch; // Indicates the DMA Engine is done
- // with current transfer
-input de_ack; // DMA engine ack output
-
-input dma_busy;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires and Registers
-//
-
-reg [30:0] ack_o;
-wire [30:0] valid; // Indicates which channel is valid
-reg valid_sel;
-reg [30:0] req_r; // Channel Request inputs
-reg [30:0] ndr_r; // Next Descriptor Registered (and Request)
-reg [30:0] ndnr; // Next Descriptor Registered (and Not Request)
-wire [2:0] pri_out; // Highest unserviced priority
-wire [2:0] pri0, pri1, pri2, pri3; // Channel Priorities
-wire [2:0] pri4, pri5, pri6, pri7;
-wire [2:0] pri8, pri9, pri10, pri11;
-wire [2:0] pri12, pri13, pri14, pri15;
-wire [2:0] pri16, pri17, pri18, pri19;
-wire [2:0] pri20, pri21, pri22, pri23;
-wire [2:0] pri24, pri25, pri26, pri27;
-wire [2:0] pri28, pri29, pri30;
-reg [4:0] ch_sel_d;
-reg [4:0] ch_sel_r;
-
-reg ndr;
-reg next_start;
-reg de_start_r;
-reg [31:0] csr; // Selected Channel CSR
-reg [31:0] pointer;
-reg [31:0] pointer_s;
-reg [31:0] txsz; // Selected Channel Transfer Size
-reg [31:0] adr0, adr1; // Selected Channel Addresses
-reg [31:0] am0, am1; // Selected Channel Address Masks
-
- // Arbiter Request Inputs
-wire [30:0] req_p0, req_p1, req_p2, req_p3;
-wire [30:0] req_p4, req_p5, req_p6, req_p7;
-wire [30:0] req_p8, req_p9, req_p10, req_p11;
-wire [30:0] req_p12, req_p13, req_p14, req_p15;
-wire [30:0] req_p16, req_p17, req_p18, req_p19;
-wire [30:0] req_p20, req_p21, req_p22, req_p23;
-wire [30:0] req_p24, req_p25, req_p26, req_p27;
-wire [30:0] req_p28, req_p29, req_p30;
- // Arbiter Grant Outputs
-wire [4:0] gnt_p0_d, gnt_p1_d, gnt_p2_d, gnt_p3_d;
-wire [4:0] gnt_p4_d, gnt_p5_d, gnt_p6_d, gnt_p7_d;
-wire [4:0] gnt_p0, gnt_p1, gnt_p2, gnt_p3;
-wire [4:0] gnt_p4, gnt_p5, gnt_p6, gnt_p7;
-wire [4:0] gnt_p8, gnt_p9, gnt_p10, gnt_p11;
-wire [4:0] gnt_p12, gnt_p13, gnt_p14, gnt_p15;
-wire [4:0] gnt_p16, gnt_p17, gnt_p18, gnt_p19;
-wire [4:0] gnt_p20, gnt_p21, gnt_p22, gnt_p23;
-wire [4:0] gnt_p24, gnt_p25, gnt_p26, gnt_p27;
-wire [4:0] gnt_p28, gnt_p29, gnt_p30;
-
-
-////////////////////////////////////////////////////////////////////
-//
-// Aliases
-//
-
-assign pri0[0] = ch0_csr[13];
-assign pri0[1] = (pri_sel == 2'd0) ? 1'b0 : ch0_csr[14];
-assign pri0[2] = (pri_sel == 2'd2) ? ch0_csr[15] : 1'b0;
-assign pri1[0] = ch1_csr[13];
-assign pri1[1] = (pri_sel == 2'd0) ? 1'b0 : ch1_csr[14];
-assign pri1[2] = (pri_sel == 2'd2) ? ch1_csr[15] : 1'b0;
-assign pri2[0] = ch2_csr[13];
-assign pri2[1] = (pri_sel == 2'd0) ? 1'b0 : ch2_csr[14];
-assign pri2[2] = (pri_sel == 2'd2) ? ch2_csr[15] : 1'b0;
-assign pri3[0] = ch3_csr[13];
-assign pri3[1] = (pri_sel == 2'd0) ? 1'b0 : ch3_csr[14];
-assign pri3[2] = (pri_sel == 2'd2) ? ch3_csr[15] : 1'b0;
-assign pri4[0] = ch4_csr[13];
-assign pri4[1] = (pri_sel == 2'd0) ? 1'b0 : ch4_csr[14];
-assign pri4[2] = (pri_sel == 2'd2) ? ch4_csr[15] : 1'b0;
-assign pri5[0] = ch5_csr[13];
-assign pri5[1] = (pri_sel == 2'd0) ? 1'b0 : ch5_csr[14];
-assign pri5[2] = (pri_sel == 2'd2) ? ch5_csr[15] : 1'b0;
-assign pri6[0] = ch6_csr[13];
-assign pri6[1] = (pri_sel == 2'd0) ? 1'b0 : ch6_csr[14];
-assign pri6[2] = (pri_sel == 2'd2) ? ch6_csr[15] : 1'b0;
-assign pri7[0] = ch7_csr[13];
-assign pri7[1] = (pri_sel == 2'd0) ? 1'b0 : ch7_csr[14];
-assign pri7[2] = (pri_sel == 2'd2) ? ch7_csr[15] : 1'b0;
-assign pri8[0] = ch8_csr[13];
-assign pri8[1] = (pri_sel == 2'd0) ? 1'b0 : ch8_csr[14];
-assign pri8[2] = (pri_sel == 2'd2) ? ch8_csr[15] : 1'b0;
-assign pri9[0] = ch9_csr[13];
-assign pri9[1] = (pri_sel == 2'd0) ? 1'b0 : ch9_csr[14];
-assign pri9[2] = (pri_sel == 2'd2) ? ch9_csr[15] : 1'b0;
-assign pri10[0] = ch10_csr[13];
-assign pri10[1] = (pri_sel == 2'd0) ? 1'b0 : ch10_csr[14];
-assign pri10[2] = (pri_sel == 2'd2) ? ch10_csr[15] : 1'b0;
-assign pri11[0] = ch11_csr[13];
-assign pri11[1] = (pri_sel == 2'd0) ? 1'b0 : ch11_csr[14];
-assign pri11[2] = (pri_sel == 2'd2) ? ch11_csr[15] : 1'b0;
-assign pri12[0] = ch12_csr[13];
-assign pri12[1] = (pri_sel == 2'd0) ? 1'b0 : ch12_csr[14];
-assign pri12[2] = (pri_sel == 2'd2) ? ch12_csr[15] : 1'b0;
-assign pri13[0] = ch13_csr[13];
-assign pri13[1] = (pri_sel == 2'd0) ? 1'b0 : ch13_csr[14];
-assign pri13[2] = (pri_sel == 2'd2) ? ch13_csr[15] : 1'b0;
-assign pri14[0] = ch14_csr[13];
-assign pri14[1] = (pri_sel == 2'd0) ? 1'b0 : ch14_csr[14];
-assign pri14[2] = (pri_sel == 2'd2) ? ch14_csr[15] : 1'b0;
-assign pri15[0] = ch15_csr[13];
-assign pri15[1] = (pri_sel == 2'd0) ? 1'b0 : ch15_csr[14];
-assign pri15[2] = (pri_sel == 2'd2) ? ch15_csr[15] : 1'b0;
-assign pri16[0] = ch16_csr[13];
-assign pri16[1] = (pri_sel == 2'd0) ? 1'b0 : ch16_csr[14];
-assign pri16[2] = (pri_sel == 2'd2) ? ch16_csr[15] : 1'b0;
-assign pri17[0] = ch17_csr[13];
-assign pri17[1] = (pri_sel == 2'd0) ? 1'b0 : ch17_csr[14];
-assign pri17[2] = (pri_sel == 2'd2) ? ch17_csr[15] : 1'b0;
-assign pri18[0] = ch18_csr[13];
-assign pri18[1] = (pri_sel == 2'd0) ? 1'b0 : ch18_csr[14];
-assign pri18[2] = (pri_sel == 2'd2) ? ch18_csr[15] : 1'b0;
-assign pri19[0] = ch19_csr[13];
-assign pri19[1] = (pri_sel == 2'd0) ? 1'b0 : ch19_csr[14];
-assign pri19[2] = (pri_sel == 2'd2) ? ch19_csr[15] : 1'b0;
-assign pri20[0] = ch20_csr[13];
-assign pri20[1] = (pri_sel == 2'd0) ? 1'b0 : ch20_csr[14];
-assign pri20[2] = (pri_sel == 2'd2) ? ch20_csr[15] : 1'b0;
-assign pri21[0] = ch21_csr[13];
-assign pri21[1] = (pri_sel == 2'd0) ? 1'b0 : ch21_csr[14];
-assign pri21[2] = (pri_sel == 2'd2) ? ch21_csr[15] : 1'b0;
-assign pri22[0] = ch22_csr[13];
-assign pri22[1] = (pri_sel == 2'd0) ? 1'b0 : ch22_csr[14];
-assign pri22[2] = (pri_sel == 2'd2) ? ch22_csr[15] : 1'b0;
-assign pri23[0] = ch23_csr[13];
-assign pri23[1] = (pri_sel == 2'd0) ? 1'b0 : ch23_csr[14];
-assign pri23[2] = (pri_sel == 2'd2) ? ch23_csr[15] : 1'b0;
-assign pri24[0] = ch24_csr[13];
-assign pri24[1] = (pri_sel == 2'd0) ? 1'b0 : ch24_csr[14];
-assign pri24[2] = (pri_sel == 2'd2) ? ch24_csr[15] : 1'b0;
-assign pri25[0] = ch25_csr[13];
-assign pri25[1] = (pri_sel == 2'd0) ? 1'b0 : ch25_csr[14];
-assign pri25[2] = (pri_sel == 2'd2) ? ch25_csr[15] : 1'b0;
-assign pri26[0] = ch26_csr[13];
-assign pri26[1] = (pri_sel == 2'd0) ? 1'b0 : ch26_csr[14];
-assign pri26[2] = (pri_sel == 2'd2) ? ch26_csr[15] : 1'b0;
-assign pri27[0] = ch27_csr[13];
-assign pri27[1] = (pri_sel == 2'd0) ? 1'b0 : ch27_csr[14];
-assign pri27[2] = (pri_sel == 2'd2) ? ch27_csr[15] : 1'b0;
-assign pri28[0] = ch28_csr[13];
-assign pri28[1] = (pri_sel == 2'd0) ? 1'b0 : ch28_csr[14];
-assign pri28[2] = (pri_sel == 2'd2) ? ch28_csr[15] : 1'b0;
-assign pri29[0] = ch29_csr[13];
-assign pri29[1] = (pri_sel == 2'd0) ? 1'b0 : ch29_csr[14];
-assign pri29[2] = (pri_sel == 2'd2) ? ch29_csr[15] : 1'b0;
-assign pri30[0] = ch30_csr[13];
-assign pri30[1] = (pri_sel == 2'd0) ? 1'b0 : ch30_csr[14];
-assign pri30[2] = (pri_sel == 2'd2) ? ch30_csr[15] : 1'b0;
-
-////////////////////////////////////////////////////////////////////
-//
-// Misc logic
-//
-
-// Chanel Valid flag
-// The valid flag is asserted when the channel is enabled,
-// and is either in "normal mode" (software control) or
-// "hw handshake mode" (reqN control)
-// validN = ch_enabled & (sw_mode | (hw_mode & reqN) )
-
-always @(posedge clk)
- req_r <= #1 req_i & ~ack_o;
-
-assign valid[0] = ch0_conf[0] & ch0_csr[`WDMA_CH_EN] & (ch0_csr[`WDMA_MODE] ? (req_r[0] & !ack_o[0]) : 1'b1);
-assign valid[1] = ch1_conf[0] & ch1_csr[`WDMA_CH_EN] & (ch1_csr[`WDMA_MODE] ? (req_r[1] & !ack_o[1]) : 1'b1);
-assign valid[2] = ch2_conf[0] & ch2_csr[`WDMA_CH_EN] & (ch2_csr[`WDMA_MODE] ? (req_r[2] & !ack_o[2]) : 1'b1);
-assign valid[3] = ch3_conf[0] & ch3_csr[`WDMA_CH_EN] & (ch3_csr[`WDMA_MODE] ? (req_r[3] & !ack_o[3]) : 1'b1);
-assign valid[4] = ch4_conf[0] & ch4_csr[`WDMA_CH_EN] & (ch4_csr[`WDMA_MODE] ? (req_r[4] & !ack_o[4]) : 1'b1);
-assign valid[5] = ch5_conf[0] & ch5_csr[`WDMA_CH_EN] & (ch5_csr[`WDMA_MODE] ? (req_r[5] & !ack_o[5]) : 1'b1);
-assign valid[6] = ch6_conf[0] & ch6_csr[`WDMA_CH_EN] & (ch6_csr[`WDMA_MODE] ? (req_r[6] & !ack_o[6]) : 1'b1);
-assign valid[7] = ch7_conf[0] & ch7_csr[`WDMA_CH_EN] & (ch7_csr[`WDMA_MODE] ? (req_r[7] & !ack_o[7]) : 1'b1);
-assign valid[8] = ch8_conf[0] & ch8_csr[`WDMA_CH_EN] & (ch8_csr[`WDMA_MODE] ? (req_r[8] & !ack_o[8]) : 1'b1);
-assign valid[9] = ch9_conf[0] & ch9_csr[`WDMA_CH_EN] & (ch9_csr[`WDMA_MODE] ? (req_r[9] & !ack_o[9]) : 1'b1);
-assign valid[10] = ch10_conf[0] & ch10_csr[`WDMA_CH_EN] & (ch10_csr[`WDMA_MODE] ? (req_r[10] & !ack_o[10]) : 1'b1);
-assign valid[11] = ch11_conf[0] & ch11_csr[`WDMA_CH_EN] & (ch11_csr[`WDMA_MODE] ? (req_r[11] & !ack_o[11]) : 1'b1);
-assign valid[12] = ch12_conf[0] & ch12_csr[`WDMA_CH_EN] & (ch12_csr[`WDMA_MODE] ? (req_r[12] & !ack_o[12]) : 1'b1);
-assign valid[13] = ch13_conf[0] & ch13_csr[`WDMA_CH_EN] & (ch13_csr[`WDMA_MODE] ? (req_r[13] & !ack_o[13]) : 1'b1);
-assign valid[14] = ch14_conf[0] & ch14_csr[`WDMA_CH_EN] & (ch14_csr[`WDMA_MODE] ? (req_r[14] & !ack_o[14]) : 1'b1);
-assign valid[15] = ch15_conf[0] & ch15_csr[`WDMA_CH_EN] & (ch15_csr[`WDMA_MODE] ? (req_r[15] & !ack_o[15]) : 1'b1);
-assign valid[16] = ch16_conf[0] & ch16_csr[`WDMA_CH_EN] & (ch16_csr[`WDMA_MODE] ? (req_r[16] & !ack_o[16]) : 1'b1);
-assign valid[17] = ch17_conf[0] & ch17_csr[`WDMA_CH_EN] & (ch17_csr[`WDMA_MODE] ? (req_r[17] & !ack_o[17]) : 1'b1);
-assign valid[18] = ch18_conf[0] & ch18_csr[`WDMA_CH_EN] & (ch18_csr[`WDMA_MODE] ? (req_r[18] & !ack_o[18]) : 1'b1);
-assign valid[19] = ch19_conf[0] & ch19_csr[`WDMA_CH_EN] & (ch19_csr[`WDMA_MODE] ? (req_r[19] & !ack_o[19]) : 1'b1);
-assign valid[20] = ch20_conf[0] & ch20_csr[`WDMA_CH_EN] & (ch20_csr[`WDMA_MODE] ? (req_r[20] & !ack_o[20]) : 1'b1);
-assign valid[21] = ch21_conf[0] & ch21_csr[`WDMA_CH_EN] & (ch21_csr[`WDMA_MODE] ? (req_r[21] & !ack_o[21]) : 1'b1);
-assign valid[22] = ch22_conf[0] & ch22_csr[`WDMA_CH_EN] & (ch22_csr[`WDMA_MODE] ? (req_r[22] & !ack_o[22]) : 1'b1);
-assign valid[23] = ch23_conf[0] & ch23_csr[`WDMA_CH_EN] & (ch23_csr[`WDMA_MODE] ? (req_r[23] & !ack_o[23]) : 1'b1);
-assign valid[24] = ch24_conf[0] & ch24_csr[`WDMA_CH_EN] & (ch24_csr[`WDMA_MODE] ? (req_r[24] & !ack_o[24]) : 1'b1);
-assign valid[25] = ch25_conf[0] & ch25_csr[`WDMA_CH_EN] & (ch25_csr[`WDMA_MODE] ? (req_r[25] & !ack_o[25]) : 1'b1);
-assign valid[26] = ch26_conf[0] & ch26_csr[`WDMA_CH_EN] & (ch26_csr[`WDMA_MODE] ? (req_r[26] & !ack_o[26]) : 1'b1);
-assign valid[27] = ch27_conf[0] & ch27_csr[`WDMA_CH_EN] & (ch27_csr[`WDMA_MODE] ? (req_r[27] & !ack_o[27]) : 1'b1);
-assign valid[28] = ch28_conf[0] & ch28_csr[`WDMA_CH_EN] & (ch28_csr[`WDMA_MODE] ? (req_r[28] & !ack_o[28]) : 1'b1);
-assign valid[29] = ch29_conf[0] & ch29_csr[`WDMA_CH_EN] & (ch29_csr[`WDMA_MODE] ? (req_r[29] & !ack_o[29]) : 1'b1);
-assign valid[30] = ch30_conf[0] & ch30_csr[`WDMA_CH_EN] & (ch30_csr[`WDMA_MODE] ? (req_r[30] & !ack_o[30]) : 1'b1);
-
-always @(posedge clk)
- ndr_r <= #1 nd_i & req_i;
-
-always @(posedge clk)
- ndnr <= #1 nd_i & ~req_i;
-
-// Start Signal for DMA engine
-assign de_start = (valid_sel & !de_start_r ) | next_start;
-
-always @(posedge clk)
- de_start_r <= #1 valid_sel;
-
-always @(posedge clk)
- next_start <= #1 next_ch & valid_sel;
-
-// Ack outputs for HW handshake mode
-always @(posedge clk)
- ack_o[0] <= #1 ch0_conf[0] & (ch_sel == 5'h0) & ch0_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[1] <= #1 ch1_conf[0] & (ch_sel == 5'h1) & ch1_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[2] <= #1 ch2_conf[0] & (ch_sel == 5'h2) & ch2_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[3] <= #1 ch3_conf[0] & (ch_sel == 5'h3) & ch3_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[4] <= #1 ch4_conf[0] & (ch_sel == 5'h4) & ch4_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[5] <= #1 ch5_conf[0] & (ch_sel == 5'h5) & ch5_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[6] <= #1 ch6_conf[0] & (ch_sel == 5'h6) & ch6_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[7] <= #1 ch7_conf[0] & (ch_sel == 5'h7) & ch7_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[8] <= #1 ch8_conf[0] & (ch_sel == 5'h8) & ch8_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[9] <= #1 ch9_conf[0] & (ch_sel == 5'h9) & ch9_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[10] <= #1 ch10_conf[0] & (ch_sel == 5'ha) & ch10_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[11] <= #1 ch11_conf[0] & (ch_sel == 5'hb) & ch11_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[12] <= #1 ch12_conf[0] & (ch_sel == 5'hc) & ch12_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[13] <= #1 ch13_conf[0] & (ch_sel == 5'hd) & ch13_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[14] <= #1 ch14_conf[0] & (ch_sel == 5'he) & ch14_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[15] <= #1 ch15_conf[0] & (ch_sel == 5'hf) & ch15_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[16] <= #1 ch16_conf[0] & (ch_sel == 5'h10) & ch16_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[17] <= #1 ch17_conf[0] & (ch_sel == 5'h11) & ch17_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[18] <= #1 ch18_conf[0] & (ch_sel == 5'h12) & ch18_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[19] <= #1 ch19_conf[0] & (ch_sel == 5'h13) & ch19_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[20] <= #1 ch20_conf[0] & (ch_sel == 5'h14) & ch20_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[21] <= #1 ch21_conf[0] & (ch_sel == 5'h15) & ch21_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[22] <= #1 ch22_conf[0] & (ch_sel == 5'h16) & ch22_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[23] <= #1 ch23_conf[0] & (ch_sel == 5'h17) & ch23_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[24] <= #1 ch24_conf[0] & (ch_sel == 5'h18) & ch24_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[25] <= #1 ch25_conf[0] & (ch_sel == 5'h19) & ch25_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[26] <= #1 ch26_conf[0] & (ch_sel == 5'h1a) & ch26_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[27] <= #1 ch27_conf[0] & (ch_sel == 5'h1b) & ch27_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[28] <= #1 ch28_conf[0] & (ch_sel == 5'h1c) & ch28_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[29] <= #1 ch29_conf[0] & (ch_sel == 5'h1d) & ch29_csr[`WDMA_MODE] & de_ack;
-
-always @(posedge clk)
- ack_o[30] <= #1 ch30_conf[0] & (ch_sel == 5'h1e) & ch30_csr[`WDMA_MODE] & de_ack;
-
-// Channel Select
-always @(posedge clk or negedge rst)
- if(!rst) ch_sel_r <= #1 0;
- else
- if(de_start) ch_sel_r <= #1 ch_sel_d;
-
-assign ch_sel = !dma_busy ? ch_sel_d : ch_sel_r;
-
-////////////////////////////////////////////////////////////////////
-//
-// Select Registers based on arbiter (and priority) outputs
-//
-
-always @(ch_sel or valid)
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: valid_sel = valid[0];
- 5'h1: valid_sel = valid[1];
- 5'h2: valid_sel = valid[2];
- 5'h3: valid_sel = valid[3];
- 5'h4: valid_sel = valid[4];
- 5'h5: valid_sel = valid[5];
- 5'h6: valid_sel = valid[6];
- 5'h7: valid_sel = valid[7];
- 5'h8: valid_sel = valid[8];
- 5'h9: valid_sel = valid[9];
- 5'ha: valid_sel = valid[10];
- 5'hb: valid_sel = valid[11];
- 5'hc: valid_sel = valid[12];
- 5'hd: valid_sel = valid[13];
- 5'he: valid_sel = valid[14];
- 5'hf: valid_sel = valid[15];
- 5'h10: valid_sel = valid[16];
- 5'h11: valid_sel = valid[17];
- 5'h12: valid_sel = valid[18];
- 5'h13: valid_sel = valid[19];
- 5'h14: valid_sel = valid[20];
- 5'h15: valid_sel = valid[21];
- 5'h16: valid_sel = valid[22];
- 5'h17: valid_sel = valid[23];
- 5'h18: valid_sel = valid[24];
- 5'h19: valid_sel = valid[25];
- 5'h1a: valid_sel = valid[26];
- 5'h1b: valid_sel = valid[27];
- 5'h1c: valid_sel = valid[28];
- 5'h1d: valid_sel = valid[29];
- 5'h1e: valid_sel = valid[30];
- endcase
-
-always @(ch_sel or ndr_r)
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: ndr = ndr_r[0];
- 5'h1: ndr = ndr_r[1];
- 5'h2: ndr = ndr_r[2];
- 5'h3: ndr = ndr_r[3];
- 5'h4: ndr = ndr_r[4];
- 5'h5: ndr = ndr_r[5];
- 5'h6: ndr = ndr_r[6];
- 5'h7: ndr = ndr_r[7];
- 5'h8: ndr = ndr_r[8];
- 5'h9: ndr = ndr_r[9];
- 5'ha: ndr = ndr_r[10];
- 5'hb: ndr = ndr_r[11];
- 5'hc: ndr = ndr_r[12];
- 5'hd: ndr = ndr_r[13];
- 5'he: ndr = ndr_r[14];
- 5'hf: ndr = ndr_r[15];
- 5'h10: ndr = ndr_r[16];
- 5'h11: ndr = ndr_r[17];
- 5'h12: ndr = ndr_r[18];
- 5'h13: ndr = ndr_r[19];
- 5'h14: ndr = ndr_r[20];
- 5'h15: ndr = ndr_r[21];
- 5'h16: ndr = ndr_r[22];
- 5'h17: ndr = ndr_r[23];
- 5'h18: ndr = ndr_r[24];
- 5'h19: ndr = ndr_r[25];
- 5'h1a: ndr = ndr_r[26];
- 5'h1b: ndr = ndr_r[27];
- 5'h1c: ndr = ndr_r[28];
- 5'h1d: ndr = ndr_r[29];
- 5'h1e: ndr = ndr_r[30];
- endcase
-
-always @(ch_sel or pointer0 or pointer1 or pointer2 or pointer3 or pointer4
- or pointer5 or pointer6 or pointer7 or pointer8 or pointer9
- or pointer10 or pointer11 or pointer12 or pointer13 or pointer14
- or pointer15 or pointer16 or pointer17 or pointer18 or pointer19
- or pointer20 or pointer21 or pointer22 or pointer23 or pointer24
- or pointer25 or pointer26 or pointer27 or pointer28 or pointer29
- or pointer30 )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: pointer = pointer0;
- 5'h1: pointer = pointer1;
- 5'h2: pointer = pointer2;
- 5'h3: pointer = pointer3;
- 5'h4: pointer = pointer4;
- 5'h5: pointer = pointer5;
- 5'h6: pointer = pointer6;
- 5'h7: pointer = pointer7;
- 5'h8: pointer = pointer8;
- 5'h9: pointer = pointer9;
- 5'ha: pointer = pointer10;
- 5'hb: pointer = pointer11;
- 5'hc: pointer = pointer12;
- 5'hd: pointer = pointer13;
- 5'he: pointer = pointer14;
- 5'hf: pointer = pointer15;
- 5'h10: pointer = pointer16;
- 5'h11: pointer = pointer17;
- 5'h12: pointer = pointer18;
- 5'h13: pointer = pointer19;
- 5'h14: pointer = pointer20;
- 5'h15: pointer = pointer21;
- 5'h16: pointer = pointer22;
- 5'h17: pointer = pointer23;
- 5'h18: pointer = pointer24;
- 5'h19: pointer = pointer25;
- 5'h1a: pointer = pointer26;
- 5'h1b: pointer = pointer27;
- 5'h1c: pointer = pointer28;
- 5'h1d: pointer = pointer29;
- 5'h1e: pointer = pointer30;
- endcase
-
-always @(ch_sel or pointer0_s or pointer1_s or pointer2_s or pointer3_s or pointer4_s
- or pointer5_s or pointer6_s or pointer7_s or pointer8_s or pointer9_s
- or pointer10_s or pointer11_s or pointer12_s or pointer13_s or pointer14_s
- or pointer15_s or pointer16_s or pointer17_s or pointer18_s or pointer19_s
- or pointer20_s or pointer21_s or pointer22_s or pointer23_s or pointer24_s
- or pointer25_s or pointer26_s or pointer27_s or pointer28_s or pointer29_s
- or pointer30_s )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: pointer_s = pointer0_s;
- 5'h1: pointer_s = pointer1_s;
- 5'h2: pointer_s = pointer2_s;
- 5'h3: pointer_s = pointer3_s;
- 5'h4: pointer_s = pointer4_s;
- 5'h5: pointer_s = pointer5_s;
- 5'h6: pointer_s = pointer6_s;
- 5'h7: pointer_s = pointer7_s;
- 5'h8: pointer_s = pointer8_s;
- 5'h9: pointer_s = pointer9_s;
- 5'ha: pointer_s = pointer10_s;
- 5'hb: pointer_s = pointer11_s;
- 5'hc: pointer_s = pointer12_s;
- 5'hd: pointer_s = pointer13_s;
- 5'he: pointer_s = pointer14_s;
- 5'hf: pointer_s = pointer15_s;
- 5'h10: pointer_s = pointer16_s;
- 5'h11: pointer_s = pointer17_s;
- 5'h12: pointer_s = pointer18_s;
- 5'h13: pointer_s = pointer19_s;
- 5'h14: pointer_s = pointer20_s;
- 5'h15: pointer_s = pointer21_s;
- 5'h16: pointer_s = pointer22_s;
- 5'h17: pointer_s = pointer23_s;
- 5'h18: pointer_s = pointer24_s;
- 5'h19: pointer_s = pointer25_s;
- 5'h1a: pointer_s = pointer26_s;
- 5'h1b: pointer_s = pointer27_s;
- 5'h1c: pointer_s = pointer28_s;
- 5'h1d: pointer_s = pointer29_s;
- 5'h1e: pointer_s = pointer30_s;
- endcase
-
-always @(ch_sel or ch0_csr or ch1_csr or ch2_csr or ch3_csr or ch4_csr
- or ch5_csr or ch6_csr or ch7_csr or ch8_csr or ch9_csr
- or ch10_csr or ch11_csr or ch12_csr or ch13_csr or ch14_csr
- or ch15_csr or ch16_csr or ch17_csr or ch18_csr or ch19_csr
- or ch20_csr or ch21_csr or ch22_csr or ch23_csr or ch24_csr
- or ch25_csr or ch26_csr or ch27_csr or ch28_csr or ch29_csr
- or ch30_csr )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: csr = ch0_csr;
- 5'h1: csr = ch1_csr;
- 5'h2: csr = ch2_csr;
- 5'h3: csr = ch3_csr;
- 5'h4: csr = ch4_csr;
- 5'h5: csr = ch5_csr;
- 5'h6: csr = ch6_csr;
- 5'h7: csr = ch7_csr;
- 5'h8: csr = ch8_csr;
- 5'h9: csr = ch9_csr;
- 5'ha: csr = ch10_csr;
- 5'hb: csr = ch11_csr;
- 5'hc: csr = ch12_csr;
- 5'hd: csr = ch13_csr;
- 5'he: csr = ch14_csr;
- 5'hf: csr = ch15_csr;
- 5'h10: csr = ch16_csr;
- 5'h11: csr = ch17_csr;
- 5'h12: csr = ch18_csr;
- 5'h13: csr = ch19_csr;
- 5'h14: csr = ch20_csr;
- 5'h15: csr = ch21_csr;
- 5'h16: csr = ch22_csr;
- 5'h17: csr = ch23_csr;
- 5'h18: csr = ch24_csr;
- 5'h19: csr = ch25_csr;
- 5'h1a: csr = ch26_csr;
- 5'h1b: csr = ch27_csr;
- 5'h1c: csr = ch28_csr;
- 5'h1d: csr = ch29_csr;
- 5'h1e: csr = ch30_csr;
- endcase
-
-always @(ch_sel or ch0_txsz or ch1_txsz or ch2_txsz or ch3_txsz or ch4_txsz
- or ch5_txsz or ch6_txsz or ch7_txsz or ch8_txsz or ch9_txsz
- or ch10_txsz or ch11_txsz or ch12_txsz or ch13_txsz or ch14_txsz
- or ch15_txsz or ch16_txsz or ch17_txsz or ch18_txsz or ch19_txsz
- or ch20_txsz or ch21_txsz or ch22_txsz or ch23_txsz or ch24_txsz
- or ch25_txsz or ch26_txsz or ch27_txsz or ch28_txsz or ch29_txsz
- or ch30_txsz )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: txsz = ch0_txsz;
- 5'h1: txsz = ch1_txsz;
- 5'h2: txsz = ch2_txsz;
- 5'h3: txsz = ch3_txsz;
- 5'h4: txsz = ch4_txsz;
- 5'h5: txsz = ch5_txsz;
- 5'h6: txsz = ch6_txsz;
- 5'h7: txsz = ch7_txsz;
- 5'h8: txsz = ch8_txsz;
- 5'h9: txsz = ch9_txsz;
- 5'ha: txsz = ch10_txsz;
- 5'hb: txsz = ch11_txsz;
- 5'hc: txsz = ch12_txsz;
- 5'hd: txsz = ch13_txsz;
- 5'he: txsz = ch14_txsz;
- 5'hf: txsz = ch15_txsz;
- 5'h10: txsz = ch16_txsz;
- 5'h11: txsz = ch17_txsz;
- 5'h12: txsz = ch18_txsz;
- 5'h13: txsz = ch19_txsz;
- 5'h14: txsz = ch20_txsz;
- 5'h15: txsz = ch21_txsz;
- 5'h16: txsz = ch22_txsz;
- 5'h17: txsz = ch23_txsz;
- 5'h18: txsz = ch24_txsz;
- 5'h19: txsz = ch25_txsz;
- 5'h1a: txsz = ch26_txsz;
- 5'h1b: txsz = ch27_txsz;
- 5'h1c: txsz = ch28_txsz;
- 5'h1d: txsz = ch29_txsz;
- 5'h1e: txsz = ch30_txsz;
- endcase
-
-always @(ch_sel or ch0_adr0 or ch1_adr0 or ch2_adr0 or ch3_adr0 or ch4_adr0
- or ch5_adr0 or ch6_adr0 or ch7_adr0 or ch8_adr0 or ch9_adr0
- or ch10_adr0 or ch11_adr0 or ch12_adr0 or ch13_adr0 or ch14_adr0
- or ch15_adr0 or ch16_adr0 or ch17_adr0 or ch18_adr0 or ch19_adr0
- or ch20_adr0 or ch21_adr0 or ch22_adr0 or ch23_adr0 or ch24_adr0
- or ch25_adr0 or ch26_adr0 or ch27_adr0 or ch28_adr0 or ch29_adr0
- or ch30_adr0 )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: adr0 = ch0_adr0;
- 5'h1: adr0 = ch1_adr0;
- 5'h2: adr0 = ch2_adr0;
- 5'h3: adr0 = ch3_adr0;
- 5'h4: adr0 = ch4_adr0;
- 5'h5: adr0 = ch5_adr0;
- 5'h6: adr0 = ch6_adr0;
- 5'h7: adr0 = ch7_adr0;
- 5'h8: adr0 = ch8_adr0;
- 5'h9: adr0 = ch9_adr0;
- 5'ha: adr0 = ch10_adr0;
- 5'hb: adr0 = ch11_adr0;
- 5'hc: adr0 = ch12_adr0;
- 5'hd: adr0 = ch13_adr0;
- 5'he: adr0 = ch14_adr0;
- 5'hf: adr0 = ch15_adr0;
- 5'h10: adr0 = ch16_adr0;
- 5'h11: adr0 = ch17_adr0;
- 5'h12: adr0 = ch18_adr0;
- 5'h13: adr0 = ch19_adr0;
- 5'h14: adr0 = ch20_adr0;
- 5'h15: adr0 = ch21_adr0;
- 5'h16: adr0 = ch22_adr0;
- 5'h17: adr0 = ch23_adr0;
- 5'h18: adr0 = ch24_adr0;
- 5'h19: adr0 = ch25_adr0;
- 5'h1a: adr0 = ch26_adr0;
- 5'h1b: adr0 = ch27_adr0;
- 5'h1c: adr0 = ch28_adr0;
- 5'h1d: adr0 = ch29_adr0;
- 5'h1e: adr0 = ch30_adr0;
- endcase
-
-always @(ch_sel or ch0_adr1 or ch1_adr1 or ch2_adr1 or ch3_adr1 or ch4_adr1
- or ch5_adr1 or ch6_adr1 or ch7_adr1 or ch8_adr1 or ch9_adr1
- or ch10_adr1 or ch11_adr1 or ch12_adr1 or ch13_adr1 or ch14_adr1
- or ch15_adr1 or ch16_adr1 or ch17_adr1 or ch18_adr1 or ch19_adr1
- or ch20_adr1 or ch21_adr1 or ch22_adr1 or ch23_adr1 or ch24_adr1
- or ch25_adr1 or ch26_adr1 or ch27_adr1 or ch28_adr1 or ch29_adr1
- or ch30_adr1 )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: adr1 = ch0_adr1;
- 5'h1: adr1 = ch1_adr1;
- 5'h2: adr1 = ch2_adr1;
- 5'h3: adr1 = ch3_adr1;
- 5'h4: adr1 = ch4_adr1;
- 5'h5: adr1 = ch5_adr1;
- 5'h6: adr1 = ch6_adr1;
- 5'h7: adr1 = ch7_adr1;
- 5'h8: adr1 = ch8_adr1;
- 5'h9: adr1 = ch9_adr1;
- 5'ha: adr1 = ch10_adr1;
- 5'hb: adr1 = ch11_adr1;
- 5'hc: adr1 = ch12_adr1;
- 5'hd: adr1 = ch13_adr1;
- 5'he: adr1 = ch14_adr1;
- 5'hf: adr1 = ch15_adr1;
- 5'h10: adr1 = ch16_adr1;
- 5'h11: adr1 = ch17_adr1;
- 5'h12: adr1 = ch18_adr1;
- 5'h13: adr1 = ch19_adr1;
- 5'h14: adr1 = ch20_adr1;
- 5'h15: adr1 = ch21_adr1;
- 5'h16: adr1 = ch22_adr1;
- 5'h17: adr1 = ch23_adr1;
- 5'h18: adr1 = ch24_adr1;
- 5'h19: adr1 = ch25_adr1;
- 5'h1a: adr1 = ch26_adr1;
- 5'h1b: adr1 = ch27_adr1;
- 5'h1c: adr1 = ch28_adr1;
- 5'h1d: adr1 = ch29_adr1;
- 5'h1e: adr1 = ch30_adr1;
- endcase
-
-always @(ch_sel or ch0_am0 or ch1_am0 or ch2_am0 or ch3_am0 or ch4_am0
- or ch5_am0 or ch6_am0 or ch7_am0 or ch8_am0 or ch9_am0
- or ch10_am0 or ch11_am0 or ch12_am0 or ch13_am0 or ch14_am0
- or ch15_am0 or ch16_am0 or ch17_am0 or ch18_am0 or ch19_am0
- or ch20_am0 or ch21_am0 or ch22_am0 or ch23_am0 or ch24_am0
- or ch25_am0 or ch26_am0 or ch27_am0 or ch28_am0 or ch29_am0
- or ch30_am0 )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: am0 = ch0_am0;
- 5'h1: am0 = ch1_am0;
- 5'h2: am0 = ch2_am0;
- 5'h3: am0 = ch3_am0;
- 5'h4: am0 = ch4_am0;
- 5'h5: am0 = ch5_am0;
- 5'h6: am0 = ch6_am0;
- 5'h7: am0 = ch7_am0;
- 5'h8: am0 = ch8_am0;
- 5'h9: am0 = ch9_am0;
- 5'ha: am0 = ch10_am0;
- 5'hb: am0 = ch11_am0;
- 5'hc: am0 = ch12_am0;
- 5'hd: am0 = ch13_am0;
- 5'he: am0 = ch14_am0;
- 5'hf: am0 = ch15_am0;
- 5'h10: am0 = ch16_am0;
- 5'h11: am0 = ch17_am0;
- 5'h12: am0 = ch18_am0;
- 5'h13: am0 = ch19_am0;
- 5'h14: am0 = ch20_am0;
- 5'h15: am0 = ch21_am0;
- 5'h16: am0 = ch22_am0;
- 5'h17: am0 = ch23_am0;
- 5'h18: am0 = ch24_am0;
- 5'h19: am0 = ch25_am0;
- 5'h1a: am0 = ch26_am0;
- 5'h1b: am0 = ch27_am0;
- 5'h1c: am0 = ch28_am0;
- 5'h1d: am0 = ch29_am0;
- 5'h1e: am0 = ch30_am0;
- endcase
-
-always @(ch_sel or ch0_am1 or ch1_am1 or ch2_am1 or ch3_am1 or ch4_am1
- or ch5_am1 or ch6_am1 or ch7_am1 or ch8_am1 or ch9_am1
- or ch10_am1 or ch11_am1 or ch12_am1 or ch13_am1 or ch14_am1
- or ch15_am1 or ch16_am1 or ch17_am1 or ch18_am1 or ch19_am1
- or ch20_am1 or ch21_am1 or ch22_am1 or ch23_am1 or ch24_am1
- or ch25_am1 or ch26_am1 or ch27_am1 or ch28_am1 or ch29_am1
- or ch30_am1 )
- case(ch_sel) // synopsys parallel_case full_case
- 5'h0: am1 = ch0_am1;
- 5'h1: am1 = ch1_am1;
- 5'h2: am1 = ch2_am1;
- 5'h3: am1 = ch3_am1;
- 5'h4: am1 = ch4_am1;
- 5'h5: am1 = ch5_am1;
- 5'h6: am1 = ch6_am1;
- 5'h7: am1 = ch7_am1;
- 5'h8: am1 = ch8_am1;
- 5'h9: am1 = ch9_am1;
- 5'ha: am1 = ch10_am1;
- 5'hb: am1 = ch11_am1;
- 5'hc: am1 = ch12_am1;
- 5'hd: am1 = ch13_am1;
- 5'he: am1 = ch14_am1;
- 5'hf: am1 = ch15_am1;
- 5'h10: am1 = ch16_am1;
- 5'h11: am1 = ch17_am1;
- 5'h12: am1 = ch18_am1;
- 5'h13: am1 = ch19_am1;
- 5'h14: am1 = ch20_am1;
- 5'h15: am1 = ch21_am1;
- 5'h16: am1 = ch22_am1;
- 5'h17: am1 = ch23_am1;
- 5'h18: am1 = ch24_am1;
- 5'h19: am1 = ch25_am1;
- 5'h1a: am1 = ch26_am1;
- 5'h1b: am1 = ch27_am1;
- 5'h1c: am1 = ch28_am1;
- 5'h1d: am1 = ch29_am1;
- 5'h1e: am1 = ch30_am1;
- endcase
-
-////////////////////////////////////////////////////////////////////
-//
-// Actual Chanel Arbiter and Priority Encoder
-//
-
-// Select the arbiter for current highest priority
-always @(pri_out or gnt_p0 or gnt_p1 or gnt_p2 or gnt_p3 or gnt_p4
- or gnt_p5 or gnt_p6 or gnt_p7 )
- case(pri_out) // synopsys parallel_case full_case
- 3'h0: ch_sel_d = gnt_p0;
- 3'h1: ch_sel_d = gnt_p1;
- 3'h2: ch_sel_d = gnt_p2;
- 3'h3: ch_sel_d = gnt_p3;
- 3'h4: ch_sel_d = gnt_p4;
- 3'h5: ch_sel_d = gnt_p5;
- 3'h6: ch_sel_d = gnt_p6;
- 3'h7: ch_sel_d = gnt_p7;
- endcase
-
-
-// Priority Encoder
-wb_dma_ch_pri_enc
- #( pri_sel,
- ch0_conf,
- ch1_conf,
- ch2_conf,
- ch3_conf,
- ch4_conf,
- ch5_conf,
- ch6_conf,
- ch7_conf,
- ch8_conf,
- ch9_conf,
- ch10_conf,
- ch11_conf,
- ch12_conf,
- ch13_conf,
- ch14_conf,
- ch15_conf,
- ch16_conf,
- ch17_conf,
- ch18_conf,
- ch19_conf,
- ch20_conf,
- ch21_conf,
- ch22_conf,
- ch23_conf,
- ch24_conf,
- ch25_conf,
- ch26_conf,
- ch27_conf,
- ch28_conf,
- ch29_conf,
- ch30_conf)
- u0(
- .clk( clk ),
- .valid( valid ),
- .pri0( pri0 ),
- .pri1( pri1 ),
- .pri2( pri2 ),
- .pri3( pri3 ),
- .pri4( pri4 ),
- .pri5( pri5 ),
- .pri6( pri6 ),
- .pri7( pri7 ),
- .pri8( pri8 ),
- .pri9( pri9 ),
- .pri10( pri10 ),
- .pri11( pri11 ),
- .pri12( pri12 ),
- .pri13( pri13 ),
- .pri14( pri14 ),
- .pri15( pri15 ),
- .pri16( pri16 ),
- .pri17( pri17 ),
- .pri18( pri18 ),
- .pri19( pri19 ),
- .pri20( pri20 ),
- .pri21( pri21 ),
- .pri22( pri22 ),
- .pri23( pri23 ),
- .pri24( pri24 ),
- .pri25( pri25 ),
- .pri26( pri26 ),
- .pri27( pri27 ),
- .pri28( pri28 ),
- .pri29( pri29 ),
- .pri30( pri30 ),
- .pri_out( pri_out )
- );
-
-// Arbiter request lines
-// Generate request depending on priority and valid bits
-
-assign req_p0[0] = valid[0] & (pri0==3'h0);
-assign req_p0[1] = valid[1] & (pri1==3'h0);
-assign req_p0[2] = valid[2] & (pri2==3'h0);
-assign req_p0[3] = valid[3] & (pri3==3'h0);
-assign req_p0[4] = valid[4] & (pri4==3'h0);
-assign req_p0[5] = valid[5] & (pri5==3'h0);
-assign req_p0[6] = valid[6] & (pri6==3'h0);
-assign req_p0[7] = valid[7] & (pri7==3'h0);
-assign req_p0[8] = valid[8] & (pri8==3'h0);
-assign req_p0[9] = valid[9] & (pri9==3'h0);
-assign req_p0[10] = valid[10] & (pri10==3'h0);
-assign req_p0[11] = valid[11] & (pri11==3'h0);
-assign req_p0[12] = valid[12] & (pri12==3'h0);
-assign req_p0[13] = valid[13] & (pri13==3'h0);
-assign req_p0[14] = valid[14] & (pri14==3'h0);
-assign req_p0[15] = valid[15] & (pri15==3'h0);
-assign req_p0[16] = valid[16] & (pri16==3'h0);
-assign req_p0[17] = valid[17] & (pri17==3'h0);
-assign req_p0[18] = valid[18] & (pri18==3'h0);
-assign req_p0[19] = valid[19] & (pri19==3'h0);
-assign req_p0[20] = valid[20] & (pri20==3'h0);
-assign req_p0[21] = valid[21] & (pri21==3'h0);
-assign req_p0[22] = valid[22] & (pri22==3'h0);
-assign req_p0[23] = valid[23] & (pri23==3'h0);
-assign req_p0[24] = valid[24] & (pri24==3'h0);
-assign req_p0[25] = valid[25] & (pri25==3'h0);
-assign req_p0[26] = valid[26] & (pri26==3'h0);
-assign req_p0[27] = valid[27] & (pri27==3'h0);
-assign req_p0[28] = valid[28] & (pri28==3'h0);
-assign req_p0[29] = valid[29] & (pri29==3'h0);
-assign req_p0[30] = valid[30] & (pri30==3'h0);
-
-assign req_p1[0] = valid[0] & (pri0==3'h1);
-assign req_p1[1] = valid[1] & (pri1==3'h1);
-assign req_p1[2] = valid[2] & (pri2==3'h1);
-assign req_p1[3] = valid[3] & (pri3==3'h1);
-assign req_p1[4] = valid[4] & (pri4==3'h1);
-assign req_p1[5] = valid[5] & (pri5==3'h1);
-assign req_p1[6] = valid[6] & (pri6==3'h1);
-assign req_p1[7] = valid[7] & (pri7==3'h1);
-assign req_p1[8] = valid[8] & (pri8==3'h1);
-assign req_p1[9] = valid[9] & (pri9==3'h1);
-assign req_p1[10] = valid[10] & (pri10==3'h1);
-assign req_p1[11] = valid[11] & (pri11==3'h1);
-assign req_p1[12] = valid[12] & (pri12==3'h1);
-assign req_p1[13] = valid[13] & (pri13==3'h1);
-assign req_p1[14] = valid[14] & (pri14==3'h1);
-assign req_p1[15] = valid[15] & (pri15==3'h1);
-assign req_p1[16] = valid[16] & (pri16==3'h1);
-assign req_p1[17] = valid[17] & (pri17==3'h1);
-assign req_p1[18] = valid[18] & (pri18==3'h1);
-assign req_p1[19] = valid[19] & (pri19==3'h1);
-assign req_p1[20] = valid[20] & (pri20==3'h1);
-assign req_p1[21] = valid[21] & (pri21==3'h1);
-assign req_p1[22] = valid[22] & (pri22==3'h1);
-assign req_p1[23] = valid[23] & (pri23==3'h1);
-assign req_p1[24] = valid[24] & (pri24==3'h1);
-assign req_p1[25] = valid[25] & (pri25==3'h1);
-assign req_p1[26] = valid[26] & (pri26==3'h1);
-assign req_p1[27] = valid[27] & (pri27==3'h1);
-assign req_p1[28] = valid[28] & (pri28==3'h1);
-assign req_p1[29] = valid[29] & (pri29==3'h1);
-assign req_p1[30] = valid[30] & (pri30==3'h1);
-
-assign req_p2[0] = valid[0] & (pri0==3'h2);
-assign req_p2[1] = valid[1] & (pri1==3'h2);
-assign req_p2[2] = valid[2] & (pri2==3'h2);
-assign req_p2[3] = valid[3] & (pri3==3'h2);
-assign req_p2[4] = valid[4] & (pri4==3'h2);
-assign req_p2[5] = valid[5] & (pri5==3'h2);
-assign req_p2[6] = valid[6] & (pri6==3'h2);
-assign req_p2[7] = valid[7] & (pri7==3'h2);
-assign req_p2[8] = valid[8] & (pri8==3'h2);
-assign req_p2[9] = valid[9] & (pri9==3'h2);
-assign req_p2[10] = valid[10] & (pri10==3'h2);
-assign req_p2[11] = valid[11] & (pri11==3'h2);
-assign req_p2[12] = valid[12] & (pri12==3'h2);
-assign req_p2[13] = valid[13] & (pri13==3'h2);
-assign req_p2[14] = valid[14] & (pri14==3'h2);
-assign req_p2[15] = valid[15] & (pri15==3'h2);
-assign req_p2[16] = valid[16] & (pri16==3'h2);
-assign req_p2[17] = valid[17] & (pri17==3'h2);
-assign req_p2[18] = valid[18] & (pri18==3'h2);
-assign req_p2[19] = valid[19] & (pri19==3'h2);
-assign req_p2[20] = valid[20] & (pri20==3'h2);
-assign req_p2[21] = valid[21] & (pri21==3'h2);
-assign req_p2[22] = valid[22] & (pri22==3'h2);
-assign req_p2[23] = valid[23] & (pri23==3'h2);
-assign req_p2[24] = valid[24] & (pri24==3'h2);
-assign req_p2[25] = valid[25] & (pri25==3'h2);
-assign req_p2[26] = valid[26] & (pri26==3'h2);
-assign req_p2[27] = valid[27] & (pri27==3'h2);
-assign req_p2[28] = valid[28] & (pri28==3'h2);
-assign req_p2[29] = valid[29] & (pri29==3'h2);
-assign req_p2[30] = valid[30] & (pri30==3'h2);
-
-assign req_p3[0] = valid[0] & (pri0==3'h3);
-assign req_p3[1] = valid[1] & (pri1==3'h3);
-assign req_p3[2] = valid[2] & (pri2==3'h3);
-assign req_p3[3] = valid[3] & (pri3==3'h3);
-assign req_p3[4] = valid[4] & (pri4==3'h3);
-assign req_p3[5] = valid[5] & (pri5==3'h3);
-assign req_p3[6] = valid[6] & (pri6==3'h3);
-assign req_p3[7] = valid[7] & (pri7==3'h3);
-assign req_p3[8] = valid[8] & (pri8==3'h3);
-assign req_p3[9] = valid[9] & (pri9==3'h3);
-assign req_p3[10] = valid[10] & (pri10==3'h3);
-assign req_p3[11] = valid[11] & (pri11==3'h3);
-assign req_p3[12] = valid[12] & (pri12==3'h3);
-assign req_p3[13] = valid[13] & (pri13==3'h3);
-assign req_p3[14] = valid[14] & (pri14==3'h3);
-assign req_p3[15] = valid[15] & (pri15==3'h3);
-assign req_p3[16] = valid[16] & (pri16==3'h3);
-assign req_p3[17] = valid[17] & (pri17==3'h3);
-assign req_p3[18] = valid[18] & (pri18==3'h3);
-assign req_p3[19] = valid[19] & (pri19==3'h3);
-assign req_p3[20] = valid[20] & (pri20==3'h3);
-assign req_p3[21] = valid[21] & (pri21==3'h3);
-assign req_p3[22] = valid[22] & (pri22==3'h3);
-assign req_p3[23] = valid[23] & (pri23==3'h3);
-assign req_p3[24] = valid[24] & (pri24==3'h3);
-assign req_p3[25] = valid[25] & (pri25==3'h3);
-assign req_p3[26] = valid[26] & (pri26==3'h3);
-assign req_p3[27] = valid[27] & (pri27==3'h3);
-assign req_p3[28] = valid[28] & (pri28==3'h3);
-assign req_p3[29] = valid[29] & (pri29==3'h3);
-assign req_p3[30] = valid[30] & (pri30==3'h3);
-
-assign req_p4[0] = valid[0] & (pri0==3'h4);
-assign req_p4[1] = valid[1] & (pri1==3'h4);
-assign req_p4[2] = valid[2] & (pri2==3'h4);
-assign req_p4[3] = valid[3] & (pri3==3'h4);
-assign req_p4[4] = valid[4] & (pri4==3'h4);
-assign req_p4[5] = valid[5] & (pri5==3'h4);
-assign req_p4[6] = valid[6] & (pri6==3'h4);
-assign req_p4[7] = valid[7] & (pri7==3'h4);
-assign req_p4[8] = valid[8] & (pri8==3'h4);
-assign req_p4[9] = valid[9] & (pri9==3'h4);
-assign req_p4[10] = valid[10] & (pri10==3'h4);
-assign req_p4[11] = valid[11] & (pri11==3'h4);
-assign req_p4[12] = valid[12] & (pri12==3'h4);
-assign req_p4[13] = valid[13] & (pri13==3'h4);
-assign req_p4[14] = valid[14] & (pri14==3'h4);
-assign req_p4[15] = valid[15] & (pri15==3'h4);
-assign req_p4[16] = valid[16] & (pri16==3'h4);
-assign req_p4[17] = valid[17] & (pri17==3'h4);
-assign req_p4[18] = valid[18] & (pri18==3'h4);
-assign req_p4[19] = valid[19] & (pri19==3'h4);
-assign req_p4[20] = valid[20] & (pri20==3'h4);
-assign req_p4[21] = valid[21] & (pri21==3'h4);
-assign req_p4[22] = valid[22] & (pri22==3'h4);
-assign req_p4[23] = valid[23] & (pri23==3'h4);
-assign req_p4[24] = valid[24] & (pri24==3'h4);
-assign req_p4[25] = valid[25] & (pri25==3'h4);
-assign req_p4[26] = valid[26] & (pri26==3'h4);
-assign req_p4[27] = valid[27] & (pri27==3'h4);
-assign req_p4[28] = valid[28] & (pri28==3'h4);
-assign req_p4[29] = valid[29] & (pri29==3'h4);
-assign req_p4[30] = valid[30] & (pri30==3'h4);
-
-assign req_p5[0] = valid[0] & (pri0==3'h5);
-assign req_p5[1] = valid[1] & (pri1==3'h5);
-assign req_p5[2] = valid[2] & (pri2==3'h5);
-assign req_p5[3] = valid[3] & (pri3==3'h5);
-assign req_p5[4] = valid[4] & (pri4==3'h5);
-assign req_p5[5] = valid[5] & (pri5==3'h5);
-assign req_p5[6] = valid[6] & (pri6==3'h5);
-assign req_p5[7] = valid[7] & (pri7==3'h5);
-assign req_p5[8] = valid[8] & (pri8==3'h5);
-assign req_p5[9] = valid[9] & (pri9==3'h5);
-assign req_p5[10] = valid[10] & (pri10==3'h5);
-assign req_p5[11] = valid[11] & (pri11==3'h5);
-assign req_p5[12] = valid[12] & (pri12==3'h5);
-assign req_p5[13] = valid[13] & (pri13==3'h5);
-assign req_p5[14] = valid[14] & (pri14==3'h5);
-assign req_p5[15] = valid[15] & (pri15==3'h5);
-assign req_p5[16] = valid[16] & (pri16==3'h5);
-assign req_p5[17] = valid[17] & (pri17==3'h5);
-assign req_p5[18] = valid[18] & (pri18==3'h5);
-assign req_p5[19] = valid[19] & (pri19==3'h5);
-assign req_p5[20] = valid[20] & (pri20==3'h5);
-assign req_p5[21] = valid[21] & (pri21==3'h5);
-assign req_p5[22] = valid[22] & (pri22==3'h5);
-assign req_p5[23] = valid[23] & (pri23==3'h5);
-assign req_p5[24] = valid[24] & (pri24==3'h5);
-assign req_p5[25] = valid[25] & (pri25==3'h5);
-assign req_p5[26] = valid[26] & (pri26==3'h5);
-assign req_p5[27] = valid[27] & (pri27==3'h5);
-assign req_p5[28] = valid[28] & (pri28==3'h5);
-assign req_p5[29] = valid[29] & (pri29==3'h5);
-assign req_p5[30] = valid[30] & (pri30==3'h5);
-
-assign req_p6[0] = valid[0] & (pri0==3'h6);
-assign req_p6[1] = valid[1] & (pri1==3'h6);
-assign req_p6[2] = valid[2] & (pri2==3'h6);
-assign req_p6[3] = valid[3] & (pri3==3'h6);
-assign req_p6[4] = valid[4] & (pri4==3'h6);
-assign req_p6[5] = valid[5] & (pri5==3'h6);
-assign req_p6[6] = valid[6] & (pri6==3'h6);
-assign req_p6[7] = valid[7] & (pri7==3'h6);
-assign req_p6[8] = valid[8] & (pri8==3'h6);
-assign req_p6[9] = valid[9] & (pri9==3'h6);
-assign req_p6[10] = valid[10] & (pri10==3'h6);
-assign req_p6[11] = valid[11] & (pri11==3'h6);
-assign req_p6[12] = valid[12] & (pri12==3'h6);
-assign req_p6[13] = valid[13] & (pri13==3'h6);
-assign req_p6[14] = valid[14] & (pri14==3'h6);
-assign req_p6[15] = valid[15] & (pri15==3'h6);
-assign req_p6[16] = valid[16] & (pri16==3'h6);
-assign req_p6[17] = valid[17] & (pri17==3'h6);
-assign req_p6[18] = valid[18] & (pri18==3'h6);
-assign req_p6[19] = valid[19] & (pri19==3'h6);
-assign req_p6[20] = valid[20] & (pri20==3'h6);
-assign req_p6[21] = valid[21] & (pri21==3'h6);
-assign req_p6[22] = valid[22] & (pri22==3'h6);
-assign req_p6[23] = valid[23] & (pri23==3'h6);
-assign req_p6[24] = valid[24] & (pri24==3'h6);
-assign req_p6[25] = valid[25] & (pri25==3'h6);
-assign req_p6[26] = valid[26] & (pri26==3'h6);
-assign req_p6[27] = valid[27] & (pri27==3'h6);
-assign req_p6[28] = valid[28] & (pri28==3'h6);
-assign req_p6[29] = valid[29] & (pri29==3'h6);
-assign req_p6[30] = valid[30] & (pri30==3'h6);
-
-assign req_p7[0] = valid[0] & (pri0==3'h7);
-assign req_p7[1] = valid[1] & (pri1==3'h7);
-assign req_p7[2] = valid[2] & (pri2==3'h7);
-assign req_p7[3] = valid[3] & (pri3==3'h7);
-assign req_p7[4] = valid[4] & (pri4==3'h7);
-assign req_p7[5] = valid[5] & (pri5==3'h7);
-assign req_p7[6] = valid[6] & (pri6==3'h7);
-assign req_p7[7] = valid[7] & (pri7==3'h7);
-assign req_p7[8] = valid[8] & (pri8==3'h7);
-assign req_p7[9] = valid[9] & (pri9==3'h7);
-assign req_p7[10] = valid[10] & (pri10==3'h7);
-assign req_p7[11] = valid[11] & (pri11==3'h7);
-assign req_p7[12] = valid[12] & (pri12==3'h7);
-assign req_p7[13] = valid[13] & (pri13==3'h7);
-assign req_p7[14] = valid[14] & (pri14==3'h7);
-assign req_p7[15] = valid[15] & (pri15==3'h7);
-assign req_p7[16] = valid[16] & (pri16==3'h7);
-assign req_p7[17] = valid[17] & (pri17==3'h7);
-assign req_p7[18] = valid[18] & (pri18==3'h7);
-assign req_p7[19] = valid[19] & (pri19==3'h7);
-assign req_p7[20] = valid[20] & (pri20==3'h7);
-assign req_p7[21] = valid[21] & (pri21==3'h7);
-assign req_p7[22] = valid[22] & (pri22==3'h7);
-assign req_p7[23] = valid[23] & (pri23==3'h7);
-assign req_p7[24] = valid[24] & (pri24==3'h7);
-assign req_p7[25] = valid[25] & (pri25==3'h7);
-assign req_p7[26] = valid[26] & (pri26==3'h7);
-assign req_p7[27] = valid[27] & (pri27==3'h7);
-assign req_p7[28] = valid[28] & (pri28==3'h7);
-assign req_p7[29] = valid[29] & (pri29==3'h7);
-assign req_p7[30] = valid[30] & (pri30==3'h7);
-
-// RR Arbiter for priority 0
-wb_dma_ch_arb u1(
- .clk( clk ),
- .rst( rst ),
- .req( req_p0 ),
- .gnt( gnt_p0_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 1
-wb_dma_ch_arb u2(
- .clk( clk ),
- .rst( rst ),
- .req( req_p1 ),
- .gnt( gnt_p1_d ),
- .advance( next_ch )
- );
-
-// RR Arbiter for priority 2
-wb_dma_ch_arb u3(
- .clk( clk ),
- .rst( rst ),
- .req( req_p2 ),
- .gnt( gnt_p2_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 3
-wb_dma_ch_arb u4(
- .clk( clk ),
- .rst( rst ),
- .req( req_p3 ),
- .gnt( gnt_p3_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 4
-wb_dma_ch_arb u5(
- .clk( clk ),
- .rst( rst ),
- .req( req_p4 ),
- .gnt( gnt_p4_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 5
-wb_dma_ch_arb u6(
- .clk( clk ),
- .rst( rst ),
- .req( req_p5 ),
- .gnt( gnt_p5_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 6
-wb_dma_ch_arb u7(
- .clk( clk ),
- .rst( rst ),
- .req( req_p6 ),
- .gnt( gnt_p6_d ),
- .advance( next_ch )
- );
-// RR Arbiter for priority 7
-wb_dma_ch_arb u8(
- .clk( clk ),
- .rst( rst ),
- .req( req_p7 ),
- .gnt( gnt_p7_d ),
- .advance( next_ch )
- );
-
-// Select grant based on number of priorities
-assign gnt_p0 = gnt_p0_d;
-assign gnt_p1 = gnt_p1_d;
-assign gnt_p2 = (pri_sel==2'd0) ? 5'h0 : gnt_p2_d;
-assign gnt_p3 = (pri_sel==2'd0) ? 5'h0 : gnt_p3_d;
-assign gnt_p4 = (pri_sel==2'd2) ? gnt_p4_d : 5'h0;
-assign gnt_p5 = (pri_sel==2'd2) ? gnt_p5_d : 5'h0;
-assign gnt_p6 = (pri_sel==2'd2) ? gnt_p6_d : 5'h0;
-assign gnt_p7 = (pri_sel==2'd2) ? gnt_p7_d : 5'h0;
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_defines.v
===================================================================
--- trunk/rtl/verilog/wb_dma_defines.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_defines.v (nonexistent)
@@ -1,116 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Definitions ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_defines.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.5 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.4 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// Revision 1.3 2001/09/07 15:34:38 rudi
-//
-// Changed reset to active high.
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:11:09 rudi
-// Initial Release
-//
-//
-//
-
-`timescale 1ns / 10ps
-
-// This define selects how the slave interface determines if
-// the internal register file or pass through mode are selected.
-// This should be a simple address decoder. "wb_addr_i" is the
-// WISHBONE address bus (32 bits wide).
-// NOTE: The entire pass-through mode is implemented in combinatorial
-// logic only. So the more address lines we look at and compare here
-// the higher will be the initial delay when pass-through mode is selected.
-// Here we look at the top 8 address bit. If they are all 1, the
-// register file is selected. Use this with caution !!!
-`define WDMA_REG_SEL (wb_addr_i[31:28] == rf_addr)
-
-
-// DO NOT MODIFY BEYOND THIS POINT
-// CSR Bits
-`define WDMA_CH_EN 0
-`define WDMA_DST_SEL 1
-`define WDMA_SRC_SEL 2
-`define WDMA_INC_DST 3
-`define WDMA_INC_SRC 4
-`define WDMA_MODE 5
-`define WDMA_ARS 6
-`define WDMA_USE_ED 7
-`define WDMA_WRB 8
-`define WDMA_STOP 9
-`define WDMA_BUSY 10
-`define WDMA_DONE 11
-`define WDMA_ERR 12
-`define WDMA_ED_EOL 20
-
Index: trunk/rtl/verilog/wb_dma_ch_arb.v
===================================================================
--- trunk/rtl/verilog/wb_dma_ch_arb.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_ch_arb.v (nonexistent)
@@ -1,2153 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Channel Arbiter ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_ch_arb.v,v 1.2 2002-02-01 01:54:44 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:44 $
-// $Revision: 1.2 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $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.4 2001/06/14 08:51:25 rudi
-//
-//
-// Changed Module name to match file name.
-//
-// Revision 1.3 2001/06/13 02:26:46 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.2 2001/06/05 10:22:34 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:47 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-// Arbiter
-//
-// Implements a simple round robin arbiter for DMA channels of
-// same priority
-
-module wb_dma_ch_arb(clk, rst, req, gnt, advance);
-
-input clk;
-input rst;
-input [30:0] req; // Req input
-output [4:0] gnt; // Grant output
-input advance; // Next Target
-
-///////////////////////////////////////////////////////////////////////
-//
-// Definitions
-//
-
-parameter [4:0]
- grant0 = 5'h0,
- grant1 = 5'h1,
- grant2 = 5'h2,
- grant3 = 5'h3,
- grant4 = 5'h4,
- grant5 = 5'h5,
- grant6 = 5'h6,
- grant7 = 5'h7,
- grant8 = 5'h8,
- grant9 = 5'h9,
- grant10 = 5'ha,
- grant11 = 5'hb,
- grant12 = 5'hc,
- grant13 = 5'hd,
- grant14 = 5'he,
- grant15 = 5'hf,
- grant16 = 5'h10,
- grant17 = 5'h11,
- grant18 = 5'h12,
- grant19 = 5'h13,
- grant20 = 5'h14,
- grant21 = 5'h15,
- grant22 = 5'h16,
- grant23 = 5'h17,
- grant24 = 5'h18,
- grant25 = 5'h19,
- grant26 = 5'h1a,
- grant27 = 5'h1b,
- grant28 = 5'h1c,
- grant29 = 5'h1d,
- grant30 = 5'h1e;
-
-///////////////////////////////////////////////////////////////////////
-//
-// Local Registers and Wires
-//
-
-reg [4:0] state, next_state;
-
-///////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-assign gnt = state;
-
-always@(posedge clk or negedge rst)
- if(!rst) state <= #1 grant0;
- else state <= #1 next_state;
-
-///////////////////////////////////////////////////////////////////////
-//
-// Next State Logic
-// - implements round robin arbitration algorithm
-// - switches grant if current req is dropped or next is asserted
-// - parks at last grant
-//
-
-always@(state or req or advance)
- begin
- next_state = state; // Default Keep State
- case(state) // synopsys parallel_case full_case
- grant0:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[0] | advance)
- begin
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- end
- grant1:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[1] | advance)
- begin
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- end
- grant2:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[2] | advance)
- begin
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- end
- grant3:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[3] | advance)
- begin
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- end
- grant4:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[4] | advance)
- begin
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- end
- grant5:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[5] | advance)
- begin
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- end
- grant6:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[6] | advance)
- begin
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- end
- grant7:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[7] | advance)
- begin
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- end
- grant8:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[8] | advance)
- begin
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- end
- grant9:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[9] | advance)
- begin
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- end
- grant10:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[10] | advance)
- begin
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- end
- grant11:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[11] | advance)
- begin
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- end
- grant12:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[12] | advance)
- begin
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- end
- grant13:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[13] | advance)
- begin
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- end
- grant14:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[14] | advance)
- begin
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- end
- grant15:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[15] | advance)
- begin
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- end
- grant16:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[16] | advance)
- begin
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- end
- grant17:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[17] | advance)
- begin
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- end
- grant18:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[18] | advance)
- begin
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- end
- grant19:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[19] | advance)
- begin
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- end
- grant20:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[20] | advance)
- begin
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- end
- grant21:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[21] | advance)
- begin
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- end
- grant22:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[22] | advance)
- begin
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- end
- grant23:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[23] | advance)
- begin
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- end
- grant24:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[24] | advance)
- begin
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- end
- grant25:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[25] | advance)
- begin
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- end
- grant26:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[26] | advance)
- begin
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- end
- grant27:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[27] | advance)
- begin
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- end
- grant28:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[28] | advance)
- begin
- if(req[29]) next_state = grant29;
- else
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- end
- grant29:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[29] | advance)
- begin
- if(req[30]) next_state = grant30;
- else
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- end
- grant30:
- // if this req is dropped or next is asserted, check for other req's
- if(!req[30] | advance)
- begin
- if(req[0]) next_state = grant0;
- else
- if(req[1]) next_state = grant1;
- else
- if(req[2]) next_state = grant2;
- else
- if(req[3]) next_state = grant3;
- else
- if(req[4]) next_state = grant4;
- else
- if(req[5]) next_state = grant5;
- else
- if(req[6]) next_state = grant6;
- else
- if(req[7]) next_state = grant7;
- else
- if(req[8]) next_state = grant8;
- else
- if(req[9]) next_state = grant9;
- else
- if(req[10]) next_state = grant10;
- else
- if(req[11]) next_state = grant11;
- else
- if(req[12]) next_state = grant12;
- else
- if(req[13]) next_state = grant13;
- else
- if(req[14]) next_state = grant14;
- else
- if(req[15]) next_state = grant15;
- else
- if(req[16]) next_state = grant16;
- else
- if(req[17]) next_state = grant17;
- else
- if(req[18]) next_state = grant18;
- else
- if(req[19]) next_state = grant19;
- else
- if(req[20]) next_state = grant20;
- else
- if(req[21]) next_state = grant21;
- else
- if(req[22]) next_state = grant22;
- else
- if(req[23]) next_state = grant23;
- else
- if(req[24]) next_state = grant24;
- else
- if(req[25]) next_state = grant25;
- else
- if(req[26]) next_state = grant26;
- else
- if(req[27]) next_state = grant27;
- else
- if(req[28]) next_state = grant28;
- else
- if(req[29]) next_state = grant29;
- end
- endcase
- end
-
-endmodule
-
Index: trunk/rtl/verilog/wb_dma_inc30r.v
===================================================================
--- trunk/rtl/verilog/wb_dma_inc30r.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_inc30r.v (nonexistent)
@@ -1,92 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Primitives ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_inc30r.v,v 1.2 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.2 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $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.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:11:12 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_inc30r(clk, in, out);
-input clk;
-input [29:0] in;
-output [29:0] out;
-
-// INC30_CENTER indicates the center bit of the 30 bit incrementor
-// so it can be easily manually optimized for best performance
-parameter INC30_CENTER = 16;
-
-reg [INC30_CENTER:0] out_r;
-
-always @(posedge clk)
- out_r <= #1 in[(INC30_CENTER - 1):0] + 1;
-
-assign out[29:INC30_CENTER] = in[29:INC30_CENTER] + out_r[INC30_CENTER];
-assign out[(INC30_CENTER - 1):0] = out_r;
-
-endmodule
-
Index: trunk/rtl/verilog/wb_dma_ch_rf.v
===================================================================
--- trunk/rtl/verilog/wb_dma_ch_rf.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_ch_rf.v (nonexistent)
@@ -1,583 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA One Channel Register File ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_ch_rf.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.5 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.4 2001/10/30 02:06:17 rudi
-//
-// - Fixed problem where synthesis tools would instantiate latches instead of flip-flops
-//
-// Revision 1.3 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.3 2001/06/14 08:50:01 rudi
-//
-// Changed Module Name to match file name.
-//
-// Revision 1.2 2001/06/13 02:26:48 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.1 2001/06/05 10:25:27 rudi
-//
-//
-// Initial checkin of register file for one channel.
-//
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_ch_rf( clk, rst,
- pointer, pointer_s, ch_csr, ch_txsz, ch_adr0, ch_adr1,
- ch_am0, ch_am1, sw_pointer, ch_stop, ch_dis, int,
-
- wb_rf_din, wb_rf_adr, wb_rf_we, wb_rf_re,
-
- // DMA Registers Write Back Channel Select
- ch_sel, ndnr,
-
- // DMA Engine Status
- dma_busy, dma_err, dma_done, dma_done_all,
-
- // DMA Engine Reg File Update ctrl signals
- de_csr, de_txsz, de_adr0, de_adr1,
- de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we,
- de_fetch_descr, dma_rest,
- ptr_set
-
- );
-
-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_ED = 1'b1; // 1=this Instance Supports External Descriptors
-parameter [0:0] HAVE_CBUF= 1'b1; // 1=this Instance Supports Cyclic Buffers
-
-input clk, rst;
-
-output [31:0] pointer;
-output [31:0] pointer_s;
-output [31:0] ch_csr;
-output [31:0] ch_txsz;
-output [31:0] ch_adr0;
-output [31:0] ch_adr1;
-output [31:0] ch_am0;
-output [31:0] ch_am1;
-output [31:0] sw_pointer;
-output ch_stop;
-output ch_dis;
-output int;
-
-input [31:0] wb_rf_din;
-input [7:0] wb_rf_adr;
-input wb_rf_we;
-input wb_rf_re;
-
-input [4:0] ch_sel;
-input ndnr;
-
-// DMA Engine Status
-input dma_busy, dma_err, dma_done, dma_done_all;
-
-// DMA Engine Reg File Update ctrl signals
-input [31:0] de_csr;
-input [11:0] de_txsz;
-input [31:0] de_adr0;
-input [31:0] de_adr1;
-input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
-input de_fetch_descr;
-input dma_rest;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires and Registers
-//
-
-wire [31:0] pointer;
-reg [27:0] pointer_r;
-reg [27:0] pointer_sr;
-reg ptr_valid;
-reg ch_eol;
-
-wire [31:0] ch_csr, ch_txsz;
-
-reg [8:0] ch_csr_r;
-reg [2:0] ch_csr_r2;
-reg [2:0] ch_csr_r3;
-reg [2:0] int_src_r;
-reg ch_err_r;
-reg ch_stop;
-reg ch_busy;
-reg ch_done;
-reg ch_err;
-reg rest_en;
-
-reg [10:0] ch_chk_sz_r;
-reg [11:0] ch_tot_sz_r;
-reg [22:0] ch_txsz_s;
-reg ch_sz_inf;
-
-wire [31:0] ch_adr0, ch_adr1;
-reg [29:0] ch_adr0_r, ch_adr1_r;
-wire [31:0] ch_am0, ch_am1;
-reg [27:0] ch_am0_r, ch_am1_r;
-
-reg [29:0] ch_adr0_s, ch_adr1_s;
-
-reg [29:0] sw_pointer_r;
-wire sw_pointer_we;
-wire [28:0] cmp_adr;
-reg ch_dis;
-wire ch_enable;
-
-wire pointer_we;
-wire ch_csr_we, ch_csr_re, ch_txsz_we, ch_adr0_we, ch_adr1_we;
-wire ch_am0_we, ch_am1_we;
-reg ch_rl;
-wire ch_done_we;
-wire ch_err_we;
-wire chunk_done_we;
-
-wire ch_csr_dewe, ch_txsz_dewe, ch_adr0_dewe, ch_adr1_dewe;
-
-wire this_ptr_set;
-wire ptr_inv;
-
-////////////////////////////////////////////////////////////////////
-//
-// Aliases
-//
-
-assign ch_adr0 = CH_EN ? {ch_adr0_r, 2'h0} : 32'h0;
-assign ch_adr1 = CH_EN ? {ch_adr1_r, 2'h0} : 32'h0;
-assign ch_am0 = (CH_EN & HAVE_CBUF) ? {ch_am0_r, 4'h0} : 32'hffff_fff0;
-assign ch_am1 = (CH_EN & HAVE_CBUF) ? {ch_am1_r, 4'h0} : 32'hffff_fff0;
-assign sw_pointer = (CH_EN & HAVE_CBUF) ? {sw_pointer_r,2'h0} : 32'h0;
-
-assign pointer = CH_EN ? {pointer_r, 3'h0, ptr_valid} : 32'h0;
-assign pointer_s = CH_EN ? {pointer_sr, 4'h0} : 32'h0;
-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} : 32'h0;
-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_EN ? (ch_csr_r[`WDMA_CH_EN] & (HAVE_CBUF ? !ch_dis : 1'b1) ) : 1'b0;
-
-////////////////////////////////////////////////////////////////////
-//
-// CH0 control signals
-//
-
-parameter [4:0] CH_ADR = CH_NO + 5'h1;
-
-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 = CH_EN & wb_rf_re & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
-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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h2);
-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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h4);
-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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h6);
-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_EN & (((ch_sel==CH_NO) & dma_done_all) | ndnr) &
- (ch_csr[`WDMA_USE_ED] ? ch_eol : !ch_csr[`WDMA_ARS]);
-assign chunk_done_we = CH_EN & (ch_sel==CH_NO) & dma_done;
-assign ch_err_we = CH_EN & (ch_sel==CH_NO) & dma_err;
-assign ch_csr_dewe = CH_EN & de_csr_we & (ch_sel==CH_NO);
-assign ch_txsz_dewe = CH_EN & de_txsz_we & (ch_sel==CH_NO);
-assign ch_adr0_dewe = CH_EN & de_adr0_we & (ch_sel==CH_NO);
-assign ch_adr1_dewe = CH_EN & de_adr1_we & (ch_sel==CH_NO);
-
-assign ptr_inv = CH_EN & ((ch_sel==CH_NO) & dma_done_all) | ndnr;
-assign this_ptr_set = CH_EN & ptr_set & (ch_sel==CH_NO);
-
-always @(posedge clk)
- ch_rl <= #1 CH_EN & HAVE_ARS & (
- (rest_en & dma_rest) |
- ((ch_sel==CH_NO) & dma_done_all & ch_csr[`WDMA_ARS] & !ch_csr[`WDMA_USE_ED])
- );
-
-// ---------------------------------------------------
-// Pointers
-
-always @(posedge clk or negedge rst)
- if(!rst) ptr_valid <= #1 1'b0;
- else
- if(CH_EN & HAVE_ED)
- begin
- if( this_ptr_set | (rest_en & dma_rest) )
- ptr_valid <= #1 1'b1;
- else
- if(ptr_inv) ptr_valid <= #1 1'b0;
- end
- else ptr_valid <= #1 1'b0;
-
-always @(posedge clk or negedge rst)
- if(!rst) ch_eol <= #1 1'b0;
- else
- if(CH_EN & HAVE_ED)
- begin
- if(ch_csr_dewe) ch_eol <= #1 de_csr[`WDMA_ED_EOL];
- else
- if(ch_done_we) ch_eol <= #1 1'b0;
- end
- else ch_eol <= #1 1'b0;
-
-always @(posedge clk)
- if(CH_EN & HAVE_ED)
- begin
- if(pointer_we) pointer_r <= #1 wb_rf_din[31:4];
- else
- if(this_ptr_set) pointer_r <= #1 de_csr[31:4];
- end
- else pointer_r <= #1 1'b0;
-
-always @(posedge clk)
- if(CH_EN & HAVE_ED)
- begin
- if(this_ptr_set) pointer_sr <= #1 pointer_r;
- end
- else pointer_sr <= #1 1'b0;
-
-// ---------------------------------------------------
-// CSR
-
-always @(posedge clk or negedge rst)
- if(!rst) ch_csr_r <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(ch_csr_we) ch_csr_r <= #1 wb_rf_din[8:0];
- else
- begin
- 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];
- end
- end
-
-// done bit
-always @(posedge clk or negedge rst)
- if(!rst) ch_done <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(ch_csr_we) ch_done <= #1 !wb_rf_din[`WDMA_CH_EN];
- else
- if(ch_done_we) ch_done <= #1 1'b1;
- end
-
-// busy bit
-always @(posedge clk)
- ch_busy <= #1 CH_EN & (ch_sel==CH_NO) & dma_busy;
-
-// stop bit
-always @(posedge clk)
- ch_stop <= #1 CH_EN & ch_csr_we & wb_rf_din[`WDMA_STOP];
-
-// error bit
-always @(posedge clk or negedge rst)
- if(!rst) ch_err <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(ch_err_we) ch_err <= #1 1'b1;
- else
- if(ch_csr_re) ch_err <= #1 1'b0;
- end
-
-// Priority Bits
-always @(posedge clk or negedge rst)
- if(!rst) ch_csr_r2 <= #1 3'h0;
- else
- if(CH_EN & ch_csr_we) ch_csr_r2 <= #1 wb_rf_din[15:13];
-
-// Restart Enable Bit (REST)
-always @(posedge clk or negedge rst)
- if(!rst) rest_en <= #1 1'b0;
- else
- if(CH_EN & ch_csr_we) rest_en <= #1 wb_rf_din[16];
-
-// INT Mask
-always @(posedge clk or negedge rst)
- if(!rst) ch_csr_r3 <= #1 3'h0;
- else
- if(CH_EN & ch_csr_we) ch_csr_r3 <= #1 wb_rf_din[19:17];
-
-// INT Source
-always @(posedge clk or negedge rst)
- if(!rst) int_src_r[2] <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(chunk_done_we) int_src_r[2] <= #1 1'b1;
- else
- if(ch_csr_re) int_src_r[2] <= #1 1'b0;
- end
-
-always @(posedge clk or negedge rst)
- if(!rst) int_src_r[1] <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(ch_done_we) int_src_r[1] <= #1 1'b1;
- else
- if(ch_csr_re) int_src_r[1] <= #1 1'b0;
- end
-
-always @(posedge clk or negedge rst)
- if(!rst) int_src_r[0] <= #1 1'b0;
- else
- if(CH_EN)
- begin
- if(ch_err_we) int_src_r[0] <= #1 1'b1;
- else
- if(ch_csr_re) int_src_r[0] <= #1 1'b0;
- end
-
-// Interrupt Output
-assign int = |(int_src_r & ch_csr_r3) & CH_EN;
-
-// ---------------------------------------------------
-// TXZS
-always @(posedge clk)
- if(CH_EN)
- begin
- if(ch_txsz_we)
- {ch_chk_sz_r, ch_tot_sz_r} <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
- else
- if(ch_txsz_dewe)
- ch_tot_sz_r <= #1 de_txsz;
- else
- if(ch_rl)
- {ch_chk_sz_r, ch_tot_sz_r} <= #1 ch_txsz_s;
- end
-
-// txsz shadow register
-always @(posedge clk)
- if(CH_EN & HAVE_ARS)
- begin
-
- if(ch_txsz_we) ch_txsz_s <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
- else
- if(rest_en & ch_txsz_dewe & de_fetch_descr)
- ch_txsz_s[11:0] <= #1 de_txsz[11:0];
- end
-
-// Infinite Size indicator
-always @(posedge clk)
- if(CH_EN)
- begin
- if(ch_txsz_we) ch_sz_inf <= #1 wb_rf_din[15];
- end
-
-// ---------------------------------------------------
-// ADR0
-always @(posedge clk)
- if(CH_EN)
- begin
- if(ch_adr0_we) ch_adr0_r <= #1 wb_rf_din[31:2];
- else
- if(ch_adr0_dewe) ch_adr0_r <= #1 de_adr0[31:2];
- else
- if(ch_rl) ch_adr0_r <= #1 ch_adr0_s;
- end
-
-// Adr0 shadow register
-always @(posedge clk)
- if(CH_EN & HAVE_ARS)
- begin
- if(ch_adr0_we) ch_adr0_s <= #1 wb_rf_din[31:2];
- else
- if(rest_en & ch_adr0_dewe & de_fetch_descr)
- ch_adr0_s <= #1 de_adr0[31:2];
- end
-
-// ---------------------------------------------------
-// AM0
-always @(posedge clk or negedge rst)
- if(!rst) ch_am0_r <= #1 28'hfffffff;
- else
- if(ch_am0_we) ch_am0_r <= #1 wb_rf_din[31:4];
-
-// ---------------------------------------------------
-// ADR1
-always @(posedge clk)
- if(CH_EN)
- begin
- if(ch_adr1_we) ch_adr1_r <= #1 wb_rf_din[31:2];
- else
- if(ch_adr1_dewe) ch_adr1_r <= #1 de_adr1[31:2];
- else
- if(ch_rl) ch_adr1_r <= #1 ch_adr1_s;
- end
-
-// Adr1 shadow register
-always @(posedge clk)
- if(CH_EN & HAVE_ARS)
- begin
- if(ch_adr1_we) ch_adr1_s <= #1 wb_rf_din[31:2];
- else
- if(rest_en & ch_adr1_dewe & de_fetch_descr)
- ch_adr1_s <= #1 de_adr1[31:2];
- end
-
-// ---------------------------------------------------
-// AM1
-always @(posedge clk or negedge rst)
- if(!rst) ch_am1_r <= #1 28'hfffffff;
- else
- if(ch_am1_we & CH_EN & HAVE_CBUF) ch_am1_r <= #1 wb_rf_din[31:4];
-
-// ---------------------------------------------------
-// Software Pointer
-always @(posedge clk or negedge rst)
- if(!rst) sw_pointer_r <= #1 28'h0;
- else
- if(sw_pointer_we & CH_EN & HAVE_CBUF) sw_pointer_r <= #1 wb_rf_din[31:4];
-
-// ---------------------------------------------------
-// Software Pointer Match logic
-
-assign cmp_adr = ch_csr[2] ? ch_adr1[30:2] : ch_adr0[30:2];
-
-always @(posedge clk)
- ch_dis <= #1 CH_EN & HAVE_CBUF & (sw_pointer[30:2] == cmp_adr) & sw_pointer[31];
-
-endmodule
-
-
-module wb_dma_ch_rf_dummy(clk, rst,
- pointer, pointer_s, ch_csr, ch_txsz, ch_adr0, ch_adr1,
- ch_am0, ch_am1, sw_pointer, ch_stop, ch_dis, int,
-
- wb_rf_din, wb_rf_adr, wb_rf_we, wb_rf_re,
-
- // DMA Registers Write Back Channel Select
- ch_sel, ndnr,
-
- // DMA Engine Status
- dma_busy, dma_err, dma_done, dma_done_all,
-
- // DMA Engine Reg File Update ctrl signals
- de_csr, de_txsz, de_adr0, de_adr1,
- de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we,
- de_fetch_descr, dma_rest,
- ptr_set
-
- );
-
-parameter CH_NO = 0;
-parameter HAVE_ARS = 1;
-parameter HAVE_ED = 1;
-parameter HAVE_CBUF= 1;
-
-input clk, rst;
-
-output [31:0] pointer;
-output [31:0] pointer_s;
-output [31:0] ch_csr;
-output [31:0] ch_txsz;
-output [31:0] ch_adr0;
-output [31:0] ch_adr1;
-output [31:0] ch_am0;
-output [31:0] ch_am1;
-output [31:0] sw_pointer;
-output ch_stop;
-output ch_dis;
-output int;
-
-input [31:0] wb_rf_din;
-input [7:0] wb_rf_adr;
-input wb_rf_we;
-input wb_rf_re;
-
-input [4:0] ch_sel;
-input ndnr;
-
-// DMA Engine Status
-input dma_busy, dma_err, dma_done, dma_done_all;
-
-// DMA Engine Reg File Update ctrl signals
-input [31:0] de_csr;
-input [11:0] de_txsz;
-input [31:0] de_adr0;
-input [31:0] de_adr1;
-input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
-input de_fetch_descr;
-input dma_rest;
-
-assign pointer = 32'h0;
-assign pointer_s = 32'h0;
-assign ch_csr = 32'h0;
-assign ch_txsz = 32'h0;
-assign ch_adr0 = 32'h0;
-assign ch_adr1 = 32'h0;
-assign ch_am0 = 32'h0;
-assign ch_am1 = 32'h0;
-assign sw_pointer = 32'h0;
-assign ch_stop = 1'b0;
-assign ch_dis = 1'b0;
-assign int = 1'b0;
-
-endmodule
Index: trunk/rtl/verilog/wb_dma_top.v
===================================================================
--- trunk/rtl/verilog/wb_dma_top.v (revision 16)
+++ trunk/rtl/verilog/wb_dma_top.v (nonexistent)
@@ -1,1122 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// WISHBONE DMA Top Level ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// 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. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: wb_dma_top.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
-//
-// $Date: 2002-02-01 01:54:45 $
-// $Revision: 1.5 $
-// $Author: rudi $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: not supported by cvs2svn $
-// Revision 1.4 2001/10/19 04:35:04 rudi
-//
-// - Made the core parameterized
-//
-// Revision 1.3 2001/09/07 15:34:38 rudi
-//
-// Changed reset to active high.
-//
-// 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
-//
-//
-// 1) Changed Directory Structure
-// 2) Added restart signal (REST)
-//
-// Revision 1.3 2001/06/13 02:26:50 rudi
-//
-//
-// Small changes after running lint.
-//
-// Revision 1.2 2001/06/05 10:22:37 rudi
-//
-//
-// - Added Support of up to 31 channels
-// - Added support for 2,4 and 8 priority levels
-// - Now can have up to 31 channels
-// - Added many configuration items
-// - Changed reset to async
-//
-// Revision 1.1.1.1 2001/03/19 13:10:23 rudi
-// Initial Release
-//
-//
-//
-
-`include "wb_dma_defines.v"
-
-module wb_dma_top(clk_i, rst_i,
-
- wb0s_data_i, wb0s_data_o, wb0_addr_i, wb0_sel_i, wb0_we_i, wb0_cyc_i,
- wb0_stb_i, wb0_ack_o, wb0_err_o, wb0_rty_o,
- wb0m_data_i, wb0m_data_o, wb0_addr_o, wb0_sel_o, wb0_we_o, wb0_cyc_o,
- wb0_stb_o, wb0_ack_i, wb0_err_i, wb0_rty_i,
-
- wb1s_data_i, wb1s_data_o, wb1_addr_i, wb1_sel_i, wb1_we_i, wb1_cyc_i,
- wb1_stb_i, wb1_ack_o, wb1_err_o, wb1_rty_o,
- wb1m_data_i, wb1m_data_o, wb1_addr_o, wb1_sel_o, wb1_we_o, wb1_cyc_o,
- wb1_stb_o, wb1_ack_i, wb1_err_i, wb1_rty_i,
-
- dma_req_i, dma_ack_o, dma_nd_i, dma_rest_i,
-
- inta_o, intb_o
- );
-
-////////////////////////////////////////////////////////////////////
-//
-// Module Parameters
-//
-
-// chXX_conf = { CBUF, ED, ARS, EN }
-parameter rf_addr = 0;
-parameter [1:0] pri_sel = 2'h0;
-parameter ch_count = 1;
-parameter [3:0] ch0_conf = 4'h1;
-parameter [3:0] ch1_conf = 4'h0;
-parameter [3:0] ch2_conf = 4'h0;
-parameter [3:0] ch3_conf = 4'h0;
-parameter [3:0] ch4_conf = 4'h0;
-parameter [3:0] ch5_conf = 4'h0;
-parameter [3:0] ch6_conf = 4'h0;
-parameter [3:0] ch7_conf = 4'h0;
-parameter [3:0] ch8_conf = 4'h0;
-parameter [3:0] ch9_conf = 4'h0;
-parameter [3:0] ch10_conf = 4'h0;
-parameter [3:0] ch11_conf = 4'h0;
-parameter [3:0] ch12_conf = 4'h0;
-parameter [3:0] ch13_conf = 4'h0;
-parameter [3:0] ch14_conf = 4'h0;
-parameter [3:0] ch15_conf = 4'h0;
-parameter [3:0] ch16_conf = 4'h0;
-parameter [3:0] ch17_conf = 4'h0;
-parameter [3:0] ch18_conf = 4'h0;
-parameter [3:0] ch19_conf = 4'h0;
-parameter [3:0] ch20_conf = 4'h0;
-parameter [3:0] ch21_conf = 4'h0;
-parameter [3:0] ch22_conf = 4'h0;
-parameter [3:0] ch23_conf = 4'h0;
-parameter [3:0] ch24_conf = 4'h0;
-parameter [3:0] ch25_conf = 4'h0;
-parameter [3:0] ch26_conf = 4'h0;
-parameter [3:0] ch27_conf = 4'h0;
-parameter [3:0] ch28_conf = 4'h0;
-parameter [3:0] ch29_conf = 4'h0;
-parameter [3:0] ch30_conf = 4'h0;
-
-////////////////////////////////////////////////////////////////////
-//
-// Module IOs
-//
-
-input clk_i, rst_i;
-
-// --------------------------------------
-// WISHBONE INTERFACE 0
-
-// Slave Interface
-input [31:0] wb0s_data_i;
-output [31:0] wb0s_data_o;
-input [31:0] wb0_addr_i;
-input [3:0] wb0_sel_i;
-input wb0_we_i;
-input wb0_cyc_i;
-input wb0_stb_i;
-output wb0_ack_o;
-output wb0_err_o;
-output wb0_rty_o;
-
-// Master Interface
-input [31:0] wb0m_data_i;
-output [31:0] wb0m_data_o;
-output [31:0] wb0_addr_o;
-output [3:0] wb0_sel_o;
-output wb0_we_o;
-output wb0_cyc_o;
-output wb0_stb_o;
-input wb0_ack_i;
-input wb0_err_i;
-input wb0_rty_i;
-
-// --------------------------------------
-// WISHBONE INTERFACE 1
-
-// Slave Interface
-input [31:0] wb1s_data_i;
-output [31:0] wb1s_data_o;
-input [31:0] wb1_addr_i;
-input [3:0] wb1_sel_i;
-input wb1_we_i;
-input wb1_cyc_i;
-input wb1_stb_i;
-output wb1_ack_o;
-output wb1_err_o;
-output wb1_rty_o;
-
-// Master Interface
-input [31:0] wb1m_data_i;
-output [31:0] wb1m_data_o;
-output [31:0] wb1_addr_o;
-output [3:0] wb1_sel_o;
-output wb1_we_o;
-output wb1_cyc_o;
-output wb1_stb_o;
-input wb1_ack_i;
-input wb1_err_i;
-input wb1_rty_i;
-
-// --------------------------------------
-// Misc Signals
-input [ch_count-1:0] dma_req_i;
-input [ch_count-1:0] dma_nd_i;
-output [ch_count-1:0] dma_ack_o;
-input [ch_count-1:0] dma_rest_i;
-output inta_o;
-output intb_o;
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-wire [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
-wire [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
-wire [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
-wire [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
-wire [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
-wire [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
-wire [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
-wire [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
-wire [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
-wire [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
-wire [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
-wire [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
-wire [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
-wire [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
-wire [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
-wire [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
-wire [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
-wire [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
-wire [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
-wire [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
-wire [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
-wire [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
-wire [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
-wire [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
-wire [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
-wire [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
-wire [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
-wire [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
-wire [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
-wire [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
-wire [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
-
-wire [4:0] ch_sel; // Write Back Channel Select
-wire [30:0] ndnr; // Next Descriptor No Request
-wire de_start; // Start DMA Engine
-wire ndr; // Next Descriptor With Request
-wire [31:0] csr; // Selected Channel CSR
-wire [31:0] pointer;
-wire [31:0] pointer_s;
-wire [31:0] txsz; // Selected Channel Transfer Size
-wire [31:0] adr0, adr1; // Selected Channel Addresses
-wire [31:0] am0, am1; // Selected Channel Address Masks
-wire next_ch; // Indicates the DMA Engine is done
-
-wire inta_o, intb_o;
-wire dma_abort;
-wire dma_busy, dma_err, dma_done, dma_done_all;
-wire [31:0] de_csr;
-wire [11:0] de_txsz;
-wire [31:0] de_adr0;
-wire [31:0] de_adr1;
-wire de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we;
-wire de_fetch_descr;
-wire ptr_set;
-wire de_ack;
-wire pause_req;
-wire paused;
-
-wire mast0_go; // Perform a Master Cycle (as long as this
-wire mast0_we; // Read/Write
-wire [31:0] mast0_adr; // Address for the transfer
-wire [31:0] mast0_din; // Internal Input Data
-wire [31:0] mast0_dout; // Internal Output Data
-wire mast0_err; // Indicates an error has occurred
-wire mast0_drdy; // Indicated that either data is available
-wire mast0_wait; // Tells the master to insert wait cycles
-
-wire [31:0] slv0_adr; // Slave Address
-wire [31:0] slv0_din; // Slave Input Data
-wire [31:0] slv0_dout; // Slave Output Data
-wire slv0_re; // Slave Read Enable
-wire slv0_we; // Slave Write Enable
-
-wire pt0_sel_i; // Pass Through Mode Selected
-wire [70:0] mast0_pt_in; // Grouped WISHBONE inputs
-wire [34:0] mast0_pt_out; // Grouped WISHBONE outputs
-
-wire pt0_sel_o; // Pass Through Mode Active
-wire [70:0] slv0_pt_out; // Grouped WISHBONE out signals
-wire [34:0] slv0_pt_in; // Grouped WISHBONE in signals
-
-wire mast1_go; // Perform a Master Cycle (as long as this
-wire mast1_we; // Read/Write
-wire [31:0] mast1_adr; // Address for the transfer
-wire [31:0] mast1_din; // Internal Input Data
-wire [31:0] mast1_dout; // Internal Output Data
-wire mast1_err; // Indicates an error has occurred
-wire mast1_drdy; // Indicated that either data is available
-wire mast1_wait; // Tells the master to insert wait cycles
-
-wire [31:0] slv1_adr; // Slave Address
-wire [31:0] slv1_dout; // Slave Output Data
-wire slv1_re; // Slave Read Enable
-wire slv1_we; // Slave Write Enable
-
-wire pt1_sel_i; // Pass Through Mode Selected
-wire [70:0] mast1_pt_in; // Grouped WISHBONE inputs
-wire [34:0] mast1_pt_out; // Grouped WISHBONE outputs
-
-wire pt1_sel_o; // Pass Through Mode Active
-wire [70:0] slv1_pt_out; // Grouped WISHBONE out signals
-wire [34:0] slv1_pt_in; // Grouped WISHBONE in signals
-
-wire [30:0] dma_req;
-wire [30:0] dma_nd;
-wire [30:0] dma_ack;
-wire [30:0] dma_rest;
-
-////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-wire [31:0] tmp_gnd = 32'h0;
-
-assign dma_req[ch_count-1:0] = dma_req_i;
-assign dma_nd[ch_count-1:0] = dma_nd_i;
-assign dma_rest[ch_count-1:0] = dma_rest_i;
-assign dma_ack_o = {tmp_gnd[31-ch_count:0], dma_ack[ch_count-1:0]};
-
-// --------------------------------------------------
-// This should go in to a separate Pass Through Block
-assign pt1_sel_i = pt0_sel_o;
-assign pt0_sel_i = pt1_sel_o;
-assign mast1_pt_in = slv0_pt_out;
-assign slv0_pt_in = mast1_pt_out;
-assign mast0_pt_in = slv1_pt_out;
-assign slv1_pt_in = mast0_pt_out;
-// --------------------------------------------------
-
-////////////////////////////////////////////////////////////////////
-//
-// Modules
-//
-
-// DMA Register File
-wb_dma_rf #( ch0_conf,
- ch1_conf,
- ch2_conf,
- ch3_conf,
- ch4_conf,
- ch5_conf,
- ch6_conf,
- ch7_conf,
- ch8_conf,
- ch9_conf,
- ch10_conf,
- ch11_conf,
- ch12_conf,
- ch13_conf,
- ch14_conf,
- ch15_conf,
- ch16_conf,
- ch17_conf,
- ch18_conf,
- ch19_conf,
- ch20_conf,
- ch21_conf,
- ch22_conf,
- ch23_conf,
- ch24_conf,
- ch25_conf,
- ch26_conf,
- ch27_conf,
- ch28_conf,
- ch29_conf,
- ch30_conf)
- u0(
- .clk( clk_i ),
- .rst( ~rst_i ),
- .wb_rf_adr( slv0_adr[9:2] ),
- .wb_rf_din( slv0_dout ),
- .wb_rf_dout( slv0_din ),
- .wb_rf_re( slv0_re ),
- .wb_rf_we( slv0_we ),
- .inta_o( inta_o ),
- .intb_o( intb_o ),
- .pointer0( pointer0 ),
- .pointer0_s( pointer0_s ),
- .ch0_csr( ch0_csr ),
- .ch0_txsz( ch0_txsz ),
- .ch0_adr0( ch0_adr0 ),
- .ch0_adr1( ch0_adr1 ),
- .ch0_am0( ch0_am0 ),
- .ch0_am1( ch0_am1 ),
- .pointer1( pointer1 ),
- .pointer1_s( pointer1_s ),
- .ch1_csr( ch1_csr ),
- .ch1_txsz( ch1_txsz ),
- .ch1_adr0( ch1_adr0 ),
- .ch1_adr1( ch1_adr1 ),
- .ch1_am0( ch1_am0 ),
- .ch1_am1( ch1_am1 ),
- .pointer2( pointer2 ),
- .pointer2_s( pointer2_s ),
- .ch2_csr( ch2_csr ),
- .ch2_txsz( ch2_txsz ),
- .ch2_adr0( ch2_adr0 ),
- .ch2_adr1( ch2_adr1 ),
- .ch2_am0( ch2_am0 ),
- .ch2_am1( ch2_am1 ),
- .pointer3( pointer3 ),
- .pointer3_s( pointer3_s ),
- .ch3_csr( ch3_csr ),
- .ch3_txsz( ch3_txsz ),
- .ch3_adr0( ch3_adr0 ),
- .ch3_adr1( ch3_adr1 ),
- .ch3_am0( ch3_am0 ),
- .ch3_am1( ch3_am1 ),
- .pointer4( pointer4 ),
- .pointer4_s( pointer4_s ),
- .ch4_csr( ch4_csr ),
- .ch4_txsz( ch4_txsz ),
- .ch4_adr0( ch4_adr0 ),
- .ch4_adr1( ch4_adr1 ),
- .ch4_am0( ch4_am0 ),
- .ch4_am1( ch4_am1 ),
- .pointer5( pointer5 ),
- .pointer5_s( pointer5_s ),
- .ch5_csr( ch5_csr ),
- .ch5_txsz( ch5_txsz ),
- .ch5_adr0( ch5_adr0 ),
- .ch5_adr1( ch5_adr1 ),
- .ch5_am0( ch5_am0 ),
- .ch5_am1( ch5_am1 ),
- .pointer6( pointer6 ),
- .pointer6_s( pointer6_s ),
- .ch6_csr( ch6_csr ),
- .ch6_txsz( ch6_txsz ),
- .ch6_adr0( ch6_adr0 ),
- .ch6_adr1( ch6_adr1 ),
- .ch6_am0( ch6_am0 ),
- .ch6_am1( ch6_am1 ),
- .pointer7( pointer7 ),
- .pointer7_s( pointer7_s ),
- .ch7_csr( ch7_csr ),
- .ch7_txsz( ch7_txsz ),
- .ch7_adr0( ch7_adr0 ),
- .ch7_adr1( ch7_adr1 ),
- .ch7_am0( ch7_am0 ),
- .ch7_am1( ch7_am1 ),
- .pointer8( pointer8 ),
- .pointer8_s( pointer8_s ),
- .ch8_csr( ch8_csr ),
- .ch8_txsz( ch8_txsz ),
- .ch8_adr0( ch8_adr0 ),
- .ch8_adr1( ch8_adr1 ),
- .ch8_am0( ch8_am0 ),
- .ch8_am1( ch8_am1 ),
- .pointer9( pointer9 ),
- .pointer9_s( pointer9_s ),
- .ch9_csr( ch9_csr ),
- .ch9_txsz( ch9_txsz ),
- .ch9_adr0( ch9_adr0 ),
- .ch9_adr1( ch9_adr1 ),
- .ch9_am0( ch9_am0 ),
- .ch9_am1( ch9_am1 ),
- .pointer10( pointer10 ),
- .pointer10_s( pointer10_s ),
- .ch10_csr( ch10_csr ),
- .ch10_txsz( ch10_txsz ),
- .ch10_adr0( ch10_adr0 ),
- .ch10_adr1( ch10_adr1 ),
- .ch10_am0( ch10_am0 ),
- .ch10_am1( ch10_am1 ),
- .pointer11( pointer11 ),
- .pointer11_s( pointer11_s ),
- .ch11_csr( ch11_csr ),
- .ch11_txsz( ch11_txsz ),
- .ch11_adr0( ch11_adr0 ),
- .ch11_adr1( ch11_adr1 ),
- .ch11_am0( ch11_am0 ),
- .ch11_am1( ch11_am1 ),
- .pointer12( pointer12 ),
- .pointer12_s( pointer12_s ),
- .ch12_csr( ch12_csr ),
- .ch12_txsz( ch12_txsz ),
- .ch12_adr0( ch12_adr0 ),
- .ch12_adr1( ch12_adr1 ),
- .ch12_am0( ch12_am0 ),
- .ch12_am1( ch12_am1 ),
- .pointer13( pointer13 ),
- .pointer13_s( pointer13_s ),
- .ch13_csr( ch13_csr ),
- .ch13_txsz( ch13_txsz ),
- .ch13_adr0( ch13_adr0 ),
- .ch13_adr1( ch13_adr1 ),
- .ch13_am0( ch13_am0 ),
- .ch13_am1( ch13_am1 ),
- .pointer14( pointer14 ),
- .pointer14_s( pointer14_s ),
- .ch14_csr( ch14_csr ),
- .ch14_txsz( ch14_txsz ),
- .ch14_adr0( ch14_adr0 ),
- .ch14_adr1( ch14_adr1 ),
- .ch14_am0( ch14_am0 ),
- .ch14_am1( ch14_am1 ),
- .pointer15( pointer15 ),
- .pointer15_s( pointer15_s ),
- .ch15_csr( ch15_csr ),
- .ch15_txsz( ch15_txsz ),
- .ch15_adr0( ch15_adr0 ),
- .ch15_adr1( ch15_adr1 ),
- .ch15_am0( ch15_am0 ),
- .ch15_am1( ch15_am1 ),
- .pointer16( pointer16 ),
- .pointer16_s( pointer16_s ),
- .ch16_csr( ch16_csr ),
- .ch16_txsz( ch16_txsz ),
- .ch16_adr0( ch16_adr0 ),
- .ch16_adr1( ch16_adr1 ),
- .ch16_am0( ch16_am0 ),
- .ch16_am1( ch16_am1 ),
- .pointer17( pointer17 ),
- .pointer17_s( pointer17_s ),
- .ch17_csr( ch17_csr ),
- .ch17_txsz( ch17_txsz ),
- .ch17_adr0( ch17_adr0 ),
- .ch17_adr1( ch17_adr1 ),
- .ch17_am0( ch17_am0 ),
- .ch17_am1( ch17_am1 ),
- .pointer18( pointer18 ),
- .pointer18_s( pointer18_s ),
- .ch18_csr( ch18_csr ),
- .ch18_txsz( ch18_txsz ),
- .ch18_adr0( ch18_adr0 ),
- .ch18_adr1( ch18_adr1 ),
- .ch18_am0( ch18_am0 ),
- .ch18_am1( ch18_am1 ),
- .pointer19( pointer19 ),
- .pointer19_s( pointer19_s ),
- .ch19_csr( ch19_csr ),
- .ch19_txsz( ch19_txsz ),
- .ch19_adr0( ch19_adr0 ),
- .ch19_adr1( ch19_adr1 ),
- .ch19_am0( ch19_am0 ),
- .ch19_am1( ch19_am1 ),
- .pointer20( pointer20 ),
- .pointer20_s( pointer20_s ),
- .ch20_csr( ch20_csr ),
- .ch20_txsz( ch20_txsz ),
- .ch20_adr0( ch20_adr0 ),
- .ch20_adr1( ch20_adr1 ),
- .ch20_am0( ch20_am0 ),
- .ch20_am1( ch20_am1 ),
- .pointer21( pointer21 ),
- .pointer21_s( pointer21_s ),
- .ch21_csr( ch21_csr ),
- .ch21_txsz( ch21_txsz ),
- .ch21_adr0( ch21_adr0 ),
- .ch21_adr1( ch21_adr1 ),
- .ch21_am0( ch21_am0 ),
- .ch21_am1( ch21_am1 ),
- .pointer22( pointer22 ),
- .pointer22_s( pointer22_s ),
- .ch22_csr( ch22_csr ),
- .ch22_txsz( ch22_txsz ),
- .ch22_adr0( ch22_adr0 ),
- .ch22_adr1( ch22_adr1 ),
- .ch22_am0( ch22_am0 ),
- .ch22_am1( ch22_am1 ),
- .pointer23( pointer23 ),
- .pointer23_s( pointer23_s ),
- .ch23_csr( ch23_csr ),
- .ch23_txsz( ch23_txsz ),
- .ch23_adr0( ch23_adr0 ),
- .ch23_adr1( ch23_adr1 ),
- .ch23_am0( ch23_am0 ),
- .ch23_am1( ch23_am1 ),
- .pointer24( pointer24 ),
- .pointer24_s( pointer24_s ),
- .ch24_csr( ch24_csr ),
- .ch24_txsz( ch24_txsz ),
- .ch24_adr0( ch24_adr0 ),
- .ch24_adr1( ch24_adr1 ),
- .ch24_am0( ch24_am0 ),
- .ch24_am1( ch24_am1 ),
- .pointer25( pointer25 ),
- .pointer25_s( pointer25_s ),
- .ch25_csr( ch25_csr ),
- .ch25_txsz( ch25_txsz ),
- .ch25_adr0( ch25_adr0 ),
- .ch25_adr1( ch25_adr1 ),
- .ch25_am0( ch25_am0 ),
- .ch25_am1( ch25_am1 ),
- .pointer26( pointer26 ),
- .pointer26_s( pointer26_s ),
- .ch26_csr( ch26_csr ),
- .ch26_txsz( ch26_txsz ),
- .ch26_adr0( ch26_adr0 ),
- .ch26_adr1( ch26_adr1 ),
- .ch26_am0( ch26_am0 ),
- .ch26_am1( ch26_am1 ),
- .pointer27( pointer27 ),
- .pointer27_s( pointer27_s ),
- .ch27_csr( ch27_csr ),
- .ch27_txsz( ch27_txsz ),
- .ch27_adr0( ch27_adr0 ),
- .ch27_adr1( ch27_adr1 ),
- .ch27_am0( ch27_am0 ),
- .ch27_am1( ch27_am1 ),
- .pointer28( pointer28 ),
- .pointer28_s( pointer28_s ),
- .ch28_csr( ch28_csr ),
- .ch28_txsz( ch28_txsz ),
- .ch28_adr0( ch28_adr0 ),
- .ch28_adr1( ch28_adr1 ),
- .ch28_am0( ch28_am0 ),
- .ch28_am1( ch28_am1 ),
- .pointer29( pointer29 ),
- .pointer29_s( pointer29_s ),
- .ch29_csr( ch29_csr ),
- .ch29_txsz( ch29_txsz ),
- .ch29_adr0( ch29_adr0 ),
- .ch29_adr1( ch29_adr1 ),
- .ch29_am0( ch29_am0 ),
- .ch29_am1( ch29_am1 ),
- .pointer30( pointer30 ),
- .pointer30_s( pointer30_s ),
- .ch30_csr( ch30_csr ),
- .ch30_txsz( ch30_txsz ),
- .ch30_adr0( ch30_adr0 ),
- .ch30_adr1( ch30_adr1 ),
- .ch30_am0( ch30_am0 ),
- .ch30_am1( ch30_am1 ),
- .ch_sel( ch_sel ),
- .ndnr( ndnr ),
- .pause_req( pause_req ),
- .paused( paused ),
- .dma_abort( dma_abort ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .dma_rest( dma_rest ),
- .ptr_set( ptr_set )
- );
-
-// Channel Select
-wb_dma_ch_sel #(pri_sel,
- ch0_conf,
- ch1_conf,
- ch2_conf,
- ch3_conf,
- ch4_conf,
- ch5_conf,
- ch6_conf,
- ch7_conf,
- ch8_conf,
- ch9_conf,
- ch10_conf,
- ch11_conf,
- ch12_conf,
- ch13_conf,
- ch14_conf,
- ch15_conf,
- ch16_conf,
- ch17_conf,
- ch18_conf,
- ch19_conf,
- ch20_conf,
- ch21_conf,
- ch22_conf,
- ch23_conf,
- ch24_conf,
- ch25_conf,
- ch26_conf,
- ch27_conf,
- ch28_conf,
- ch29_conf,
- ch30_conf)
- u1(
- .clk( clk_i ),
- .rst( ~rst_i ),
- .req_i( dma_req ),
- .ack_o( dma_ack ),
- .nd_i( dma_nd ),
-
- .pointer0( pointer0 ),
- .pointer0_s( pointer0_s ),
- .ch0_csr( ch0_csr ),
- .ch0_txsz( ch0_txsz ),
- .ch0_adr0( ch0_adr0 ),
- .ch0_adr1( ch0_adr1 ),
- .ch0_am0( ch0_am0 ),
- .ch0_am1( ch0_am1 ),
- .pointer1( pointer1 ),
- .pointer1_s( pointer1_s ),
- .ch1_csr( ch1_csr ),
- .ch1_txsz( ch1_txsz ),
- .ch1_adr0( ch1_adr0 ),
- .ch1_adr1( ch1_adr1 ),
- .ch1_am0( ch1_am0 ),
- .ch1_am1( ch1_am1 ),
- .pointer2( pointer2 ),
- .pointer2_s( pointer2_s ),
- .ch2_csr( ch2_csr ),
- .ch2_txsz( ch2_txsz ),
- .ch2_adr0( ch2_adr0 ),
- .ch2_adr1( ch2_adr1 ),
- .ch2_am0( ch2_am0 ),
- .ch2_am1( ch2_am1 ),
- .pointer3( pointer3 ),
- .pointer3_s( pointer3_s ),
- .ch3_csr( ch3_csr ),
- .ch3_txsz( ch3_txsz ),
- .ch3_adr0( ch3_adr0 ),
- .ch3_adr1( ch3_adr1 ),
- .ch3_am0( ch3_am0 ),
- .ch3_am1( ch3_am1 ),
- .pointer4( pointer4 ),
- .pointer4_s( pointer4_s ),
- .ch4_csr( ch4_csr ),
- .ch4_txsz( ch4_txsz ),
- .ch4_adr0( ch4_adr0 ),
- .ch4_adr1( ch4_adr1 ),
- .ch4_am0( ch4_am0 ),
- .ch4_am1( ch4_am1 ),
- .pointer5( pointer5 ),
- .pointer5_s( pointer5_s ),
- .ch5_csr( ch5_csr ),
- .ch5_txsz( ch5_txsz ),
- .ch5_adr0( ch5_adr0 ),
- .ch5_adr1( ch5_adr1 ),
- .ch5_am0( ch5_am0 ),
- .ch5_am1( ch5_am1 ),
- .pointer6( pointer6 ),
- .pointer6_s( pointer6_s ),
- .ch6_csr( ch6_csr ),
- .ch6_txsz( ch6_txsz ),
- .ch6_adr0( ch6_adr0 ),
- .ch6_adr1( ch6_adr1 ),
- .ch6_am0( ch6_am0 ),
- .ch6_am1( ch6_am1 ),
- .pointer7( pointer7 ),
- .pointer7_s( pointer7_s ),
- .ch7_csr( ch7_csr ),
- .ch7_txsz( ch7_txsz ),
- .ch7_adr0( ch7_adr0 ),
- .ch7_adr1( ch7_adr1 ),
- .ch7_am0( ch7_am0 ),
- .ch7_am1( ch7_am1 ),
- .pointer8( pointer8 ),
- .pointer8_s( pointer8_s ),
- .ch8_csr( ch8_csr ),
- .ch8_txsz( ch8_txsz ),
- .ch8_adr0( ch8_adr0 ),
- .ch8_adr1( ch8_adr1 ),
- .ch8_am0( ch8_am0 ),
- .ch8_am1( ch8_am1 ),
- .pointer9( pointer9 ),
- .pointer9_s( pointer9_s ),
- .ch9_csr( ch9_csr ),
- .ch9_txsz( ch9_txsz ),
- .ch9_adr0( ch9_adr0 ),
- .ch9_adr1( ch9_adr1 ),
- .ch9_am0( ch9_am0 ),
- .ch9_am1( ch9_am1 ),
- .pointer10( pointer10 ),
- .pointer10_s( pointer10_s ),
- .ch10_csr( ch10_csr ),
- .ch10_txsz( ch10_txsz ),
- .ch10_adr0( ch10_adr0 ),
- .ch10_adr1( ch10_adr1 ),
- .ch10_am0( ch10_am0 ),
- .ch10_am1( ch10_am1 ),
- .pointer11( pointer11 ),
- .pointer11_s( pointer11_s ),
- .ch11_csr( ch11_csr ),
- .ch11_txsz( ch11_txsz ),
- .ch11_adr0( ch11_adr0 ),
- .ch11_adr1( ch11_adr1 ),
- .ch11_am0( ch11_am0 ),
- .ch11_am1( ch11_am1 ),
- .pointer12( pointer12 ),
- .pointer12_s( pointer12_s ),
- .ch12_csr( ch12_csr ),
- .ch12_txsz( ch12_txsz ),
- .ch12_adr0( ch12_adr0 ),
- .ch12_adr1( ch12_adr1 ),
- .ch12_am0( ch12_am0 ),
- .ch12_am1( ch12_am1 ),
- .pointer13( pointer13 ),
- .pointer13_s( pointer13_s ),
- .ch13_csr( ch13_csr ),
- .ch13_txsz( ch13_txsz ),
- .ch13_adr0( ch13_adr0 ),
- .ch13_adr1( ch13_adr1 ),
- .ch13_am0( ch13_am0 ),
- .ch13_am1( ch13_am1 ),
- .pointer14( pointer14 ),
- .pointer14_s( pointer14_s ),
- .ch14_csr( ch14_csr ),
- .ch14_txsz( ch14_txsz ),
- .ch14_adr0( ch14_adr0 ),
- .ch14_adr1( ch14_adr1 ),
- .ch14_am0( ch14_am0 ),
- .ch14_am1( ch14_am1 ),
- .pointer15( pointer15 ),
- .pointer15_s( pointer15_s ),
- .ch15_csr( ch15_csr ),
- .ch15_txsz( ch15_txsz ),
- .ch15_adr0( ch15_adr0 ),
- .ch15_adr1( ch15_adr1 ),
- .ch15_am0( ch15_am0 ),
- .ch15_am1( ch15_am1 ),
- .pointer16( pointer16 ),
- .pointer16_s( pointer16_s ),
- .ch16_csr( ch16_csr ),
- .ch16_txsz( ch16_txsz ),
- .ch16_adr0( ch16_adr0 ),
- .ch16_adr1( ch16_adr1 ),
- .ch16_am0( ch16_am0 ),
- .ch16_am1( ch16_am1 ),
- .pointer17( pointer17 ),
- .pointer17_s( pointer17_s ),
- .ch17_csr( ch17_csr ),
- .ch17_txsz( ch17_txsz ),
- .ch17_adr0( ch17_adr0 ),
- .ch17_adr1( ch17_adr1 ),
- .ch17_am0( ch17_am0 ),
- .ch17_am1( ch17_am1 ),
- .pointer18( pointer18 ),
- .pointer18_s( pointer18_s ),
- .ch18_csr( ch18_csr ),
- .ch18_txsz( ch18_txsz ),
- .ch18_adr0( ch18_adr0 ),
- .ch18_adr1( ch18_adr1 ),
- .ch18_am0( ch18_am0 ),
- .ch18_am1( ch18_am1 ),
- .pointer19( pointer19 ),
- .pointer19_s( pointer19_s ),
- .ch19_csr( ch19_csr ),
- .ch19_txsz( ch19_txsz ),
- .ch19_adr0( ch19_adr0 ),
- .ch19_adr1( ch19_adr1 ),
- .ch19_am0( ch19_am0 ),
- .ch19_am1( ch19_am1 ),
- .pointer20( pointer20 ),
- .pointer20_s( pointer20_s ),
- .ch20_csr( ch20_csr ),
- .ch20_txsz( ch20_txsz ),
- .ch20_adr0( ch20_adr0 ),
- .ch20_adr1( ch20_adr1 ),
- .ch20_am0( ch20_am0 ),
- .ch20_am1( ch20_am1 ),
- .pointer21( pointer21 ),
- .pointer21_s( pointer21_s ),
- .ch21_csr( ch21_csr ),
- .ch21_txsz( ch21_txsz ),
- .ch21_adr0( ch21_adr0 ),
- .ch21_adr1( ch21_adr1 ),
- .ch21_am0( ch21_am0 ),
- .ch21_am1( ch21_am1 ),
- .pointer22( pointer22 ),
- .pointer22_s( pointer22_s ),
- .ch22_csr( ch22_csr ),
- .ch22_txsz( ch22_txsz ),
- .ch22_adr0( ch22_adr0 ),
- .ch22_adr1( ch22_adr1 ),
- .ch22_am0( ch22_am0 ),
- .ch22_am1( ch22_am1 ),
- .pointer23( pointer23 ),
- .pointer23_s( pointer23_s ),
- .ch23_csr( ch23_csr ),
- .ch23_txsz( ch23_txsz ),
- .ch23_adr0( ch23_adr0 ),
- .ch23_adr1( ch23_adr1 ),
- .ch23_am0( ch23_am0 ),
- .ch23_am1( ch23_am1 ),
- .pointer24( pointer24 ),
- .pointer24_s( pointer24_s ),
- .ch24_csr( ch24_csr ),
- .ch24_txsz( ch24_txsz ),
- .ch24_adr0( ch24_adr0 ),
- .ch24_adr1( ch24_adr1 ),
- .ch24_am0( ch24_am0 ),
- .ch24_am1( ch24_am1 ),
- .pointer25( pointer25 ),
- .pointer25_s( pointer25_s ),
- .ch25_csr( ch25_csr ),
- .ch25_txsz( ch25_txsz ),
- .ch25_adr0( ch25_adr0 ),
- .ch25_adr1( ch25_adr1 ),
- .ch25_am0( ch25_am0 ),
- .ch25_am1( ch25_am1 ),
- .pointer26( pointer26 ),
- .pointer26_s( pointer26_s ),
- .ch26_csr( ch26_csr ),
- .ch26_txsz( ch26_txsz ),
- .ch26_adr0( ch26_adr0 ),
- .ch26_adr1( ch26_adr1 ),
- .ch26_am0( ch26_am0 ),
- .ch26_am1( ch26_am1 ),
- .pointer27( pointer27 ),
- .pointer27_s( pointer27_s ),
- .ch27_csr( ch27_csr ),
- .ch27_txsz( ch27_txsz ),
- .ch27_adr0( ch27_adr0 ),
- .ch27_adr1( ch27_adr1 ),
- .ch27_am0( ch27_am0 ),
- .ch27_am1( ch27_am1 ),
- .pointer28( pointer28 ),
- .pointer28_s( pointer28_s ),
- .ch28_csr( ch28_csr ),
- .ch28_txsz( ch28_txsz ),
- .ch28_adr0( ch28_adr0 ),
- .ch28_adr1( ch28_adr1 ),
- .ch28_am0( ch28_am0 ),
- .ch28_am1( ch28_am1 ),
- .pointer29( pointer29 ),
- .pointer29_s( pointer29_s ),
- .ch29_csr( ch29_csr ),
- .ch29_txsz( ch29_txsz ),
- .ch29_adr0( ch29_adr0 ),
- .ch29_adr1( ch29_adr1 ),
- .ch29_am0( ch29_am0 ),
- .ch29_am1( ch29_am1 ),
- .pointer30( pointer30 ),
- .pointer30_s( pointer30_s ),
- .ch30_csr( ch30_csr ),
- .ch30_txsz( ch30_txsz ),
- .ch30_adr0( ch30_adr0 ),
- .ch30_adr1( ch30_adr1 ),
- .ch30_am0( ch30_am0 ),
- .ch30_am1( ch30_am1 ),
-
- .ch_sel( ch_sel ),
- .ndnr( ndnr ),
- .de_start( de_start ),
- .ndr( ndr ),
- .csr( csr ),
- .pointer( pointer ),
- .txsz( txsz ),
- .adr0( adr0 ),
- .adr1( adr1 ),
- .am0( am0 ),
- .am1( am1 ),
- .pointer_s( pointer_s ),
- .next_ch( next_ch ),
- .de_ack( de_ack ),
- .dma_busy( dma_busy )
- );
-
-
-// DMA Engine
-wb_dma_de u2(
- .clk( clk_i ),
- .rst( ~rst_i ),
- .mast0_go( mast0_go ),
- .mast0_we( mast0_we ),
- .mast0_adr( mast0_adr ),
- .mast0_din( mast0_dout ),
- .mast0_dout( mast0_din ),
- .mast0_err( mast0_err ),
- .mast0_drdy( mast0_drdy ),
- .mast0_wait( mast0_wait ),
- .mast1_go( mast1_go ),
- .mast1_we( mast1_we ),
- .mast1_adr( mast1_adr ),
- .mast1_din( mast1_dout ),
- .mast1_dout( mast1_din ),
- .mast1_err( mast1_err ),
- .mast1_drdy( mast1_drdy ),
- .mast1_wait( mast1_wait ),
- .de_start( de_start ),
- .nd( ndr ),
- .csr( csr ),
- .pointer( pointer ),
- .pointer_s( pointer_s ),
- .txsz( txsz ),
- .adr0( adr0 ),
- .adr1( adr1 ),
- .am0( am0 ),
- .am1( am1 ),
- .de_csr_we( de_csr_we ),
- .de_txsz_we( de_txsz_we ),
- .de_adr0_we( de_adr0_we ),
- .de_adr1_we( de_adr1_we ),
- .de_fetch_descr(de_fetch_descr ),
- .ptr_set( ptr_set ),
- .de_csr( de_csr ),
- .de_txsz( de_txsz ),
- .de_adr0( de_adr0 ),
- .de_adr1( de_adr1 ),
- .next_ch( next_ch ),
- .de_ack( de_ack ),
- .pause_req( pause_req ),
- .paused( paused ),
- .dma_abort( dma_abort ),
- .dma_busy( dma_busy ),
- .dma_err( dma_err ),
- .dma_done( dma_done ),
- .dma_done_all( dma_done_all )
- );
-
-// Wishbone Interface 0
-wb_dma_wb_if #(rf_addr) u3(
- .clk( clk_i ),
- .rst( ~rst_i ),
- .wbs_data_i( wb0s_data_i ),
- .wbs_data_o( wb0s_data_o ),
- .wb_addr_i( wb0_addr_i ),
- .wb_sel_i( wb0_sel_i ),
- .wb_we_i( wb0_we_i ),
- .wb_cyc_i( wb0_cyc_i ),
- .wb_stb_i( wb0_stb_i ),
- .wb_ack_o( wb0_ack_o ),
- .wb_err_o( wb0_err_o ),
- .wb_rty_o( wb0_rty_o ),
- .wbm_data_i( wb0m_data_i ),
- .wbm_data_o( wb0m_data_o ),
- .wb_addr_o( wb0_addr_o ),
- .wb_sel_o( wb0_sel_o ),
- .wb_we_o( wb0_we_o ),
- .wb_cyc_o( wb0_cyc_o ),
- .wb_stb_o( wb0_stb_o ),
- .wb_ack_i( wb0_ack_i ),
- .wb_err_i( wb0_err_i ),
- .wb_rty_i( wb0_rty_i ),
- .mast_go( mast0_go ),
- .mast_we( mast0_we ),
- .mast_adr( mast0_adr ),
- .mast_din( mast0_din ),
- .mast_dout( mast0_dout ),
- .mast_err( mast0_err ),
- .mast_drdy( mast0_drdy ),
- .mast_wait( mast0_wait ),
- .pt_sel_i( pt0_sel_i ),
- .mast_pt_in( mast0_pt_in ),
- .mast_pt_out( mast0_pt_out ),
- .slv_adr( slv0_adr ),
- .slv_din( slv0_din ),
- .slv_dout( slv0_dout ),
- .slv_re( slv0_re ),
- .slv_we( slv0_we ),
- .pt_sel_o( pt0_sel_o ),
- .slv_pt_out( slv0_pt_out ),
- .slv_pt_in( slv0_pt_in )
- );
-
-// Wishbone Interface 1
-wb_dma_wb_if #(rf_addr) u4(
- .clk( clk_i ),
- .rst( ~rst_i ),
- .wbs_data_i( wb1s_data_i ),
- .wbs_data_o( wb1s_data_o ),
- .wb_addr_i( wb1_addr_i ),
- .wb_sel_i( wb1_sel_i ),
- .wb_we_i( wb1_we_i ),
- .wb_cyc_i( wb1_cyc_i ),
- .wb_stb_i( wb1_stb_i ),
- .wb_ack_o( wb1_ack_o ),
- .wb_err_o( wb1_err_o ),
- .wb_rty_o( wb1_rty_o ),
- .wbm_data_i( wb1m_data_i ),
- .wbm_data_o( wb1m_data_o ),
- .wb_addr_o( wb1_addr_o ),
- .wb_sel_o( wb1_sel_o ),
- .wb_we_o( wb1_we_o ),
- .wb_cyc_o( wb1_cyc_o ),
- .wb_stb_o( wb1_stb_o ),
- .wb_ack_i( wb1_ack_i ),
- .wb_err_i( wb1_err_i ),
- .wb_rty_i( wb1_rty_i ),
- .mast_go( mast1_go ),
- .mast_we( mast1_we ),
- .mast_adr( mast1_adr ),
- .mast_din( mast1_din ),
- .mast_dout( mast1_dout ),
- .mast_err( mast1_err ),
- .mast_drdy( mast1_drdy ),
- .mast_wait( mast1_wait ),
- .pt_sel_i( pt1_sel_i ),
- .mast_pt_in( mast1_pt_in ),
- .mast_pt_out( mast1_pt_out ),
- .slv_adr( slv1_adr ),
- .slv_din( 32'h0 ), // Not Connected
- .slv_dout( slv1_dout ), // Not Connected
- .slv_re( slv1_re ), // Not Connected
- .slv_we( slv1_we ), // Not Connected
- .pt_sel_o( pt1_sel_o ),
- .slv_pt_out( slv1_pt_out ),
- .slv_pt_in( slv1_pt_in )
- );
-
-
-endmodule
Index: wb_dma/trunk/sim/rtl_sim/bin/Makefile
===================================================================
--- wb_dma/trunk/sim/rtl_sim/bin/Makefile (nonexistent)
+++ wb_dma/trunk/sim/rtl_sim/bin/Makefile (revision 17)
@@ -0,0 +1,93 @@
+
+all: sim
+SHELL = /bin/sh
+MS=-s
+
+##########################################################################
+#
+# DUT Sources
+#
+##########################################################################
+DUT_SRC_DIR=../../../rtl/verilog
+_TARGETS_= $(DUT_SRC_DIR)/wb_dma_ch_pri_enc.v \
+ $(DUT_SRC_DIR)/wb_dma_ch_arb.v \
+ $(DUT_SRC_DIR)/wb_dma_pri_enc_sub.v \
+ $(DUT_SRC_DIR)/wb_dma_ch_sel.v \
+ $(DUT_SRC_DIR)/wb_dma_top.v \
+ $(DUT_SRC_DIR)/wb_dma_ch_rf.v \
+ $(DUT_SRC_DIR)/wb_dma_rf.v \
+ $(DUT_SRC_DIR)/wb_dma_wb_if.v \
+ $(DUT_SRC_DIR)/wb_dma_wb_mast.v \
+ $(DUT_SRC_DIR)/wb_dma_wb_slv.v \
+ $(DUT_SRC_DIR)/wb_dma_de.v \
+ $(DUT_SRC_DIR)/wb_dma_inc30r.v
+
+##########################################################################
+#
+# Test Bench Sources
+#
+##########################################################################
+_TOP_=test
+TB_SRC_DIR=../../../bench/verilog
+_TB_= $(TB_SRC_DIR)/test_bench_top.v \
+ $(TB_SRC_DIR)/wb_slv_model.v \
+ $(TB_SRC_DIR)/wb_mast_model.v
+
+##########################################################################
+#
+# Misc Variables
+#
+##########################################################################
+
+#INCDIR="-INCDIR ./$(DUT_SRC_DIR)/ -INCDIR ./$(TB_SRC_DIR)/"
+#LOGF=-LOGFILE .nclog
+#NCCOMMON=-CDSLIB ncwork/cds.lib -HDLVAR ncwork/hdl.var -NOCOPYRIGHT
+
+INCDIR=+incdir+./$(DUT_SRC_DIR)/ +incdir+./$(TB_SRC_DIR)/
+LOGF=-l .nclog
+
+UMC_LIB=/tools/dc_libraries/virtual_silicon/umc_lib.v
+GATE_NETLIST = ../../../syn/out/wb_dma_top_ps.v
+
+##########################################################################
+#
+# Make Targets
+#
+##########################################################################
+
+ss:
+ signalscan -do waves/waves.do -waves waves/waves.trn &
+
+simxl:
+ verilog +incdir+$(DUT_SRC_DIR) +incdir+$(TB_SRC_DIR) \
+ $(_TARGETS_) $(_TB_)
+
+simw:
+ @$(MAKE) -s sim ACCESS="+access+r " WAVES="+define+WAVES"
+
+sim:
+ ncverilog -q +define+RUDIS_TB $(_TARGETS_) $(_TB_) \
+ $(INCDIR) $(WAVES) $(ACCESS) $(LOGF) +ncstatus \
+ +ncuid+`hostname`
+
+gatew:
+ @$(MAKE) -s gate ACCESS="+access+r" WAVES="+define+WAVES"
+
+gate:
+ ncverilog -q +define+RUDIS_TB $(_TB_) $(UMC_LIB) \
+ $(GATE_NETLIST) $(INCDIR) $(WAVES) $(ACCESS) \
+ $(LOGF) +ncstatus +ncuid+`hostname`
+
+hal:
+ @echo ""
+ @echo "----- Running HAL ... ----------"
+ @hal -NOP -NOS -nocheck STYVAL:USEPRT:NOBLKN:DLNBLK \
+ +incdir+$(DUT_SRC_DIR) $(_TARGETS_)
+ @echo "----- DONE ... ----------"
+
+clean:
+ rm -rf ./waves/*.dsn ./waves/*.trn \
+ ncwork/inc* ncwork/.inc* ncverilog.key \
+ ./verilog.* .nclog hal.log INCA_libs
+
+##########################################################################
wb_dma/trunk/sim/rtl_sim/bin/Makefile
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: wb_dma/trunk/bench/verilog/wb_mast_model.v
===================================================================
--- wb_dma/trunk/bench/verilog/wb_mast_model.v (nonexistent)
+++ wb_dma/trunk/bench/verilog/wb_mast_model.v (revision 17)
@@ -0,0 +1,687 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE Master Model ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_mast_model.v,v 1.3 2002-02-01 01:55:44 rudi Exp $
+//
+// $Date: 2002-02-01 01:55:44 $
+// $Revision: 1.3 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.2 2001/09/07 15:34:36 rudi
+//
+// Changed reset to active high.
+//
+// Revision 1.1 2001/07/29 08:57:02 rudi
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.1.1.1 2001/03/19 13:11:34 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_model_defines.v"
+
+module wb_mast(clk, rst, adr, din, dout, cyc, stb, sel, we, ack, err, rty);
+
+input clk, rst;
+output [31:0] adr;
+input [31:0] din;
+output [31:0] dout;
+output cyc, stb;
+output [3:0] sel;
+output we;
+input ack, err, rty;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+parameter mem_size = 4096;
+
+reg [31:0] adr;
+reg [31:0] dout;
+reg cyc, stb;
+reg [3:0] sel;
+reg we;
+
+reg [31:0] rd_mem[mem_size:0];
+reg [31:0] wr_mem[mem_size:0];
+integer rd_cnt;
+integer wr_cnt;
+
+////////////////////////////////////////////////////////////////////
+//
+// Memory Logic
+//
+
+initial
+ begin
+ //adr = 32'hxxxx_xxxx;
+ //adr = 0;
+ adr = 32'hffff_ffff;
+ dout = 32'hxxxx_xxxx;
+ cyc = 0;
+ stb = 0;
+ sel = 4'hx;
+ we = 1'hx;
+ rd_cnt = 0;
+ wr_cnt = 0;
+ #1;
+ $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)\n");
+ end
+
+
+
+task mem_fill;
+
+integer n;
+begin
+rd_cnt = 0;
+wr_cnt = 0;
+for(n=0;n5000)
+ begin
+ $display("\n\n*************************************\n");
+ $display("ERROR: Watch Dog Counter Expired\n");
+ $display("*************************************\n\n\n");
+ $finish;
+ end
+
+always #5 clk = ~clk;
+
+/////////////////////////////////////////////////////////////////////
+//
+// WISHBONE DMA IP Core
+//
+
+
+// Module Prototype
+
+wb_dma_top
+ #( 4'hb, // register file address
+ 2'd1, // Number of priorities (4)
+ `CH_COUNT, // Number of channels
+ 4'hf,
+ 4'hf,
+ 4'hf,
+ 4'hf,
+ 4'hf,
+ 4'hf,
+ 4'hf,
+ 4'hf
+ )
+ u0(
+ .clk_i( clk ),
+ .rst_i( rst ),
+ .wb0s_data_i( wb0s_data_i ),
+ .wb0s_data_o( wb0s_data_o ),
+ .wb0_addr_i( wb0_addr_i ),
+ .wb0_sel_i( wb0_sel_i ),
+ .wb0_we_i( wb0_we_i ),
+ .wb0_cyc_i( wb0_cyc_i ),
+ .wb0_stb_i( wb0_stb_i ),
+ .wb0_ack_o( wb0_ack_o ),
+ .wb0_err_o( wb0_err_o ),
+ .wb0_rty_o( wb0_rty_o ),
+ .wb0m_data_i( wb0m_data_i ),
+ .wb0m_data_o( wb0m_data_o ),
+ .wb0_addr_o( wb0_addr_o ),
+ .wb0_sel_o( wb0_sel_o ),
+ .wb0_we_o( wb0_we_o ),
+ .wb0_cyc_o( wb0_cyc_o ),
+ .wb0_stb_o( wb0_stb_o ),
+ .wb0_ack_i( wb0_ack_i ),
+ .wb0_err_i( wb0_err_i ),
+ .wb0_rty_i( wb0_rty_i ),
+ .wb1s_data_i( wb1s_data_i ),
+ .wb1s_data_o( wb1s_data_o ),
+ .wb1_addr_i( wb1_addr_i ),
+ .wb1_sel_i( wb1_sel_i ),
+ .wb1_we_i( wb1_we_i ),
+ .wb1_cyc_i( wb1_cyc_i ),
+ .wb1_stb_i( wb1_stb_i ),
+ .wb1_ack_o( wb1_ack_o ),
+ .wb1_err_o( wb1_err_o ),
+ .wb1_rty_o( wb1_rty_o ),
+ .wb1m_data_i( wb1m_data_i ),
+ .wb1m_data_o( wb1m_data_o ),
+ .wb1_addr_o( wb1_addr_o ),
+ .wb1_sel_o( wb1_sel_o ),
+ .wb1_we_o( wb1_we_o ),
+ .wb1_cyc_o( wb1_cyc_o ),
+ .wb1_stb_o( wb1_stb_o ),
+ .wb1_ack_i( wb1_ack_i ),
+ .wb1_err_i( wb1_err_i ),
+ .wb1_rty_i( wb1_rty_i ),
+ .dma_req_i( req_i ),
+ .dma_ack_o( ack_o ),
+ .dma_nd_i( nd_i ),
+ .dma_rest_i( rest_i ),
+ .inta_o( inta_o ),
+ .intb_o( intb_o )
+ );
+
+wb_slv #(14) s0(
+ .clk( clk ),
+ .rst( ~rst ),
+ .adr( wb0_addr_o ),
+ .din( wb0s_data_o ),
+ .dout( wb0s_data_i ),
+ .cyc( wb0_cyc_o ),
+ .stb( wb0_stb_o ),
+ .sel( wb0_sel_o ),
+ .we( wb0_we_o ),
+ .ack( wb0_ack_i ),
+ .err( wb0_err_i ),
+ .rty( wb0_rty_i )
+ );
+
+wb_slv #(14) s1(
+ .clk( clk ),
+ .rst( ~rst ),
+ .adr( wb1_addr_o ),
+ .din( wb1s_data_o ),
+ .dout( wb1s_data_i ),
+ .cyc( wb1_cyc_o ),
+ .stb( wb1_stb_o ),
+ .sel( wb1_sel_o ),
+ .we( wb1_we_o ),
+ .ack( wb1_ack_i ),
+ .err( wb1_err_i ),
+ .rty( wb1_rty_i )
+ );
+
+wb_mast m0(
+ .clk( clk ),
+ .rst( ~rst ),
+ .adr( wb0_addr_i ),
+ .din( wb0m_data_o ),
+ .dout( wb0m_data_i ),
+ .cyc( wb0_cyc_i ),
+ .stb( wb0_stb_i ),
+ .sel( wb0_sel_i ),
+ .we( wb0_we_i ),
+ .ack( wb0_ack_o ),
+ .err( wb0_err_o ),
+ .rty( wb0_rty_o )
+ );
+
+wb_mast m1(
+ .clk( clk ),
+ .rst( ~rst ),
+ .adr( wb1_addr_i ),
+ .din( wb1m_data_o ),
+ .dout( wb1m_data_i ),
+ .cyc( wb1_cyc_i ),
+ .stb( wb1_stb_i ),
+ .sel( wb1_sel_i ),
+ .we( wb1_we_i ),
+ .ack( wb1_ack_o ),
+ .err( wb1_err_o ),
+ .rty( wb1_rty_o )
+ );
+
+`include "tests.v"
+
+endmodule
+
Index: wb_dma/trunk/bench/verilog/wb_model_defines.v
===================================================================
--- wb_dma/trunk/bench/verilog/wb_model_defines.v (nonexistent)
+++ wb_dma/trunk/bench/verilog/wb_model_defines.v (revision 17)
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE Model Definitions ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_model_defines.v,v 1.2 2002-02-01 01:55:44 rudi Exp $
+//
+// $Date: 2002-02-01 01:55:44 $
+// $Revision: 1.2 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $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.1.1.1 2001/03/19 13:12:48 rudi
+// Initial Release
+//
+//
+//
+
+`timescale 1ns / 10ps
Index: wb_dma/trunk/bench/verilog/tests.v
===================================================================
--- wb_dma/trunk/bench/verilog/tests.v (nonexistent)
+++ wb_dma/trunk/bench/verilog/tests.v (revision 17)
@@ -0,0 +1,2502 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// DMA Test Cases ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2000 Rudolf Usselmann ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: tests.v,v 1.3 2001-09-07 15:34:36 rudi Exp $
+//
+// $Date: 2001-09-07 15:34:36 $
+// $Revision: 1.3 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.2 2001/08/15 05:40:29 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.1.1.1 2001/03/19 13:12:39 rudi
+// Initial Release
+//
+//
+//
+
+task sw_ext_desc1;
+input quick;
+
+integer quick, tot_sz_max, chunk_sz_max, del_max;
+
+reg [7:0] mode;
+reg [15:0] tot_sz;
+reg [15:0] chunk_sz;
+integer ii, n,del;
+reg [31:0] int_src, d0, d1;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** SW DMA No Buffer Ext. Descr LL ... ***");
+$display("*****************************************************\n");
+
+rst = 1;
+repeat(10) @(posedge clk);
+rst = 0;
+repeat(10) @(posedge clk);
+
+if(quick)
+ begin
+ tot_sz_max = 32;
+ del_max = 2;
+ chunk_sz_max = 4;
+ end
+else
+ begin
+ tot_sz_max = 128;
+ del_max = 6;
+ chunk_sz_max = 8;
+ end
+
+
+mode = 1;
+tot_sz = 64;
+chunk_sz=3;
+del = 0;
+
+for(del=0;del8) tot_sz = tot_sz + 2;
+if(tot_sz>16) tot_sz = tot_sz + 2;
+if(tot_sz>32) tot_sz = tot_sz + 12;
+
+
+for(chunk_sz=0;chunk_sz0, ");
+ 1: $write("Mode: 0->1, ");
+ 2: $write("Mode: 1->0, ");
+ 3: $write("Mode: 1->1, ");
+ endcase
+ $display("Total Size: %0d, Chunk Size: %0d, Slave Delay: %0d",
+ tot_sz, chunk_sz, del);
+
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ s0.delay = del;
+ s1.delay = del;
+
+ s0.fill_mem(1);
+ s1.fill_mem(1);
+
+ s0.mem[0] = (32'h000c_0000 | (mode[1:0]<<16)) + tot_sz;
+ s0.mem[1] = 32'h0000_0100;
+ s0.mem[2] = 32'h0000_0400;
+ s0.mem[3] = 32'h0000_0010;
+
+ s0.mem[4] = (32'h001c_0000 | (mode[1:0]<<16)) + tot_sz;
+ s0.mem[5] = 32'h0000_0100 + (tot_sz * 4);
+ s0.mem[6] = 32'h0000_0400 + (tot_sz * 4);
+ s0.mem[7] = 32'h0000_0000;
+
+
+ s0.mem[8] = (32'h000c_0000 | (mode[1:0]<<16)) + tot_sz;
+ s0.mem[9] = 32'h0000_0800;
+ s0.mem[10] = 32'h0000_0c00;
+ s0.mem[11] = 32'h0000_0030;
+
+ s0.mem[12] = (32'h001c_0000 | (mode[1:0]<<16)) + tot_sz;
+ s0.mem[13] = 32'h0000_0800 + (tot_sz * 4);
+ s0.mem[14] = 32'h0000_0c00 + (tot_sz * 4);
+ s0.mem[15] = 32'h0000_0000;
+
+
+ m0.wb_wr1(`REG_BASE + `INT_MASKA,4'hf,32'hffff_ffff);
+
+ m0.wb_wr1(`REG_BASE + `PTR0, 4'hf, 32'h0000_0020);
+ m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz, 12'h0});
+ m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0080);
+ m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
+
+ m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
+ {15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
+
+
+ m0.wb_wr1(`REG_BASE + `PTR1, 4'hf, 32'h0000_0000);
+ m0.wb_wr1(`REG_BASE + `CH1_TXSZ,4'hf, {chunk_sz, 12'h0});
+ m0.wb_wr1(`REG_BASE + `CH1_ADR0,4'hf,32'h0000_0080);
+ m0.wb_wr1(`REG_BASE + `CH1_ADR1,4'hf,32'h0000_4000);
+
+ m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
+ {15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
+
+
+for(ii=0;ii<2;ii=ii+1)
+begin
+ repeat(5) @(posedge clk);
+ while(!inta_o) @(posedge clk);
+
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+ if(int_src[0])
+ begin
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[9]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
+ else d1=s0.mem[(s0.mem[10]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
+ d0 = {24'h0064_089, 1'b1, mode[1:0], 1'b0};
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+
+ if(int_src[1])
+ begin
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[1]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
+ else d1=s0.mem[(s0.mem[2]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d1);
+ d0 = {24'h0064_089, 1'b1, mode[1:0], 1'b0};
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+end
+
+ if(ack_cnt != ((tot_sz*4)+(4*2))*2 )
+ begin
+ $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
+ ((tot_sz*4)+(4*2)), ack_cnt, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ repeat(5) @(posedge clk);
+
+end
+end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+end
+
+
+endtask
+
+
+
+task arb_test1;
+
+reg [7:0] mode;
+reg [15:0] tot_sz;
+reg [15:0] chunk_sz0;
+reg [15:0] chunk_sz1;
+reg [15:0] chunk_sz2;
+reg [15:0] chunk_sz3;
+integer a,n,ptr;
+reg [31:0] d0,d1;
+reg [7:0] pri, order, finish;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** SW DMA No Buffer 4 ch pri ... ***");
+$display("*****************************************************\n");
+
+mode = 0;
+tot_sz = 32;
+chunk_sz0=4;
+chunk_sz1=4;
+chunk_sz2=4;
+chunk_sz3=4;
+a=0;
+
+m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
+
+m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d0);
+
+for(mode=0;mode<4;mode=mode+1)
+for(a=0;a<17;a=a+1)
+begin
+
+ chunk_sz0=4;
+ chunk_sz1=4;
+ chunk_sz2=4;
+ chunk_sz3=4;
+
+ s0.delay = 0;
+ s1.delay = 0;
+
+ case(a) // ch3 ch2 ch1 ch0
+ 0:
+ begin
+ pri = 8'b10_10_10_10; // All equal 0,1,2,3
+ order = {2'd0, 2'd1, 2'd2, 2'd3};
+ end
+
+ // One channel with High Priority
+ // The other depend oon the ARB state
+ 1:
+ begin
+ pri = 8'b00_00_00_10; // 3,1,0,2
+ order = {2'b0, 2'd3, 2'd1, 2'd2};
+ end
+ 2:
+ begin
+ pri = 8'b00_00_10_00; // 2,3,0,1
+ order = {2'd1, 2'd0, 2'd2, 2'd3};
+ end
+ 3:
+ begin
+ pri = 8'b00_10_00_00; // 1,0,2,3
+ order = {2'd2, 2'd0, 2'd1, 2'd3};
+ end
+ 4:
+ begin
+ pri = 8'b10_00_00_00; // 0,3,1,2
+ order = {2'd3, 2'd0, 2'd1, 2'd2};
+ end
+
+ // Specific order for all Channels
+ 5:
+ begin
+ pri = 8'b10_00_01_11; // 3,0,2,1
+ order = {2'd0, 2'd3, 2'd1, 2'd2};
+ end
+
+ 6:
+ begin
+ pri = 8'b00_10_11_01; // 2,1,3,0
+ order = {2'd1, 2'd2, 2'd0, 2'd3};
+ end
+
+ 7:
+ begin
+ pri = 8'b00_11_01_10; // 1,3,2,0
+ order = {2'd2, 2'd0, 2'd1, 2'd3};
+ end
+
+ 8:
+ begin
+ pri = 8'b00_01_10_11; // 3,2,1,0
+ order = {2'd0, 2'd1, 2'd2, 2'd3};
+ end
+
+ // One channel with High Priority
+ // The other depend oon the ARB state
+ // Chunk Size varies
+ // First channel small chunkc size
+ 9:
+ begin
+ pri = 8'b00_00_00_10; // 3,1,0,2
+ order = {2'd0, 2'd1, 2'd2, 2'd3};
+ chunk_sz3=1;
+ end
+ 10:
+ begin
+ pri = 8'b00_00_10_00; // 2,0,1,3
+ order = {2'd1, 2'd0, 2'd3, 2'd2};
+ chunk_sz2=1;
+ end
+ 11:
+ begin
+ pri = 8'b00_10_00_00; // 1,0,2,3
+ order = {2'd2, 2'd0, 2'd3, 2'd1};
+ chunk_sz1=1;
+ end
+ 12:
+ begin
+ pri = 8'b10_00_00_00; // 0,2,3,1
+ order = {2'd3, 2'd1, 2'd2, 2'd0};
+ chunk_sz0=1;
+ end
+
+ // First channel large chunkc size
+ 13:
+ begin
+ pri = 8'b00_00_00_10; // 3,0,2,1
+ order = {2'd0, 2'd3, 2'd1, 2'd2};
+ chunk_sz3=8;
+ end
+ 14:
+ begin
+ pri = 8'b00_00_10_00; // 2,0,3,1
+ order = {2'd1, 2'd2, 2'd0, 2'd3};
+ chunk_sz2=8;
+ end
+ 15:
+ begin
+ pri = 8'b00_10_00_00; // 1,0,3,2
+ order = {2'd2, 2'd1, 2'd0, 2'd3};
+ chunk_sz1=8;
+ end
+ 16:
+ begin
+ pri = 8'b10_00_00_00; // 0,2,3,1
+ order = {2'd3, 2'd0, 2'd1, 2'd2};
+ chunk_sz0=8;
+ end
+
+ endcase
+
+case(mode)
+ 0: $write("Mode: 0->0, ");
+ 1: $write("Mode: 0->1, ");
+ 2: $write("Mode: 1->0, ");
+ 3: $write("Mode: 1->1, ");
+endcase
+$display("a: %0d", a);
+
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ s0.fill_mem(1);
+ s1.fill_mem(1);
+
+ m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
+ {17'h00000, pri[1:0], 6'h0, 4'b0011, mode[1:0], 1'b0});
+
+ m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
+ {17'h00000, pri[3:2], 6'h0, 4'b0011, mode[1:0], 1'b0});
+
+ m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf,
+ {17'h00000, pri[5:4], 6'h0, 4'b0011, mode[1:0], 1'b0});
+
+ m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf,
+ {17'h00000, pri[7:6], 6'h0, 4'b0011, mode[1:0], 1'b0});
+
+ m0.wb_wr1(`REG_BASE + `INT_MASKA,4'hf,32'hffff_ffff);
+
+ m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz0, tot_sz});
+ m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0000);
+ m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
+
+ m0.wb_wr1(`REG_BASE + `CH1_TXSZ,4'hf, {chunk_sz1, tot_sz});
+ m0.wb_wr1(`REG_BASE + `CH1_ADR0,4'hf,32'h0000_0080);
+ m0.wb_wr1(`REG_BASE + `CH1_ADR1,4'hf,32'h0000_4080);
+
+ m0.wb_wr1(`REG_BASE + `CH2_TXSZ,4'hf, {chunk_sz2, tot_sz});
+ m0.wb_wr1(`REG_BASE + `CH2_ADR0,4'hf,32'h0000_0100);
+ m0.wb_wr1(`REG_BASE + `CH2_ADR1,4'hf,32'h0000_4100);
+
+ m0.wb_wr1(`REG_BASE + `CH3_TXSZ,4'hf, {chunk_sz3, tot_sz});
+ m0.wb_wr1(`REG_BASE + `CH3_ADR0,4'hf,32'h0000_0180);
+ m0.wb_wr1(`REG_BASE + `CH3_ADR1,4'hf,32'h0000_4180);
+
+
+ m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
+ {12'h000, 3'b010, 1'b0, 1'b0, pri[1:0], 6'h0, 4'b0011, mode[1:0], 1'b1});
+
+ //{15'h0002, 3'b000, 1'b0, 6'h1, 4'b0011, 2'b00, 1'b1});
+
+ m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf,
+ {12'h000, 3'b010, 1'b0, 1'b0, pri[3:2], 6'h0, 4'b0011, mode[1:0], 1'b1});
+
+ m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf,
+ {12'h000, 3'b010, 1'b0, 1'b0, pri[5:4], 6'h0, 4'b0011, mode[1:0], 1'b1});
+
+
+
+ m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf,
+ {12'h0000, 3'b010, 1'b0, 1'b0, pri[7:6], 6'h0, 4'b0011, mode[1:0], 1'b1});
+
+ repeat(1) @(posedge clk);
+
+ // Wait for interrupt, Check completion order
+
+ ptr=0;
+ finish = 8'hxx;
+
+ while(ptr!=4)
+ begin
+ while(!inta_o) @(posedge clk);
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d0);
+
+ if(d0[0]) d0[1:0] = 0;
+ else
+ if(d0[1]) d0[1:0] = 1;
+ else
+ if(d0[2]) d0[1:0] = 2;
+ else
+ if(d0[3]) d0[1:0] = 3;
+
+ case(ptr)
+ 0: finish[7:6] = d0[1:0];
+ 1: finish[5:4] = d0[1:0];
+ 2: finish[3:2] = d0[1:0];
+ 3: finish[1:0] = d0[1:0];
+ endcase
+
+ case(d0[1:0])
+ 0: m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
+ 1: m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
+ 2: m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
+ 3: m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
+ endcase
+
+ ptr=ptr+1;
+ repeat(4) @(posedge clk);
+ end
+
+
+ if(finish !== order)
+ begin
+ $display("ERROR: Completion Order[%0d] Mismatch: Expected: %b, Got: %b (%0t)",
+ a, order, finish, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+
+ for(n=0;n0, chunk_size: %0d", chunk_sz);
+ 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
+ 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
+ 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
+endcase
+
+for(rep=0;rep<4;rep=rep+1)
+ begin
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ if(del==4) del = 10;
+
+ s0.delay = del;
+ s1.delay = del;
+
+ if(chunk_sz==0) k = 1;
+ else
+ begin
+ k = tot_sz/chunk_sz;
+ if((k*chunk_sz) != tot_sz) k = k + 1;
+ end
+
+ s0.fill_mem(1);
+ s1.fill_mem(1);
+
+ fork
+ begin
+
+ for(m=0;m < k;m=m+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[0] = 1;
+ while(!ack_o[0]) @(posedge clk);
+ #1;
+ req_i[0] = 0;
+ end
+
+ end
+
+ begin
+ repeat(1) @(posedge clk);
+ while(!u0.dma_done_all) @(posedge clk);
+
+/*
+ repeat(5) @(posedge clk);
+ while(!inta_o) @(posedge clk);
+
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, d1);
+ d0 = 32'h0000_0002;
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: INT_SRC Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
+ d0 = {24'h0000_081, 1'b1, mode[1:0], 1'b0};
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+*/
+
+
+ for(n=0;n4) tot_sz = tot_sz + 4;
+if(tot_sz>16) tot_sz = tot_sz + 12;
+if(tot_sz>64) tot_sz = tot_sz + 48;
+
+for(del=0;del0, chunk_size: %0d", chunk_sz);
+ 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
+ 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
+ 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
+ endcase
+
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ if(chunk_sz==0) k = 1;
+ else
+ begin
+ k = tot_sz/chunk_sz;
+ if((k*chunk_sz) != tot_sz) k = k + 1;
+ end
+
+ k = k * 2;
+
+ fork
+ begin
+ repeat(5) @(posedge clk);
+ for(m0=0;m0 < k;m0=m0+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[0] = 1;
+ while(!ack_o[0]) @(posedge clk);
+ #1;
+ req_i[0] = 0;
+ end
+ end
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m1=0;m1 < k;m1=m1+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[1] = 1;
+ while(!ack_o[1]) @(posedge clk);
+ #1;
+ req_i[1] = 0;
+ end
+ end
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m2=0;m2 < k;m2=m2+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[2] = 1;
+ while(!ack_o[2]) @(posedge clk);
+ #1;
+ req_i[2] = 0;
+ end
+ end
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m3=0;m3 < k;m3=m3+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[3] = 1;
+ while(!ack_o[3]) @(posedge clk);
+ #1;
+ req_i[3] = 0;
+ end
+ end
+
+ for(i=0;i<4;i=i)
+ begin
+ repeat(5) @(posedge clk);
+ while(!inta_o) @(posedge clk);
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+ if(int_src[0])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[1]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
+ else d1=s0.mem[(s0.mem[2]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[1])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[9]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
+ else d1=s0.mem[(s0.mem[10]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[2])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[17]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
+ else d1=s0.mem[(s0.mem[18]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[3])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[25]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[26]>>2) + n ];
+ else d1=s0.mem[(s0.mem[26]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ end
+
+ join
+
+
+ if(ack_cnt != ((tot_sz*2*4*2)+(4*4*2)) )
+ begin
+ $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
+ ((tot_sz*2*4*2)+(4*4*2)), ack_cnt, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ repeat(5) @(posedge clk);
+
+end
+end
+
+ s0.delay = 0;
+ s1.delay = 0;
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+end
+
+endtask
+
+
+
+
+
+
+task hw_dma3;
+input quick;
+
+integer quick, tot_sz_max, chunk_sz_max, del_max;
+
+reg [7:0] mode;
+reg [15:0] chunk_sz, tot_sz;
+integer odd, i, iz, n,m0, m1, m2, m3, k, k1, rep,del;
+reg [31:0] int_src, d0,d1;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** HW DMA Ext Descr. 4 Channels ND Test ... ***");
+$display("*****************************************************\n");
+
+case(quick)
+ default:
+ begin
+ del_max = 6;
+ chunk_sz_max = 8;
+ end
+ 1:
+ begin
+ del_max = 4;
+ chunk_sz_max = 4;
+ end
+ 2:
+ begin
+ del_max = 3;
+ chunk_sz_max = 4;
+ end
+endcase
+
+mode = 0;
+tot_sz = 64;
+chunk_sz=4;
+del = 0;
+
+m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
+m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
+
+m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+
+for(del=0;del0, chunk_size: %0d", chunk_sz);
+ 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
+ 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
+ 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
+ endcase
+
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ if(chunk_sz==0) k = 1;
+ else
+ begin
+ k = tot_sz/chunk_sz;
+ if((k*chunk_sz) != tot_sz) k = k + 1;
+ if((k*chunk_sz) != tot_sz) odd = 1;
+ else odd = 0;
+ end
+
+ if(chunk_sz==0) k1 = 4;
+ else
+ begin
+ k1 = tot_sz/chunk_sz;
+ if((k1*chunk_sz) != tot_sz) k1 = k1 + 1;
+ k1 = k1 * 4;
+ end
+
+ k1 = k * 4;
+ iz = k;
+
+ fork
+ begin
+ repeat(5) @(posedge clk);
+ for(m0=0;m0 < k1+1;m0=m0+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+
+ if(m0==iz) nd_i[0] = 1;
+ else
+ if(m0==(iz*2)) nd_i[0] = 1;
+ else
+ if(m0==(iz*3)) nd_i[0] = 1;
+ else
+ if(m0==(iz*4)) nd_i[0] = 1;
+ else req_i[0] = 1;
+
+ if(nd_i[0]==1)
+ begin
+ @(posedge clk);
+ #1;
+ nd_i[0] = 0;
+ repeat(1) @(posedge clk);
+ #1;
+ req_i[0] = 1;
+ end
+
+ while(!ack_o[0] & (m0 < k1)) @(posedge clk);
+ #1;
+ req_i[0] = 0;
+ nd_i[0] = 0;
+ end
+ end
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m1=0;m1 < k1;m1=m1+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ if(m1==k-1) nd_i[1] = 1;
+ if(m1==(k*2)-1) nd_i[1] = 1;
+ if(m1==(k*3)-1) nd_i[1] = 1;
+ if(m1==(k*4)-1) nd_i[1] = 1;
+ req_i[1] = 1;
+ while(!ack_o[1]) @(posedge clk);
+ #1;
+ req_i[1] = 0;
+ nd_i[1] = 0;
+ end
+ end
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m2=0;m2 < k1+1;m2=m2+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+
+ if(m2==k) nd_i[2] = 1;
+ else
+ if(m2==(k*2)) nd_i[2] = 1;
+ else
+ if(m2==(k*3)) nd_i[2] = 1;
+ else
+ if(m2==(k*4)) nd_i[2] = 1;
+ else req_i[2] = 1;
+
+ if(nd_i[2]==1)
+ begin
+ @(posedge clk);
+ #1;
+ nd_i[2] = 0;
+ repeat(1) @(posedge clk);
+ #1;
+ req_i[2] = 1;
+ end
+
+ while(!ack_o[2] & (m2 < k1)) @(posedge clk);
+ #1;
+ req_i[2] = 0;
+ nd_i[2] = 0;
+ end
+ end
+
+
+ begin
+ repeat(5) @(posedge clk);
+ for(m3=0;m3 < k1;m3=m3+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ if(m3==k-1) nd_i[3] = 1;
+ if(m3==(k*2)-1) nd_i[3] = 1;
+ if(m3==(k*3)-1) nd_i[3] = 1;
+ if(m3==(k*4)-1) nd_i[3] = 1;
+ req_i[3] = 1;
+ while(!ack_o[3]) @(posedge clk);
+ #1;
+ req_i[3] = 0;
+ nd_i[3] = 0;
+ end
+ end
+
+
+ for(i=0;i<4;i=i)
+ begin
+ repeat(5) @(posedge clk);
+ while(!inta_o) @(posedge clk);
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+ if(int_src[0])
+ begin
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[1]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
+ else d1=s0.mem[(s0.mem[2]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ repeat(1) @(posedge clk);
+ d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0: CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+ if(int_src[1])
+ begin
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[17]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
+ else d1=s0.mem[(s0.mem[18]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ repeat(1) @(posedge clk);
+ d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
+ m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+ repeat(1) @(posedge clk);
+ case(chunk_sz)
+ default: d1 = 32'h0000_00c0;
+ 3: d1 = 32'h0000_00be;
+ 5: d1 = 32'h0000_00bf;
+ 6: d1 = 32'h0000_00be;
+ 7: d1 = 32'h0000_00ba;
+ endcase
+ d0 = s0.mem[16];
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: DESC_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+ if(int_src[2])
+ begin
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[33]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[34]>>2) + n ];
+ else d1=s0.mem[(s0.mem[34]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ repeat(1) @(posedge clk);
+ d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
+ m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH2: CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+ if(int_src[3])
+ begin
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[49]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[50]>>2) + n ];
+ else d1=s0.mem[(s0.mem[50]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ repeat(1) @(posedge clk);
+ d1 = {28'h0064_09b, 1'b1, mode[1:0], 1'b0};
+ m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH3: CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+ repeat(1) @(posedge clk);
+ case(chunk_sz)
+ default: d1 = 32'h0000_00c0;
+ 3: d1 = 32'h0000_00be;
+ 5: d1 = 32'h0000_00bf;
+ 6: d1 = 32'h0000_00be;
+ 7: d1 = 32'h0000_00ba;
+ endcase
+ d0 = s0.mem[48];
+ repeat(1) @(posedge clk);
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH3: DESC_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d1, d0, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ end
+
+ end
+ join
+
+ // CH0: 528 Acks
+ // CH1: 532 Acks
+ // CH2: 528 Acks
+ // CH3: 532 Acks
+
+ case(chunk_sz)
+ default: k = 2120;
+ 3: k = 2184;
+ 5: k = 2152;
+ 6: k = 2184;
+ 7: k = 2312;
+ endcase
+
+ if(ack_cnt != k )
+ begin
+ $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
+ k, ack_cnt, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ repeat(5) @(posedge clk);
+
+end
+
+s0.delay = 0;
+s1.delay = 0;
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+end
+
+endtask
+
+
+
+
+
+task sw_dma1;
+input quick;
+
+integer quick, tot_sz_max, chunk_sz_max;
+reg [7:0] mode;
+reg [15:0] chunk_sz, tot_sz;
+integer n;
+reg [31:0] d0,d1;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** SW DMA No Buffer (tx & chunk size test) ... ***");
+$display("*****************************************************\n");
+
+case(quick)
+ default:
+ begin
+ tot_sz_max = 1024;
+ chunk_sz_max = 256;
+ end
+ 1:
+ begin
+ tot_sz_max = 128;
+ chunk_sz_max = 64;
+ end
+ 2:
+ begin
+ tot_sz_max = 32;
+ chunk_sz_max = 4;
+ end
+endcase
+
+mode = 1;
+tot_sz = 2048;
+tot_sz = 16;
+chunk_sz=4;
+
+for(mode=0;mode<4;mode=mode+1)
+for(tot_sz=1;tot_sz64) tot_sz=tot_sz+4;
+if(tot_sz>128) tot_sz=tot_sz+12;
+case(mode)
+ 0: $display("Mode: 0->0, tot_size: %0d", tot_sz);
+ 1: $display("Mode: 0->1, tot_size: %0d", tot_sz);
+ 2: $display("Mode: 1->0, tot_size: %0d", tot_sz);
+ 3: $display("Mode: 1->1, tot_size: %0d", tot_sz);
+endcase
+
+for(chunk_sz=0;chunk_sz128) tot_sz=tot_sz+4;
+
+$write("Slv 0 delay: %0d, Slv 1 Delay: %0d - ",del0, del1);
+case(mode)
+ 0: $display("Mode: 0->0, tot_size: %0d", tot_sz);
+ 1: $display("Mode: 0->1, tot_size: %0d", tot_sz);
+ 2: $display("Mode: 1->0, tot_size: %0d", tot_sz);
+ 3: $display("Mode: 1->1, tot_size: %0d", tot_sz);
+endcase
+
+for(chunk_sz=0;chunk_sz 4)) chunk_sz = chunk_sz + 1;
+
+ s0.delay = del0;
+ s1.delay = del1;
+
+ ack_cnt_clr = 1;
+ @(posedge clk);
+ ack_cnt_clr = 0;
+
+ s0.fill_mem(1);
+ s1.fill_mem(1);
+ m0.wb_wr1(`REG_BASE + `INT_MASKB,4'hf,32'hffff_ffff);
+ m0.wb_wr1(`REG_BASE + `CH0_TXSZ,4'hf, {chunk_sz, tot_sz});
+ m0.wb_wr1(`REG_BASE + `CH0_ADR0,4'hf,32'h0000_0000);
+ m0.wb_wr1(`REG_BASE + `CH0_ADR1,4'hf,32'h0000_4000);
+ m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf,
+ {12'h0000, 3'b010, 1'b0, 11'h000, 2'b11, mode[1:0], 1'b1});
+
+ repeat(5) @(posedge clk);
+ while(!intb_o) @(posedge clk);
+
+ m0.wb_rd1(`REG_BASE + `INT_SRCB, 4'hf, d1);
+ d0 = 32'h0000_0001;
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: INT_SRC Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d1);
+ d0 = {24'h0064_081, 1'b1, mode[1:0], 1'b0};
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0_CSR Mismatch: Expected: %x, Got: %x (%0t)",
+ d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+ for(n=0;n0 Read Test .... ***");
+$display("*****************************************************\n");
+
+s0.fill_mem(1);
+s1.fill_mem(1);
+d=0;
+n=16;
+
+for(d=0;d<16;d=d+1)
+ begin
+ $display("INFO: PT10 RD4, delay %0d",d);
+ for(n=0;n<512;n=n+4)
+ begin
+ m0.wb_rd4(n<<2,4'hf,d,d0,d1,d2,d3);
+
+ if( (s1.mem[n+0] !== d0) | (s1.mem[n+1] !== d1) |
+ (s1.mem[n+2] !== d2) | (s1.mem[n+3] !== d3) )
+ begin
+ $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
+ $display("D1: Expected: %x, Got %x", s1.mem[n+1], d1);
+ $display("D2: Expected: %x, Got %x", s1.mem[n+2], d2);
+ $display("D3: Expected: %x, Got %x", s1.mem[n+3], d3);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+
+$display("\nINFO: PT10 RD1");
+ for(n=0;n<512;n=n+1)
+ begin
+ m0.wb_rd1(n<<2,4'hf,d0);
+
+ if( s1.mem[n] !== d0 )
+ begin
+ $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s1.mem[n], d0);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n");
+end
+endtask
+
+
+task pt01_rd;
+
+// Misc Variables
+reg [31:0] d0,d1,d2,d3;
+integer d,n;
+
+begin
+$display("\n");
+$display("*****************************************************");
+$display("*** Running Path Through 0->1 Read Test .... ***");
+$display("*****************************************************\n");
+
+s0.fill_mem(1);
+s1.fill_mem(1);
+
+d=1;
+n=0;
+for(d=0;d<16;d=d+1)
+ begin
+ $display("INFO: PT01 RD4, delay %0d",d);
+ for(n=0;n<512;n=n+4)
+ begin
+ m1.wb_rd4(n<<2,4'hf,d,d0,d1,d2,d3);
+ @(posedge clk);
+
+ if( (s0.mem[n+0] !== d0) | (s0.mem[n+1] !== d1) |
+ (s0.mem[n+2] !== d2) | (s0.mem[n+3] !== d3) )
+ begin
+ $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
+ $display("D1: Expected: %x, Got %x", s0.mem[n+1], d1);
+ $display("D2: Expected: %x, Got %x", s0.mem[n+2], d2);
+ $display("D3: Expected: %x, Got %x", s0.mem[n+3], d3);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+$display("\nINFO: PT01 RD1");
+ for(n=0;n<512;n=n+1)
+ begin
+ m1.wb_rd1(n<<2,4'hf,d0);
+
+ if( s0.mem[n+0] !== d0 )
+ begin
+ $display("ERROR: Memory Read Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n");
+end
+endtask
+
+
+
+
+task pt10_wr;
+
+// Misc Variables
+reg [31:0] d0,d1,d2,d3;
+integer d,n;
+
+begin
+
+$display("\n");
+$display("*****************************************************");
+$display("*** Running Path Through 1->0 Write Test .... ***");
+$display("*****************************************************\n");
+
+
+s0.fill_mem(1);
+s1.fill_mem(1);
+d=1;
+n=0;
+for(d=0;d<16;d=d+1)
+ begin
+ $display("INFO: PT10 WR4, delay %0d",d);
+ for(n=0;n<512;n=n+4)
+ begin
+
+ d0 = $random;
+ d1 = $random;
+ d2 = $random;
+ d3 = $random;
+ m0.wb_wr4(n<<2,4'hf,d,d0,d1,d2,d3);
+ @(posedge clk);
+
+ if( (s1.mem[n+0] !== d0) | (s1.mem[n+1] !== d1) |
+ (s1.mem[n+2] !== d2) | (s1.mem[n+3] !== d3) )
+ begin
+ $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
+ $display("D1: Expected: %x, Got %x", s1.mem[n+1], d1);
+ $display("D2: Expected: %x, Got %x", s1.mem[n+2], d2);
+ $display("D3: Expected: %x, Got %x", s1.mem[n+3], d3);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+$display("\nINFO: PT10 WR1");
+ for(n=0;n<512;n=n+1)
+ begin
+ d0 = $random;
+ m0.wb_wr1(n<<2,4'hf,d0);
+ @(posedge clk);
+
+ if( s1.mem[n+0] !== d0 )
+ begin
+ $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s1.mem[n+0], d0);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n");
+end
+endtask
+
+
+
+task pt01_wr;
+
+// Misc Variables
+reg [31:0] d0,d1,d2,d3;
+integer d,n;
+
+begin
+
+$display("\n");
+$display("*****************************************************");
+$display("*** Running Path Through 0->1 Write Test .... ***");
+$display("*****************************************************\n");
+
+
+s0.fill_mem(1);
+s1.fill_mem(1);
+
+d=1;
+n=0;
+for(d=0;d<16;d=d+1)
+ begin
+ $display("INFO: PT01 WR4, delay %0d",d);
+ for(n=0;n<512;n=n+4)
+ begin
+
+ d0 = $random;
+ d1 = $random;
+ d2 = $random;
+ d3 = $random;
+ m1.wb_wr4(n<<2,4'hf,d,d0,d1,d2,d3);
+ @(posedge clk);
+
+ if( (s0.mem[n+0] !== d0) | (s0.mem[n+1] !== d1) |
+ (s0.mem[n+2] !== d2) | (s0.mem[n+3] !== d3) )
+ begin
+ $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
+ $display("D1: Expected: %x, Got %x", s0.mem[n+1], d1);
+ $display("D2: Expected: %x, Got %x", s0.mem[n+2], d2);
+ $display("D3: Expected: %x, Got %x", s0.mem[n+3], d3);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ $display("\nINFO: PT01 WR1");
+ for(n=0;n<512;n=n+1)
+ begin
+ d0 = $random;
+ m1.wb_wr1(n<<2,4'hf,d0);
+ @(posedge clk);
+
+ if( s0.mem[n+0] !== d0 )
+ begin
+ $display("ERROR: Memory Write Data (%0d) Mismatch: (%0t)",n,$time);
+ $display("D0: Expected: %x, Got %x", s0.mem[n+0], d0);
+ error_cnt = error_cnt + 1;
+ end
+ end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n");
+end
+endtask
+
+
+
+
+
+
+
+task show_errors;
+
+begin
+
+$display("\n");
+$display(" +--------------------+");
+$display(" | Total ERRORS: %0d |", error_cnt);
+$display(" +--------------------+");
+
+end
+endtask
+
+
+
+task hw_dma4;
+input quick;
+
+integer quick, tot_sz_max, chunk_sz_max, del_max;
+
+reg [7:0] mode;
+reg [15:0] chunk_sz, tot_sz;
+integer i, n,m0, m1, m2, m3, k,rep,del;
+reg [31:0] int_src, d0,d1;
+reg do_rest;
+integer rest_del;
+integer rest_del_t;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** HW DMA No Buffer Ext Descr. REST Test ... ***");
+$display("*****************************************************\n");
+
+case(quick)
+ default:
+ begin
+ del_max = 6;
+ tot_sz_max = 200;
+ chunk_sz_max = 8;
+ end
+ 1:
+ begin
+ del_max = 4;
+ tot_sz_max = 128;
+ chunk_sz_max = 4;
+ end
+ 2:
+ begin
+ del_max = 3;
+ tot_sz_max = 32;
+ chunk_sz_max = 4;
+ end
+endcase
+
+mode = 1;
+tot_sz = 32;
+chunk_sz=7;
+del = 0;
+do_rest = 1;
+rest_del = 7;
+
+ m0.wb_wr1(`REG_BASE + `CH0_CSR,4'hf, 32'h0);
+ m0.wb_wr1(`REG_BASE + `CH1_CSR,4'hf, 32'h0);
+ m0.wb_wr1(`REG_BASE + `CH2_CSR,4'hf, 32'h0);
+ m0.wb_wr1(`REG_BASE + `CH3_CSR,4'hf, 32'h0);
+
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+for(tot_sz=1;tot_sz4) tot_sz = tot_sz + 4;
+if(tot_sz>16) tot_sz = tot_sz + 12;
+if(tot_sz>64) tot_sz = tot_sz + 48;
+
+for(del=0;del= k) rest_del_t = k - 1;
+ else rest_del_t = rest_del;
+
+ k = k * 2;
+
+
+ $write("Total Size: %0d, Delay: %0d REST_del: %0d ",tot_sz, del, rest_del_t);
+ case(mode)
+ 0: $display("Mode: 0->0, chunk_size: %0d", chunk_sz);
+ 1: $display("Mode: 0->1, chunk_size: %0d", chunk_sz);
+ 2: $display("Mode: 1->0, chunk_size: %0d", chunk_sz);
+ 3: $display("Mode: 1->1, chunk_size: %0d", chunk_sz);
+ endcase
+
+
+
+//$display("k=%0d",k);
+
+ fork
+ begin // Hardware Handshake Channel 0
+ repeat(5) @(posedge clk);
+ for(m0=0;m0 < k;m0=m0+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[0] = 1;
+ while(!ack_o[0]) @(posedge clk);
+ #1;
+ req_i[0] = 0;
+ end
+ end
+
+ begin // Hardware Handshake Channel 1
+ repeat(5) @(posedge clk);
+ for(m1=0;m1 < (k + rest_del_t + 1);m1=m1+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[1] = 1;
+ while(!ack_o[1]) @(posedge clk);
+ #1;
+ req_i[1] = 0;
+//$display("m1=%0d",m1);
+ if( (do_rest==1) & (m1==rest_del_t) )
+ //if( do_rest==1 )
+ begin
+//$display("Asserting Restart ...");
+ @(posedge clk);
+ #1;
+ rest_i[1] = 1;
+ @(posedge clk);
+ #1;
+ rest_i[1] = 0;
+ do_rest = 0;
+ @(posedge clk);
+ @(posedge clk);
+ end
+
+ end
+ end
+
+ begin // Hardware Handshake Channel 2
+ repeat(5) @(posedge clk);
+ for(m2=0;m2 < k;m2=m2+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[2] = 1;
+ while(!ack_o[2]) @(posedge clk);
+ #1;
+ req_i[2] = 0;
+ end
+ end
+
+ begin // Hardware Handshake Channel 3
+ repeat(5) @(posedge clk);
+ for(m3=0;m3 < k;m3=m3+1)
+ begin
+ repeat(del) @(posedge clk);
+ #1;
+ req_i[3] = 1;
+ while(!ack_o[3]) @(posedge clk);
+ #1;
+ req_i[3] = 0;
+ end
+ end
+
+ for(i=0;i<4;i=i)
+ begin
+ repeat(5) @(posedge clk);
+ while(!inta_o) @(posedge clk);
+ m0.wb_rd1(`REG_BASE + `INT_SRCA, 4'hf, int_src);
+
+ if(int_src[0])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH0_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[1]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[2]>>2) + n ];
+ else d1=s0.mem[(s0.mem[2]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH0: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[1])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH1_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[9]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[10]>>2) + n ];
+ else d1=s0.mem[(s0.mem[10]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH1: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[2])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH2_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[17]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[18]>>2) + n ];
+ else d1=s0.mem[(s0.mem[18]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH2: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ if(int_src[3])
+ begin
+ m0.wb_rd1(`REG_BASE + `CH3_CSR, 4'hf, d0);
+ i=i+1;
+ for(n=0;n>2) + n ];
+ else d0=s0.mem[(s0.mem[25]>>2) + n ];
+ if(mode[0]) d1=s1.mem[(s0.mem[26]>>2) + n ];
+ else d1=s0.mem[(s0.mem[26]>>2) + n ];
+
+ if( d1 !== d0 )
+ begin
+ $display("ERROR: CH3: Data[%0d] Mismatch: Expected: %x, Got: %x (%0t)",
+ n, d0, d1, $time);
+ error_cnt = error_cnt + 1;
+ end
+ end
+ end
+
+ end
+
+ join
+
+
+/*
+ if(ack_cnt != ((tot_sz*2*4*2)+(4*4*2)) )
+ begin
+ $display("ERROR: ACK count Mismatch: Expected: %0d, Got: %0d (%0t)",
+ ((tot_sz*2*4*2)+(4*4*2)), ack_cnt, $time);
+ error_cnt = error_cnt + 1;
+ end
+*/
+
+ repeat(5) @(posedge clk);
+
+end
+end
+
+ s0.delay = 0;
+ s1.delay = 0;
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+end
+
+endtask
+
+
+
+
Index: wb_dma/trunk/rtl/verilog/wb_dma_top.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_top.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_top.v (revision 17)
@@ -0,0 +1,1122 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Top Level ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_top.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.5 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.4 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// Revision 1.3 2001/09/07 15:34:38 rudi
+//
+// Changed reset to active high.
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.3 2001/06/13 02:26:50 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:23 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_top(clk_i, rst_i,
+
+ wb0s_data_i, wb0s_data_o, wb0_addr_i, wb0_sel_i, wb0_we_i, wb0_cyc_i,
+ wb0_stb_i, wb0_ack_o, wb0_err_o, wb0_rty_o,
+ wb0m_data_i, wb0m_data_o, wb0_addr_o, wb0_sel_o, wb0_we_o, wb0_cyc_o,
+ wb0_stb_o, wb0_ack_i, wb0_err_i, wb0_rty_i,
+
+ wb1s_data_i, wb1s_data_o, wb1_addr_i, wb1_sel_i, wb1_we_i, wb1_cyc_i,
+ wb1_stb_i, wb1_ack_o, wb1_err_o, wb1_rty_o,
+ wb1m_data_i, wb1m_data_o, wb1_addr_o, wb1_sel_o, wb1_we_o, wb1_cyc_o,
+ wb1_stb_o, wb1_ack_i, wb1_err_i, wb1_rty_i,
+
+ dma_req_i, dma_ack_o, dma_nd_i, dma_rest_i,
+
+ inta_o, intb_o
+ );
+
+////////////////////////////////////////////////////////////////////
+//
+// Module Parameters
+//
+
+// chXX_conf = { CBUF, ED, ARS, EN }
+parameter rf_addr = 0;
+parameter [1:0] pri_sel = 2'h0;
+parameter ch_count = 1;
+parameter [3:0] ch0_conf = 4'h1;
+parameter [3:0] ch1_conf = 4'h0;
+parameter [3:0] ch2_conf = 4'h0;
+parameter [3:0] ch3_conf = 4'h0;
+parameter [3:0] ch4_conf = 4'h0;
+parameter [3:0] ch5_conf = 4'h0;
+parameter [3:0] ch6_conf = 4'h0;
+parameter [3:0] ch7_conf = 4'h0;
+parameter [3:0] ch8_conf = 4'h0;
+parameter [3:0] ch9_conf = 4'h0;
+parameter [3:0] ch10_conf = 4'h0;
+parameter [3:0] ch11_conf = 4'h0;
+parameter [3:0] ch12_conf = 4'h0;
+parameter [3:0] ch13_conf = 4'h0;
+parameter [3:0] ch14_conf = 4'h0;
+parameter [3:0] ch15_conf = 4'h0;
+parameter [3:0] ch16_conf = 4'h0;
+parameter [3:0] ch17_conf = 4'h0;
+parameter [3:0] ch18_conf = 4'h0;
+parameter [3:0] ch19_conf = 4'h0;
+parameter [3:0] ch20_conf = 4'h0;
+parameter [3:0] ch21_conf = 4'h0;
+parameter [3:0] ch22_conf = 4'h0;
+parameter [3:0] ch23_conf = 4'h0;
+parameter [3:0] ch24_conf = 4'h0;
+parameter [3:0] ch25_conf = 4'h0;
+parameter [3:0] ch26_conf = 4'h0;
+parameter [3:0] ch27_conf = 4'h0;
+parameter [3:0] ch28_conf = 4'h0;
+parameter [3:0] ch29_conf = 4'h0;
+parameter [3:0] ch30_conf = 4'h0;
+
+////////////////////////////////////////////////////////////////////
+//
+// Module IOs
+//
+
+input clk_i, rst_i;
+
+// --------------------------------------
+// WISHBONE INTERFACE 0
+
+// Slave Interface
+input [31:0] wb0s_data_i;
+output [31:0] wb0s_data_o;
+input [31:0] wb0_addr_i;
+input [3:0] wb0_sel_i;
+input wb0_we_i;
+input wb0_cyc_i;
+input wb0_stb_i;
+output wb0_ack_o;
+output wb0_err_o;
+output wb0_rty_o;
+
+// Master Interface
+input [31:0] wb0m_data_i;
+output [31:0] wb0m_data_o;
+output [31:0] wb0_addr_o;
+output [3:0] wb0_sel_o;
+output wb0_we_o;
+output wb0_cyc_o;
+output wb0_stb_o;
+input wb0_ack_i;
+input wb0_err_i;
+input wb0_rty_i;
+
+// --------------------------------------
+// WISHBONE INTERFACE 1
+
+// Slave Interface
+input [31:0] wb1s_data_i;
+output [31:0] wb1s_data_o;
+input [31:0] wb1_addr_i;
+input [3:0] wb1_sel_i;
+input wb1_we_i;
+input wb1_cyc_i;
+input wb1_stb_i;
+output wb1_ack_o;
+output wb1_err_o;
+output wb1_rty_o;
+
+// Master Interface
+input [31:0] wb1m_data_i;
+output [31:0] wb1m_data_o;
+output [31:0] wb1_addr_o;
+output [3:0] wb1_sel_o;
+output wb1_we_o;
+output wb1_cyc_o;
+output wb1_stb_o;
+input wb1_ack_i;
+input wb1_err_i;
+input wb1_rty_i;
+
+// --------------------------------------
+// Misc Signals
+input [ch_count-1:0] dma_req_i;
+input [ch_count-1:0] dma_nd_i;
+output [ch_count-1:0] dma_ack_o;
+input [ch_count-1:0] dma_rest_i;
+output inta_o;
+output intb_o;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+wire [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
+wire [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
+wire [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
+wire [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
+wire [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
+wire [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
+wire [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
+wire [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
+wire [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
+wire [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
+wire [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
+wire [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
+wire [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
+wire [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
+wire [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
+wire [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
+wire [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
+wire [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
+wire [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
+wire [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
+wire [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
+wire [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
+wire [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
+wire [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
+wire [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
+wire [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
+wire [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
+wire [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
+wire [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
+wire [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
+wire [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
+
+wire [4:0] ch_sel; // Write Back Channel Select
+wire [30:0] ndnr; // Next Descriptor No Request
+wire de_start; // Start DMA Engine
+wire ndr; // Next Descriptor With Request
+wire [31:0] csr; // Selected Channel CSR
+wire [31:0] pointer;
+wire [31:0] pointer_s;
+wire [31:0] txsz; // Selected Channel Transfer Size
+wire [31:0] adr0, adr1; // Selected Channel Addresses
+wire [31:0] am0, am1; // Selected Channel Address Masks
+wire next_ch; // Indicates the DMA Engine is done
+
+wire inta_o, intb_o;
+wire dma_abort;
+wire dma_busy, dma_err, dma_done, dma_done_all;
+wire [31:0] de_csr;
+wire [11:0] de_txsz;
+wire [31:0] de_adr0;
+wire [31:0] de_adr1;
+wire de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we;
+wire de_fetch_descr;
+wire ptr_set;
+wire de_ack;
+wire pause_req;
+wire paused;
+
+wire mast0_go; // Perform a Master Cycle (as long as this
+wire mast0_we; // Read/Write
+wire [31:0] mast0_adr; // Address for the transfer
+wire [31:0] mast0_din; // Internal Input Data
+wire [31:0] mast0_dout; // Internal Output Data
+wire mast0_err; // Indicates an error has occurred
+wire mast0_drdy; // Indicated that either data is available
+wire mast0_wait; // Tells the master to insert wait cycles
+
+wire [31:0] slv0_adr; // Slave Address
+wire [31:0] slv0_din; // Slave Input Data
+wire [31:0] slv0_dout; // Slave Output Data
+wire slv0_re; // Slave Read Enable
+wire slv0_we; // Slave Write Enable
+
+wire pt0_sel_i; // Pass Through Mode Selected
+wire [70:0] mast0_pt_in; // Grouped WISHBONE inputs
+wire [34:0] mast0_pt_out; // Grouped WISHBONE outputs
+
+wire pt0_sel_o; // Pass Through Mode Active
+wire [70:0] slv0_pt_out; // Grouped WISHBONE out signals
+wire [34:0] slv0_pt_in; // Grouped WISHBONE in signals
+
+wire mast1_go; // Perform a Master Cycle (as long as this
+wire mast1_we; // Read/Write
+wire [31:0] mast1_adr; // Address for the transfer
+wire [31:0] mast1_din; // Internal Input Data
+wire [31:0] mast1_dout; // Internal Output Data
+wire mast1_err; // Indicates an error has occurred
+wire mast1_drdy; // Indicated that either data is available
+wire mast1_wait; // Tells the master to insert wait cycles
+
+wire [31:0] slv1_adr; // Slave Address
+wire [31:0] slv1_dout; // Slave Output Data
+wire slv1_re; // Slave Read Enable
+wire slv1_we; // Slave Write Enable
+
+wire pt1_sel_i; // Pass Through Mode Selected
+wire [70:0] mast1_pt_in; // Grouped WISHBONE inputs
+wire [34:0] mast1_pt_out; // Grouped WISHBONE outputs
+
+wire pt1_sel_o; // Pass Through Mode Active
+wire [70:0] slv1_pt_out; // Grouped WISHBONE out signals
+wire [34:0] slv1_pt_in; // Grouped WISHBONE in signals
+
+wire [30:0] dma_req;
+wire [30:0] dma_nd;
+wire [30:0] dma_ack;
+wire [30:0] dma_rest;
+
+////////////////////////////////////////////////////////////////////
+//
+// Misc Logic
+//
+
+wire [31:0] tmp_gnd = 32'h0;
+
+assign dma_req[ch_count-1:0] = dma_req_i;
+assign dma_nd[ch_count-1:0] = dma_nd_i;
+assign dma_rest[ch_count-1:0] = dma_rest_i;
+assign dma_ack_o = {tmp_gnd[31-ch_count:0], dma_ack[ch_count-1:0]};
+
+// --------------------------------------------------
+// This should go in to a separate Pass Through Block
+assign pt1_sel_i = pt0_sel_o;
+assign pt0_sel_i = pt1_sel_o;
+assign mast1_pt_in = slv0_pt_out;
+assign slv0_pt_in = mast1_pt_out;
+assign mast0_pt_in = slv1_pt_out;
+assign slv1_pt_in = mast0_pt_out;
+// --------------------------------------------------
+
+////////////////////////////////////////////////////////////////////
+//
+// Modules
+//
+
+// DMA Register File
+wb_dma_rf #( ch0_conf,
+ ch1_conf,
+ ch2_conf,
+ ch3_conf,
+ ch4_conf,
+ ch5_conf,
+ ch6_conf,
+ ch7_conf,
+ ch8_conf,
+ ch9_conf,
+ ch10_conf,
+ ch11_conf,
+ ch12_conf,
+ ch13_conf,
+ ch14_conf,
+ ch15_conf,
+ ch16_conf,
+ ch17_conf,
+ ch18_conf,
+ ch19_conf,
+ ch20_conf,
+ ch21_conf,
+ ch22_conf,
+ ch23_conf,
+ ch24_conf,
+ ch25_conf,
+ ch26_conf,
+ ch27_conf,
+ ch28_conf,
+ ch29_conf,
+ ch30_conf)
+ u0(
+ .clk( clk_i ),
+ .rst( ~rst_i ),
+ .wb_rf_adr( slv0_adr[9:2] ),
+ .wb_rf_din( slv0_dout ),
+ .wb_rf_dout( slv0_din ),
+ .wb_rf_re( slv0_re ),
+ .wb_rf_we( slv0_we ),
+ .inta_o( inta_o ),
+ .intb_o( intb_o ),
+ .pointer0( pointer0 ),
+ .pointer0_s( pointer0_s ),
+ .ch0_csr( ch0_csr ),
+ .ch0_txsz( ch0_txsz ),
+ .ch0_adr0( ch0_adr0 ),
+ .ch0_adr1( ch0_adr1 ),
+ .ch0_am0( ch0_am0 ),
+ .ch0_am1( ch0_am1 ),
+ .pointer1( pointer1 ),
+ .pointer1_s( pointer1_s ),
+ .ch1_csr( ch1_csr ),
+ .ch1_txsz( ch1_txsz ),
+ .ch1_adr0( ch1_adr0 ),
+ .ch1_adr1( ch1_adr1 ),
+ .ch1_am0( ch1_am0 ),
+ .ch1_am1( ch1_am1 ),
+ .pointer2( pointer2 ),
+ .pointer2_s( pointer2_s ),
+ .ch2_csr( ch2_csr ),
+ .ch2_txsz( ch2_txsz ),
+ .ch2_adr0( ch2_adr0 ),
+ .ch2_adr1( ch2_adr1 ),
+ .ch2_am0( ch2_am0 ),
+ .ch2_am1( ch2_am1 ),
+ .pointer3( pointer3 ),
+ .pointer3_s( pointer3_s ),
+ .ch3_csr( ch3_csr ),
+ .ch3_txsz( ch3_txsz ),
+ .ch3_adr0( ch3_adr0 ),
+ .ch3_adr1( ch3_adr1 ),
+ .ch3_am0( ch3_am0 ),
+ .ch3_am1( ch3_am1 ),
+ .pointer4( pointer4 ),
+ .pointer4_s( pointer4_s ),
+ .ch4_csr( ch4_csr ),
+ .ch4_txsz( ch4_txsz ),
+ .ch4_adr0( ch4_adr0 ),
+ .ch4_adr1( ch4_adr1 ),
+ .ch4_am0( ch4_am0 ),
+ .ch4_am1( ch4_am1 ),
+ .pointer5( pointer5 ),
+ .pointer5_s( pointer5_s ),
+ .ch5_csr( ch5_csr ),
+ .ch5_txsz( ch5_txsz ),
+ .ch5_adr0( ch5_adr0 ),
+ .ch5_adr1( ch5_adr1 ),
+ .ch5_am0( ch5_am0 ),
+ .ch5_am1( ch5_am1 ),
+ .pointer6( pointer6 ),
+ .pointer6_s( pointer6_s ),
+ .ch6_csr( ch6_csr ),
+ .ch6_txsz( ch6_txsz ),
+ .ch6_adr0( ch6_adr0 ),
+ .ch6_adr1( ch6_adr1 ),
+ .ch6_am0( ch6_am0 ),
+ .ch6_am1( ch6_am1 ),
+ .pointer7( pointer7 ),
+ .pointer7_s( pointer7_s ),
+ .ch7_csr( ch7_csr ),
+ .ch7_txsz( ch7_txsz ),
+ .ch7_adr0( ch7_adr0 ),
+ .ch7_adr1( ch7_adr1 ),
+ .ch7_am0( ch7_am0 ),
+ .ch7_am1( ch7_am1 ),
+ .pointer8( pointer8 ),
+ .pointer8_s( pointer8_s ),
+ .ch8_csr( ch8_csr ),
+ .ch8_txsz( ch8_txsz ),
+ .ch8_adr0( ch8_adr0 ),
+ .ch8_adr1( ch8_adr1 ),
+ .ch8_am0( ch8_am0 ),
+ .ch8_am1( ch8_am1 ),
+ .pointer9( pointer9 ),
+ .pointer9_s( pointer9_s ),
+ .ch9_csr( ch9_csr ),
+ .ch9_txsz( ch9_txsz ),
+ .ch9_adr0( ch9_adr0 ),
+ .ch9_adr1( ch9_adr1 ),
+ .ch9_am0( ch9_am0 ),
+ .ch9_am1( ch9_am1 ),
+ .pointer10( pointer10 ),
+ .pointer10_s( pointer10_s ),
+ .ch10_csr( ch10_csr ),
+ .ch10_txsz( ch10_txsz ),
+ .ch10_adr0( ch10_adr0 ),
+ .ch10_adr1( ch10_adr1 ),
+ .ch10_am0( ch10_am0 ),
+ .ch10_am1( ch10_am1 ),
+ .pointer11( pointer11 ),
+ .pointer11_s( pointer11_s ),
+ .ch11_csr( ch11_csr ),
+ .ch11_txsz( ch11_txsz ),
+ .ch11_adr0( ch11_adr0 ),
+ .ch11_adr1( ch11_adr1 ),
+ .ch11_am0( ch11_am0 ),
+ .ch11_am1( ch11_am1 ),
+ .pointer12( pointer12 ),
+ .pointer12_s( pointer12_s ),
+ .ch12_csr( ch12_csr ),
+ .ch12_txsz( ch12_txsz ),
+ .ch12_adr0( ch12_adr0 ),
+ .ch12_adr1( ch12_adr1 ),
+ .ch12_am0( ch12_am0 ),
+ .ch12_am1( ch12_am1 ),
+ .pointer13( pointer13 ),
+ .pointer13_s( pointer13_s ),
+ .ch13_csr( ch13_csr ),
+ .ch13_txsz( ch13_txsz ),
+ .ch13_adr0( ch13_adr0 ),
+ .ch13_adr1( ch13_adr1 ),
+ .ch13_am0( ch13_am0 ),
+ .ch13_am1( ch13_am1 ),
+ .pointer14( pointer14 ),
+ .pointer14_s( pointer14_s ),
+ .ch14_csr( ch14_csr ),
+ .ch14_txsz( ch14_txsz ),
+ .ch14_adr0( ch14_adr0 ),
+ .ch14_adr1( ch14_adr1 ),
+ .ch14_am0( ch14_am0 ),
+ .ch14_am1( ch14_am1 ),
+ .pointer15( pointer15 ),
+ .pointer15_s( pointer15_s ),
+ .ch15_csr( ch15_csr ),
+ .ch15_txsz( ch15_txsz ),
+ .ch15_adr0( ch15_adr0 ),
+ .ch15_adr1( ch15_adr1 ),
+ .ch15_am0( ch15_am0 ),
+ .ch15_am1( ch15_am1 ),
+ .pointer16( pointer16 ),
+ .pointer16_s( pointer16_s ),
+ .ch16_csr( ch16_csr ),
+ .ch16_txsz( ch16_txsz ),
+ .ch16_adr0( ch16_adr0 ),
+ .ch16_adr1( ch16_adr1 ),
+ .ch16_am0( ch16_am0 ),
+ .ch16_am1( ch16_am1 ),
+ .pointer17( pointer17 ),
+ .pointer17_s( pointer17_s ),
+ .ch17_csr( ch17_csr ),
+ .ch17_txsz( ch17_txsz ),
+ .ch17_adr0( ch17_adr0 ),
+ .ch17_adr1( ch17_adr1 ),
+ .ch17_am0( ch17_am0 ),
+ .ch17_am1( ch17_am1 ),
+ .pointer18( pointer18 ),
+ .pointer18_s( pointer18_s ),
+ .ch18_csr( ch18_csr ),
+ .ch18_txsz( ch18_txsz ),
+ .ch18_adr0( ch18_adr0 ),
+ .ch18_adr1( ch18_adr1 ),
+ .ch18_am0( ch18_am0 ),
+ .ch18_am1( ch18_am1 ),
+ .pointer19( pointer19 ),
+ .pointer19_s( pointer19_s ),
+ .ch19_csr( ch19_csr ),
+ .ch19_txsz( ch19_txsz ),
+ .ch19_adr0( ch19_adr0 ),
+ .ch19_adr1( ch19_adr1 ),
+ .ch19_am0( ch19_am0 ),
+ .ch19_am1( ch19_am1 ),
+ .pointer20( pointer20 ),
+ .pointer20_s( pointer20_s ),
+ .ch20_csr( ch20_csr ),
+ .ch20_txsz( ch20_txsz ),
+ .ch20_adr0( ch20_adr0 ),
+ .ch20_adr1( ch20_adr1 ),
+ .ch20_am0( ch20_am0 ),
+ .ch20_am1( ch20_am1 ),
+ .pointer21( pointer21 ),
+ .pointer21_s( pointer21_s ),
+ .ch21_csr( ch21_csr ),
+ .ch21_txsz( ch21_txsz ),
+ .ch21_adr0( ch21_adr0 ),
+ .ch21_adr1( ch21_adr1 ),
+ .ch21_am0( ch21_am0 ),
+ .ch21_am1( ch21_am1 ),
+ .pointer22( pointer22 ),
+ .pointer22_s( pointer22_s ),
+ .ch22_csr( ch22_csr ),
+ .ch22_txsz( ch22_txsz ),
+ .ch22_adr0( ch22_adr0 ),
+ .ch22_adr1( ch22_adr1 ),
+ .ch22_am0( ch22_am0 ),
+ .ch22_am1( ch22_am1 ),
+ .pointer23( pointer23 ),
+ .pointer23_s( pointer23_s ),
+ .ch23_csr( ch23_csr ),
+ .ch23_txsz( ch23_txsz ),
+ .ch23_adr0( ch23_adr0 ),
+ .ch23_adr1( ch23_adr1 ),
+ .ch23_am0( ch23_am0 ),
+ .ch23_am1( ch23_am1 ),
+ .pointer24( pointer24 ),
+ .pointer24_s( pointer24_s ),
+ .ch24_csr( ch24_csr ),
+ .ch24_txsz( ch24_txsz ),
+ .ch24_adr0( ch24_adr0 ),
+ .ch24_adr1( ch24_adr1 ),
+ .ch24_am0( ch24_am0 ),
+ .ch24_am1( ch24_am1 ),
+ .pointer25( pointer25 ),
+ .pointer25_s( pointer25_s ),
+ .ch25_csr( ch25_csr ),
+ .ch25_txsz( ch25_txsz ),
+ .ch25_adr0( ch25_adr0 ),
+ .ch25_adr1( ch25_adr1 ),
+ .ch25_am0( ch25_am0 ),
+ .ch25_am1( ch25_am1 ),
+ .pointer26( pointer26 ),
+ .pointer26_s( pointer26_s ),
+ .ch26_csr( ch26_csr ),
+ .ch26_txsz( ch26_txsz ),
+ .ch26_adr0( ch26_adr0 ),
+ .ch26_adr1( ch26_adr1 ),
+ .ch26_am0( ch26_am0 ),
+ .ch26_am1( ch26_am1 ),
+ .pointer27( pointer27 ),
+ .pointer27_s( pointer27_s ),
+ .ch27_csr( ch27_csr ),
+ .ch27_txsz( ch27_txsz ),
+ .ch27_adr0( ch27_adr0 ),
+ .ch27_adr1( ch27_adr1 ),
+ .ch27_am0( ch27_am0 ),
+ .ch27_am1( ch27_am1 ),
+ .pointer28( pointer28 ),
+ .pointer28_s( pointer28_s ),
+ .ch28_csr( ch28_csr ),
+ .ch28_txsz( ch28_txsz ),
+ .ch28_adr0( ch28_adr0 ),
+ .ch28_adr1( ch28_adr1 ),
+ .ch28_am0( ch28_am0 ),
+ .ch28_am1( ch28_am1 ),
+ .pointer29( pointer29 ),
+ .pointer29_s( pointer29_s ),
+ .ch29_csr( ch29_csr ),
+ .ch29_txsz( ch29_txsz ),
+ .ch29_adr0( ch29_adr0 ),
+ .ch29_adr1( ch29_adr1 ),
+ .ch29_am0( ch29_am0 ),
+ .ch29_am1( ch29_am1 ),
+ .pointer30( pointer30 ),
+ .pointer30_s( pointer30_s ),
+ .ch30_csr( ch30_csr ),
+ .ch30_txsz( ch30_txsz ),
+ .ch30_adr0( ch30_adr0 ),
+ .ch30_adr1( ch30_adr1 ),
+ .ch30_am0( ch30_am0 ),
+ .ch30_am1( ch30_am1 ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr ),
+ .pause_req( pause_req ),
+ .paused( paused ),
+ .dma_abort( dma_abort ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest ),
+ .ptr_set( ptr_set )
+ );
+
+// Channel Select
+wb_dma_ch_sel #(pri_sel,
+ ch0_conf,
+ ch1_conf,
+ ch2_conf,
+ ch3_conf,
+ ch4_conf,
+ ch5_conf,
+ ch6_conf,
+ ch7_conf,
+ ch8_conf,
+ ch9_conf,
+ ch10_conf,
+ ch11_conf,
+ ch12_conf,
+ ch13_conf,
+ ch14_conf,
+ ch15_conf,
+ ch16_conf,
+ ch17_conf,
+ ch18_conf,
+ ch19_conf,
+ ch20_conf,
+ ch21_conf,
+ ch22_conf,
+ ch23_conf,
+ ch24_conf,
+ ch25_conf,
+ ch26_conf,
+ ch27_conf,
+ ch28_conf,
+ ch29_conf,
+ ch30_conf)
+ u1(
+ .clk( clk_i ),
+ .rst( ~rst_i ),
+ .req_i( dma_req ),
+ .ack_o( dma_ack ),
+ .nd_i( dma_nd ),
+
+ .pointer0( pointer0 ),
+ .pointer0_s( pointer0_s ),
+ .ch0_csr( ch0_csr ),
+ .ch0_txsz( ch0_txsz ),
+ .ch0_adr0( ch0_adr0 ),
+ .ch0_adr1( ch0_adr1 ),
+ .ch0_am0( ch0_am0 ),
+ .ch0_am1( ch0_am1 ),
+ .pointer1( pointer1 ),
+ .pointer1_s( pointer1_s ),
+ .ch1_csr( ch1_csr ),
+ .ch1_txsz( ch1_txsz ),
+ .ch1_adr0( ch1_adr0 ),
+ .ch1_adr1( ch1_adr1 ),
+ .ch1_am0( ch1_am0 ),
+ .ch1_am1( ch1_am1 ),
+ .pointer2( pointer2 ),
+ .pointer2_s( pointer2_s ),
+ .ch2_csr( ch2_csr ),
+ .ch2_txsz( ch2_txsz ),
+ .ch2_adr0( ch2_adr0 ),
+ .ch2_adr1( ch2_adr1 ),
+ .ch2_am0( ch2_am0 ),
+ .ch2_am1( ch2_am1 ),
+ .pointer3( pointer3 ),
+ .pointer3_s( pointer3_s ),
+ .ch3_csr( ch3_csr ),
+ .ch3_txsz( ch3_txsz ),
+ .ch3_adr0( ch3_adr0 ),
+ .ch3_adr1( ch3_adr1 ),
+ .ch3_am0( ch3_am0 ),
+ .ch3_am1( ch3_am1 ),
+ .pointer4( pointer4 ),
+ .pointer4_s( pointer4_s ),
+ .ch4_csr( ch4_csr ),
+ .ch4_txsz( ch4_txsz ),
+ .ch4_adr0( ch4_adr0 ),
+ .ch4_adr1( ch4_adr1 ),
+ .ch4_am0( ch4_am0 ),
+ .ch4_am1( ch4_am1 ),
+ .pointer5( pointer5 ),
+ .pointer5_s( pointer5_s ),
+ .ch5_csr( ch5_csr ),
+ .ch5_txsz( ch5_txsz ),
+ .ch5_adr0( ch5_adr0 ),
+ .ch5_adr1( ch5_adr1 ),
+ .ch5_am0( ch5_am0 ),
+ .ch5_am1( ch5_am1 ),
+ .pointer6( pointer6 ),
+ .pointer6_s( pointer6_s ),
+ .ch6_csr( ch6_csr ),
+ .ch6_txsz( ch6_txsz ),
+ .ch6_adr0( ch6_adr0 ),
+ .ch6_adr1( ch6_adr1 ),
+ .ch6_am0( ch6_am0 ),
+ .ch6_am1( ch6_am1 ),
+ .pointer7( pointer7 ),
+ .pointer7_s( pointer7_s ),
+ .ch7_csr( ch7_csr ),
+ .ch7_txsz( ch7_txsz ),
+ .ch7_adr0( ch7_adr0 ),
+ .ch7_adr1( ch7_adr1 ),
+ .ch7_am0( ch7_am0 ),
+ .ch7_am1( ch7_am1 ),
+ .pointer8( pointer8 ),
+ .pointer8_s( pointer8_s ),
+ .ch8_csr( ch8_csr ),
+ .ch8_txsz( ch8_txsz ),
+ .ch8_adr0( ch8_adr0 ),
+ .ch8_adr1( ch8_adr1 ),
+ .ch8_am0( ch8_am0 ),
+ .ch8_am1( ch8_am1 ),
+ .pointer9( pointer9 ),
+ .pointer9_s( pointer9_s ),
+ .ch9_csr( ch9_csr ),
+ .ch9_txsz( ch9_txsz ),
+ .ch9_adr0( ch9_adr0 ),
+ .ch9_adr1( ch9_adr1 ),
+ .ch9_am0( ch9_am0 ),
+ .ch9_am1( ch9_am1 ),
+ .pointer10( pointer10 ),
+ .pointer10_s( pointer10_s ),
+ .ch10_csr( ch10_csr ),
+ .ch10_txsz( ch10_txsz ),
+ .ch10_adr0( ch10_adr0 ),
+ .ch10_adr1( ch10_adr1 ),
+ .ch10_am0( ch10_am0 ),
+ .ch10_am1( ch10_am1 ),
+ .pointer11( pointer11 ),
+ .pointer11_s( pointer11_s ),
+ .ch11_csr( ch11_csr ),
+ .ch11_txsz( ch11_txsz ),
+ .ch11_adr0( ch11_adr0 ),
+ .ch11_adr1( ch11_adr1 ),
+ .ch11_am0( ch11_am0 ),
+ .ch11_am1( ch11_am1 ),
+ .pointer12( pointer12 ),
+ .pointer12_s( pointer12_s ),
+ .ch12_csr( ch12_csr ),
+ .ch12_txsz( ch12_txsz ),
+ .ch12_adr0( ch12_adr0 ),
+ .ch12_adr1( ch12_adr1 ),
+ .ch12_am0( ch12_am0 ),
+ .ch12_am1( ch12_am1 ),
+ .pointer13( pointer13 ),
+ .pointer13_s( pointer13_s ),
+ .ch13_csr( ch13_csr ),
+ .ch13_txsz( ch13_txsz ),
+ .ch13_adr0( ch13_adr0 ),
+ .ch13_adr1( ch13_adr1 ),
+ .ch13_am0( ch13_am0 ),
+ .ch13_am1( ch13_am1 ),
+ .pointer14( pointer14 ),
+ .pointer14_s( pointer14_s ),
+ .ch14_csr( ch14_csr ),
+ .ch14_txsz( ch14_txsz ),
+ .ch14_adr0( ch14_adr0 ),
+ .ch14_adr1( ch14_adr1 ),
+ .ch14_am0( ch14_am0 ),
+ .ch14_am1( ch14_am1 ),
+ .pointer15( pointer15 ),
+ .pointer15_s( pointer15_s ),
+ .ch15_csr( ch15_csr ),
+ .ch15_txsz( ch15_txsz ),
+ .ch15_adr0( ch15_adr0 ),
+ .ch15_adr1( ch15_adr1 ),
+ .ch15_am0( ch15_am0 ),
+ .ch15_am1( ch15_am1 ),
+ .pointer16( pointer16 ),
+ .pointer16_s( pointer16_s ),
+ .ch16_csr( ch16_csr ),
+ .ch16_txsz( ch16_txsz ),
+ .ch16_adr0( ch16_adr0 ),
+ .ch16_adr1( ch16_adr1 ),
+ .ch16_am0( ch16_am0 ),
+ .ch16_am1( ch16_am1 ),
+ .pointer17( pointer17 ),
+ .pointer17_s( pointer17_s ),
+ .ch17_csr( ch17_csr ),
+ .ch17_txsz( ch17_txsz ),
+ .ch17_adr0( ch17_adr0 ),
+ .ch17_adr1( ch17_adr1 ),
+ .ch17_am0( ch17_am0 ),
+ .ch17_am1( ch17_am1 ),
+ .pointer18( pointer18 ),
+ .pointer18_s( pointer18_s ),
+ .ch18_csr( ch18_csr ),
+ .ch18_txsz( ch18_txsz ),
+ .ch18_adr0( ch18_adr0 ),
+ .ch18_adr1( ch18_adr1 ),
+ .ch18_am0( ch18_am0 ),
+ .ch18_am1( ch18_am1 ),
+ .pointer19( pointer19 ),
+ .pointer19_s( pointer19_s ),
+ .ch19_csr( ch19_csr ),
+ .ch19_txsz( ch19_txsz ),
+ .ch19_adr0( ch19_adr0 ),
+ .ch19_adr1( ch19_adr1 ),
+ .ch19_am0( ch19_am0 ),
+ .ch19_am1( ch19_am1 ),
+ .pointer20( pointer20 ),
+ .pointer20_s( pointer20_s ),
+ .ch20_csr( ch20_csr ),
+ .ch20_txsz( ch20_txsz ),
+ .ch20_adr0( ch20_adr0 ),
+ .ch20_adr1( ch20_adr1 ),
+ .ch20_am0( ch20_am0 ),
+ .ch20_am1( ch20_am1 ),
+ .pointer21( pointer21 ),
+ .pointer21_s( pointer21_s ),
+ .ch21_csr( ch21_csr ),
+ .ch21_txsz( ch21_txsz ),
+ .ch21_adr0( ch21_adr0 ),
+ .ch21_adr1( ch21_adr1 ),
+ .ch21_am0( ch21_am0 ),
+ .ch21_am1( ch21_am1 ),
+ .pointer22( pointer22 ),
+ .pointer22_s( pointer22_s ),
+ .ch22_csr( ch22_csr ),
+ .ch22_txsz( ch22_txsz ),
+ .ch22_adr0( ch22_adr0 ),
+ .ch22_adr1( ch22_adr1 ),
+ .ch22_am0( ch22_am0 ),
+ .ch22_am1( ch22_am1 ),
+ .pointer23( pointer23 ),
+ .pointer23_s( pointer23_s ),
+ .ch23_csr( ch23_csr ),
+ .ch23_txsz( ch23_txsz ),
+ .ch23_adr0( ch23_adr0 ),
+ .ch23_adr1( ch23_adr1 ),
+ .ch23_am0( ch23_am0 ),
+ .ch23_am1( ch23_am1 ),
+ .pointer24( pointer24 ),
+ .pointer24_s( pointer24_s ),
+ .ch24_csr( ch24_csr ),
+ .ch24_txsz( ch24_txsz ),
+ .ch24_adr0( ch24_adr0 ),
+ .ch24_adr1( ch24_adr1 ),
+ .ch24_am0( ch24_am0 ),
+ .ch24_am1( ch24_am1 ),
+ .pointer25( pointer25 ),
+ .pointer25_s( pointer25_s ),
+ .ch25_csr( ch25_csr ),
+ .ch25_txsz( ch25_txsz ),
+ .ch25_adr0( ch25_adr0 ),
+ .ch25_adr1( ch25_adr1 ),
+ .ch25_am0( ch25_am0 ),
+ .ch25_am1( ch25_am1 ),
+ .pointer26( pointer26 ),
+ .pointer26_s( pointer26_s ),
+ .ch26_csr( ch26_csr ),
+ .ch26_txsz( ch26_txsz ),
+ .ch26_adr0( ch26_adr0 ),
+ .ch26_adr1( ch26_adr1 ),
+ .ch26_am0( ch26_am0 ),
+ .ch26_am1( ch26_am1 ),
+ .pointer27( pointer27 ),
+ .pointer27_s( pointer27_s ),
+ .ch27_csr( ch27_csr ),
+ .ch27_txsz( ch27_txsz ),
+ .ch27_adr0( ch27_adr0 ),
+ .ch27_adr1( ch27_adr1 ),
+ .ch27_am0( ch27_am0 ),
+ .ch27_am1( ch27_am1 ),
+ .pointer28( pointer28 ),
+ .pointer28_s( pointer28_s ),
+ .ch28_csr( ch28_csr ),
+ .ch28_txsz( ch28_txsz ),
+ .ch28_adr0( ch28_adr0 ),
+ .ch28_adr1( ch28_adr1 ),
+ .ch28_am0( ch28_am0 ),
+ .ch28_am1( ch28_am1 ),
+ .pointer29( pointer29 ),
+ .pointer29_s( pointer29_s ),
+ .ch29_csr( ch29_csr ),
+ .ch29_txsz( ch29_txsz ),
+ .ch29_adr0( ch29_adr0 ),
+ .ch29_adr1( ch29_adr1 ),
+ .ch29_am0( ch29_am0 ),
+ .ch29_am1( ch29_am1 ),
+ .pointer30( pointer30 ),
+ .pointer30_s( pointer30_s ),
+ .ch30_csr( ch30_csr ),
+ .ch30_txsz( ch30_txsz ),
+ .ch30_adr0( ch30_adr0 ),
+ .ch30_adr1( ch30_adr1 ),
+ .ch30_am0( ch30_am0 ),
+ .ch30_am1( ch30_am1 ),
+
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr ),
+ .de_start( de_start ),
+ .ndr( ndr ),
+ .csr( csr ),
+ .pointer( pointer ),
+ .txsz( txsz ),
+ .adr0( adr0 ),
+ .adr1( adr1 ),
+ .am0( am0 ),
+ .am1( am1 ),
+ .pointer_s( pointer_s ),
+ .next_ch( next_ch ),
+ .de_ack( de_ack ),
+ .dma_busy( dma_busy )
+ );
+
+
+// DMA Engine
+wb_dma_de u2(
+ .clk( clk_i ),
+ .rst( ~rst_i ),
+ .mast0_go( mast0_go ),
+ .mast0_we( mast0_we ),
+ .mast0_adr( mast0_adr ),
+ .mast0_din( mast0_dout ),
+ .mast0_dout( mast0_din ),
+ .mast0_err( mast0_err ),
+ .mast0_drdy( mast0_drdy ),
+ .mast0_wait( mast0_wait ),
+ .mast1_go( mast1_go ),
+ .mast1_we( mast1_we ),
+ .mast1_adr( mast1_adr ),
+ .mast1_din( mast1_dout ),
+ .mast1_dout( mast1_din ),
+ .mast1_err( mast1_err ),
+ .mast1_drdy( mast1_drdy ),
+ .mast1_wait( mast1_wait ),
+ .de_start( de_start ),
+ .nd( ndr ),
+ .csr( csr ),
+ .pointer( pointer ),
+ .pointer_s( pointer_s ),
+ .txsz( txsz ),
+ .adr0( adr0 ),
+ .adr1( adr1 ),
+ .am0( am0 ),
+ .am1( am1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .ptr_set( ptr_set ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .next_ch( next_ch ),
+ .de_ack( de_ack ),
+ .pause_req( pause_req ),
+ .paused( paused ),
+ .dma_abort( dma_abort ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all )
+ );
+
+// Wishbone Interface 0
+wb_dma_wb_if #(rf_addr) u3(
+ .clk( clk_i ),
+ .rst( ~rst_i ),
+ .wbs_data_i( wb0s_data_i ),
+ .wbs_data_o( wb0s_data_o ),
+ .wb_addr_i( wb0_addr_i ),
+ .wb_sel_i( wb0_sel_i ),
+ .wb_we_i( wb0_we_i ),
+ .wb_cyc_i( wb0_cyc_i ),
+ .wb_stb_i( wb0_stb_i ),
+ .wb_ack_o( wb0_ack_o ),
+ .wb_err_o( wb0_err_o ),
+ .wb_rty_o( wb0_rty_o ),
+ .wbm_data_i( wb0m_data_i ),
+ .wbm_data_o( wb0m_data_o ),
+ .wb_addr_o( wb0_addr_o ),
+ .wb_sel_o( wb0_sel_o ),
+ .wb_we_o( wb0_we_o ),
+ .wb_cyc_o( wb0_cyc_o ),
+ .wb_stb_o( wb0_stb_o ),
+ .wb_ack_i( wb0_ack_i ),
+ .wb_err_i( wb0_err_i ),
+ .wb_rty_i( wb0_rty_i ),
+ .mast_go( mast0_go ),
+ .mast_we( mast0_we ),
+ .mast_adr( mast0_adr ),
+ .mast_din( mast0_din ),
+ .mast_dout( mast0_dout ),
+ .mast_err( mast0_err ),
+ .mast_drdy( mast0_drdy ),
+ .mast_wait( mast0_wait ),
+ .pt_sel_i( pt0_sel_i ),
+ .mast_pt_in( mast0_pt_in ),
+ .mast_pt_out( mast0_pt_out ),
+ .slv_adr( slv0_adr ),
+ .slv_din( slv0_din ),
+ .slv_dout( slv0_dout ),
+ .slv_re( slv0_re ),
+ .slv_we( slv0_we ),
+ .pt_sel_o( pt0_sel_o ),
+ .slv_pt_out( slv0_pt_out ),
+ .slv_pt_in( slv0_pt_in )
+ );
+
+// Wishbone Interface 1
+wb_dma_wb_if #(rf_addr) u4(
+ .clk( clk_i ),
+ .rst( ~rst_i ),
+ .wbs_data_i( wb1s_data_i ),
+ .wbs_data_o( wb1s_data_o ),
+ .wb_addr_i( wb1_addr_i ),
+ .wb_sel_i( wb1_sel_i ),
+ .wb_we_i( wb1_we_i ),
+ .wb_cyc_i( wb1_cyc_i ),
+ .wb_stb_i( wb1_stb_i ),
+ .wb_ack_o( wb1_ack_o ),
+ .wb_err_o( wb1_err_o ),
+ .wb_rty_o( wb1_rty_o ),
+ .wbm_data_i( wb1m_data_i ),
+ .wbm_data_o( wb1m_data_o ),
+ .wb_addr_o( wb1_addr_o ),
+ .wb_sel_o( wb1_sel_o ),
+ .wb_we_o( wb1_we_o ),
+ .wb_cyc_o( wb1_cyc_o ),
+ .wb_stb_o( wb1_stb_o ),
+ .wb_ack_i( wb1_ack_i ),
+ .wb_err_i( wb1_err_i ),
+ .wb_rty_i( wb1_rty_i ),
+ .mast_go( mast1_go ),
+ .mast_we( mast1_we ),
+ .mast_adr( mast1_adr ),
+ .mast_din( mast1_din ),
+ .mast_dout( mast1_dout ),
+ .mast_err( mast1_err ),
+ .mast_drdy( mast1_drdy ),
+ .mast_wait( mast1_wait ),
+ .pt_sel_i( pt1_sel_i ),
+ .mast_pt_in( mast1_pt_in ),
+ .mast_pt_out( mast1_pt_out ),
+ .slv_adr( slv1_adr ),
+ .slv_din( 32'h0 ), // Not Connected
+ .slv_dout( slv1_dout ), // Not Connected
+ .slv_re( slv1_re ), // Not Connected
+ .slv_we( slv1_we ), // Not Connected
+ .pt_sel_o( pt1_sel_o ),
+ .slv_pt_out( slv1_pt_out ),
+ .slv_pt_in( slv1_pt_in )
+ );
+
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_wb_if.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_wb_if.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_wb_if.v (revision 17)
@@ -0,0 +1,219 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA WISHBONE Interface ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_wb_if.v,v 1.3 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.3 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.2 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// Revision 1.1 2001/07/29 08:57:02 rudi
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:54 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_wb_if(clk, rst,
+
+ // Wishbone
+ wbs_data_i, wbs_data_o, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i,
+ wb_stb_i, wb_ack_o, wb_err_o, wb_rty_o,
+ wbm_data_i, wbm_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o,
+ wb_stb_o, wb_ack_i, wb_err_i, wb_rty_i,
+
+ // Master
+ mast_go, mast_we, mast_adr, mast_din, mast_dout, mast_err,
+ mast_drdy, mast_wait, pt_sel_i, mast_pt_in, mast_pt_out,
+
+ // Slave
+ slv_adr, slv_din, slv_dout, slv_re, slv_we,
+ pt_sel_o, slv_pt_out, slv_pt_in
+
+ );
+
+parameter rf_addr = 0;
+
+input clk, rst;
+
+// --------------------------------------
+// WISHBONE INTERFACE
+
+// Slave Interface
+input [31:0] wbs_data_i;
+output [31:0] wbs_data_o;
+input [31:0] wb_addr_i;
+input [3:0] wb_sel_i;
+input wb_we_i;
+input wb_cyc_i;
+input wb_stb_i;
+output wb_ack_o;
+output wb_err_o;
+output wb_rty_o;
+
+// Master Interface
+input [31:0] wbm_data_i;
+output [31:0] wbm_data_o;
+output [31:0] wb_addr_o;
+output [3:0] wb_sel_o;
+output wb_we_o;
+output wb_cyc_o;
+output wb_stb_o;
+input wb_ack_i;
+input wb_err_i;
+input wb_rty_i;
+
+// --------------------------------------
+// MASTER INTERFACE
+input mast_go; // Perform a Master Cycle (as long as this
+ // line is asserted)
+input mast_we; // Read/Write
+input [31:0] mast_adr; // Address for the transfer
+input [31:0] mast_din; // Internal Input Data
+output [31:0] mast_dout; // Internal Output Data
+output mast_err; // Indicates an error has occurred
+
+output mast_drdy; // Indicated that either data is available
+ // during a read, or that the master can accept
+ // the next data during a write
+input mast_wait; // Tells the master to insert wait cycles
+ // because data can not be accepted/provided
+
+// Pass Through Interface
+input pt_sel_i; // Pass Through Mode Selected
+input [70:0] mast_pt_in; // Grouped WISHBONE inputs
+output [34:0] mast_pt_out; // Grouped WISHBONE outputs
+
+// --------------------------------------
+// Slave INTERFACE
+
+// This is the register File Interface
+output [31:0] slv_adr; // Slave Address
+input [31:0] slv_din; // Slave Input Data
+output [31:0] slv_dout; // Slave Output Data
+output slv_re; // Slave Read Enable
+output slv_we; // Slave Write Enable
+
+// Pass through Interface
+output pt_sel_o; // Pass Through Mode Active
+output [70:0] slv_pt_out; // Grouped WISHBONE out signals
+input [34:0] slv_pt_in; // Grouped WISHBONE in signals
+
+////////////////////////////////////////////////////////////////////
+//
+// Modules
+//
+
+wb_dma_wb_mast u0(
+ .clk( clk ),
+ .rst( rst ),
+ .wb_data_i( wbs_data_i ),
+ .wb_data_o( wbs_data_o ),
+ .wb_addr_o( wb_addr_o ),
+ .wb_sel_o( wb_sel_o ),
+ .wb_we_o( wb_we_o ),
+ .wb_cyc_o( wb_cyc_o ),
+ .wb_stb_o( wb_stb_o ),
+ .wb_ack_i( wb_ack_i ),
+ .wb_err_i( wb_err_i ),
+ .wb_rty_i( wb_rty_i ),
+ .mast_go( mast_go ),
+ .mast_we( mast_we ),
+ .mast_adr( mast_adr ),
+ .mast_din( mast_din ),
+ .mast_dout( mast_dout ),
+ .mast_err( mast_err ),
+ .mast_drdy( mast_drdy ),
+ .mast_wait( mast_wait ),
+ .pt_sel( pt_sel_i ),
+ .mast_pt_in( mast_pt_in ),
+ .mast_pt_out( mast_pt_out )
+ );
+
+
+wb_dma_wb_slv #(rf_addr) u1(
+ .clk( clk ),
+ .rst( rst ),
+ .wb_data_i( wbm_data_i ),
+ .wb_data_o( wbm_data_o ),
+ .wb_addr_i( wb_addr_i ),
+ .wb_sel_i( wb_sel_i ),
+ .wb_we_i( wb_we_i ),
+ .wb_cyc_i( wb_cyc_i ),
+ .wb_stb_i( wb_stb_i ),
+ .wb_ack_o( wb_ack_o ),
+ .wb_err_o( wb_err_o ),
+ .wb_rty_o( wb_rty_o ),
+ .slv_adr( slv_adr ),
+ .slv_din( slv_din ),
+ .slv_dout( slv_dout ),
+ .slv_re( slv_re ),
+ .slv_we( slv_we ),
+ .pt_sel( pt_sel_o ),
+ .slv_pt_out( slv_pt_out ),
+ .slv_pt_in( slv_pt_in )
+ );
+
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_rf.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_rf.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_rf.v (revision 17)
@@ -0,0 +1,1856 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Register File ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_rf.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.4 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.4 2001/06/14 08:50:46 rudi
+//
+// Changed name of channel register file module.
+//
+// Revision 1.3 2001/06/13 02:26:48 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:11 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_rf(clk, rst,
+
+ // WISHBONE Access
+ wb_rf_adr, wb_rf_din, wb_rf_dout, wb_rf_re, wb_rf_we,
+
+ // WISHBONE Interrupt outputs
+ inta_o, intb_o,
+
+ // DMA Registers Outputs
+ pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1,
+ pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1,
+ pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1,
+ pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1,
+ pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1,
+ pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1,
+ pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1,
+ pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1,
+ pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1,
+ pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1,
+ pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1,
+ pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1,
+ pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1,
+ pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1,
+ pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1,
+ pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1,
+ pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1,
+ pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1,
+ pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1,
+ pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1,
+ pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1,
+ pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1,
+ pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1,
+ pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1,
+ pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1,
+ pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1,
+ pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1,
+ pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1,
+ pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1,
+ pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1,
+ pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1,
+
+ // DMA Registers Write Back Channel Select
+ ch_sel, ndnr,
+
+ // DMA Engine Status
+ pause_req, paused, dma_abort, dma_busy, dma_err, dma_done, dma_done_all,
+
+ // DMA Engine Reg File Update ctrl signals
+ de_csr, de_txsz, de_adr0, de_adr1,
+ de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, de_fetch_descr, dma_rest,
+ ptr_set
+ );
+
+////////////////////////////////////////////////////////////////////
+//
+// Module Parameters
+//
+
+// chXX_conf = { CBUF, ED, ARS, EN }
+parameter [3:0] ch0_conf = 4'h1;
+parameter [3:0] ch1_conf = 4'h0;
+parameter [3:0] ch2_conf = 4'h0;
+parameter [3:0] ch3_conf = 4'h0;
+parameter [3:0] ch4_conf = 4'h0;
+parameter [3:0] ch5_conf = 4'h0;
+parameter [3:0] ch6_conf = 4'h0;
+parameter [3:0] ch7_conf = 4'h0;
+parameter [3:0] ch8_conf = 4'h0;
+parameter [3:0] ch9_conf = 4'h0;
+parameter [3:0] ch10_conf = 4'h0;
+parameter [3:0] ch11_conf = 4'h0;
+parameter [3:0] ch12_conf = 4'h0;
+parameter [3:0] ch13_conf = 4'h0;
+parameter [3:0] ch14_conf = 4'h0;
+parameter [3:0] ch15_conf = 4'h0;
+parameter [3:0] ch16_conf = 4'h0;
+parameter [3:0] ch17_conf = 4'h0;
+parameter [3:0] ch18_conf = 4'h0;
+parameter [3:0] ch19_conf = 4'h0;
+parameter [3:0] ch20_conf = 4'h0;
+parameter [3:0] ch21_conf = 4'h0;
+parameter [3:0] ch22_conf = 4'h0;
+parameter [3:0] ch23_conf = 4'h0;
+parameter [3:0] ch24_conf = 4'h0;
+parameter [3:0] ch25_conf = 4'h0;
+parameter [3:0] ch26_conf = 4'h0;
+parameter [3:0] ch27_conf = 4'h0;
+parameter [3:0] ch28_conf = 4'h0;
+parameter [3:0] ch29_conf = 4'h0;
+parameter [3:0] ch30_conf = 4'h0;
+
+////////////////////////////////////////////////////////////////////
+//
+// Module IOs
+//
+
+input clk, rst;
+
+// WISHBONE Access
+input [7:0] wb_rf_adr;
+input [31:0] wb_rf_din;
+output [31:0] wb_rf_dout;
+input wb_rf_re;
+input wb_rf_we;
+
+// WISHBONE Interrupt outputs
+output inta_o, intb_o;
+
+// Channel Registers Inputs
+output [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
+output [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
+output [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
+output [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
+output [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
+output [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
+output [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
+output [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
+output [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
+output [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
+output [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
+output [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
+output [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
+output [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
+output [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
+output [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
+output [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
+output [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
+output [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
+output [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
+output [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
+output [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
+output [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
+output [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
+output [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
+output [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
+output [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
+output [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
+output [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
+output [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
+output [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
+
+input [4:0] ch_sel; // Write Back Channel Select
+input [30:0] ndnr; // Next Descriptor No Request
+
+// DMA Engine Abort
+output dma_abort;
+
+// DMA Engine Status
+output pause_req;
+input paused;
+input dma_busy, dma_err, dma_done, dma_done_all;
+
+// DMA Engine Reg File Update ctrl signals
+input [31:0] de_csr;
+input [11:0] de_txsz;
+input [31:0] de_adr0;
+input [31:0] de_adr1;
+input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
+input de_fetch_descr;
+input [30:0] dma_rest;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires and Registers
+//
+
+reg [31:0] wb_rf_dout;
+reg inta_o, intb_o;
+reg [30:0] int_maska_r, int_maskb_r;
+wire [31:0] int_maska, int_maskb;
+wire [31:0] int_srca, int_srcb;
+wire int_maska_we, int_maskb_we;
+wire [30:0] ch_int;
+wire csr_we;
+wire [31:0] csr;
+reg [7:0] csr_r;
+
+wire [30:0] ch_stop;
+wire [30:0] ch_dis;
+
+wire [31:0] ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
+wire [31:0] ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
+wire [31:0] ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
+wire [31:0] ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
+wire [31:0] ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
+wire [31:0] ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
+wire [31:0] ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
+wire [31:0] ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
+wire [31:0] ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
+wire [31:0] ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
+wire [31:0] ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
+wire [31:0] ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
+wire [31:0] ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
+wire [31:0] ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
+wire [31:0] ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
+wire [31:0] ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
+wire [31:0] ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
+wire [31:0] ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
+wire [31:0] ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
+wire [31:0] ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
+wire [31:0] ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
+wire [31:0] ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
+wire [31:0] ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
+wire [31:0] ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
+wire [31:0] ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
+wire [31:0] ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
+wire [31:0] ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
+wire [31:0] ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
+wire [31:0] ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
+wire [31:0] ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
+wire [31:0] ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
+
+wire [31:0] sw_pointer0, sw_pointer1, sw_pointer2, sw_pointer3;
+wire [31:0] sw_pointer4, sw_pointer5, sw_pointer6, sw_pointer7;
+wire [31:0] sw_pointer8, sw_pointer9, sw_pointer10, sw_pointer11;
+wire [31:0] sw_pointer12, sw_pointer13, sw_pointer14, sw_pointer15;
+wire [31:0] sw_pointer16, sw_pointer17, sw_pointer18, sw_pointer19;
+wire [31:0] sw_pointer20, sw_pointer21, sw_pointer22, sw_pointer23;
+wire [31:0] sw_pointer24, sw_pointer25, sw_pointer26, sw_pointer27;
+wire [31:0] sw_pointer28, sw_pointer29, sw_pointer30;
+
+////////////////////////////////////////////////////////////////////
+//
+// Aliases
+//
+
+assign int_maska = {1'h0, int_maska_r};
+assign int_maskb = {1'h0, int_maskb_r};
+assign csr = {31'h0, paused};
+
+////////////////////////////////////////////////////////////////////
+//
+// Misc Logic
+//
+
+assign dma_abort = |ch_stop;
+assign pause_req = csr_r[0];
+
+////////////////////////////////////////////////////////////////////
+//
+// WISHBONE Register Read Logic
+//
+
+always @(posedge clk)
+ case(wb_rf_adr) // synopsys parallel_case full_case
+ 8'h0: wb_rf_dout <= #1 csr;
+ 8'h1: wb_rf_dout <= #1 int_maska;
+ 8'h2: wb_rf_dout <= #1 int_maskb;
+ 8'h3: wb_rf_dout <= #1 int_srca;
+ 8'h4: wb_rf_dout <= #1 int_srcb;
+
+ 8'h8: wb_rf_dout <= #1 ch0_csr;
+ 8'h9: wb_rf_dout <= #1 ch0_txsz;
+ 8'ha: wb_rf_dout <= #1 ch0_adr0;
+ 8'hb: wb_rf_dout <= #1 ch0_am0;
+ 8'hc: wb_rf_dout <= #1 ch0_adr1;
+ 8'hd: wb_rf_dout <= #1 ch0_am1;
+ 8'he: wb_rf_dout <= #1 pointer0;
+ 8'hf: wb_rf_dout <= #1 sw_pointer0;
+
+ 8'h10: wb_rf_dout <= #1 ch1_conf[0] ? ch1_csr : 32'h0;
+ 8'h11: wb_rf_dout <= #1 ch1_conf[0] ? ch1_txsz : 32'h0;
+ 8'h12: wb_rf_dout <= #1 ch1_conf[0] ? ch1_adr0 : 32'h0;
+ 8'h13: wb_rf_dout <= #1 ch1_conf[0] ? ch1_am0 : 32'h0;
+ 8'h14: wb_rf_dout <= #1 ch1_conf[0] ? ch1_adr1 : 32'h0;
+ 8'h15: wb_rf_dout <= #1 ch1_conf[0] ? ch1_am1 : 32'h0;
+ 8'h16: wb_rf_dout <= #1 ch1_conf[0] ? pointer1 : 32'h0;
+ 8'h17: wb_rf_dout <= #1 ch1_conf[0] ? sw_pointer1 : 32'h0;
+
+ 8'h18: wb_rf_dout <= #1 ch2_conf[0] ? ch2_csr : 32'h0;
+ 8'h19: wb_rf_dout <= #1 ch2_conf[0] ? ch2_txsz : 32'h0;
+ 8'h1a: wb_rf_dout <= #1 ch2_conf[0] ? ch2_adr0 : 32'h0;
+ 8'h1b: wb_rf_dout <= #1 ch2_conf[0] ? ch2_am0 : 32'h0;
+ 8'h1c: wb_rf_dout <= #1 ch2_conf[0] ? ch2_adr1 : 32'h0;
+ 8'h1d: wb_rf_dout <= #1 ch2_conf[0] ? ch2_am1 : 32'h0;
+ 8'h1e: wb_rf_dout <= #1 ch2_conf[0] ? pointer2 : 32'h0;
+ 8'h1f: wb_rf_dout <= #1 ch2_conf[0] ? sw_pointer2 : 32'h0;
+
+ 8'h20: wb_rf_dout <= #1 ch3_conf[0] ? ch3_csr : 32'h0;
+ 8'h21: wb_rf_dout <= #1 ch3_conf[0] ? ch3_txsz : 32'h0;
+ 8'h22: wb_rf_dout <= #1 ch3_conf[0] ? ch3_adr0 : 32'h0;
+ 8'h23: wb_rf_dout <= #1 ch3_conf[0] ? ch3_am0 : 32'h0;
+ 8'h24: wb_rf_dout <= #1 ch3_conf[0] ? ch3_adr1 : 32'h0;
+ 8'h25: wb_rf_dout <= #1 ch3_conf[0] ? ch3_am1 : 32'h0;
+ 8'h26: wb_rf_dout <= #1 ch3_conf[0] ? pointer3 : 32'h0;
+ 8'h27: wb_rf_dout <= #1 ch3_conf[0] ? sw_pointer3 : 32'h0;
+
+ 8'h28: wb_rf_dout <= #1 ch4_conf[0] ? ch4_csr : 32'h0;
+ 8'h29: wb_rf_dout <= #1 ch4_conf[0] ? ch4_txsz : 32'h0;
+ 8'h2a: wb_rf_dout <= #1 ch4_conf[0] ? ch4_adr0 : 32'h0;
+ 8'h2b: wb_rf_dout <= #1 ch4_conf[0] ? ch4_am0 : 32'h0;
+ 8'h2c: wb_rf_dout <= #1 ch4_conf[0] ? ch4_adr1 : 32'h0;
+ 8'h2d: wb_rf_dout <= #1 ch4_conf[0] ? ch4_am1 : 32'h0;
+ 8'h2e: wb_rf_dout <= #1 ch4_conf[0] ? pointer4 : 32'h0;
+ 8'h2f: wb_rf_dout <= #1 ch4_conf[0] ? sw_pointer4 : 32'h0;
+
+ 8'h30: wb_rf_dout <= #1 ch5_conf[0] ? ch5_csr : 32'h0;
+ 8'h31: wb_rf_dout <= #1 ch5_conf[0] ? ch5_txsz : 32'h0;
+ 8'h32: wb_rf_dout <= #1 ch5_conf[0] ? ch5_adr0 : 32'h0;
+ 8'h33: wb_rf_dout <= #1 ch5_conf[0] ? ch5_am0 : 32'h0;
+ 8'h34: wb_rf_dout <= #1 ch5_conf[0] ? ch5_adr1 : 32'h0;
+ 8'h35: wb_rf_dout <= #1 ch5_conf[0] ? ch5_am1 : 32'h0;
+ 8'h36: wb_rf_dout <= #1 ch5_conf[0] ? pointer5 : 32'h0;
+ 8'h37: wb_rf_dout <= #1 ch5_conf[0] ? sw_pointer5 : 32'h0;
+
+ 8'h38: wb_rf_dout <= #1 ch6_conf[0] ? ch6_csr : 32'h0;
+ 8'h39: wb_rf_dout <= #1 ch6_conf[0] ? ch6_txsz : 32'h0;
+ 8'h3a: wb_rf_dout <= #1 ch6_conf[0] ? ch6_adr0 : 32'h0;
+ 8'h3b: wb_rf_dout <= #1 ch6_conf[0] ? ch6_am0 : 32'h0;
+ 8'h3c: wb_rf_dout <= #1 ch6_conf[0] ? ch6_adr1 : 32'h0;
+ 8'h3d: wb_rf_dout <= #1 ch6_conf[0] ? ch6_am1 : 32'h0;
+ 8'h3e: wb_rf_dout <= #1 ch6_conf[0] ? pointer6 : 32'h0;
+ 8'h3f: wb_rf_dout <= #1 ch6_conf[0] ? sw_pointer6 : 32'h0;
+
+ 8'h40: wb_rf_dout <= #1 ch7_conf[0] ? ch7_csr : 32'h0;
+ 8'h41: wb_rf_dout <= #1 ch7_conf[0] ? ch7_txsz : 32'h0;
+ 8'h42: wb_rf_dout <= #1 ch7_conf[0] ? ch7_adr0 : 32'h0;
+ 8'h43: wb_rf_dout <= #1 ch7_conf[0] ? ch7_am0 : 32'h0;
+ 8'h44: wb_rf_dout <= #1 ch7_conf[0] ? ch7_adr1 : 32'h0;
+ 8'h45: wb_rf_dout <= #1 ch7_conf[0] ? ch7_am1 : 32'h0;
+ 8'h46: wb_rf_dout <= #1 ch7_conf[0] ? pointer7 : 32'h0;
+ 8'h47: wb_rf_dout <= #1 ch7_conf[0] ? sw_pointer7 : 32'h0;
+
+ 8'h48: wb_rf_dout <= #1 ch8_conf[0] ? ch8_csr : 32'h0;
+ 8'h49: wb_rf_dout <= #1 ch8_conf[0] ? ch8_txsz : 32'h0;
+ 8'h4a: wb_rf_dout <= #1 ch8_conf[0] ? ch8_adr0 : 32'h0;
+ 8'h4b: wb_rf_dout <= #1 ch8_conf[0] ? ch8_am0 : 32'h0;
+ 8'h4c: wb_rf_dout <= #1 ch8_conf[0] ? ch8_adr1 : 32'h0;
+ 8'h4d: wb_rf_dout <= #1 ch8_conf[0] ? ch8_am1 : 32'h0;
+ 8'h4e: wb_rf_dout <= #1 ch8_conf[0] ? pointer8 : 32'h0;
+ 8'h4f: wb_rf_dout <= #1 ch8_conf[0] ? sw_pointer8 : 32'h0;
+
+ 8'h50: wb_rf_dout <= #1 ch9_conf[0] ? ch9_csr : 32'h0;
+ 8'h51: wb_rf_dout <= #1 ch9_conf[0] ? ch9_txsz : 32'h0;
+ 8'h52: wb_rf_dout <= #1 ch9_conf[0] ? ch9_adr0 : 32'h0;
+ 8'h53: wb_rf_dout <= #1 ch9_conf[0] ? ch9_am0 : 32'h0;
+ 8'h54: wb_rf_dout <= #1 ch9_conf[0] ? ch9_adr1 : 32'h0;
+ 8'h55: wb_rf_dout <= #1 ch9_conf[0] ? ch9_am1 : 32'h0;
+ 8'h56: wb_rf_dout <= #1 ch9_conf[0] ? pointer9 : 32'h0;
+ 8'h57: wb_rf_dout <= #1 ch9_conf[0] ? sw_pointer9 : 32'h0;
+
+ 8'h58: wb_rf_dout <= #1 ch10_conf[0] ? ch10_csr : 32'h0;
+ 8'h59: wb_rf_dout <= #1 ch10_conf[0] ? ch10_txsz : 32'h0;
+ 8'h5a: wb_rf_dout <= #1 ch10_conf[0] ? ch10_adr0 : 32'h0;
+ 8'h5b: wb_rf_dout <= #1 ch10_conf[0] ? ch10_am0 : 32'h0;
+ 8'h5c: wb_rf_dout <= #1 ch10_conf[0] ? ch10_adr1 : 32'h0;
+ 8'h5d: wb_rf_dout <= #1 ch10_conf[0] ? ch10_am1 : 32'h0;
+ 8'h5e: wb_rf_dout <= #1 ch10_conf[0] ? pointer10 : 32'h0;
+ 8'h5f: wb_rf_dout <= #1 ch10_conf[0] ? sw_pointer10 : 32'h0;
+
+ 8'h60: wb_rf_dout <= #1 ch11_conf[0] ? ch11_csr : 32'h0;
+ 8'h61: wb_rf_dout <= #1 ch11_conf[0] ? ch11_txsz : 32'h0;
+ 8'h62: wb_rf_dout <= #1 ch11_conf[0] ? ch11_adr0 : 32'h0;
+ 8'h63: wb_rf_dout <= #1 ch11_conf[0] ? ch11_am0 : 32'h0;
+ 8'h64: wb_rf_dout <= #1 ch11_conf[0] ? ch11_adr1 : 32'h0;
+ 8'h65: wb_rf_dout <= #1 ch11_conf[0] ? ch11_am1 : 32'h0;
+ 8'h66: wb_rf_dout <= #1 ch11_conf[0] ? pointer11 : 32'h0;
+ 8'h67: wb_rf_dout <= #1 ch11_conf[0] ? sw_pointer11 : 32'h0;
+
+ 8'h68: wb_rf_dout <= #1 ch12_conf[0] ? ch12_csr : 32'h0;
+ 8'h69: wb_rf_dout <= #1 ch12_conf[0] ? ch12_txsz : 32'h0;
+ 8'h6a: wb_rf_dout <= #1 ch12_conf[0] ? ch12_adr0 : 32'h0;
+ 8'h6b: wb_rf_dout <= #1 ch12_conf[0] ? ch12_am0 : 32'h0;
+ 8'h6c: wb_rf_dout <= #1 ch12_conf[0] ? ch12_adr1 : 32'h0;
+ 8'h6d: wb_rf_dout <= #1 ch12_conf[0] ? ch12_am1 : 32'h0;
+ 8'h6e: wb_rf_dout <= #1 ch12_conf[0] ? pointer12 : 32'h0;
+ 8'h6f: wb_rf_dout <= #1 ch12_conf[0] ? sw_pointer12 : 32'h0;
+
+ 8'h70: wb_rf_dout <= #1 ch13_conf[0] ? ch13_csr : 32'h0;
+ 8'h71: wb_rf_dout <= #1 ch13_conf[0] ? ch13_txsz : 32'h0;
+ 8'h72: wb_rf_dout <= #1 ch13_conf[0] ? ch13_adr0 : 32'h0;
+ 8'h73: wb_rf_dout <= #1 ch13_conf[0] ? ch13_am0 : 32'h0;
+ 8'h74: wb_rf_dout <= #1 ch13_conf[0] ? ch13_adr1 : 32'h0;
+ 8'h75: wb_rf_dout <= #1 ch13_conf[0] ? ch13_am1 : 32'h0;
+ 8'h76: wb_rf_dout <= #1 ch13_conf[0] ? pointer13 : 32'h0;
+ 8'h77: wb_rf_dout <= #1 ch13_conf[0] ? sw_pointer13 : 32'h0;
+
+ 8'h78: wb_rf_dout <= #1 ch14_conf[0] ? ch14_csr : 32'h0;
+ 8'h79: wb_rf_dout <= #1 ch14_conf[0] ? ch14_txsz : 32'h0;
+ 8'h7a: wb_rf_dout <= #1 ch14_conf[0] ? ch14_adr0 : 32'h0;
+ 8'h7b: wb_rf_dout <= #1 ch14_conf[0] ? ch14_am0 : 32'h0;
+ 8'h7c: wb_rf_dout <= #1 ch14_conf[0] ? ch14_adr1 : 32'h0;
+ 8'h7d: wb_rf_dout <= #1 ch14_conf[0] ? ch14_am1 : 32'h0;
+ 8'h7e: wb_rf_dout <= #1 ch14_conf[0] ? pointer14 : 32'h0;
+ 8'h7f: wb_rf_dout <= #1 ch14_conf[0] ? sw_pointer14 : 32'h0;
+
+ 8'h80: wb_rf_dout <= #1 ch15_conf[0] ? ch15_csr : 32'h0;
+ 8'h81: wb_rf_dout <= #1 ch15_conf[0] ? ch15_txsz : 32'h0;
+ 8'h82: wb_rf_dout <= #1 ch15_conf[0] ? ch15_adr0 : 32'h0;
+ 8'h83: wb_rf_dout <= #1 ch15_conf[0] ? ch15_am0 : 32'h0;
+ 8'h84: wb_rf_dout <= #1 ch15_conf[0] ? ch15_adr1 : 32'h0;
+ 8'h85: wb_rf_dout <= #1 ch15_conf[0] ? ch15_am1 : 32'h0;
+ 8'h86: wb_rf_dout <= #1 ch15_conf[0] ? pointer15 : 32'h0;
+ 8'h87: wb_rf_dout <= #1 ch15_conf[0] ? sw_pointer15 : 32'h0;
+
+ 8'h88: wb_rf_dout <= #1 ch16_conf[0] ? ch16_csr : 32'h0;
+ 8'h89: wb_rf_dout <= #1 ch16_conf[0] ? ch16_txsz : 32'h0;
+ 8'h8a: wb_rf_dout <= #1 ch16_conf[0] ? ch16_adr0 : 32'h0;
+ 8'h8b: wb_rf_dout <= #1 ch16_conf[0] ? ch16_am0 : 32'h0;
+ 8'h8c: wb_rf_dout <= #1 ch16_conf[0] ? ch16_adr1 : 32'h0;
+ 8'h8d: wb_rf_dout <= #1 ch16_conf[0] ? ch16_am1 : 32'h0;
+ 8'h8e: wb_rf_dout <= #1 ch16_conf[0] ? pointer16 : 32'h0;
+ 8'h8f: wb_rf_dout <= #1 ch16_conf[0] ? sw_pointer16 : 32'h0;
+
+ 8'h90: wb_rf_dout <= #1 ch17_conf[0] ? ch17_csr : 32'h0;
+ 8'h91: wb_rf_dout <= #1 ch17_conf[0] ? ch17_txsz : 32'h0;
+ 8'h92: wb_rf_dout <= #1 ch17_conf[0] ? ch17_adr0 : 32'h0;
+ 8'h93: wb_rf_dout <= #1 ch17_conf[0] ? ch17_am0 : 32'h0;
+ 8'h94: wb_rf_dout <= #1 ch17_conf[0] ? ch17_adr1 : 32'h0;
+ 8'h95: wb_rf_dout <= #1 ch17_conf[0] ? ch17_am1 : 32'h0;
+ 8'h96: wb_rf_dout <= #1 ch17_conf[0] ? pointer17 : 32'h0;
+ 8'h97: wb_rf_dout <= #1 ch17_conf[0] ? sw_pointer17 : 32'h0;
+
+ 8'h98: wb_rf_dout <= #1 ch18_conf[0] ? ch18_csr : 32'h0;
+ 8'h99: wb_rf_dout <= #1 ch18_conf[0] ? ch18_txsz : 32'h0;
+ 8'h9a: wb_rf_dout <= #1 ch18_conf[0] ? ch18_adr0 : 32'h0;
+ 8'h9b: wb_rf_dout <= #1 ch18_conf[0] ? ch18_am0 : 32'h0;
+ 8'h9c: wb_rf_dout <= #1 ch18_conf[0] ? ch18_adr1 : 32'h0;
+ 8'h9d: wb_rf_dout <= #1 ch18_conf[0] ? ch18_am1 : 32'h0;
+ 8'h9e: wb_rf_dout <= #1 ch18_conf[0] ? pointer18 : 32'h0;
+ 8'h9f: wb_rf_dout <= #1 ch18_conf[0] ? sw_pointer18 : 32'h0;
+
+ 8'ha0: wb_rf_dout <= #1 ch19_conf[0] ? ch19_csr : 32'h0;
+ 8'ha1: wb_rf_dout <= #1 ch19_conf[0] ? ch19_txsz : 32'h0;
+ 8'ha2: wb_rf_dout <= #1 ch19_conf[0] ? ch19_adr0 : 32'h0;
+ 8'ha3: wb_rf_dout <= #1 ch19_conf[0] ? ch19_am0 : 32'h0;
+ 8'ha4: wb_rf_dout <= #1 ch19_conf[0] ? ch19_adr1 : 32'h0;
+ 8'ha5: wb_rf_dout <= #1 ch19_conf[0] ? ch19_am1 : 32'h0;
+ 8'ha6: wb_rf_dout <= #1 ch19_conf[0] ? pointer19 : 32'h0;
+ 8'ha7: wb_rf_dout <= #1 ch19_conf[0] ? sw_pointer19 : 32'h0;
+
+ 8'ha8: wb_rf_dout <= #1 ch20_conf[0] ? ch20_csr : 32'h0;
+ 8'ha9: wb_rf_dout <= #1 ch20_conf[0] ? ch20_txsz : 32'h0;
+ 8'haa: wb_rf_dout <= #1 ch20_conf[0] ? ch20_adr0 : 32'h0;
+ 8'hab: wb_rf_dout <= #1 ch20_conf[0] ? ch20_am0 : 32'h0;
+ 8'hac: wb_rf_dout <= #1 ch20_conf[0] ? ch20_adr1 : 32'h0;
+ 8'had: wb_rf_dout <= #1 ch20_conf[0] ? ch20_am1 : 32'h0;
+ 8'hae: wb_rf_dout <= #1 ch20_conf[0] ? pointer20 : 32'h0;
+ 8'haf: wb_rf_dout <= #1 ch20_conf[0] ? sw_pointer20 : 32'h0;
+
+ 8'hb0: wb_rf_dout <= #1 ch21_conf[0] ? ch21_csr : 32'h0;
+ 8'hb1: wb_rf_dout <= #1 ch21_conf[0] ? ch21_txsz : 32'h0;
+ 8'hb2: wb_rf_dout <= #1 ch21_conf[0] ? ch21_adr0 : 32'h0;
+ 8'hb3: wb_rf_dout <= #1 ch21_conf[0] ? ch21_am0 : 32'h0;
+ 8'hb4: wb_rf_dout <= #1 ch21_conf[0] ? ch21_adr1 : 32'h0;
+ 8'hb5: wb_rf_dout <= #1 ch21_conf[0] ? ch21_am1 : 32'h0;
+ 8'hb6: wb_rf_dout <= #1 ch21_conf[0] ? pointer21 : 32'h0;
+ 8'hb7: wb_rf_dout <= #1 ch21_conf[0] ? sw_pointer21 : 32'h0;
+
+ 8'hb8: wb_rf_dout <= #1 ch22_conf[0] ? ch22_csr : 32'h0;
+ 8'hb9: wb_rf_dout <= #1 ch22_conf[0] ? ch22_txsz : 32'h0;
+ 8'hba: wb_rf_dout <= #1 ch22_conf[0] ? ch22_adr0 : 32'h0;
+ 8'hbb: wb_rf_dout <= #1 ch22_conf[0] ? ch22_am0 : 32'h0;
+ 8'hbc: wb_rf_dout <= #1 ch22_conf[0] ? ch22_adr1 : 32'h0;
+ 8'hbd: wb_rf_dout <= #1 ch22_conf[0] ? ch22_am1 : 32'h0;
+ 8'hbe: wb_rf_dout <= #1 ch22_conf[0] ? pointer22 : 32'h0;
+ 8'hbf: wb_rf_dout <= #1 ch22_conf[0] ? sw_pointer22 : 32'h0;
+
+ 8'hc0: wb_rf_dout <= #1 ch23_conf[0] ? ch23_csr : 32'h0;
+ 8'hc1: wb_rf_dout <= #1 ch23_conf[0] ? ch23_txsz : 32'h0;
+ 8'hc2: wb_rf_dout <= #1 ch23_conf[0] ? ch23_adr0 : 32'h0;
+ 8'hc3: wb_rf_dout <= #1 ch23_conf[0] ? ch23_am0 : 32'h0;
+ 8'hc4: wb_rf_dout <= #1 ch23_conf[0] ? ch23_adr1 : 32'h0;
+ 8'hc5: wb_rf_dout <= #1 ch23_conf[0] ? ch23_am1 : 32'h0;
+ 8'hc6: wb_rf_dout <= #1 ch23_conf[0] ? pointer23 : 32'h0;
+ 8'hc7: wb_rf_dout <= #1 ch23_conf[0] ? sw_pointer23 : 32'h0;
+
+ 8'hc8: wb_rf_dout <= #1 ch24_conf[0] ? ch24_csr : 32'h0;
+ 8'hc9: wb_rf_dout <= #1 ch24_conf[0] ? ch24_txsz : 32'h0;
+ 8'hca: wb_rf_dout <= #1 ch24_conf[0] ? ch24_adr0 : 32'h0;
+ 8'hcb: wb_rf_dout <= #1 ch24_conf[0] ? ch24_am0 : 32'h0;
+ 8'hcc: wb_rf_dout <= #1 ch24_conf[0] ? ch24_adr1 : 32'h0;
+ 8'hcd: wb_rf_dout <= #1 ch24_conf[0] ? ch24_am1 : 32'h0;
+ 8'hce: wb_rf_dout <= #1 ch24_conf[0] ? pointer24 : 32'h0;
+ 8'hcf: wb_rf_dout <= #1 ch24_conf[0] ? sw_pointer24 : 32'h0;
+
+ 8'hd0: wb_rf_dout <= #1 ch25_conf[0] ? ch25_csr : 32'h0;
+ 8'hd1: wb_rf_dout <= #1 ch25_conf[0] ? ch25_txsz : 32'h0;
+ 8'hd2: wb_rf_dout <= #1 ch25_conf[0] ? ch25_adr0 : 32'h0;
+ 8'hd3: wb_rf_dout <= #1 ch25_conf[0] ? ch25_am0 : 32'h0;
+ 8'hd4: wb_rf_dout <= #1 ch25_conf[0] ? ch25_adr1 : 32'h0;
+ 8'hd5: wb_rf_dout <= #1 ch25_conf[0] ? ch25_am1 : 32'h0;
+ 8'hd6: wb_rf_dout <= #1 ch25_conf[0] ? pointer25 : 32'h0;
+ 8'hd7: wb_rf_dout <= #1 ch25_conf[0] ? sw_pointer25 : 32'h0;
+
+ 8'hd8: wb_rf_dout <= #1 ch26_conf[0] ? ch26_csr : 32'h0;
+ 8'hd9: wb_rf_dout <= #1 ch26_conf[0] ? ch26_txsz : 32'h0;
+ 8'hda: wb_rf_dout <= #1 ch26_conf[0] ? ch26_adr0 : 32'h0;
+ 8'hdb: wb_rf_dout <= #1 ch26_conf[0] ? ch26_am0 : 32'h0;
+ 8'hdc: wb_rf_dout <= #1 ch26_conf[0] ? ch26_adr1 : 32'h0;
+ 8'hdd: wb_rf_dout <= #1 ch26_conf[0] ? ch26_am1 : 32'h0;
+ 8'hde: wb_rf_dout <= #1 ch26_conf[0] ? pointer26 : 32'h0;
+ 8'hdf: wb_rf_dout <= #1 ch26_conf[0] ? sw_pointer26 : 32'h0;
+
+ 8'he0: wb_rf_dout <= #1 ch27_conf[0] ? ch27_csr : 32'h0;
+ 8'he1: wb_rf_dout <= #1 ch27_conf[0] ? ch27_txsz : 32'h0;
+ 8'he2: wb_rf_dout <= #1 ch27_conf[0] ? ch27_adr0 : 32'h0;
+ 8'he3: wb_rf_dout <= #1 ch27_conf[0] ? ch27_am0 : 32'h0;
+ 8'he4: wb_rf_dout <= #1 ch27_conf[0] ? ch27_adr1 : 32'h0;
+ 8'he5: wb_rf_dout <= #1 ch27_conf[0] ? ch27_am1 : 32'h0;
+ 8'he6: wb_rf_dout <= #1 ch27_conf[0] ? pointer27 : 32'h0;
+ 8'he7: wb_rf_dout <= #1 ch27_conf[0] ? sw_pointer27 : 32'h0;
+
+ 8'he8: wb_rf_dout <= #1 ch28_conf[0] ? ch28_csr : 32'h0;
+ 8'he9: wb_rf_dout <= #1 ch28_conf[0] ? ch28_txsz : 32'h0;
+ 8'hea: wb_rf_dout <= #1 ch28_conf[0] ? ch28_adr0 : 32'h0;
+ 8'heb: wb_rf_dout <= #1 ch28_conf[0] ? ch28_am0 : 32'h0;
+ 8'hec: wb_rf_dout <= #1 ch28_conf[0] ? ch28_adr1 : 32'h0;
+ 8'hed: wb_rf_dout <= #1 ch28_conf[0] ? ch28_am1 : 32'h0;
+ 8'hee: wb_rf_dout <= #1 ch28_conf[0] ? pointer28 : 32'h0;
+ 8'hef: wb_rf_dout <= #1 ch28_conf[0] ? sw_pointer28 : 32'h0;
+
+ 8'hf0: wb_rf_dout <= #1 ch29_conf[0] ? ch29_csr : 32'h0;
+ 8'hf1: wb_rf_dout <= #1 ch29_conf[0] ? ch29_txsz : 32'h0;
+ 8'hf2: wb_rf_dout <= #1 ch29_conf[0] ? ch29_adr0 : 32'h0;
+ 8'hf3: wb_rf_dout <= #1 ch29_conf[0] ? ch29_am0 : 32'h0;
+ 8'hf4: wb_rf_dout <= #1 ch29_conf[0] ? ch29_adr1 : 32'h0;
+ 8'hf5: wb_rf_dout <= #1 ch29_conf[0] ? ch29_am1 : 32'h0;
+ 8'hf6: wb_rf_dout <= #1 ch29_conf[0] ? pointer29 : 32'h0;
+ 8'hf7: wb_rf_dout <= #1 ch29_conf[0] ? sw_pointer29 : 32'h0;
+
+ 8'hf8: wb_rf_dout <= #1 ch30_conf[0] ? ch30_csr : 32'h0;
+ 8'hf9: wb_rf_dout <= #1 ch30_conf[0] ? ch30_txsz : 32'h0;
+ 8'hfa: wb_rf_dout <= #1 ch30_conf[0] ? ch30_adr0 : 32'h0;
+ 8'hfb: wb_rf_dout <= #1 ch30_conf[0] ? ch30_am0 : 32'h0;
+ 8'hfc: wb_rf_dout <= #1 ch30_conf[0] ? ch30_adr1 : 32'h0;
+ 8'hfd: wb_rf_dout <= #1 ch30_conf[0] ? ch30_am1 : 32'h0;
+ 8'hfe: wb_rf_dout <= #1 ch30_conf[0] ? pointer30 : 32'h0;
+ 8'hff: wb_rf_dout <= #1 ch30_conf[0] ? sw_pointer30 : 32'h0;
+
+ endcase
+
+
+////////////////////////////////////////////////////////////////////
+//
+// WISHBONE Register Write Logic
+// And DMA Engine register Update Logic
+//
+
+// Global Registers
+assign csr_we = wb_rf_we & (wb_rf_adr == 8'h0);
+assign int_maska_we = wb_rf_we & (wb_rf_adr == 8'h1);
+assign int_maskb_we = wb_rf_we & (wb_rf_adr == 8'h2);
+
+// ---------------------------------------------------
+
+always @(posedge clk or negedge rst)
+ if(!rst) csr_r <= #1 8'h0;
+ else
+ if(csr_we) csr_r <= #1 wb_rf_din[7:0];
+
+// ---------------------------------------------------
+// INT_MASK
+always @(posedge clk or negedge rst)
+ if(!rst) int_maska_r <= #1 31'h0;
+ else
+ if(int_maska_we) int_maska_r <= #1 wb_rf_din[30:0];
+
+always @(posedge clk or negedge rst)
+ if(!rst) int_maskb_r <= #1 31'h0;
+ else
+ if(int_maskb_we) int_maskb_r <= #1 wb_rf_din[30:0];
+
+////////////////////////////////////////////////////////////////////
+//
+// Interrupts
+//
+
+assign int_srca = {1'b0, (int_maska_r & ch_int) };
+assign int_srcb = {1'b0, (int_maskb_r & ch_int) };
+
+// Interrupt Outputs
+always @(posedge clk)
+ inta_o <= #1 |int_srca;
+
+always @(posedge clk)
+ intb_o <= #1 |int_srcb;
+
+////////////////////////////////////////////////////////////////////
+//
+// Channel Register File
+//
+
+// chXX_conf = { CBUF, ED, ARS, EN }
+
+wb_dma_ch_rf #(0, ch0_conf[0], ch0_conf[1], ch0_conf[2], ch0_conf[3]) u0(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer0 ),
+ .pointer_s( pointer0_s ),
+ .ch_csr( ch0_csr ),
+ .ch_txsz( ch0_txsz ),
+ .ch_adr0( ch0_adr0 ),
+ .ch_adr1( ch0_adr1 ),
+ .ch_am0( ch0_am0 ),
+ .ch_am1( ch0_am1 ),
+ .sw_pointer( sw_pointer0 ),
+ .ch_stop( ch_stop[0] ),
+ .ch_dis( ch_dis[0] ),
+ .int( ch_int[0] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[0] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[0] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(1, ch1_conf[0], ch1_conf[1], ch1_conf[2], ch1_conf[3]) u1(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer1 ),
+ .pointer_s( pointer1_s ),
+ .ch_csr( ch1_csr ),
+ .ch_txsz( ch1_txsz ),
+ .ch_adr0( ch1_adr0 ),
+ .ch_adr1( ch1_adr1 ),
+ .ch_am0( ch1_am0 ),
+ .ch_am1( ch1_am1 ),
+ .sw_pointer( sw_pointer1 ),
+ .ch_stop( ch_stop[1] ),
+ .ch_dis( ch_dis[1] ),
+ .int( ch_int[1] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[1] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[1] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(2, ch2_conf[0], ch2_conf[1], ch2_conf[2], ch2_conf[3]) u2(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer2 ),
+ .pointer_s( pointer2_s ),
+ .ch_csr( ch2_csr ),
+ .ch_txsz( ch2_txsz ),
+ .ch_adr0( ch2_adr0 ),
+ .ch_adr1( ch2_adr1 ),
+ .ch_am0( ch2_am0 ),
+ .ch_am1( ch2_am1 ),
+ .sw_pointer( sw_pointer2 ),
+ .ch_stop( ch_stop[2] ),
+ .ch_dis( ch_dis[2] ),
+ .int( ch_int[2] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[2] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[2] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(3, ch3_conf[0], ch3_conf[1], ch3_conf[2], ch3_conf[3]) u3(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer3 ),
+ .pointer_s( pointer3_s ),
+ .ch_csr( ch3_csr ),
+ .ch_txsz( ch3_txsz ),
+ .ch_adr0( ch3_adr0 ),
+ .ch_adr1( ch3_adr1 ),
+ .ch_am0( ch3_am0 ),
+ .ch_am1( ch3_am1 ),
+ .sw_pointer( sw_pointer3 ),
+ .ch_stop( ch_stop[3] ),
+ .ch_dis( ch_dis[3] ),
+ .int( ch_int[3] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[3] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[3] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(4, ch4_conf[0], ch4_conf[1], ch4_conf[2], ch4_conf[3]) u4(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer4 ),
+ .pointer_s( pointer4_s ),
+ .ch_csr( ch4_csr ),
+ .ch_txsz( ch4_txsz ),
+ .ch_adr0( ch4_adr0 ),
+ .ch_adr1( ch4_adr1 ),
+ .ch_am0( ch4_am0 ),
+ .ch_am1( ch4_am1 ),
+ .sw_pointer( sw_pointer4 ),
+ .ch_stop( ch_stop[4] ),
+ .ch_dis( ch_dis[4] ),
+ .int( ch_int[4] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[4] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[4] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(5, ch5_conf[0], ch5_conf[1], ch5_conf[2], ch5_conf[3]) u5(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer5 ),
+ .pointer_s( pointer5_s ),
+ .ch_csr( ch5_csr ),
+ .ch_txsz( ch5_txsz ),
+ .ch_adr0( ch5_adr0 ),
+ .ch_adr1( ch5_adr1 ),
+ .ch_am0( ch5_am0 ),
+ .ch_am1( ch5_am1 ),
+ .sw_pointer( sw_pointer5 ),
+ .ch_stop( ch_stop[5] ),
+ .ch_dis( ch_dis[5] ),
+ .int( ch_int[5] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[5] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[5] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(6, ch6_conf[0], ch6_conf[1], ch6_conf[2], ch6_conf[3]) u6(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer6 ),
+ .pointer_s( pointer6_s ),
+ .ch_csr( ch6_csr ),
+ .ch_txsz( ch6_txsz ),
+ .ch_adr0( ch6_adr0 ),
+ .ch_adr1( ch6_adr1 ),
+ .ch_am0( ch6_am0 ),
+ .ch_am1( ch6_am1 ),
+ .sw_pointer( sw_pointer6 ),
+ .ch_stop( ch_stop[6] ),
+ .ch_dis( ch_dis[6] ),
+ .int( ch_int[6] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[6] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[6] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(7, ch7_conf[0], ch7_conf[1], ch7_conf[2], ch7_conf[3]) u7(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer7 ),
+ .pointer_s( pointer7_s ),
+ .ch_csr( ch7_csr ),
+ .ch_txsz( ch7_txsz ),
+ .ch_adr0( ch7_adr0 ),
+ .ch_adr1( ch7_adr1 ),
+ .ch_am0( ch7_am0 ),
+ .ch_am1( ch7_am1 ),
+ .sw_pointer( sw_pointer7 ),
+ .ch_stop( ch_stop[7] ),
+ .ch_dis( ch_dis[7] ),
+ .int( ch_int[7] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[7] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[7] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(8, ch8_conf[0], ch8_conf[1], ch8_conf[2], ch8_conf[3]) u8(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer8 ),
+ .pointer_s( pointer8_s ),
+ .ch_csr( ch8_csr ),
+ .ch_txsz( ch8_txsz ),
+ .ch_adr0( ch8_adr0 ),
+ .ch_adr1( ch8_adr1 ),
+ .ch_am0( ch8_am0 ),
+ .ch_am1( ch8_am1 ),
+ .sw_pointer( sw_pointer8 ),
+ .ch_stop( ch_stop[8] ),
+ .ch_dis( ch_dis[8] ),
+ .int( ch_int[8] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[8] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[8] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(9, ch9_conf[0], ch9_conf[1], ch9_conf[2], ch9_conf[3]) u9(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer9 ),
+ .pointer_s( pointer9_s ),
+ .ch_csr( ch9_csr ),
+ .ch_txsz( ch9_txsz ),
+ .ch_adr0( ch9_adr0 ),
+ .ch_adr1( ch9_adr1 ),
+ .ch_am0( ch9_am0 ),
+ .ch_am1( ch9_am1 ),
+ .sw_pointer( sw_pointer9 ),
+ .ch_stop( ch_stop[9] ),
+ .ch_dis( ch_dis[9] ),
+ .int( ch_int[9] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[9] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[9] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(10, ch10_conf[0], ch10_conf[1], ch10_conf[2], ch10_conf[3]) u10(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer10 ),
+ .pointer_s( pointer10_s ),
+ .ch_csr( ch10_csr ),
+ .ch_txsz( ch10_txsz ),
+ .ch_adr0( ch10_adr0 ),
+ .ch_adr1( ch10_adr1 ),
+ .ch_am0( ch10_am0 ),
+ .ch_am1( ch10_am1 ),
+ .sw_pointer( sw_pointer10 ),
+ .ch_stop( ch_stop[10] ),
+ .ch_dis( ch_dis[10] ),
+ .int( ch_int[10] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[10] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[10] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(11, ch11_conf[0], ch11_conf[1], ch11_conf[2], ch11_conf[3]) u11(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer11 ),
+ .pointer_s( pointer11_s ),
+ .ch_csr( ch11_csr ),
+ .ch_txsz( ch11_txsz ),
+ .ch_adr0( ch11_adr0 ),
+ .ch_adr1( ch11_adr1 ),
+ .ch_am0( ch11_am0 ),
+ .ch_am1( ch11_am1 ),
+ .sw_pointer( sw_pointer11 ),
+ .ch_stop( ch_stop[11] ),
+ .ch_dis( ch_dis[11] ),
+ .int( ch_int[11] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[11] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[11] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(12, ch12_conf[0], ch12_conf[1], ch12_conf[2], ch12_conf[3]) u12(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer12 ),
+ .pointer_s( pointer12_s ),
+ .ch_csr( ch12_csr ),
+ .ch_txsz( ch12_txsz ),
+ .ch_adr0( ch12_adr0 ),
+ .ch_adr1( ch12_adr1 ),
+ .ch_am0( ch12_am0 ),
+ .ch_am1( ch12_am1 ),
+ .sw_pointer( sw_pointer12 ),
+ .ch_stop( ch_stop[12] ),
+ .ch_dis( ch_dis[12] ),
+ .int( ch_int[12] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[12] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[12] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(13, ch13_conf[0], ch13_conf[1], ch13_conf[2], ch13_conf[3]) u13(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer13 ),
+ .pointer_s( pointer13_s ),
+ .ch_csr( ch13_csr ),
+ .ch_txsz( ch13_txsz ),
+ .ch_adr0( ch13_adr0 ),
+ .ch_adr1( ch13_adr1 ),
+ .ch_am0( ch13_am0 ),
+ .ch_am1( ch13_am1 ),
+ .sw_pointer( sw_pointer13 ),
+ .ch_stop( ch_stop[13] ),
+ .ch_dis( ch_dis[13] ),
+ .int( ch_int[13] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[13] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[13] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(14, ch14_conf[0], ch14_conf[1], ch14_conf[2], ch14_conf[3]) u14(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer14 ),
+ .pointer_s( pointer14_s ),
+ .ch_csr( ch14_csr ),
+ .ch_txsz( ch14_txsz ),
+ .ch_adr0( ch14_adr0 ),
+ .ch_adr1( ch14_adr1 ),
+ .ch_am0( ch14_am0 ),
+ .ch_am1( ch14_am1 ),
+ .sw_pointer( sw_pointer14 ),
+ .ch_stop( ch_stop[14] ),
+ .ch_dis( ch_dis[14] ),
+ .int( ch_int[14] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[14] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[14] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(15, ch15_conf[0], ch15_conf[1], ch15_conf[2], ch15_conf[3]) u15(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer15 ),
+ .pointer_s( pointer15_s ),
+ .ch_csr( ch15_csr ),
+ .ch_txsz( ch15_txsz ),
+ .ch_adr0( ch15_adr0 ),
+ .ch_adr1( ch15_adr1 ),
+ .ch_am0( ch15_am0 ),
+ .ch_am1( ch15_am1 ),
+ .sw_pointer( sw_pointer15 ),
+ .ch_stop( ch_stop[15] ),
+ .ch_dis( ch_dis[15] ),
+ .int( ch_int[15] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[15] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[15] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(16, ch16_conf[0], ch16_conf[1], ch16_conf[2], ch16_conf[3]) u16(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer16 ),
+ .pointer_s( pointer16_s ),
+ .ch_csr( ch16_csr ),
+ .ch_txsz( ch16_txsz ),
+ .ch_adr0( ch16_adr0 ),
+ .ch_adr1( ch16_adr1 ),
+ .ch_am0( ch16_am0 ),
+ .ch_am1( ch16_am1 ),
+ .sw_pointer( sw_pointer16 ),
+ .ch_stop( ch_stop[16] ),
+ .ch_dis( ch_dis[16] ),
+ .int( ch_int[16] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[16] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[16] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(17, ch17_conf[0], ch17_conf[1], ch17_conf[2], ch17_conf[3]) u17(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer17 ),
+ .pointer_s( pointer17_s ),
+ .ch_csr( ch17_csr ),
+ .ch_txsz( ch17_txsz ),
+ .ch_adr0( ch17_adr0 ),
+ .ch_adr1( ch17_adr1 ),
+ .ch_am0( ch17_am0 ),
+ .ch_am1( ch17_am1 ),
+ .sw_pointer( sw_pointer17 ),
+ .ch_stop( ch_stop[17] ),
+ .ch_dis( ch_dis[17] ),
+ .int( ch_int[17] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[17] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[17] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(18, ch18_conf[0], ch18_conf[1], ch18_conf[2], ch18_conf[3]) u18(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer18 ),
+ .pointer_s( pointer18_s ),
+ .ch_csr( ch18_csr ),
+ .ch_txsz( ch18_txsz ),
+ .ch_adr0( ch18_adr0 ),
+ .ch_adr1( ch18_adr1 ),
+ .ch_am0( ch18_am0 ),
+ .ch_am1( ch18_am1 ),
+ .sw_pointer( sw_pointer18 ),
+ .ch_stop( ch_stop[18] ),
+ .ch_dis( ch_dis[18] ),
+ .int( ch_int[18] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[18] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[18] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(19, ch19_conf[0], ch19_conf[1], ch19_conf[2], ch19_conf[3]) u19(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer19 ),
+ .pointer_s( pointer19_s ),
+ .ch_csr( ch19_csr ),
+ .ch_txsz( ch19_txsz ),
+ .ch_adr0( ch19_adr0 ),
+ .ch_adr1( ch19_adr1 ),
+ .ch_am0( ch19_am0 ),
+ .ch_am1( ch19_am1 ),
+ .sw_pointer( sw_pointer19 ),
+ .ch_stop( ch_stop[19] ),
+ .ch_dis( ch_dis[19] ),
+ .int( ch_int[19] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[19] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[19] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(20, ch20_conf[0], ch20_conf[1], ch20_conf[2], ch20_conf[3]) u20(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer20 ),
+ .pointer_s( pointer20_s ),
+ .ch_csr( ch20_csr ),
+ .ch_txsz( ch20_txsz ),
+ .ch_adr0( ch20_adr0 ),
+ .ch_adr1( ch20_adr1 ),
+ .ch_am0( ch20_am0 ),
+ .ch_am1( ch20_am1 ),
+ .sw_pointer( sw_pointer20 ),
+ .ch_stop( ch_stop[20] ),
+ .ch_dis( ch_dis[20] ),
+ .int( ch_int[20] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[20] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[20] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(21, ch21_conf[0], ch21_conf[1], ch21_conf[2], ch21_conf[3]) u21(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer21 ),
+ .pointer_s( pointer21_s ),
+ .ch_csr( ch21_csr ),
+ .ch_txsz( ch21_txsz ),
+ .ch_adr0( ch21_adr0 ),
+ .ch_adr1( ch21_adr1 ),
+ .ch_am0( ch21_am0 ),
+ .ch_am1( ch21_am1 ),
+ .sw_pointer( sw_pointer21 ),
+ .ch_stop( ch_stop[21] ),
+ .ch_dis( ch_dis[21] ),
+ .int( ch_int[21] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[21] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[21] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(22, ch22_conf[0], ch22_conf[1], ch22_conf[2], ch22_conf[3]) u22(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer22 ),
+ .pointer_s( pointer22_s ),
+ .ch_csr( ch22_csr ),
+ .ch_txsz( ch22_txsz ),
+ .ch_adr0( ch22_adr0 ),
+ .ch_adr1( ch22_adr1 ),
+ .ch_am0( ch22_am0 ),
+ .ch_am1( ch22_am1 ),
+ .sw_pointer( sw_pointer22 ),
+ .ch_stop( ch_stop[22] ),
+ .ch_dis( ch_dis[22] ),
+ .int( ch_int[22] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[22] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[22] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(23, ch23_conf[0], ch23_conf[1], ch23_conf[2], ch23_conf[3]) u23(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer23 ),
+ .pointer_s( pointer23_s ),
+ .ch_csr( ch23_csr ),
+ .ch_txsz( ch23_txsz ),
+ .ch_adr0( ch23_adr0 ),
+ .ch_adr1( ch23_adr1 ),
+ .ch_am0( ch23_am0 ),
+ .ch_am1( ch23_am1 ),
+ .sw_pointer( sw_pointer23 ),
+ .ch_stop( ch_stop[23] ),
+ .ch_dis( ch_dis[23] ),
+ .int( ch_int[23] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[23] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[23] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(24, ch24_conf[0], ch24_conf[1], ch24_conf[2], ch24_conf[3]) u24(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer24 ),
+ .pointer_s( pointer24_s ),
+ .ch_csr( ch24_csr ),
+ .ch_txsz( ch24_txsz ),
+ .ch_adr0( ch24_adr0 ),
+ .ch_adr1( ch24_adr1 ),
+ .ch_am0( ch24_am0 ),
+ .ch_am1( ch24_am1 ),
+ .sw_pointer( sw_pointer24 ),
+ .ch_stop( ch_stop[24] ),
+ .ch_dis( ch_dis[24] ),
+ .int( ch_int[24] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[24] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[24] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(25, ch25_conf[0], ch25_conf[1], ch25_conf[2], ch25_conf[3]) u25(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer25 ),
+ .pointer_s( pointer25_s ),
+ .ch_csr( ch25_csr ),
+ .ch_txsz( ch25_txsz ),
+ .ch_adr0( ch25_adr0 ),
+ .ch_adr1( ch25_adr1 ),
+ .ch_am0( ch25_am0 ),
+ .ch_am1( ch25_am1 ),
+ .sw_pointer( sw_pointer25 ),
+ .ch_stop( ch_stop[25] ),
+ .ch_dis( ch_dis[25] ),
+ .int( ch_int[25] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[25] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[25] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(26, ch26_conf[0], ch26_conf[1], ch26_conf[2], ch26_conf[3]) u26(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer26 ),
+ .pointer_s( pointer26_s ),
+ .ch_csr( ch26_csr ),
+ .ch_txsz( ch26_txsz ),
+ .ch_adr0( ch26_adr0 ),
+ .ch_adr1( ch26_adr1 ),
+ .ch_am0( ch26_am0 ),
+ .ch_am1( ch26_am1 ),
+ .sw_pointer( sw_pointer26 ),
+ .ch_stop( ch_stop[26] ),
+ .ch_dis( ch_dis[26] ),
+ .int( ch_int[26] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[26] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[26] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(27, ch27_conf[0], ch27_conf[1], ch27_conf[2], ch27_conf[3]) u27(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer27 ),
+ .pointer_s( pointer27_s ),
+ .ch_csr( ch27_csr ),
+ .ch_txsz( ch27_txsz ),
+ .ch_adr0( ch27_adr0 ),
+ .ch_adr1( ch27_adr1 ),
+ .ch_am0( ch27_am0 ),
+ .ch_am1( ch27_am1 ),
+ .sw_pointer( sw_pointer27 ),
+ .ch_stop( ch_stop[27] ),
+ .ch_dis( ch_dis[27] ),
+ .int( ch_int[27] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[27] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[27] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(28, ch28_conf[0], ch28_conf[1], ch28_conf[2], ch28_conf[3]) u28(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer28 ),
+ .pointer_s( pointer28_s ),
+ .ch_csr( ch28_csr ),
+ .ch_txsz( ch28_txsz ),
+ .ch_adr0( ch28_adr0 ),
+ .ch_adr1( ch28_adr1 ),
+ .ch_am0( ch28_am0 ),
+ .ch_am1( ch28_am1 ),
+ .sw_pointer( sw_pointer28 ),
+ .ch_stop( ch_stop[28] ),
+ .ch_dis( ch_dis[28] ),
+ .int( ch_int[28] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[28] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[28] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(29, ch29_conf[0], ch29_conf[1], ch29_conf[2], ch29_conf[3]) u29(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer29 ),
+ .pointer_s( pointer29_s ),
+ .ch_csr( ch29_csr ),
+ .ch_txsz( ch29_txsz ),
+ .ch_adr0( ch29_adr0 ),
+ .ch_adr1( ch29_adr1 ),
+ .ch_am0( ch29_am0 ),
+ .ch_am1( ch29_am1 ),
+ .sw_pointer( sw_pointer29 ),
+ .ch_stop( ch_stop[29] ),
+ .ch_dis( ch_dis[29] ),
+ .int( ch_int[29] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[29] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[29] ),
+ .ptr_set( ptr_set )
+ );
+
+wb_dma_ch_rf #(30, ch30_conf[0], ch30_conf[1], ch30_conf[2], ch30_conf[3]) u30(
+ .clk( clk ),
+ .rst( rst ),
+ .pointer( pointer30 ),
+ .pointer_s( pointer30_s ),
+ .ch_csr( ch30_csr ),
+ .ch_txsz( ch30_txsz ),
+ .ch_adr0( ch30_adr0 ),
+ .ch_adr1( ch30_adr1 ),
+ .ch_am0( ch30_am0 ),
+ .ch_am1( ch30_am1 ),
+ .sw_pointer( sw_pointer30 ),
+ .ch_stop( ch_stop[30] ),
+ .ch_dis( ch_dis[30] ),
+ .int( ch_int[30] ),
+ .wb_rf_din( wb_rf_din ),
+ .wb_rf_adr( wb_rf_adr ),
+ .wb_rf_we( wb_rf_we ),
+ .wb_rf_re( wb_rf_re ),
+ .ch_sel( ch_sel ),
+ .ndnr( ndnr[30] ),
+ .dma_busy( dma_busy ),
+ .dma_err( dma_err ),
+ .dma_done( dma_done ),
+ .dma_done_all( dma_done_all ),
+ .de_csr( de_csr ),
+ .de_txsz( de_txsz ),
+ .de_adr0( de_adr0 ),
+ .de_adr1( de_adr1 ),
+ .de_csr_we( de_csr_we ),
+ .de_txsz_we( de_txsz_we ),
+ .de_adr0_we( de_adr0_we ),
+ .de_adr1_we( de_adr1_we ),
+ .de_fetch_descr(de_fetch_descr ),
+ .dma_rest( dma_rest[30] ),
+ .ptr_set( ptr_set )
+ );
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_de.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_de.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_de.v (revision 17)
@@ -0,0 +1,628 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA DMA Engine Core ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_de.v,v 1.3 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.3 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.3 2001/06/13 02:26:48 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.2 2001/06/05 10:22:36 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:44 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_de(clk, rst,
+
+ // WISHBONE MASTER INTERFACE 0
+ mast0_go, mast0_we, mast0_adr, mast0_din,
+ mast0_dout, mast0_err, mast0_drdy, mast0_wait,
+
+ // WISHBONE MASTER INTERFACE 1
+ mast1_go, mast1_we, mast1_adr, mast1_din,
+ mast1_dout, mast1_err, mast1_drdy, mast1_wait,
+
+ // DMA Engine Init & Setup
+ de_start, nd, csr, pointer, pointer_s, txsz,
+ adr0, adr1, am0, am1,
+
+ // DMA Engine Register File Update Outputs
+ de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set,
+ de_csr, de_txsz, de_adr0, de_adr1, de_fetch_descr,
+
+ // DMA Engine Control Outputs
+ next_ch, de_ack,
+
+ // DMA Engine Status
+ pause_req, paused,
+ dma_abort, dma_busy, dma_err, dma_done, dma_done_all
+ );
+
+input clk, rst;
+
+// --------------------------------------
+// WISHBONE MASTER INTERFACE 0
+
+output mast0_go; // Perform a Master Cycle
+output mast0_we; // Read/Write
+output [31:0] mast0_adr; // Address for the transfer
+input [31:0] mast0_din; // Internal Input Data
+output [31:0] mast0_dout; // Internal Output Data
+input mast0_err; // Indicates an error has occurred
+input mast0_drdy; // Indicated that either data is available
+ // during a read, or that the master can accept
+ // the next data during a write
+output mast0_wait; // Tells the master to insert wait cycles
+ // because data can not be accepted/provided
+
+// --------------------------------------
+// WISHBONE MASTER INTERFACE 1
+
+output mast1_go; // Perform a Master Cycle
+output mast1_we; // Read/Write
+output [31:0] mast1_adr; // Address for the transfer
+input [31:0] mast1_din; // Internal Input Data
+output [31:0] mast1_dout; // Internal Output Data
+input mast1_err; // Indicates an error has occurred
+input mast1_drdy; // Indicated that either data is available
+ // during a read, or that the master can accept
+ // the next data during a write
+output mast1_wait; // Tells the master to insert wait cycles
+ // because data can not be accepted/provided
+
+// --------------------------------------
+// DMA Engine Signals
+
+// DMA Engine Init & Setup
+input de_start; // Start DMA Engine Indicator
+input nd; // Next Descriptor Indicator
+input [31:0] csr; // Selected Channel CSR
+input [31:0] pointer; // Linked List Descriptor pointer
+input [31:0] pointer_s; // Previous Pointer
+input [31:0] txsz; // Selected Channel Transfer Size
+input [31:0] adr0, adr1; // Selected Channel Addresses
+input [31:0] am0, am1; // Selected Channel Address Masks
+
+// DMA Engine Register File Update Outputs
+output de_csr_we; // Write enable for csr register
+output de_txsz_we; // Write enable for txsz register
+output de_adr0_we; // Write enable for adr0 register
+output de_adr1_we; // Write enable for adr1 register
+output ptr_set; // Set Pointer as Valid
+output [31:0] de_csr; // Write Data for CSR when loading External Desc.
+output [11:0] de_txsz; // Write back data for txsz register
+output [31:0] de_adr0; // Write back data for adr0 register
+output [31:0] de_adr1; // Write back data for adr1 register
+output de_fetch_descr; // Indicates that we are fetching a descriptor
+
+// DMA Engine Control Outputs
+output next_ch; // Indicates the DMA Engine is done
+output de_ack;
+
+// DMA Abort from RF (software forced abort)
+input dma_abort;
+
+// DMA Engine Status
+input pause_req;
+output paused;
+output dma_busy, dma_err, dma_done, dma_done_all;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+parameter [10:0] // synopsys enum state
+ IDLE = 11'b000_0000_0001,
+ READ = 11'b000_0000_0010,
+ WRITE = 11'b000_0000_0100,
+ UPDATE = 11'b000_0000_1000,
+ LD_DESC1 = 11'b000_0001_0000,
+ LD_DESC2 = 11'b000_0010_0000,
+ LD_DESC3 = 11'b000_0100_0000,
+ LD_DESC4 = 11'b000_1000_0000,
+ LD_DESC5 = 11'b001_0000_0000,
+ WB = 11'b010_0000_0000,
+ PAUSE = 11'b100_0000_0000;
+
+reg [10:0] /* synopsys enum state */ state, next_state;
+// synopsys state_vector state
+
+reg [31:0] mast0_adr, mast1_adr;
+
+reg [29:0] adr0_cnt, adr1_cnt;
+wire [29:0] adr0_cnt_next, adr1_cnt_next;
+wire [29:0] adr0_cnt_next1, adr1_cnt_next1;
+reg adr0_inc, adr1_inc;
+
+reg [8:0] chunk_cnt;
+reg chunk_dec;
+
+reg [11:0] tsz_cnt;
+reg tsz_dec;
+
+reg de_txsz_we;
+reg de_csr_we;
+reg de_adr0_we;
+reg de_adr1_we;
+reg ld_desc_sel;
+
+wire chunk_cnt_is_0_d;
+reg chunk_cnt_is_0_r;
+wire tsz_cnt_is_0_d;
+reg tsz_cnt_is_0_r;
+
+reg read, write;
+reg read_r, write_r;
+wire rd_ack, wr_ack;
+reg rd_ack_r;
+
+reg chunk_0;
+wire done;
+reg dma_done_d;
+reg dma_done_r;
+reg dma_abort_r;
+reg next_ch;
+wire read_hold, write_hold;
+reg write_hold_r;
+
+reg [1:0] ptr_adr_low;
+reg m0_go;
+reg m0_we;
+reg ptr_set;
+
+// Aliases
+wire a0_inc_en = csr[4]; // Source Address (Adr 0) increment enable
+wire a1_inc_en = csr[3]; // Dest. Address (Adr 1) increment enable
+wire ptr_valid = pointer[0];
+wire use_ed = csr[`WDMA_USE_ED];
+
+reg mast0_drdy_r;
+reg paused;
+
+reg de_fetch_descr; // Indicates that we are fetching a descriptor
+////////////////////////////////////////////////////////////////////
+//
+// Misc Logic
+//
+
+always @(posedge clk)
+ dma_done_r <= #1 dma_done;
+
+// Address Counter 0 (Source Address)
+always @(posedge clk)
+ if(de_start | ptr_set) adr0_cnt <= #1 adr0[31:2];
+ else
+ if(adr0_inc & a0_inc_en) adr0_cnt <= #1 adr0_cnt_next;
+
+// 30 Bit Incrementor (registered)
+wb_dma_inc30r u0( .clk( clk ),
+ .in( adr0_cnt ),
+ .out( adr0_cnt_next1 ) );
+
+assign adr0_cnt_next[1:0] = adr0_cnt_next1[1:0];
+assign adr0_cnt_next[2] = am0[4] ? adr0_cnt_next1[2] : adr0_cnt[2];
+assign adr0_cnt_next[3] = am0[5] ? adr0_cnt_next1[3] : adr0_cnt[3];
+assign adr0_cnt_next[4] = am0[6] ? adr0_cnt_next1[4] : adr0_cnt[4];
+assign adr0_cnt_next[5] = am0[7] ? adr0_cnt_next1[5] : adr0_cnt[5];
+assign adr0_cnt_next[6] = am0[8] ? adr0_cnt_next1[6] : adr0_cnt[6];
+assign adr0_cnt_next[7] = am0[9] ? adr0_cnt_next1[7] : adr0_cnt[7];
+assign adr0_cnt_next[8] = am0[10] ? adr0_cnt_next1[8] : adr0_cnt[8];
+assign adr0_cnt_next[9] = am0[11] ? adr0_cnt_next1[9] : adr0_cnt[9];
+assign adr0_cnt_next[10] = am0[12] ? adr0_cnt_next1[10] : adr0_cnt[10];
+assign adr0_cnt_next[11] = am0[13] ? adr0_cnt_next1[11] : adr0_cnt[11];
+assign adr0_cnt_next[12] = am0[14] ? adr0_cnt_next1[12] : adr0_cnt[12];
+assign adr0_cnt_next[13] = am0[15] ? adr0_cnt_next1[13] : adr0_cnt[13];
+assign adr0_cnt_next[14] = am0[16] ? adr0_cnt_next1[14] : adr0_cnt[14];
+assign adr0_cnt_next[15] = am0[17] ? adr0_cnt_next1[15] : adr0_cnt[15];
+assign adr0_cnt_next[16] = am0[18] ? adr0_cnt_next1[16] : adr0_cnt[16];
+assign adr0_cnt_next[17] = am0[19] ? adr0_cnt_next1[17] : adr0_cnt[17];
+assign adr0_cnt_next[18] = am0[20] ? adr0_cnt_next1[18] : adr0_cnt[18];
+assign adr0_cnt_next[19] = am0[21] ? adr0_cnt_next1[19] : adr0_cnt[19];
+assign adr0_cnt_next[20] = am0[22] ? adr0_cnt_next1[20] : adr0_cnt[20];
+assign adr0_cnt_next[21] = am0[23] ? adr0_cnt_next1[21] : adr0_cnt[21];
+assign adr0_cnt_next[22] = am0[24] ? adr0_cnt_next1[22] : adr0_cnt[22];
+assign adr0_cnt_next[23] = am0[25] ? adr0_cnt_next1[23] : adr0_cnt[23];
+assign adr0_cnt_next[24] = am0[26] ? adr0_cnt_next1[24] : adr0_cnt[24];
+assign adr0_cnt_next[25] = am0[27] ? adr0_cnt_next1[25] : adr0_cnt[25];
+assign adr0_cnt_next[26] = am0[28] ? adr0_cnt_next1[26] : adr0_cnt[26];
+assign adr0_cnt_next[27] = am0[29] ? adr0_cnt_next1[27] : adr0_cnt[27];
+assign adr0_cnt_next[28] = am0[30] ? adr0_cnt_next1[28] : adr0_cnt[28];
+assign adr0_cnt_next[29] = am0[31] ? adr0_cnt_next1[29] : adr0_cnt[29];
+
+
+// Address Counter 1 (Destination Address)
+always @(posedge clk)
+ if(de_start | ptr_set) adr1_cnt <= #1 adr1[31:2];
+ else
+ if(adr1_inc & a1_inc_en) adr1_cnt <= #1 adr1_cnt_next;
+
+// 30 Bit Incrementor (registered)
+wb_dma_inc30r u1( .clk( clk ),
+ .in( adr1_cnt ),
+ .out( adr1_cnt_next1 ) );
+
+assign adr1_cnt_next[1:0] = adr1_cnt_next1[1:0];
+assign adr1_cnt_next[2] = am1[4] ? adr1_cnt_next1[2] : adr1_cnt[2];
+assign adr1_cnt_next[3] = am1[5] ? adr1_cnt_next1[3] : adr1_cnt[3];
+assign adr1_cnt_next[4] = am1[6] ? adr1_cnt_next1[4] : adr1_cnt[4];
+assign adr1_cnt_next[5] = am1[7] ? adr1_cnt_next1[5] : adr1_cnt[5];
+assign adr1_cnt_next[6] = am1[8] ? adr1_cnt_next1[6] : adr1_cnt[6];
+assign adr1_cnt_next[7] = am1[9] ? adr1_cnt_next1[7] : adr1_cnt[7];
+assign adr1_cnt_next[8] = am1[10] ? adr1_cnt_next1[8] : adr1_cnt[8];
+assign adr1_cnt_next[9] = am1[11] ? adr1_cnt_next1[9] : adr1_cnt[9];
+assign adr1_cnt_next[10] = am1[12] ? adr1_cnt_next1[10] : adr1_cnt[10];
+assign adr1_cnt_next[11] = am1[13] ? adr1_cnt_next1[11] : adr1_cnt[11];
+assign adr1_cnt_next[12] = am1[14] ? adr1_cnt_next1[12] : adr1_cnt[12];
+assign adr1_cnt_next[13] = am1[15] ? adr1_cnt_next1[13] : adr1_cnt[13];
+assign adr1_cnt_next[14] = am1[16] ? adr1_cnt_next1[14] : adr1_cnt[14];
+assign adr1_cnt_next[15] = am1[17] ? adr1_cnt_next1[15] : adr1_cnt[15];
+assign adr1_cnt_next[16] = am1[18] ? adr1_cnt_next1[16] : adr1_cnt[16];
+assign adr1_cnt_next[17] = am1[19] ? adr1_cnt_next1[17] : adr1_cnt[17];
+assign adr1_cnt_next[18] = am1[20] ? adr1_cnt_next1[18] : adr1_cnt[18];
+assign adr1_cnt_next[19] = am1[21] ? adr1_cnt_next1[19] : adr1_cnt[19];
+assign adr1_cnt_next[20] = am1[22] ? adr1_cnt_next1[20] : adr1_cnt[20];
+assign adr1_cnt_next[21] = am1[23] ? adr1_cnt_next1[21] : adr1_cnt[21];
+assign adr1_cnt_next[22] = am1[24] ? adr1_cnt_next1[22] : adr1_cnt[22];
+assign adr1_cnt_next[23] = am1[25] ? adr1_cnt_next1[23] : adr1_cnt[23];
+assign adr1_cnt_next[24] = am1[26] ? adr1_cnt_next1[24] : adr1_cnt[24];
+assign adr1_cnt_next[25] = am1[27] ? adr1_cnt_next1[25] : adr1_cnt[25];
+assign adr1_cnt_next[26] = am1[28] ? adr1_cnt_next1[26] : adr1_cnt[26];
+assign adr1_cnt_next[27] = am1[29] ? adr1_cnt_next1[27] : adr1_cnt[27];
+assign adr1_cnt_next[28] = am1[30] ? adr1_cnt_next1[28] : adr1_cnt[28];
+assign adr1_cnt_next[29] = am1[31] ? adr1_cnt_next1[29] : adr1_cnt[29];
+
+// Chunk Counter
+always @(posedge clk)
+ if(de_start) chunk_cnt <= #1 txsz[24:16];
+ else
+ if(chunk_dec & !chunk_cnt_is_0_r) chunk_cnt <= #1 chunk_cnt - 9'h1;
+
+assign chunk_cnt_is_0_d = (chunk_cnt == 9'h0);
+
+always @(posedge clk)
+ chunk_cnt_is_0_r <= #1 chunk_cnt_is_0_d;
+
+// Total Size Counter
+always @(posedge clk)
+ if(de_start | ptr_set) tsz_cnt <= #1 txsz[11:0];
+ else
+ if(tsz_dec & !tsz_cnt_is_0_r) tsz_cnt <= #1 tsz_cnt - 12'h1;
+
+assign tsz_cnt_is_0_d = (tsz_cnt == 12'h0) & !txsz[15];
+
+always @(posedge clk)
+ tsz_cnt_is_0_r <= #1 tsz_cnt_is_0_d;
+
+// Counter Control Logic
+always @(posedge clk)
+ chunk_dec <= #1 read & !read_r;
+
+always @(posedge clk)
+ tsz_dec <= #1 read & !read_r;
+
+//always @(posedge clk)
+always @(rd_ack or read_r)
+ adr0_inc = rd_ack & read_r;
+
+//always @(posedge clk)
+always @(wr_ack or write_r)
+ adr1_inc = wr_ack & write_r;
+
+// Done logic
+always @(posedge clk)
+ chunk_0 <= #1 (txsz[24:16] == 9'h0);
+
+assign done = chunk_0 ? tsz_cnt_is_0_d : (tsz_cnt_is_0_d | chunk_cnt_is_0_d);
+assign dma_done = dma_done_d & done;
+assign dma_done_all = dma_done_d & (tsz_cnt_is_0_r | (nd & chunk_cnt_is_0_d));
+
+always @(posedge clk)
+ next_ch <= #1 dma_done;
+
+// Register Update Outputs
+assign de_txsz = ld_desc_sel ? mast0_din[11:0] : tsz_cnt;
+assign de_adr0 = ld_desc_sel ? mast0_din : {adr0_cnt, 2'b00};
+assign de_adr1 = ld_desc_sel ? mast0_din : {adr1_cnt, 2'b00};
+assign de_csr = mast0_din;
+
+// Abort logic
+always @(posedge clk)
+ dma_abort_r <= #1 dma_abort | mast0_err | mast1_err;
+
+assign dma_err = dma_abort_r;
+
+assign dma_busy = (state != IDLE);
+
+////////////////////////////////////////////////////////////////////
+//
+// WISHBONE Interface Logic
+//
+
+always @(posedge clk)
+ read_r <= #1 read;
+
+always @(posedge clk)
+ write_r <= #1 write;
+
+always @(posedge clk)
+ rd_ack_r <= #1 read_r;
+
+// Data Path
+assign mast0_dout = m0_we ? {20'h0, tsz_cnt} : csr[2] ? mast1_din : mast0_din;
+assign mast1_dout = csr[2] ? mast1_din : mast0_din;
+
+// Address Path
+always @(posedge clk)
+ mast0_adr <= #1 m0_go ?
+ (m0_we ? pointer_s : {pointer[31:4], ptr_adr_low, 2'b00}) :
+ read ? {adr0_cnt, 2'b00} : {adr1_cnt, 2'b00};
+
+always @(posedge clk)
+ mast1_adr <= #1 read ? {adr0_cnt, 2'b00} : {adr1_cnt, 2'b00};
+
+// CTRL
+assign write_hold = (read | write) & write_hold_r;
+
+always @(posedge clk)
+ write_hold_r <= #1 read | write;
+
+assign read_hold = done ? read : (read | write);
+
+assign mast0_go = (!csr[2] & read_hold) | (!csr[1] & write_hold) | m0_go;
+assign mast1_go = ( csr[2] & read_hold) | ( csr[1] & write_hold);
+
+assign mast0_we = m0_go ? m0_we : (!csr[1] & write);
+assign mast1_we = csr[1] & write;
+
+assign rd_ack = (csr[2] ? mast1_drdy : mast0_drdy);
+assign wr_ack = (csr[1] ? mast1_drdy : mast0_drdy);
+
+assign mast0_wait = !((!csr[2] & read) | (!csr[1] & write)) & !m0_go;
+assign mast1_wait = !(( csr[2] & read) | ( csr[1] & write));
+
+always @(posedge clk)
+ mast0_drdy_r <= #1 mast0_drdy;
+
+assign de_ack = dma_done;
+
+////////////////////////////////////////////////////////////////////
+//
+// State Machine
+//
+
+always @(posedge clk or negedge rst)
+ if(!rst) state <= #1 IDLE;
+ else state <= #1 next_state;
+
+always @(state or pause_req or dma_abort_r or de_start or rd_ack or wr_ack or
+ done or ptr_valid or use_ed or mast0_drdy or mast0_drdy_r or csr or nd)
+ begin
+ next_state = state; // Default keep state
+ read = 1'b0;
+ write = 1'b0;
+ dma_done_d = 1'b0;
+ de_csr_we = 1'b0;
+ de_txsz_we = 1'b0;
+ de_adr0_we = 1'b0;
+ de_adr1_we = 1'b0;
+ de_fetch_descr = 1'b0;
+
+ m0_go = 1'b0;
+ m0_we = 1'b0;
+ ptr_adr_low = 2'h0;
+ ptr_set = 1'b0;
+ ld_desc_sel = 1'b0;
+ paused = 1'b0;
+
+ case(state) // synopsys parallel_case full_case
+
+ IDLE:
+ begin
+ if(pause_req) next_state = PAUSE;
+ else
+ if(de_start & !csr[`WDMA_ERR])
+ begin
+ if(use_ed & !ptr_valid) next_state = LD_DESC1;
+ else next_state = READ;
+ end
+ end
+
+ PAUSE:
+ begin
+ paused = 1'b1;
+ if(!pause_req) next_state = IDLE;
+ end
+
+ READ: // Read From Source
+ begin
+ if(dma_abort_r) next_state = UPDATE;
+ else
+ if(!rd_ack) read = 1'b1;
+ else
+ begin
+ write = 1'b1;
+ next_state = WRITE;
+ end
+ end
+
+ WRITE: // Write To Destination
+ begin
+ if(dma_abort_r) next_state = UPDATE;
+ else
+ if(!wr_ack) write = 1'b1;
+ else
+ begin
+ if(done) next_state = UPDATE;
+ else
+ begin
+ read = 1'b1;
+ next_state = READ;
+ end
+ end
+ end
+
+ UPDATE: // Update Registers
+ begin
+ dma_done_d = 1'b1;
+ de_txsz_we = 1'b1;
+ de_adr0_we = 1'b1;
+ de_adr1_we = 1'b1;
+ if(use_ed & csr[`WDMA_WRB] & nd)
+ begin
+ m0_we = 1'b1;
+ m0_go = 1'b1;
+ next_state = WB;
+ end
+ else next_state = IDLE;
+ end
+
+ WB:
+ begin
+ m0_we = 1'b1;
+ if(mast0_drdy)
+ begin
+ next_state = IDLE;
+ end
+ else m0_go = 1'b1;
+ end
+
+ LD_DESC1: // Load Descriptor from memory to registers
+ begin
+ ptr_adr_low = 2'h0;
+ ld_desc_sel = 1'b1;
+ m0_go = 1'b1;
+ de_csr_we = 1'b1;
+ de_txsz_we = 1'b1;
+ de_fetch_descr = 1'b1;
+ if(mast0_drdy)
+ begin
+ ptr_adr_low = 2'h1;
+ next_state = LD_DESC2;
+ end
+ end
+
+ LD_DESC2:
+ begin
+ de_fetch_descr = 1'b1;
+ if(mast0_drdy_r) de_csr_we = 1'b1;
+ if(mast0_drdy_r) de_txsz_we = 1'b1;
+ ptr_adr_low = 2'h1;
+ ld_desc_sel = 1'b1;
+ m0_go = 1'b1;
+ if(mast0_drdy)
+ begin
+ ptr_adr_low = 2'h2;
+ next_state = LD_DESC3;
+ end
+ end
+
+ LD_DESC3:
+ begin
+ de_fetch_descr = 1'b1;
+ if(mast0_drdy_r) de_adr0_we = 1'b1;
+ ptr_adr_low = 2'h2;
+ ld_desc_sel = 1'b1;
+ m0_go = 1'b1;
+ if(mast0_drdy)
+ begin
+ ptr_adr_low = 2'h3;
+ next_state = LD_DESC4;
+ end
+ end
+
+ LD_DESC4:
+ begin
+ de_fetch_descr = 1'b1;
+ if(mast0_drdy_r) de_adr1_we = 1'b1;
+ ptr_adr_low = 2'h3;
+ ld_desc_sel = 1'b1;
+ if(mast0_drdy)
+ begin
+ next_state = LD_DESC5;
+ end
+ else m0_go = 1'b1;
+ end
+
+ LD_DESC5:
+ begin
+ de_fetch_descr = 1'b1;
+ ptr_set = 1'b1;
+ next_state = READ;
+ end
+
+ endcase
+
+ end
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_pri_enc_sub.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_pri_enc_sub.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_pri_enc_sub.v (revision 17)
@@ -0,0 +1,142 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Priority Encoder Sub-Module ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_pri_enc_sub.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.4 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// 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/08/07 08:00:43 rudi
+//
+//
+// Split up priority encoder modules to separate files
+//
+//
+//
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+// Priority Encoder
+//
+// Determines the channel with the highest priority, also takes
+// the valid bit in consideration
+
+module wb_dma_pri_enc_sub(valid, pri_in, pri_out);
+
+parameter [3:0] ch_conf = 4'b0000;
+parameter [1:0] pri_sel = 2'd0;
+
+input valid;
+input [2:0] pri_in;
+output [7:0] pri_out;
+
+wire [7:0] pri_out;
+reg [7:0] pri_out_d;
+reg [7:0] pri_out_d0;
+reg [7:0] pri_out_d1;
+reg [7:0] pri_out_d2;
+
+assign pri_out = ch_conf[0] ? pri_out_d : 8'h0;
+
+// Select Configured Priority
+always @(pri_sel or pri_out_d0 or pri_out_d1 or pri_out_d2)
+ case(pri_sel) // synopsys parallel_case full_case
+ 2'd0: pri_out_d = pri_out_d0;
+ 2'd1: pri_out_d = pri_out_d1;
+ 2'd2: pri_out_d = pri_out_d2;
+ endcase
+
+// 8 Priority Levels
+always @(valid or pri_in)
+ if(!valid) pri_out_d2 = 8'b0000_0001;
+ else
+ if(pri_in==3'h0) pri_out_d2 = 8'b0000_0001;
+ else
+ if(pri_in==3'h1) pri_out_d2 = 8'b0000_0010;
+ else
+ if(pri_in==3'h2) pri_out_d2 = 8'b0000_0100;
+ else
+ if(pri_in==3'h3) pri_out_d2 = 8'b0000_1000;
+ else
+ if(pri_in==3'h4) pri_out_d2 = 8'b0001_0000;
+ else
+ if(pri_in==3'h5) pri_out_d2 = 8'b0010_0000;
+ else
+ if(pri_in==3'h6) pri_out_d2 = 8'b0100_0000;
+ else pri_out_d2 = 8'b1000_0000;
+
+// 4 Priority Levels
+always @(valid or pri_in)
+ if(!valid) pri_out_d1 = 8'b0000_0001;
+ else
+ if(pri_in==3'h0) pri_out_d1 = 8'b0000_0001;
+ else
+ if(pri_in==3'h1) pri_out_d1 = 8'b0000_0010;
+ else
+ if(pri_in==3'h2) pri_out_d1 = 8'b0000_0100;
+ else pri_out_d1 = 8'b0000_1000;
+
+// 2 Priority Levels
+always @(valid or pri_in)
+ if(!valid) pri_out_d0 = 8'b0000_0001;
+ else
+ if(pri_in==3'h0) pri_out_d0 = 8'b0000_0001;
+ else pri_out_d0 = 8'b0000_0010;
+
+endmodule
+
Index: wb_dma/trunk/rtl/verilog/wb_dma_ch_pri_enc.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_ch_pri_enc.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_ch_pri_enc.v (revision 17)
@@ -0,0 +1,380 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Priority Encoder ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_ch_pri_enc.v,v 1.5 2002-02-01 01:54:44 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:44 $
+// $Revision: 1.5 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.4 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// Revision 1.3 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.2 2001/08/07 08:00:43 rudi
+//
+//
+// Split up priority encoder modules to separate files
+//
+// Revision 1.1 2001/07/29 08:57:02 rudi
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.2 2001/06/05 10:22:36 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:50 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+// Priority Encoder
+//
+// Determines the channel with the highest priority, also takes
+// the valid bit in consideration
+
+module wb_dma_ch_pri_enc(clk, valid,
+ pri0, pri1, pri2, pri3,
+ pri4, pri5, pri6, pri7,
+ pri8, pri9, pri10, pri11,
+ pri12, pri13, pri14, pri15,
+ pri16, pri17, pri18, pri19,
+ pri20, pri21, pri22, pri23,
+ pri24, pri25, pri26, pri27,
+ pri28, pri29, pri30,
+ pri_out);
+
+////////////////////////////////////////////////////////////////////
+//
+// Module Parameters
+//
+
+// chXX_conf = { CBUF, ED, ARS, EN }
+parameter [1:0] pri_sel = 2'd0;
+parameter [3:0] ch0_conf = 4'h1;
+parameter [3:0] ch1_conf = 4'h0;
+parameter [3:0] ch2_conf = 4'h0;
+parameter [3:0] ch3_conf = 4'h0;
+parameter [3:0] ch4_conf = 4'h0;
+parameter [3:0] ch5_conf = 4'h0;
+parameter [3:0] ch6_conf = 4'h0;
+parameter [3:0] ch7_conf = 4'h0;
+parameter [3:0] ch8_conf = 4'h0;
+parameter [3:0] ch9_conf = 4'h0;
+parameter [3:0] ch10_conf = 4'h0;
+parameter [3:0] ch11_conf = 4'h0;
+parameter [3:0] ch12_conf = 4'h0;
+parameter [3:0] ch13_conf = 4'h0;
+parameter [3:0] ch14_conf = 4'h0;
+parameter [3:0] ch15_conf = 4'h0;
+parameter [3:0] ch16_conf = 4'h0;
+parameter [3:0] ch17_conf = 4'h0;
+parameter [3:0] ch18_conf = 4'h0;
+parameter [3:0] ch19_conf = 4'h0;
+parameter [3:0] ch20_conf = 4'h0;
+parameter [3:0] ch21_conf = 4'h0;
+parameter [3:0] ch22_conf = 4'h0;
+parameter [3:0] ch23_conf = 4'h0;
+parameter [3:0] ch24_conf = 4'h0;
+parameter [3:0] ch25_conf = 4'h0;
+parameter [3:0] ch26_conf = 4'h0;
+parameter [3:0] ch27_conf = 4'h0;
+parameter [3:0] ch28_conf = 4'h0;
+parameter [3:0] ch29_conf = 4'h0;
+parameter [3:0] ch30_conf = 4'h0;
+
+////////////////////////////////////////////////////////////////////
+//
+// Module IOs
+//
+
+input clk;
+input [30:0] valid; // Channel Valid bits
+input [2:0] pri0, pri1, pri2, pri3; // Channel Priorities
+input [2:0] pri4, pri5, pri6, pri7;
+input [2:0] pri8, pri9, pri10, pri11;
+input [2:0] pri12, pri13, pri14, pri15;
+input [2:0] pri16, pri17, pri18, pri19;
+input [2:0] pri20, pri21, pri22, pri23;
+input [2:0] pri24, pri25, pri26, pri27;
+input [2:0] pri28, pri29, pri30;
+output [2:0] pri_out; // Highest unserviced priority
+
+wire [7:0] pri0_out, pri1_out, pri2_out, pri3_out;
+wire [7:0] pri4_out, pri5_out, pri6_out, pri7_out;
+wire [7:0] pri8_out, pri9_out, pri10_out, pri11_out;
+wire [7:0] pri12_out, pri13_out, pri14_out, pri15_out;
+wire [7:0] pri16_out, pri17_out, pri18_out, pri19_out;
+wire [7:0] pri20_out, pri21_out, pri22_out, pri23_out;
+wire [7:0] pri24_out, pri25_out, pri26_out, pri27_out;
+wire [7:0] pri28_out, pri29_out, pri30_out;
+
+wire [7:0] pri_out_tmp;
+reg [2:0] pri_out;
+reg [2:0] pri_out2;
+reg [2:0] pri_out1;
+reg [2:0] pri_out0;
+
+wb_dma_pri_enc_sub #(ch1_conf,pri_sel) u0( // Use channel config 1 for channel 0 encoder
+ .valid( valid[0] ),
+ .pri_in( pri0 ),
+ .pri_out( pri0_out )
+ );
+wb_dma_pri_enc_sub #(ch1_conf,pri_sel) u1(
+ .valid( valid[1] ),
+ .pri_in( pri1 ),
+ .pri_out( pri1_out )
+ );
+wb_dma_pri_enc_sub #(ch2_conf,pri_sel) u2(
+ .valid( valid[2] ),
+ .pri_in( pri2 ),
+ .pri_out( pri2_out )
+ );
+wb_dma_pri_enc_sub #(ch3_conf,pri_sel) u3(
+ .valid( valid[3] ),
+ .pri_in( pri3 ),
+ .pri_out( pri3_out )
+ );
+wb_dma_pri_enc_sub #(ch4_conf,pri_sel) u4(
+ .valid( valid[4] ),
+ .pri_in( pri4 ),
+ .pri_out( pri4_out )
+ );
+wb_dma_pri_enc_sub #(ch5_conf,pri_sel) u5(
+ .valid( valid[5] ),
+ .pri_in( pri5 ),
+ .pri_out( pri5_out )
+ );
+wb_dma_pri_enc_sub #(ch6_conf,pri_sel) u6(
+ .valid( valid[6] ),
+ .pri_in( pri6 ),
+ .pri_out( pri6_out )
+ );
+wb_dma_pri_enc_sub #(ch7_conf,pri_sel) u7(
+ .valid( valid[7] ),
+ .pri_in( pri7 ),
+ .pri_out( pri7_out )
+ );
+wb_dma_pri_enc_sub #(ch8_conf,pri_sel) u8(
+ .valid( valid[8] ),
+ .pri_in( pri8 ),
+ .pri_out( pri8_out )
+ );
+wb_dma_pri_enc_sub #(ch9_conf,pri_sel) u9(
+ .valid( valid[9] ),
+ .pri_in( pri9 ),
+ .pri_out( pri9_out )
+ );
+wb_dma_pri_enc_sub #(ch10_conf,pri_sel) u10(
+ .valid( valid[10] ),
+ .pri_in( pri10 ),
+ .pri_out( pri10_out )
+ );
+wb_dma_pri_enc_sub #(ch11_conf,pri_sel) u11(
+ .valid( valid[11] ),
+ .pri_in( pri11 ),
+ .pri_out( pri11_out )
+ );
+wb_dma_pri_enc_sub #(ch12_conf,pri_sel) u12(
+ .valid( valid[12] ),
+ .pri_in( pri12 ),
+ .pri_out( pri12_out )
+ );
+wb_dma_pri_enc_sub #(ch13_conf,pri_sel) u13(
+ .valid( valid[13] ),
+ .pri_in( pri13 ),
+ .pri_out( pri13_out )
+ );
+wb_dma_pri_enc_sub #(ch14_conf,pri_sel) u14(
+ .valid( valid[14] ),
+ .pri_in( pri14 ),
+ .pri_out( pri14_out )
+ );
+wb_dma_pri_enc_sub #(ch15_conf,pri_sel) u15(
+ .valid( valid[15] ),
+ .pri_in( pri15 ),
+ .pri_out( pri15_out )
+ );
+wb_dma_pri_enc_sub #(ch16_conf,pri_sel) u16(
+ .valid( valid[16] ),
+ .pri_in( pri16 ),
+ .pri_out( pri16_out )
+ );
+wb_dma_pri_enc_sub #(ch17_conf,pri_sel) u17(
+ .valid( valid[17] ),
+ .pri_in( pri17 ),
+ .pri_out( pri17_out )
+ );
+wb_dma_pri_enc_sub #(ch18_conf,pri_sel) u18(
+ .valid( valid[18] ),
+ .pri_in( pri18 ),
+ .pri_out( pri18_out )
+ );
+wb_dma_pri_enc_sub #(ch19_conf,pri_sel) u19(
+ .valid( valid[19] ),
+ .pri_in( pri19 ),
+ .pri_out( pri19_out )
+ );
+wb_dma_pri_enc_sub #(ch20_conf,pri_sel) u20(
+ .valid( valid[20] ),
+ .pri_in( pri20 ),
+ .pri_out( pri20_out )
+ );
+wb_dma_pri_enc_sub #(ch21_conf,pri_sel) u21(
+ .valid( valid[21] ),
+ .pri_in( pri21 ),
+ .pri_out( pri21_out )
+ );
+wb_dma_pri_enc_sub #(ch22_conf,pri_sel) u22(
+ .valid( valid[22] ),
+ .pri_in( pri22 ),
+ .pri_out( pri22_out )
+ );
+wb_dma_pri_enc_sub #(ch23_conf,pri_sel) u23(
+ .valid( valid[23] ),
+ .pri_in( pri23 ),
+ .pri_out( pri23_out )
+ );
+wb_dma_pri_enc_sub #(ch24_conf,pri_sel) u24(
+ .valid( valid[24] ),
+ .pri_in( pri24 ),
+ .pri_out( pri24_out )
+ );
+wb_dma_pri_enc_sub #(ch25_conf,pri_sel) u25(
+ .valid( valid[25] ),
+ .pri_in( pri25 ),
+ .pri_out( pri25_out )
+ );
+wb_dma_pri_enc_sub #(ch26_conf,pri_sel) u26(
+ .valid( valid[26] ),
+ .pri_in( pri26 ),
+ .pri_out( pri26_out )
+ );
+wb_dma_pri_enc_sub #(ch27_conf,pri_sel) u27(
+ .valid( valid[27] ),
+ .pri_in( pri27 ),
+ .pri_out( pri27_out )
+ );
+wb_dma_pri_enc_sub #(ch28_conf,pri_sel) u28(
+ .valid( valid[28] ),
+ .pri_in( pri28 ),
+ .pri_out( pri28_out )
+ );
+wb_dma_pri_enc_sub #(ch29_conf,pri_sel) u29(
+ .valid( valid[29] ),
+ .pri_in( pri29 ),
+ .pri_out( pri29_out )
+ );
+wb_dma_pri_enc_sub #(ch30_conf,pri_sel) u30(
+ .valid( valid[30] ),
+ .pri_in( pri30 ),
+ .pri_out( pri30_out )
+ );
+
+assign pri_out_tmp = pri0_out | pri1_out | pri2_out | pri3_out |
+ pri4_out | pri5_out | pri6_out | pri7_out |
+ pri8_out | pri9_out | pri10_out | pri11_out |
+ pri12_out | pri13_out | pri14_out | pri15_out |
+ pri16_out | pri17_out | pri18_out | pri19_out |
+ pri20_out | pri21_out | pri22_out | pri23_out |
+ pri24_out | pri25_out | pri26_out | pri27_out |
+ pri28_out | pri29_out | pri30_out;
+
+// 8 Priority Levels
+always @(posedge clk)
+ if(pri_out_tmp[7]) pri_out2 <= #1 3'h7;
+ else
+ if(pri_out_tmp[6]) pri_out2 <= #1 3'h6;
+ else
+ if(pri_out_tmp[5]) pri_out2 <= #1 3'h5;
+ else
+ if(pri_out_tmp[4]) pri_out2 <= #1 3'h4;
+ else
+ if(pri_out_tmp[3]) pri_out2 <= #1 3'h3;
+ else
+ if(pri_out_tmp[2]) pri_out2 <= #1 3'h2;
+ else
+ if(pri_out_tmp[1]) pri_out2 <= #1 3'h1;
+ else pri_out2 <= #1 3'h0;
+
+// 4 Priority Levels
+always @(posedge clk)
+ if(pri_out_tmp[3]) pri_out1 <= #1 3'h3;
+ else
+ if(pri_out_tmp[2]) pri_out1 <= #1 3'h2;
+ else
+ if(pri_out_tmp[1]) pri_out1 <= #1 3'h1;
+ else pri_out1 <= #1 3'h0;
+
+// 2 Priority Levels
+always @(posedge clk)
+ if(pri_out_tmp[1]) pri_out0 <= #1 3'h1;
+ else pri_out0 <= #1 3'h0;
+
+// Select configured priority
+always @(pri_sel or pri_out0 or pri_out1 or pri_out2)
+ case(pri_sel) // synopsys parallel_case full_case
+ 2'd0: pri_out = pri_out0;
+ 2'd1: pri_out = pri_out1;
+ 2'd2: pri_out = pri_out2;
+ endcase
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_wb_mast.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_wb_mast.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_wb_mast.v (revision 17)
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA WISHBONE Master Interface ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_wb_mast.v,v 1.2 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.2 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $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.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:11:05 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_wb_mast(clk, rst,
+
+ wb_data_i, wb_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o,
+ wb_stb_o, wb_ack_i, wb_err_i, wb_rty_i,
+
+ mast_go, mast_we, mast_adr, mast_din, mast_dout, mast_err,
+ mast_drdy, mast_wait,
+
+ pt_sel, mast_pt_in, mast_pt_out
+ );
+
+input clk, rst;
+
+// --------------------------------------
+// WISHBONE INTERFACE
+
+input [31:0] wb_data_i;
+output [31:0] wb_data_o;
+output [31:0] wb_addr_o;
+output [3:0] wb_sel_o;
+output wb_we_o;
+output wb_cyc_o;
+output wb_stb_o;
+input wb_ack_i;
+input wb_err_i;
+input wb_rty_i;
+
+// --------------------------------------
+// INTERNAL DMA INTERFACE
+input mast_go; // Perform a Master Cycle (as long as this
+ // line is asserted)
+input mast_we; // Read/Write
+input [31:0] mast_adr; // Address for the transfer
+input [31:0] mast_din; // Internal Input Data
+output [31:0] mast_dout; // Internal Output Data
+output mast_err; // Indicates an error has occurred
+
+output mast_drdy; // Indicated that either data is available
+ // during a read, or that the master can accept
+ // the next data during a write
+input mast_wait; // Tells the master to insert wait cycles
+ // because data can not be accepted/provided
+
+// Pass Through Interface
+input pt_sel; // Pass Through Mode Selected
+input [70:0] mast_pt_in; // Grouped WISHBONE inputs
+output [34:0] mast_pt_out; // Grouped WISHBONE outputs
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+reg mast_cyc, mast_stb;
+reg mast_we_r;
+reg [3:0] mast_be;
+reg [31:0] mast_dout;
+
+////////////////////////////////////////////////////////////////////
+//
+// Pass-Through Interface
+//
+
+assign {wb_data_o, wb_addr_o, wb_sel_o, wb_we_o, wb_cyc_o, wb_stb_o} =
+ pt_sel ? mast_pt_in :
+ {mast_din, mast_adr, mast_be, mast_we_r, mast_cyc, mast_stb};
+
+assign mast_pt_out = {wb_data_i, wb_ack_i, wb_err_i, wb_rty_i};
+
+////////////////////////////////////////////////////////////////////
+//
+// DMA Engine Interface
+//
+
+always @(posedge clk)
+ if(wb_ack_i) mast_dout <= #1 wb_data_i;
+
+always @(posedge clk)
+ mast_be <= #1 4'hf;
+
+always @(posedge clk)
+ mast_we_r <= #1 mast_we;
+
+always @(posedge clk)
+ mast_cyc <= #1 mast_go;
+
+always @(posedge clk)
+ mast_stb <= #1 mast_go & !mast_wait;
+
+assign mast_drdy = wb_ack_i;
+assign mast_err = wb_err_i;
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_wb_slv.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_wb_slv.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_wb_slv.v (revision 17)
@@ -0,0 +1,176 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA WISHBONE Slave Interface ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_wb_slv.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.4 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:59 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_wb_slv(clk, rst,
+
+ wb_data_i, wb_data_o, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i,
+ wb_stb_i, wb_ack_o, wb_err_o, wb_rty_o,
+
+ // This is the register File Interface
+ slv_adr, slv_din, slv_dout, slv_re, slv_we,
+
+ // Pass through Interface
+ pt_sel, slv_pt_out, slv_pt_in
+
+ );
+
+parameter rf_addr = 0;
+
+input clk, rst;
+
+// --------------------------------------
+// WISHBONE INTERFACE
+
+input [31:0] wb_data_i;
+output [31:0] wb_data_o;
+input [31:0] wb_addr_i;
+input [3:0] wb_sel_i;
+input wb_we_i;
+input wb_cyc_i;
+input wb_stb_i;
+output wb_ack_o;
+output wb_err_o;
+output wb_rty_o;
+
+// This is the register File Interface
+output [31:0] slv_adr; // Slave Address
+input [31:0] slv_din; // Slave Input Data
+output [31:0] slv_dout; // Slave Output Data
+output slv_re; // Slave Read Enable
+output slv_we; // Slave Write Enable
+
+// Pass through Interface
+output pt_sel; // Pass Through Mode Active
+output [70:0] slv_pt_out; // Grouped WISHBONE out signals
+input [34:0] slv_pt_in; // Grouped WISHBONE in signals
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+reg slv_re, slv_we;
+wire rf_sel;
+reg rf_ack;
+reg [31:0] slv_adr, slv_dout;
+
+////////////////////////////////////////////////////////////////////
+//
+// Misc Logic
+//
+
+assign rf_sel = `WDMA_REG_SEL ;
+
+////////////////////////////////////////////////////////////////////
+//
+// Pass Through Logic
+//
+
+//assign pt_sel = !rf_sel;
+assign pt_sel = !rf_sel & wb_cyc_i;
+
+assign slv_pt_out = {wb_data_i, wb_addr_i, wb_sel_i, wb_we_i, wb_cyc_i, wb_stb_i};
+assign {wb_data_o, wb_ack_o, wb_err_o, wb_rty_o} = pt_sel ? slv_pt_in :
+ {slv_din, rf_ack, 1'b0, 1'b0};
+
+////////////////////////////////////////////////////////////////////
+//
+// Register File Logic
+//
+
+always @(posedge clk)
+ slv_adr <= #1 wb_addr_i;
+
+always @(posedge clk)
+ slv_re <= #1 rf_sel & wb_cyc_i & wb_stb_i & !wb_we_i & !rf_ack & !slv_re;
+
+always @(posedge clk)
+ slv_we <= #1 rf_sel & wb_cyc_i & wb_stb_i & wb_we_i & !rf_ack;
+
+always @(posedge clk)
+ slv_dout <= #1 wb_data_i;
+
+always @(posedge clk)
+ rf_ack <= #1 (slv_re | slv_we) & wb_cyc_i & wb_stb_i & !rf_ack ;
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_ch_sel.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_ch_sel.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_ch_sel.v (revision 17)
@@ -0,0 +1,1388 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Channel Select ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_ch_sel.v,v 1.4 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.4 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.4 2001/06/14 08:52:00 rudi
+//
+//
+// Changed arbiter module name.
+//
+// Revision 1.3 2001/06/13 02:26:48 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.2 2001/06/05 10:22:36 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:35 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_ch_sel(clk, rst,
+
+ // DMA Request Lines
+ req_i, ack_o, nd_i,
+
+ // DMA Registers Inputs
+ pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1,
+ pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1,
+ pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1,
+ pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1,
+ pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1,
+ pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1,
+ pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1,
+ pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1,
+ pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1,
+ pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1,
+ pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1,
+ pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1,
+ pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1,
+ pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1,
+ pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1,
+ pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1,
+ pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1,
+ pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1,
+ pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1,
+ pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1,
+ pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1,
+ pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1,
+ pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1,
+ pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1,
+ pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1,
+ pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1,
+ pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1,
+ pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1,
+ pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1,
+ pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1,
+ pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1,
+
+ // DMA Registers Write Back Channel Select
+ ch_sel, ndnr,
+
+ // DMA Engine Interface
+ de_start, ndr, csr, pointer, txsz, adr0, adr1, am0, am1,
+ pointer_s, next_ch, de_ack, dma_busy
+ );
+
+////////////////////////////////////////////////////////////////////
+//
+// Module Parameters
+//
+
+// chXX_conf = { CBUF, ED, ARS, EN }
+parameter [1:0] pri_sel = 2'h0;
+parameter [3:0] ch0_conf = 4'h1;
+parameter [3:0] ch1_conf = 4'h0;
+parameter [3:0] ch2_conf = 4'h0;
+parameter [3:0] ch3_conf = 4'h0;
+parameter [3:0] ch4_conf = 4'h0;
+parameter [3:0] ch5_conf = 4'h0;
+parameter [3:0] ch6_conf = 4'h0;
+parameter [3:0] ch7_conf = 4'h0;
+parameter [3:0] ch8_conf = 4'h0;
+parameter [3:0] ch9_conf = 4'h0;
+parameter [3:0] ch10_conf = 4'h0;
+parameter [3:0] ch11_conf = 4'h0;
+parameter [3:0] ch12_conf = 4'h0;
+parameter [3:0] ch13_conf = 4'h0;
+parameter [3:0] ch14_conf = 4'h0;
+parameter [3:0] ch15_conf = 4'h0;
+parameter [3:0] ch16_conf = 4'h0;
+parameter [3:0] ch17_conf = 4'h0;
+parameter [3:0] ch18_conf = 4'h0;
+parameter [3:0] ch19_conf = 4'h0;
+parameter [3:0] ch20_conf = 4'h0;
+parameter [3:0] ch21_conf = 4'h0;
+parameter [3:0] ch22_conf = 4'h0;
+parameter [3:0] ch23_conf = 4'h0;
+parameter [3:0] ch24_conf = 4'h0;
+parameter [3:0] ch25_conf = 4'h0;
+parameter [3:0] ch26_conf = 4'h0;
+parameter [3:0] ch27_conf = 4'h0;
+parameter [3:0] ch28_conf = 4'h0;
+parameter [3:0] ch29_conf = 4'h0;
+parameter [3:0] ch30_conf = 4'h0;
+
+////////////////////////////////////////////////////////////////////
+//
+// Module IOs
+//
+
+input clk, rst;
+
+// DMA Request Lines
+input [30:0] req_i;
+output [30:0] ack_o;
+input [30:0] nd_i;
+
+// Channel Registers Inputs
+input [31:0] pointer0, pointer0_s, ch0_csr, ch0_txsz, ch0_adr0, ch0_adr1, ch0_am0, ch0_am1;
+input [31:0] pointer1, pointer1_s, ch1_csr, ch1_txsz, ch1_adr0, ch1_adr1, ch1_am0, ch1_am1;
+input [31:0] pointer2, pointer2_s, ch2_csr, ch2_txsz, ch2_adr0, ch2_adr1, ch2_am0, ch2_am1;
+input [31:0] pointer3, pointer3_s, ch3_csr, ch3_txsz, ch3_adr0, ch3_adr1, ch3_am0, ch3_am1;
+input [31:0] pointer4, pointer4_s, ch4_csr, ch4_txsz, ch4_adr0, ch4_adr1, ch4_am0, ch4_am1;
+input [31:0] pointer5, pointer5_s, ch5_csr, ch5_txsz, ch5_adr0, ch5_adr1, ch5_am0, ch5_am1;
+input [31:0] pointer6, pointer6_s, ch6_csr, ch6_txsz, ch6_adr0, ch6_adr1, ch6_am0, ch6_am1;
+input [31:0] pointer7, pointer7_s, ch7_csr, ch7_txsz, ch7_adr0, ch7_adr1, ch7_am0, ch7_am1;
+input [31:0] pointer8, pointer8_s, ch8_csr, ch8_txsz, ch8_adr0, ch8_adr1, ch8_am0, ch8_am1;
+input [31:0] pointer9, pointer9_s, ch9_csr, ch9_txsz, ch9_adr0, ch9_adr1, ch9_am0, ch9_am1;
+input [31:0] pointer10, pointer10_s, ch10_csr, ch10_txsz, ch10_adr0, ch10_adr1, ch10_am0, ch10_am1;
+input [31:0] pointer11, pointer11_s, ch11_csr, ch11_txsz, ch11_adr0, ch11_adr1, ch11_am0, ch11_am1;
+input [31:0] pointer12, pointer12_s, ch12_csr, ch12_txsz, ch12_adr0, ch12_adr1, ch12_am0, ch12_am1;
+input [31:0] pointer13, pointer13_s, ch13_csr, ch13_txsz, ch13_adr0, ch13_adr1, ch13_am0, ch13_am1;
+input [31:0] pointer14, pointer14_s, ch14_csr, ch14_txsz, ch14_adr0, ch14_adr1, ch14_am0, ch14_am1;
+input [31:0] pointer15, pointer15_s, ch15_csr, ch15_txsz, ch15_adr0, ch15_adr1, ch15_am0, ch15_am1;
+input [31:0] pointer16, pointer16_s, ch16_csr, ch16_txsz, ch16_adr0, ch16_adr1, ch16_am0, ch16_am1;
+input [31:0] pointer17, pointer17_s, ch17_csr, ch17_txsz, ch17_adr0, ch17_adr1, ch17_am0, ch17_am1;
+input [31:0] pointer18, pointer18_s, ch18_csr, ch18_txsz, ch18_adr0, ch18_adr1, ch18_am0, ch18_am1;
+input [31:0] pointer19, pointer19_s, ch19_csr, ch19_txsz, ch19_adr0, ch19_adr1, ch19_am0, ch19_am1;
+input [31:0] pointer20, pointer20_s, ch20_csr, ch20_txsz, ch20_adr0, ch20_adr1, ch20_am0, ch20_am1;
+input [31:0] pointer21, pointer21_s, ch21_csr, ch21_txsz, ch21_adr0, ch21_adr1, ch21_am0, ch21_am1;
+input [31:0] pointer22, pointer22_s, ch22_csr, ch22_txsz, ch22_adr0, ch22_adr1, ch22_am0, ch22_am1;
+input [31:0] pointer23, pointer23_s, ch23_csr, ch23_txsz, ch23_adr0, ch23_adr1, ch23_am0, ch23_am1;
+input [31:0] pointer24, pointer24_s, ch24_csr, ch24_txsz, ch24_adr0, ch24_adr1, ch24_am0, ch24_am1;
+input [31:0] pointer25, pointer25_s, ch25_csr, ch25_txsz, ch25_adr0, ch25_adr1, ch25_am0, ch25_am1;
+input [31:0] pointer26, pointer26_s, ch26_csr, ch26_txsz, ch26_adr0, ch26_adr1, ch26_am0, ch26_am1;
+input [31:0] pointer27, pointer27_s, ch27_csr, ch27_txsz, ch27_adr0, ch27_adr1, ch27_am0, ch27_am1;
+input [31:0] pointer28, pointer28_s, ch28_csr, ch28_txsz, ch28_adr0, ch28_adr1, ch28_am0, ch28_am1;
+input [31:0] pointer29, pointer29_s, ch29_csr, ch29_txsz, ch29_adr0, ch29_adr1, ch29_am0, ch29_am1;
+input [31:0] pointer30, pointer30_s, ch30_csr, ch30_txsz, ch30_adr0, ch30_adr1, ch30_am0, ch30_am1;
+
+output [4:0] ch_sel; // Write Back Channel Select
+output [30:0] ndnr; // Next Descriptor No Request
+
+output de_start; // Start DMA Engine Indicator
+output ndr; // Next Descriptor With Request (for current channel)
+output [31:0] csr; // Selected Channel CSR
+output [31:0] pointer; // LL Descriptor pointer
+output [31:0] pointer_s; // LL Descriptor previous pointer
+output [31:0] txsz; // Selected Channel Transfer Size
+output [31:0] adr0, adr1; // Selected Channel Addresses
+output [31:0] am0, am1; // Selected Channel Address Masks
+
+input next_ch; // Indicates the DMA Engine is done
+ // with current transfer
+input de_ack; // DMA engine ack output
+
+input dma_busy;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires and Registers
+//
+
+reg [30:0] ack_o;
+wire [30:0] valid; // Indicates which channel is valid
+reg valid_sel;
+reg [30:0] req_r; // Channel Request inputs
+reg [30:0] ndr_r; // Next Descriptor Registered (and Request)
+reg [30:0] ndnr; // Next Descriptor Registered (and Not Request)
+wire [2:0] pri_out; // Highest unserviced priority
+wire [2:0] pri0, pri1, pri2, pri3; // Channel Priorities
+wire [2:0] pri4, pri5, pri6, pri7;
+wire [2:0] pri8, pri9, pri10, pri11;
+wire [2:0] pri12, pri13, pri14, pri15;
+wire [2:0] pri16, pri17, pri18, pri19;
+wire [2:0] pri20, pri21, pri22, pri23;
+wire [2:0] pri24, pri25, pri26, pri27;
+wire [2:0] pri28, pri29, pri30;
+reg [4:0] ch_sel_d;
+reg [4:0] ch_sel_r;
+
+reg ndr;
+reg next_start;
+reg de_start_r;
+reg [31:0] csr; // Selected Channel CSR
+reg [31:0] pointer;
+reg [31:0] pointer_s;
+reg [31:0] txsz; // Selected Channel Transfer Size
+reg [31:0] adr0, adr1; // Selected Channel Addresses
+reg [31:0] am0, am1; // Selected Channel Address Masks
+
+ // Arbiter Request Inputs
+wire [30:0] req_p0, req_p1, req_p2, req_p3;
+wire [30:0] req_p4, req_p5, req_p6, req_p7;
+wire [30:0] req_p8, req_p9, req_p10, req_p11;
+wire [30:0] req_p12, req_p13, req_p14, req_p15;
+wire [30:0] req_p16, req_p17, req_p18, req_p19;
+wire [30:0] req_p20, req_p21, req_p22, req_p23;
+wire [30:0] req_p24, req_p25, req_p26, req_p27;
+wire [30:0] req_p28, req_p29, req_p30;
+ // Arbiter Grant Outputs
+wire [4:0] gnt_p0_d, gnt_p1_d, gnt_p2_d, gnt_p3_d;
+wire [4:0] gnt_p4_d, gnt_p5_d, gnt_p6_d, gnt_p7_d;
+wire [4:0] gnt_p0, gnt_p1, gnt_p2, gnt_p3;
+wire [4:0] gnt_p4, gnt_p5, gnt_p6, gnt_p7;
+wire [4:0] gnt_p8, gnt_p9, gnt_p10, gnt_p11;
+wire [4:0] gnt_p12, gnt_p13, gnt_p14, gnt_p15;
+wire [4:0] gnt_p16, gnt_p17, gnt_p18, gnt_p19;
+wire [4:0] gnt_p20, gnt_p21, gnt_p22, gnt_p23;
+wire [4:0] gnt_p24, gnt_p25, gnt_p26, gnt_p27;
+wire [4:0] gnt_p28, gnt_p29, gnt_p30;
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Aliases
+//
+
+assign pri0[0] = ch0_csr[13];
+assign pri0[1] = (pri_sel == 2'd0) ? 1'b0 : ch0_csr[14];
+assign pri0[2] = (pri_sel == 2'd2) ? ch0_csr[15] : 1'b0;
+assign pri1[0] = ch1_csr[13];
+assign pri1[1] = (pri_sel == 2'd0) ? 1'b0 : ch1_csr[14];
+assign pri1[2] = (pri_sel == 2'd2) ? ch1_csr[15] : 1'b0;
+assign pri2[0] = ch2_csr[13];
+assign pri2[1] = (pri_sel == 2'd0) ? 1'b0 : ch2_csr[14];
+assign pri2[2] = (pri_sel == 2'd2) ? ch2_csr[15] : 1'b0;
+assign pri3[0] = ch3_csr[13];
+assign pri3[1] = (pri_sel == 2'd0) ? 1'b0 : ch3_csr[14];
+assign pri3[2] = (pri_sel == 2'd2) ? ch3_csr[15] : 1'b0;
+assign pri4[0] = ch4_csr[13];
+assign pri4[1] = (pri_sel == 2'd0) ? 1'b0 : ch4_csr[14];
+assign pri4[2] = (pri_sel == 2'd2) ? ch4_csr[15] : 1'b0;
+assign pri5[0] = ch5_csr[13];
+assign pri5[1] = (pri_sel == 2'd0) ? 1'b0 : ch5_csr[14];
+assign pri5[2] = (pri_sel == 2'd2) ? ch5_csr[15] : 1'b0;
+assign pri6[0] = ch6_csr[13];
+assign pri6[1] = (pri_sel == 2'd0) ? 1'b0 : ch6_csr[14];
+assign pri6[2] = (pri_sel == 2'd2) ? ch6_csr[15] : 1'b0;
+assign pri7[0] = ch7_csr[13];
+assign pri7[1] = (pri_sel == 2'd0) ? 1'b0 : ch7_csr[14];
+assign pri7[2] = (pri_sel == 2'd2) ? ch7_csr[15] : 1'b0;
+assign pri8[0] = ch8_csr[13];
+assign pri8[1] = (pri_sel == 2'd0) ? 1'b0 : ch8_csr[14];
+assign pri8[2] = (pri_sel == 2'd2) ? ch8_csr[15] : 1'b0;
+assign pri9[0] = ch9_csr[13];
+assign pri9[1] = (pri_sel == 2'd0) ? 1'b0 : ch9_csr[14];
+assign pri9[2] = (pri_sel == 2'd2) ? ch9_csr[15] : 1'b0;
+assign pri10[0] = ch10_csr[13];
+assign pri10[1] = (pri_sel == 2'd0) ? 1'b0 : ch10_csr[14];
+assign pri10[2] = (pri_sel == 2'd2) ? ch10_csr[15] : 1'b0;
+assign pri11[0] = ch11_csr[13];
+assign pri11[1] = (pri_sel == 2'd0) ? 1'b0 : ch11_csr[14];
+assign pri11[2] = (pri_sel == 2'd2) ? ch11_csr[15] : 1'b0;
+assign pri12[0] = ch12_csr[13];
+assign pri12[1] = (pri_sel == 2'd0) ? 1'b0 : ch12_csr[14];
+assign pri12[2] = (pri_sel == 2'd2) ? ch12_csr[15] : 1'b0;
+assign pri13[0] = ch13_csr[13];
+assign pri13[1] = (pri_sel == 2'd0) ? 1'b0 : ch13_csr[14];
+assign pri13[2] = (pri_sel == 2'd2) ? ch13_csr[15] : 1'b0;
+assign pri14[0] = ch14_csr[13];
+assign pri14[1] = (pri_sel == 2'd0) ? 1'b0 : ch14_csr[14];
+assign pri14[2] = (pri_sel == 2'd2) ? ch14_csr[15] : 1'b0;
+assign pri15[0] = ch15_csr[13];
+assign pri15[1] = (pri_sel == 2'd0) ? 1'b0 : ch15_csr[14];
+assign pri15[2] = (pri_sel == 2'd2) ? ch15_csr[15] : 1'b0;
+assign pri16[0] = ch16_csr[13];
+assign pri16[1] = (pri_sel == 2'd0) ? 1'b0 : ch16_csr[14];
+assign pri16[2] = (pri_sel == 2'd2) ? ch16_csr[15] : 1'b0;
+assign pri17[0] = ch17_csr[13];
+assign pri17[1] = (pri_sel == 2'd0) ? 1'b0 : ch17_csr[14];
+assign pri17[2] = (pri_sel == 2'd2) ? ch17_csr[15] : 1'b0;
+assign pri18[0] = ch18_csr[13];
+assign pri18[1] = (pri_sel == 2'd0) ? 1'b0 : ch18_csr[14];
+assign pri18[2] = (pri_sel == 2'd2) ? ch18_csr[15] : 1'b0;
+assign pri19[0] = ch19_csr[13];
+assign pri19[1] = (pri_sel == 2'd0) ? 1'b0 : ch19_csr[14];
+assign pri19[2] = (pri_sel == 2'd2) ? ch19_csr[15] : 1'b0;
+assign pri20[0] = ch20_csr[13];
+assign pri20[1] = (pri_sel == 2'd0) ? 1'b0 : ch20_csr[14];
+assign pri20[2] = (pri_sel == 2'd2) ? ch20_csr[15] : 1'b0;
+assign pri21[0] = ch21_csr[13];
+assign pri21[1] = (pri_sel == 2'd0) ? 1'b0 : ch21_csr[14];
+assign pri21[2] = (pri_sel == 2'd2) ? ch21_csr[15] : 1'b0;
+assign pri22[0] = ch22_csr[13];
+assign pri22[1] = (pri_sel == 2'd0) ? 1'b0 : ch22_csr[14];
+assign pri22[2] = (pri_sel == 2'd2) ? ch22_csr[15] : 1'b0;
+assign pri23[0] = ch23_csr[13];
+assign pri23[1] = (pri_sel == 2'd0) ? 1'b0 : ch23_csr[14];
+assign pri23[2] = (pri_sel == 2'd2) ? ch23_csr[15] : 1'b0;
+assign pri24[0] = ch24_csr[13];
+assign pri24[1] = (pri_sel == 2'd0) ? 1'b0 : ch24_csr[14];
+assign pri24[2] = (pri_sel == 2'd2) ? ch24_csr[15] : 1'b0;
+assign pri25[0] = ch25_csr[13];
+assign pri25[1] = (pri_sel == 2'd0) ? 1'b0 : ch25_csr[14];
+assign pri25[2] = (pri_sel == 2'd2) ? ch25_csr[15] : 1'b0;
+assign pri26[0] = ch26_csr[13];
+assign pri26[1] = (pri_sel == 2'd0) ? 1'b0 : ch26_csr[14];
+assign pri26[2] = (pri_sel == 2'd2) ? ch26_csr[15] : 1'b0;
+assign pri27[0] = ch27_csr[13];
+assign pri27[1] = (pri_sel == 2'd0) ? 1'b0 : ch27_csr[14];
+assign pri27[2] = (pri_sel == 2'd2) ? ch27_csr[15] : 1'b0;
+assign pri28[0] = ch28_csr[13];
+assign pri28[1] = (pri_sel == 2'd0) ? 1'b0 : ch28_csr[14];
+assign pri28[2] = (pri_sel == 2'd2) ? ch28_csr[15] : 1'b0;
+assign pri29[0] = ch29_csr[13];
+assign pri29[1] = (pri_sel == 2'd0) ? 1'b0 : ch29_csr[14];
+assign pri29[2] = (pri_sel == 2'd2) ? ch29_csr[15] : 1'b0;
+assign pri30[0] = ch30_csr[13];
+assign pri30[1] = (pri_sel == 2'd0) ? 1'b0 : ch30_csr[14];
+assign pri30[2] = (pri_sel == 2'd2) ? ch30_csr[15] : 1'b0;
+
+////////////////////////////////////////////////////////////////////
+//
+// Misc logic
+//
+
+// Chanel Valid flag
+// The valid flag is asserted when the channel is enabled,
+// and is either in "normal mode" (software control) or
+// "hw handshake mode" (reqN control)
+// validN = ch_enabled & (sw_mode | (hw_mode & reqN) )
+
+always @(posedge clk)
+ req_r <= #1 req_i & ~ack_o;
+
+assign valid[0] = ch0_conf[0] & ch0_csr[`WDMA_CH_EN] & (ch0_csr[`WDMA_MODE] ? (req_r[0] & !ack_o[0]) : 1'b1);
+assign valid[1] = ch1_conf[0] & ch1_csr[`WDMA_CH_EN] & (ch1_csr[`WDMA_MODE] ? (req_r[1] & !ack_o[1]) : 1'b1);
+assign valid[2] = ch2_conf[0] & ch2_csr[`WDMA_CH_EN] & (ch2_csr[`WDMA_MODE] ? (req_r[2] & !ack_o[2]) : 1'b1);
+assign valid[3] = ch3_conf[0] & ch3_csr[`WDMA_CH_EN] & (ch3_csr[`WDMA_MODE] ? (req_r[3] & !ack_o[3]) : 1'b1);
+assign valid[4] = ch4_conf[0] & ch4_csr[`WDMA_CH_EN] & (ch4_csr[`WDMA_MODE] ? (req_r[4] & !ack_o[4]) : 1'b1);
+assign valid[5] = ch5_conf[0] & ch5_csr[`WDMA_CH_EN] & (ch5_csr[`WDMA_MODE] ? (req_r[5] & !ack_o[5]) : 1'b1);
+assign valid[6] = ch6_conf[0] & ch6_csr[`WDMA_CH_EN] & (ch6_csr[`WDMA_MODE] ? (req_r[6] & !ack_o[6]) : 1'b1);
+assign valid[7] = ch7_conf[0] & ch7_csr[`WDMA_CH_EN] & (ch7_csr[`WDMA_MODE] ? (req_r[7] & !ack_o[7]) : 1'b1);
+assign valid[8] = ch8_conf[0] & ch8_csr[`WDMA_CH_EN] & (ch8_csr[`WDMA_MODE] ? (req_r[8] & !ack_o[8]) : 1'b1);
+assign valid[9] = ch9_conf[0] & ch9_csr[`WDMA_CH_EN] & (ch9_csr[`WDMA_MODE] ? (req_r[9] & !ack_o[9]) : 1'b1);
+assign valid[10] = ch10_conf[0] & ch10_csr[`WDMA_CH_EN] & (ch10_csr[`WDMA_MODE] ? (req_r[10] & !ack_o[10]) : 1'b1);
+assign valid[11] = ch11_conf[0] & ch11_csr[`WDMA_CH_EN] & (ch11_csr[`WDMA_MODE] ? (req_r[11] & !ack_o[11]) : 1'b1);
+assign valid[12] = ch12_conf[0] & ch12_csr[`WDMA_CH_EN] & (ch12_csr[`WDMA_MODE] ? (req_r[12] & !ack_o[12]) : 1'b1);
+assign valid[13] = ch13_conf[0] & ch13_csr[`WDMA_CH_EN] & (ch13_csr[`WDMA_MODE] ? (req_r[13] & !ack_o[13]) : 1'b1);
+assign valid[14] = ch14_conf[0] & ch14_csr[`WDMA_CH_EN] & (ch14_csr[`WDMA_MODE] ? (req_r[14] & !ack_o[14]) : 1'b1);
+assign valid[15] = ch15_conf[0] & ch15_csr[`WDMA_CH_EN] & (ch15_csr[`WDMA_MODE] ? (req_r[15] & !ack_o[15]) : 1'b1);
+assign valid[16] = ch16_conf[0] & ch16_csr[`WDMA_CH_EN] & (ch16_csr[`WDMA_MODE] ? (req_r[16] & !ack_o[16]) : 1'b1);
+assign valid[17] = ch17_conf[0] & ch17_csr[`WDMA_CH_EN] & (ch17_csr[`WDMA_MODE] ? (req_r[17] & !ack_o[17]) : 1'b1);
+assign valid[18] = ch18_conf[0] & ch18_csr[`WDMA_CH_EN] & (ch18_csr[`WDMA_MODE] ? (req_r[18] & !ack_o[18]) : 1'b1);
+assign valid[19] = ch19_conf[0] & ch19_csr[`WDMA_CH_EN] & (ch19_csr[`WDMA_MODE] ? (req_r[19] & !ack_o[19]) : 1'b1);
+assign valid[20] = ch20_conf[0] & ch20_csr[`WDMA_CH_EN] & (ch20_csr[`WDMA_MODE] ? (req_r[20] & !ack_o[20]) : 1'b1);
+assign valid[21] = ch21_conf[0] & ch21_csr[`WDMA_CH_EN] & (ch21_csr[`WDMA_MODE] ? (req_r[21] & !ack_o[21]) : 1'b1);
+assign valid[22] = ch22_conf[0] & ch22_csr[`WDMA_CH_EN] & (ch22_csr[`WDMA_MODE] ? (req_r[22] & !ack_o[22]) : 1'b1);
+assign valid[23] = ch23_conf[0] & ch23_csr[`WDMA_CH_EN] & (ch23_csr[`WDMA_MODE] ? (req_r[23] & !ack_o[23]) : 1'b1);
+assign valid[24] = ch24_conf[0] & ch24_csr[`WDMA_CH_EN] & (ch24_csr[`WDMA_MODE] ? (req_r[24] & !ack_o[24]) : 1'b1);
+assign valid[25] = ch25_conf[0] & ch25_csr[`WDMA_CH_EN] & (ch25_csr[`WDMA_MODE] ? (req_r[25] & !ack_o[25]) : 1'b1);
+assign valid[26] = ch26_conf[0] & ch26_csr[`WDMA_CH_EN] & (ch26_csr[`WDMA_MODE] ? (req_r[26] & !ack_o[26]) : 1'b1);
+assign valid[27] = ch27_conf[0] & ch27_csr[`WDMA_CH_EN] & (ch27_csr[`WDMA_MODE] ? (req_r[27] & !ack_o[27]) : 1'b1);
+assign valid[28] = ch28_conf[0] & ch28_csr[`WDMA_CH_EN] & (ch28_csr[`WDMA_MODE] ? (req_r[28] & !ack_o[28]) : 1'b1);
+assign valid[29] = ch29_conf[0] & ch29_csr[`WDMA_CH_EN] & (ch29_csr[`WDMA_MODE] ? (req_r[29] & !ack_o[29]) : 1'b1);
+assign valid[30] = ch30_conf[0] & ch30_csr[`WDMA_CH_EN] & (ch30_csr[`WDMA_MODE] ? (req_r[30] & !ack_o[30]) : 1'b1);
+
+always @(posedge clk)
+ ndr_r <= #1 nd_i & req_i;
+
+always @(posedge clk)
+ ndnr <= #1 nd_i & ~req_i;
+
+// Start Signal for DMA engine
+assign de_start = (valid_sel & !de_start_r ) | next_start;
+
+always @(posedge clk)
+ de_start_r <= #1 valid_sel;
+
+always @(posedge clk)
+ next_start <= #1 next_ch & valid_sel;
+
+// Ack outputs for HW handshake mode
+always @(posedge clk)
+ ack_o[0] <= #1 ch0_conf[0] & (ch_sel == 5'h0) & ch0_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[1] <= #1 ch1_conf[0] & (ch_sel == 5'h1) & ch1_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[2] <= #1 ch2_conf[0] & (ch_sel == 5'h2) & ch2_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[3] <= #1 ch3_conf[0] & (ch_sel == 5'h3) & ch3_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[4] <= #1 ch4_conf[0] & (ch_sel == 5'h4) & ch4_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[5] <= #1 ch5_conf[0] & (ch_sel == 5'h5) & ch5_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[6] <= #1 ch6_conf[0] & (ch_sel == 5'h6) & ch6_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[7] <= #1 ch7_conf[0] & (ch_sel == 5'h7) & ch7_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[8] <= #1 ch8_conf[0] & (ch_sel == 5'h8) & ch8_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[9] <= #1 ch9_conf[0] & (ch_sel == 5'h9) & ch9_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[10] <= #1 ch10_conf[0] & (ch_sel == 5'ha) & ch10_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[11] <= #1 ch11_conf[0] & (ch_sel == 5'hb) & ch11_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[12] <= #1 ch12_conf[0] & (ch_sel == 5'hc) & ch12_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[13] <= #1 ch13_conf[0] & (ch_sel == 5'hd) & ch13_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[14] <= #1 ch14_conf[0] & (ch_sel == 5'he) & ch14_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[15] <= #1 ch15_conf[0] & (ch_sel == 5'hf) & ch15_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[16] <= #1 ch16_conf[0] & (ch_sel == 5'h10) & ch16_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[17] <= #1 ch17_conf[0] & (ch_sel == 5'h11) & ch17_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[18] <= #1 ch18_conf[0] & (ch_sel == 5'h12) & ch18_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[19] <= #1 ch19_conf[0] & (ch_sel == 5'h13) & ch19_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[20] <= #1 ch20_conf[0] & (ch_sel == 5'h14) & ch20_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[21] <= #1 ch21_conf[0] & (ch_sel == 5'h15) & ch21_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[22] <= #1 ch22_conf[0] & (ch_sel == 5'h16) & ch22_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[23] <= #1 ch23_conf[0] & (ch_sel == 5'h17) & ch23_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[24] <= #1 ch24_conf[0] & (ch_sel == 5'h18) & ch24_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[25] <= #1 ch25_conf[0] & (ch_sel == 5'h19) & ch25_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[26] <= #1 ch26_conf[0] & (ch_sel == 5'h1a) & ch26_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[27] <= #1 ch27_conf[0] & (ch_sel == 5'h1b) & ch27_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[28] <= #1 ch28_conf[0] & (ch_sel == 5'h1c) & ch28_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[29] <= #1 ch29_conf[0] & (ch_sel == 5'h1d) & ch29_csr[`WDMA_MODE] & de_ack;
+
+always @(posedge clk)
+ ack_o[30] <= #1 ch30_conf[0] & (ch_sel == 5'h1e) & ch30_csr[`WDMA_MODE] & de_ack;
+
+// Channel Select
+always @(posedge clk or negedge rst)
+ if(!rst) ch_sel_r <= #1 0;
+ else
+ if(de_start) ch_sel_r <= #1 ch_sel_d;
+
+assign ch_sel = !dma_busy ? ch_sel_d : ch_sel_r;
+
+////////////////////////////////////////////////////////////////////
+//
+// Select Registers based on arbiter (and priority) outputs
+//
+
+always @(ch_sel or valid)
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: valid_sel = valid[0];
+ 5'h1: valid_sel = valid[1];
+ 5'h2: valid_sel = valid[2];
+ 5'h3: valid_sel = valid[3];
+ 5'h4: valid_sel = valid[4];
+ 5'h5: valid_sel = valid[5];
+ 5'h6: valid_sel = valid[6];
+ 5'h7: valid_sel = valid[7];
+ 5'h8: valid_sel = valid[8];
+ 5'h9: valid_sel = valid[9];
+ 5'ha: valid_sel = valid[10];
+ 5'hb: valid_sel = valid[11];
+ 5'hc: valid_sel = valid[12];
+ 5'hd: valid_sel = valid[13];
+ 5'he: valid_sel = valid[14];
+ 5'hf: valid_sel = valid[15];
+ 5'h10: valid_sel = valid[16];
+ 5'h11: valid_sel = valid[17];
+ 5'h12: valid_sel = valid[18];
+ 5'h13: valid_sel = valid[19];
+ 5'h14: valid_sel = valid[20];
+ 5'h15: valid_sel = valid[21];
+ 5'h16: valid_sel = valid[22];
+ 5'h17: valid_sel = valid[23];
+ 5'h18: valid_sel = valid[24];
+ 5'h19: valid_sel = valid[25];
+ 5'h1a: valid_sel = valid[26];
+ 5'h1b: valid_sel = valid[27];
+ 5'h1c: valid_sel = valid[28];
+ 5'h1d: valid_sel = valid[29];
+ 5'h1e: valid_sel = valid[30];
+ endcase
+
+always @(ch_sel or ndr_r)
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: ndr = ndr_r[0];
+ 5'h1: ndr = ndr_r[1];
+ 5'h2: ndr = ndr_r[2];
+ 5'h3: ndr = ndr_r[3];
+ 5'h4: ndr = ndr_r[4];
+ 5'h5: ndr = ndr_r[5];
+ 5'h6: ndr = ndr_r[6];
+ 5'h7: ndr = ndr_r[7];
+ 5'h8: ndr = ndr_r[8];
+ 5'h9: ndr = ndr_r[9];
+ 5'ha: ndr = ndr_r[10];
+ 5'hb: ndr = ndr_r[11];
+ 5'hc: ndr = ndr_r[12];
+ 5'hd: ndr = ndr_r[13];
+ 5'he: ndr = ndr_r[14];
+ 5'hf: ndr = ndr_r[15];
+ 5'h10: ndr = ndr_r[16];
+ 5'h11: ndr = ndr_r[17];
+ 5'h12: ndr = ndr_r[18];
+ 5'h13: ndr = ndr_r[19];
+ 5'h14: ndr = ndr_r[20];
+ 5'h15: ndr = ndr_r[21];
+ 5'h16: ndr = ndr_r[22];
+ 5'h17: ndr = ndr_r[23];
+ 5'h18: ndr = ndr_r[24];
+ 5'h19: ndr = ndr_r[25];
+ 5'h1a: ndr = ndr_r[26];
+ 5'h1b: ndr = ndr_r[27];
+ 5'h1c: ndr = ndr_r[28];
+ 5'h1d: ndr = ndr_r[29];
+ 5'h1e: ndr = ndr_r[30];
+ endcase
+
+always @(ch_sel or pointer0 or pointer1 or pointer2 or pointer3 or pointer4
+ or pointer5 or pointer6 or pointer7 or pointer8 or pointer9
+ or pointer10 or pointer11 or pointer12 or pointer13 or pointer14
+ or pointer15 or pointer16 or pointer17 or pointer18 or pointer19
+ or pointer20 or pointer21 or pointer22 or pointer23 or pointer24
+ or pointer25 or pointer26 or pointer27 or pointer28 or pointer29
+ or pointer30 )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: pointer = pointer0;
+ 5'h1: pointer = pointer1;
+ 5'h2: pointer = pointer2;
+ 5'h3: pointer = pointer3;
+ 5'h4: pointer = pointer4;
+ 5'h5: pointer = pointer5;
+ 5'h6: pointer = pointer6;
+ 5'h7: pointer = pointer7;
+ 5'h8: pointer = pointer8;
+ 5'h9: pointer = pointer9;
+ 5'ha: pointer = pointer10;
+ 5'hb: pointer = pointer11;
+ 5'hc: pointer = pointer12;
+ 5'hd: pointer = pointer13;
+ 5'he: pointer = pointer14;
+ 5'hf: pointer = pointer15;
+ 5'h10: pointer = pointer16;
+ 5'h11: pointer = pointer17;
+ 5'h12: pointer = pointer18;
+ 5'h13: pointer = pointer19;
+ 5'h14: pointer = pointer20;
+ 5'h15: pointer = pointer21;
+ 5'h16: pointer = pointer22;
+ 5'h17: pointer = pointer23;
+ 5'h18: pointer = pointer24;
+ 5'h19: pointer = pointer25;
+ 5'h1a: pointer = pointer26;
+ 5'h1b: pointer = pointer27;
+ 5'h1c: pointer = pointer28;
+ 5'h1d: pointer = pointer29;
+ 5'h1e: pointer = pointer30;
+ endcase
+
+always @(ch_sel or pointer0_s or pointer1_s or pointer2_s or pointer3_s or pointer4_s
+ or pointer5_s or pointer6_s or pointer7_s or pointer8_s or pointer9_s
+ or pointer10_s or pointer11_s or pointer12_s or pointer13_s or pointer14_s
+ or pointer15_s or pointer16_s or pointer17_s or pointer18_s or pointer19_s
+ or pointer20_s or pointer21_s or pointer22_s or pointer23_s or pointer24_s
+ or pointer25_s or pointer26_s or pointer27_s or pointer28_s or pointer29_s
+ or pointer30_s )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: pointer_s = pointer0_s;
+ 5'h1: pointer_s = pointer1_s;
+ 5'h2: pointer_s = pointer2_s;
+ 5'h3: pointer_s = pointer3_s;
+ 5'h4: pointer_s = pointer4_s;
+ 5'h5: pointer_s = pointer5_s;
+ 5'h6: pointer_s = pointer6_s;
+ 5'h7: pointer_s = pointer7_s;
+ 5'h8: pointer_s = pointer8_s;
+ 5'h9: pointer_s = pointer9_s;
+ 5'ha: pointer_s = pointer10_s;
+ 5'hb: pointer_s = pointer11_s;
+ 5'hc: pointer_s = pointer12_s;
+ 5'hd: pointer_s = pointer13_s;
+ 5'he: pointer_s = pointer14_s;
+ 5'hf: pointer_s = pointer15_s;
+ 5'h10: pointer_s = pointer16_s;
+ 5'h11: pointer_s = pointer17_s;
+ 5'h12: pointer_s = pointer18_s;
+ 5'h13: pointer_s = pointer19_s;
+ 5'h14: pointer_s = pointer20_s;
+ 5'h15: pointer_s = pointer21_s;
+ 5'h16: pointer_s = pointer22_s;
+ 5'h17: pointer_s = pointer23_s;
+ 5'h18: pointer_s = pointer24_s;
+ 5'h19: pointer_s = pointer25_s;
+ 5'h1a: pointer_s = pointer26_s;
+ 5'h1b: pointer_s = pointer27_s;
+ 5'h1c: pointer_s = pointer28_s;
+ 5'h1d: pointer_s = pointer29_s;
+ 5'h1e: pointer_s = pointer30_s;
+ endcase
+
+always @(ch_sel or ch0_csr or ch1_csr or ch2_csr or ch3_csr or ch4_csr
+ or ch5_csr or ch6_csr or ch7_csr or ch8_csr or ch9_csr
+ or ch10_csr or ch11_csr or ch12_csr or ch13_csr or ch14_csr
+ or ch15_csr or ch16_csr or ch17_csr or ch18_csr or ch19_csr
+ or ch20_csr or ch21_csr or ch22_csr or ch23_csr or ch24_csr
+ or ch25_csr or ch26_csr or ch27_csr or ch28_csr or ch29_csr
+ or ch30_csr )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: csr = ch0_csr;
+ 5'h1: csr = ch1_csr;
+ 5'h2: csr = ch2_csr;
+ 5'h3: csr = ch3_csr;
+ 5'h4: csr = ch4_csr;
+ 5'h5: csr = ch5_csr;
+ 5'h6: csr = ch6_csr;
+ 5'h7: csr = ch7_csr;
+ 5'h8: csr = ch8_csr;
+ 5'h9: csr = ch9_csr;
+ 5'ha: csr = ch10_csr;
+ 5'hb: csr = ch11_csr;
+ 5'hc: csr = ch12_csr;
+ 5'hd: csr = ch13_csr;
+ 5'he: csr = ch14_csr;
+ 5'hf: csr = ch15_csr;
+ 5'h10: csr = ch16_csr;
+ 5'h11: csr = ch17_csr;
+ 5'h12: csr = ch18_csr;
+ 5'h13: csr = ch19_csr;
+ 5'h14: csr = ch20_csr;
+ 5'h15: csr = ch21_csr;
+ 5'h16: csr = ch22_csr;
+ 5'h17: csr = ch23_csr;
+ 5'h18: csr = ch24_csr;
+ 5'h19: csr = ch25_csr;
+ 5'h1a: csr = ch26_csr;
+ 5'h1b: csr = ch27_csr;
+ 5'h1c: csr = ch28_csr;
+ 5'h1d: csr = ch29_csr;
+ 5'h1e: csr = ch30_csr;
+ endcase
+
+always @(ch_sel or ch0_txsz or ch1_txsz or ch2_txsz or ch3_txsz or ch4_txsz
+ or ch5_txsz or ch6_txsz or ch7_txsz or ch8_txsz or ch9_txsz
+ or ch10_txsz or ch11_txsz or ch12_txsz or ch13_txsz or ch14_txsz
+ or ch15_txsz or ch16_txsz or ch17_txsz or ch18_txsz or ch19_txsz
+ or ch20_txsz or ch21_txsz or ch22_txsz or ch23_txsz or ch24_txsz
+ or ch25_txsz or ch26_txsz or ch27_txsz or ch28_txsz or ch29_txsz
+ or ch30_txsz )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: txsz = ch0_txsz;
+ 5'h1: txsz = ch1_txsz;
+ 5'h2: txsz = ch2_txsz;
+ 5'h3: txsz = ch3_txsz;
+ 5'h4: txsz = ch4_txsz;
+ 5'h5: txsz = ch5_txsz;
+ 5'h6: txsz = ch6_txsz;
+ 5'h7: txsz = ch7_txsz;
+ 5'h8: txsz = ch8_txsz;
+ 5'h9: txsz = ch9_txsz;
+ 5'ha: txsz = ch10_txsz;
+ 5'hb: txsz = ch11_txsz;
+ 5'hc: txsz = ch12_txsz;
+ 5'hd: txsz = ch13_txsz;
+ 5'he: txsz = ch14_txsz;
+ 5'hf: txsz = ch15_txsz;
+ 5'h10: txsz = ch16_txsz;
+ 5'h11: txsz = ch17_txsz;
+ 5'h12: txsz = ch18_txsz;
+ 5'h13: txsz = ch19_txsz;
+ 5'h14: txsz = ch20_txsz;
+ 5'h15: txsz = ch21_txsz;
+ 5'h16: txsz = ch22_txsz;
+ 5'h17: txsz = ch23_txsz;
+ 5'h18: txsz = ch24_txsz;
+ 5'h19: txsz = ch25_txsz;
+ 5'h1a: txsz = ch26_txsz;
+ 5'h1b: txsz = ch27_txsz;
+ 5'h1c: txsz = ch28_txsz;
+ 5'h1d: txsz = ch29_txsz;
+ 5'h1e: txsz = ch30_txsz;
+ endcase
+
+always @(ch_sel or ch0_adr0 or ch1_adr0 or ch2_adr0 or ch3_adr0 or ch4_adr0
+ or ch5_adr0 or ch6_adr0 or ch7_adr0 or ch8_adr0 or ch9_adr0
+ or ch10_adr0 or ch11_adr0 or ch12_adr0 or ch13_adr0 or ch14_adr0
+ or ch15_adr0 or ch16_adr0 or ch17_adr0 or ch18_adr0 or ch19_adr0
+ or ch20_adr0 or ch21_adr0 or ch22_adr0 or ch23_adr0 or ch24_adr0
+ or ch25_adr0 or ch26_adr0 or ch27_adr0 or ch28_adr0 or ch29_adr0
+ or ch30_adr0 )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: adr0 = ch0_adr0;
+ 5'h1: adr0 = ch1_adr0;
+ 5'h2: adr0 = ch2_adr0;
+ 5'h3: adr0 = ch3_adr0;
+ 5'h4: adr0 = ch4_adr0;
+ 5'h5: adr0 = ch5_adr0;
+ 5'h6: adr0 = ch6_adr0;
+ 5'h7: adr0 = ch7_adr0;
+ 5'h8: adr0 = ch8_adr0;
+ 5'h9: adr0 = ch9_adr0;
+ 5'ha: adr0 = ch10_adr0;
+ 5'hb: adr0 = ch11_adr0;
+ 5'hc: adr0 = ch12_adr0;
+ 5'hd: adr0 = ch13_adr0;
+ 5'he: adr0 = ch14_adr0;
+ 5'hf: adr0 = ch15_adr0;
+ 5'h10: adr0 = ch16_adr0;
+ 5'h11: adr0 = ch17_adr0;
+ 5'h12: adr0 = ch18_adr0;
+ 5'h13: adr0 = ch19_adr0;
+ 5'h14: adr0 = ch20_adr0;
+ 5'h15: adr0 = ch21_adr0;
+ 5'h16: adr0 = ch22_adr0;
+ 5'h17: adr0 = ch23_adr0;
+ 5'h18: adr0 = ch24_adr0;
+ 5'h19: adr0 = ch25_adr0;
+ 5'h1a: adr0 = ch26_adr0;
+ 5'h1b: adr0 = ch27_adr0;
+ 5'h1c: adr0 = ch28_adr0;
+ 5'h1d: adr0 = ch29_adr0;
+ 5'h1e: adr0 = ch30_adr0;
+ endcase
+
+always @(ch_sel or ch0_adr1 or ch1_adr1 or ch2_adr1 or ch3_adr1 or ch4_adr1
+ or ch5_adr1 or ch6_adr1 or ch7_adr1 or ch8_adr1 or ch9_adr1
+ or ch10_adr1 or ch11_adr1 or ch12_adr1 or ch13_adr1 or ch14_adr1
+ or ch15_adr1 or ch16_adr1 or ch17_adr1 or ch18_adr1 or ch19_adr1
+ or ch20_adr1 or ch21_adr1 or ch22_adr1 or ch23_adr1 or ch24_adr1
+ or ch25_adr1 or ch26_adr1 or ch27_adr1 or ch28_adr1 or ch29_adr1
+ or ch30_adr1 )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: adr1 = ch0_adr1;
+ 5'h1: adr1 = ch1_adr1;
+ 5'h2: adr1 = ch2_adr1;
+ 5'h3: adr1 = ch3_adr1;
+ 5'h4: adr1 = ch4_adr1;
+ 5'h5: adr1 = ch5_adr1;
+ 5'h6: adr1 = ch6_adr1;
+ 5'h7: adr1 = ch7_adr1;
+ 5'h8: adr1 = ch8_adr1;
+ 5'h9: adr1 = ch9_adr1;
+ 5'ha: adr1 = ch10_adr1;
+ 5'hb: adr1 = ch11_adr1;
+ 5'hc: adr1 = ch12_adr1;
+ 5'hd: adr1 = ch13_adr1;
+ 5'he: adr1 = ch14_adr1;
+ 5'hf: adr1 = ch15_adr1;
+ 5'h10: adr1 = ch16_adr1;
+ 5'h11: adr1 = ch17_adr1;
+ 5'h12: adr1 = ch18_adr1;
+ 5'h13: adr1 = ch19_adr1;
+ 5'h14: adr1 = ch20_adr1;
+ 5'h15: adr1 = ch21_adr1;
+ 5'h16: adr1 = ch22_adr1;
+ 5'h17: adr1 = ch23_adr1;
+ 5'h18: adr1 = ch24_adr1;
+ 5'h19: adr1 = ch25_adr1;
+ 5'h1a: adr1 = ch26_adr1;
+ 5'h1b: adr1 = ch27_adr1;
+ 5'h1c: adr1 = ch28_adr1;
+ 5'h1d: adr1 = ch29_adr1;
+ 5'h1e: adr1 = ch30_adr1;
+ endcase
+
+always @(ch_sel or ch0_am0 or ch1_am0 or ch2_am0 or ch3_am0 or ch4_am0
+ or ch5_am0 or ch6_am0 or ch7_am0 or ch8_am0 or ch9_am0
+ or ch10_am0 or ch11_am0 or ch12_am0 or ch13_am0 or ch14_am0
+ or ch15_am0 or ch16_am0 or ch17_am0 or ch18_am0 or ch19_am0
+ or ch20_am0 or ch21_am0 or ch22_am0 or ch23_am0 or ch24_am0
+ or ch25_am0 or ch26_am0 or ch27_am0 or ch28_am0 or ch29_am0
+ or ch30_am0 )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: am0 = ch0_am0;
+ 5'h1: am0 = ch1_am0;
+ 5'h2: am0 = ch2_am0;
+ 5'h3: am0 = ch3_am0;
+ 5'h4: am0 = ch4_am0;
+ 5'h5: am0 = ch5_am0;
+ 5'h6: am0 = ch6_am0;
+ 5'h7: am0 = ch7_am0;
+ 5'h8: am0 = ch8_am0;
+ 5'h9: am0 = ch9_am0;
+ 5'ha: am0 = ch10_am0;
+ 5'hb: am0 = ch11_am0;
+ 5'hc: am0 = ch12_am0;
+ 5'hd: am0 = ch13_am0;
+ 5'he: am0 = ch14_am0;
+ 5'hf: am0 = ch15_am0;
+ 5'h10: am0 = ch16_am0;
+ 5'h11: am0 = ch17_am0;
+ 5'h12: am0 = ch18_am0;
+ 5'h13: am0 = ch19_am0;
+ 5'h14: am0 = ch20_am0;
+ 5'h15: am0 = ch21_am0;
+ 5'h16: am0 = ch22_am0;
+ 5'h17: am0 = ch23_am0;
+ 5'h18: am0 = ch24_am0;
+ 5'h19: am0 = ch25_am0;
+ 5'h1a: am0 = ch26_am0;
+ 5'h1b: am0 = ch27_am0;
+ 5'h1c: am0 = ch28_am0;
+ 5'h1d: am0 = ch29_am0;
+ 5'h1e: am0 = ch30_am0;
+ endcase
+
+always @(ch_sel or ch0_am1 or ch1_am1 or ch2_am1 or ch3_am1 or ch4_am1
+ or ch5_am1 or ch6_am1 or ch7_am1 or ch8_am1 or ch9_am1
+ or ch10_am1 or ch11_am1 or ch12_am1 or ch13_am1 or ch14_am1
+ or ch15_am1 or ch16_am1 or ch17_am1 or ch18_am1 or ch19_am1
+ or ch20_am1 or ch21_am1 or ch22_am1 or ch23_am1 or ch24_am1
+ or ch25_am1 or ch26_am1 or ch27_am1 or ch28_am1 or ch29_am1
+ or ch30_am1 )
+ case(ch_sel) // synopsys parallel_case full_case
+ 5'h0: am1 = ch0_am1;
+ 5'h1: am1 = ch1_am1;
+ 5'h2: am1 = ch2_am1;
+ 5'h3: am1 = ch3_am1;
+ 5'h4: am1 = ch4_am1;
+ 5'h5: am1 = ch5_am1;
+ 5'h6: am1 = ch6_am1;
+ 5'h7: am1 = ch7_am1;
+ 5'h8: am1 = ch8_am1;
+ 5'h9: am1 = ch9_am1;
+ 5'ha: am1 = ch10_am1;
+ 5'hb: am1 = ch11_am1;
+ 5'hc: am1 = ch12_am1;
+ 5'hd: am1 = ch13_am1;
+ 5'he: am1 = ch14_am1;
+ 5'hf: am1 = ch15_am1;
+ 5'h10: am1 = ch16_am1;
+ 5'h11: am1 = ch17_am1;
+ 5'h12: am1 = ch18_am1;
+ 5'h13: am1 = ch19_am1;
+ 5'h14: am1 = ch20_am1;
+ 5'h15: am1 = ch21_am1;
+ 5'h16: am1 = ch22_am1;
+ 5'h17: am1 = ch23_am1;
+ 5'h18: am1 = ch24_am1;
+ 5'h19: am1 = ch25_am1;
+ 5'h1a: am1 = ch26_am1;
+ 5'h1b: am1 = ch27_am1;
+ 5'h1c: am1 = ch28_am1;
+ 5'h1d: am1 = ch29_am1;
+ 5'h1e: am1 = ch30_am1;
+ endcase
+
+////////////////////////////////////////////////////////////////////
+//
+// Actual Chanel Arbiter and Priority Encoder
+//
+
+// Select the arbiter for current highest priority
+always @(pri_out or gnt_p0 or gnt_p1 or gnt_p2 or gnt_p3 or gnt_p4
+ or gnt_p5 or gnt_p6 or gnt_p7 )
+ case(pri_out) // synopsys parallel_case full_case
+ 3'h0: ch_sel_d = gnt_p0;
+ 3'h1: ch_sel_d = gnt_p1;
+ 3'h2: ch_sel_d = gnt_p2;
+ 3'h3: ch_sel_d = gnt_p3;
+ 3'h4: ch_sel_d = gnt_p4;
+ 3'h5: ch_sel_d = gnt_p5;
+ 3'h6: ch_sel_d = gnt_p6;
+ 3'h7: ch_sel_d = gnt_p7;
+ endcase
+
+
+// Priority Encoder
+wb_dma_ch_pri_enc
+ #( pri_sel,
+ ch0_conf,
+ ch1_conf,
+ ch2_conf,
+ ch3_conf,
+ ch4_conf,
+ ch5_conf,
+ ch6_conf,
+ ch7_conf,
+ ch8_conf,
+ ch9_conf,
+ ch10_conf,
+ ch11_conf,
+ ch12_conf,
+ ch13_conf,
+ ch14_conf,
+ ch15_conf,
+ ch16_conf,
+ ch17_conf,
+ ch18_conf,
+ ch19_conf,
+ ch20_conf,
+ ch21_conf,
+ ch22_conf,
+ ch23_conf,
+ ch24_conf,
+ ch25_conf,
+ ch26_conf,
+ ch27_conf,
+ ch28_conf,
+ ch29_conf,
+ ch30_conf)
+ u0(
+ .clk( clk ),
+ .valid( valid ),
+ .pri0( pri0 ),
+ .pri1( pri1 ),
+ .pri2( pri2 ),
+ .pri3( pri3 ),
+ .pri4( pri4 ),
+ .pri5( pri5 ),
+ .pri6( pri6 ),
+ .pri7( pri7 ),
+ .pri8( pri8 ),
+ .pri9( pri9 ),
+ .pri10( pri10 ),
+ .pri11( pri11 ),
+ .pri12( pri12 ),
+ .pri13( pri13 ),
+ .pri14( pri14 ),
+ .pri15( pri15 ),
+ .pri16( pri16 ),
+ .pri17( pri17 ),
+ .pri18( pri18 ),
+ .pri19( pri19 ),
+ .pri20( pri20 ),
+ .pri21( pri21 ),
+ .pri22( pri22 ),
+ .pri23( pri23 ),
+ .pri24( pri24 ),
+ .pri25( pri25 ),
+ .pri26( pri26 ),
+ .pri27( pri27 ),
+ .pri28( pri28 ),
+ .pri29( pri29 ),
+ .pri30( pri30 ),
+ .pri_out( pri_out )
+ );
+
+// Arbiter request lines
+// Generate request depending on priority and valid bits
+
+assign req_p0[0] = valid[0] & (pri0==3'h0);
+assign req_p0[1] = valid[1] & (pri1==3'h0);
+assign req_p0[2] = valid[2] & (pri2==3'h0);
+assign req_p0[3] = valid[3] & (pri3==3'h0);
+assign req_p0[4] = valid[4] & (pri4==3'h0);
+assign req_p0[5] = valid[5] & (pri5==3'h0);
+assign req_p0[6] = valid[6] & (pri6==3'h0);
+assign req_p0[7] = valid[7] & (pri7==3'h0);
+assign req_p0[8] = valid[8] & (pri8==3'h0);
+assign req_p0[9] = valid[9] & (pri9==3'h0);
+assign req_p0[10] = valid[10] & (pri10==3'h0);
+assign req_p0[11] = valid[11] & (pri11==3'h0);
+assign req_p0[12] = valid[12] & (pri12==3'h0);
+assign req_p0[13] = valid[13] & (pri13==3'h0);
+assign req_p0[14] = valid[14] & (pri14==3'h0);
+assign req_p0[15] = valid[15] & (pri15==3'h0);
+assign req_p0[16] = valid[16] & (pri16==3'h0);
+assign req_p0[17] = valid[17] & (pri17==3'h0);
+assign req_p0[18] = valid[18] & (pri18==3'h0);
+assign req_p0[19] = valid[19] & (pri19==3'h0);
+assign req_p0[20] = valid[20] & (pri20==3'h0);
+assign req_p0[21] = valid[21] & (pri21==3'h0);
+assign req_p0[22] = valid[22] & (pri22==3'h0);
+assign req_p0[23] = valid[23] & (pri23==3'h0);
+assign req_p0[24] = valid[24] & (pri24==3'h0);
+assign req_p0[25] = valid[25] & (pri25==3'h0);
+assign req_p0[26] = valid[26] & (pri26==3'h0);
+assign req_p0[27] = valid[27] & (pri27==3'h0);
+assign req_p0[28] = valid[28] & (pri28==3'h0);
+assign req_p0[29] = valid[29] & (pri29==3'h0);
+assign req_p0[30] = valid[30] & (pri30==3'h0);
+
+assign req_p1[0] = valid[0] & (pri0==3'h1);
+assign req_p1[1] = valid[1] & (pri1==3'h1);
+assign req_p1[2] = valid[2] & (pri2==3'h1);
+assign req_p1[3] = valid[3] & (pri3==3'h1);
+assign req_p1[4] = valid[4] & (pri4==3'h1);
+assign req_p1[5] = valid[5] & (pri5==3'h1);
+assign req_p1[6] = valid[6] & (pri6==3'h1);
+assign req_p1[7] = valid[7] & (pri7==3'h1);
+assign req_p1[8] = valid[8] & (pri8==3'h1);
+assign req_p1[9] = valid[9] & (pri9==3'h1);
+assign req_p1[10] = valid[10] & (pri10==3'h1);
+assign req_p1[11] = valid[11] & (pri11==3'h1);
+assign req_p1[12] = valid[12] & (pri12==3'h1);
+assign req_p1[13] = valid[13] & (pri13==3'h1);
+assign req_p1[14] = valid[14] & (pri14==3'h1);
+assign req_p1[15] = valid[15] & (pri15==3'h1);
+assign req_p1[16] = valid[16] & (pri16==3'h1);
+assign req_p1[17] = valid[17] & (pri17==3'h1);
+assign req_p1[18] = valid[18] & (pri18==3'h1);
+assign req_p1[19] = valid[19] & (pri19==3'h1);
+assign req_p1[20] = valid[20] & (pri20==3'h1);
+assign req_p1[21] = valid[21] & (pri21==3'h1);
+assign req_p1[22] = valid[22] & (pri22==3'h1);
+assign req_p1[23] = valid[23] & (pri23==3'h1);
+assign req_p1[24] = valid[24] & (pri24==3'h1);
+assign req_p1[25] = valid[25] & (pri25==3'h1);
+assign req_p1[26] = valid[26] & (pri26==3'h1);
+assign req_p1[27] = valid[27] & (pri27==3'h1);
+assign req_p1[28] = valid[28] & (pri28==3'h1);
+assign req_p1[29] = valid[29] & (pri29==3'h1);
+assign req_p1[30] = valid[30] & (pri30==3'h1);
+
+assign req_p2[0] = valid[0] & (pri0==3'h2);
+assign req_p2[1] = valid[1] & (pri1==3'h2);
+assign req_p2[2] = valid[2] & (pri2==3'h2);
+assign req_p2[3] = valid[3] & (pri3==3'h2);
+assign req_p2[4] = valid[4] & (pri4==3'h2);
+assign req_p2[5] = valid[5] & (pri5==3'h2);
+assign req_p2[6] = valid[6] & (pri6==3'h2);
+assign req_p2[7] = valid[7] & (pri7==3'h2);
+assign req_p2[8] = valid[8] & (pri8==3'h2);
+assign req_p2[9] = valid[9] & (pri9==3'h2);
+assign req_p2[10] = valid[10] & (pri10==3'h2);
+assign req_p2[11] = valid[11] & (pri11==3'h2);
+assign req_p2[12] = valid[12] & (pri12==3'h2);
+assign req_p2[13] = valid[13] & (pri13==3'h2);
+assign req_p2[14] = valid[14] & (pri14==3'h2);
+assign req_p2[15] = valid[15] & (pri15==3'h2);
+assign req_p2[16] = valid[16] & (pri16==3'h2);
+assign req_p2[17] = valid[17] & (pri17==3'h2);
+assign req_p2[18] = valid[18] & (pri18==3'h2);
+assign req_p2[19] = valid[19] & (pri19==3'h2);
+assign req_p2[20] = valid[20] & (pri20==3'h2);
+assign req_p2[21] = valid[21] & (pri21==3'h2);
+assign req_p2[22] = valid[22] & (pri22==3'h2);
+assign req_p2[23] = valid[23] & (pri23==3'h2);
+assign req_p2[24] = valid[24] & (pri24==3'h2);
+assign req_p2[25] = valid[25] & (pri25==3'h2);
+assign req_p2[26] = valid[26] & (pri26==3'h2);
+assign req_p2[27] = valid[27] & (pri27==3'h2);
+assign req_p2[28] = valid[28] & (pri28==3'h2);
+assign req_p2[29] = valid[29] & (pri29==3'h2);
+assign req_p2[30] = valid[30] & (pri30==3'h2);
+
+assign req_p3[0] = valid[0] & (pri0==3'h3);
+assign req_p3[1] = valid[1] & (pri1==3'h3);
+assign req_p3[2] = valid[2] & (pri2==3'h3);
+assign req_p3[3] = valid[3] & (pri3==3'h3);
+assign req_p3[4] = valid[4] & (pri4==3'h3);
+assign req_p3[5] = valid[5] & (pri5==3'h3);
+assign req_p3[6] = valid[6] & (pri6==3'h3);
+assign req_p3[7] = valid[7] & (pri7==3'h3);
+assign req_p3[8] = valid[8] & (pri8==3'h3);
+assign req_p3[9] = valid[9] & (pri9==3'h3);
+assign req_p3[10] = valid[10] & (pri10==3'h3);
+assign req_p3[11] = valid[11] & (pri11==3'h3);
+assign req_p3[12] = valid[12] & (pri12==3'h3);
+assign req_p3[13] = valid[13] & (pri13==3'h3);
+assign req_p3[14] = valid[14] & (pri14==3'h3);
+assign req_p3[15] = valid[15] & (pri15==3'h3);
+assign req_p3[16] = valid[16] & (pri16==3'h3);
+assign req_p3[17] = valid[17] & (pri17==3'h3);
+assign req_p3[18] = valid[18] & (pri18==3'h3);
+assign req_p3[19] = valid[19] & (pri19==3'h3);
+assign req_p3[20] = valid[20] & (pri20==3'h3);
+assign req_p3[21] = valid[21] & (pri21==3'h3);
+assign req_p3[22] = valid[22] & (pri22==3'h3);
+assign req_p3[23] = valid[23] & (pri23==3'h3);
+assign req_p3[24] = valid[24] & (pri24==3'h3);
+assign req_p3[25] = valid[25] & (pri25==3'h3);
+assign req_p3[26] = valid[26] & (pri26==3'h3);
+assign req_p3[27] = valid[27] & (pri27==3'h3);
+assign req_p3[28] = valid[28] & (pri28==3'h3);
+assign req_p3[29] = valid[29] & (pri29==3'h3);
+assign req_p3[30] = valid[30] & (pri30==3'h3);
+
+assign req_p4[0] = valid[0] & (pri0==3'h4);
+assign req_p4[1] = valid[1] & (pri1==3'h4);
+assign req_p4[2] = valid[2] & (pri2==3'h4);
+assign req_p4[3] = valid[3] & (pri3==3'h4);
+assign req_p4[4] = valid[4] & (pri4==3'h4);
+assign req_p4[5] = valid[5] & (pri5==3'h4);
+assign req_p4[6] = valid[6] & (pri6==3'h4);
+assign req_p4[7] = valid[7] & (pri7==3'h4);
+assign req_p4[8] = valid[8] & (pri8==3'h4);
+assign req_p4[9] = valid[9] & (pri9==3'h4);
+assign req_p4[10] = valid[10] & (pri10==3'h4);
+assign req_p4[11] = valid[11] & (pri11==3'h4);
+assign req_p4[12] = valid[12] & (pri12==3'h4);
+assign req_p4[13] = valid[13] & (pri13==3'h4);
+assign req_p4[14] = valid[14] & (pri14==3'h4);
+assign req_p4[15] = valid[15] & (pri15==3'h4);
+assign req_p4[16] = valid[16] & (pri16==3'h4);
+assign req_p4[17] = valid[17] & (pri17==3'h4);
+assign req_p4[18] = valid[18] & (pri18==3'h4);
+assign req_p4[19] = valid[19] & (pri19==3'h4);
+assign req_p4[20] = valid[20] & (pri20==3'h4);
+assign req_p4[21] = valid[21] & (pri21==3'h4);
+assign req_p4[22] = valid[22] & (pri22==3'h4);
+assign req_p4[23] = valid[23] & (pri23==3'h4);
+assign req_p4[24] = valid[24] & (pri24==3'h4);
+assign req_p4[25] = valid[25] & (pri25==3'h4);
+assign req_p4[26] = valid[26] & (pri26==3'h4);
+assign req_p4[27] = valid[27] & (pri27==3'h4);
+assign req_p4[28] = valid[28] & (pri28==3'h4);
+assign req_p4[29] = valid[29] & (pri29==3'h4);
+assign req_p4[30] = valid[30] & (pri30==3'h4);
+
+assign req_p5[0] = valid[0] & (pri0==3'h5);
+assign req_p5[1] = valid[1] & (pri1==3'h5);
+assign req_p5[2] = valid[2] & (pri2==3'h5);
+assign req_p5[3] = valid[3] & (pri3==3'h5);
+assign req_p5[4] = valid[4] & (pri4==3'h5);
+assign req_p5[5] = valid[5] & (pri5==3'h5);
+assign req_p5[6] = valid[6] & (pri6==3'h5);
+assign req_p5[7] = valid[7] & (pri7==3'h5);
+assign req_p5[8] = valid[8] & (pri8==3'h5);
+assign req_p5[9] = valid[9] & (pri9==3'h5);
+assign req_p5[10] = valid[10] & (pri10==3'h5);
+assign req_p5[11] = valid[11] & (pri11==3'h5);
+assign req_p5[12] = valid[12] & (pri12==3'h5);
+assign req_p5[13] = valid[13] & (pri13==3'h5);
+assign req_p5[14] = valid[14] & (pri14==3'h5);
+assign req_p5[15] = valid[15] & (pri15==3'h5);
+assign req_p5[16] = valid[16] & (pri16==3'h5);
+assign req_p5[17] = valid[17] & (pri17==3'h5);
+assign req_p5[18] = valid[18] & (pri18==3'h5);
+assign req_p5[19] = valid[19] & (pri19==3'h5);
+assign req_p5[20] = valid[20] & (pri20==3'h5);
+assign req_p5[21] = valid[21] & (pri21==3'h5);
+assign req_p5[22] = valid[22] & (pri22==3'h5);
+assign req_p5[23] = valid[23] & (pri23==3'h5);
+assign req_p5[24] = valid[24] & (pri24==3'h5);
+assign req_p5[25] = valid[25] & (pri25==3'h5);
+assign req_p5[26] = valid[26] & (pri26==3'h5);
+assign req_p5[27] = valid[27] & (pri27==3'h5);
+assign req_p5[28] = valid[28] & (pri28==3'h5);
+assign req_p5[29] = valid[29] & (pri29==3'h5);
+assign req_p5[30] = valid[30] & (pri30==3'h5);
+
+assign req_p6[0] = valid[0] & (pri0==3'h6);
+assign req_p6[1] = valid[1] & (pri1==3'h6);
+assign req_p6[2] = valid[2] & (pri2==3'h6);
+assign req_p6[3] = valid[3] & (pri3==3'h6);
+assign req_p6[4] = valid[4] & (pri4==3'h6);
+assign req_p6[5] = valid[5] & (pri5==3'h6);
+assign req_p6[6] = valid[6] & (pri6==3'h6);
+assign req_p6[7] = valid[7] & (pri7==3'h6);
+assign req_p6[8] = valid[8] & (pri8==3'h6);
+assign req_p6[9] = valid[9] & (pri9==3'h6);
+assign req_p6[10] = valid[10] & (pri10==3'h6);
+assign req_p6[11] = valid[11] & (pri11==3'h6);
+assign req_p6[12] = valid[12] & (pri12==3'h6);
+assign req_p6[13] = valid[13] & (pri13==3'h6);
+assign req_p6[14] = valid[14] & (pri14==3'h6);
+assign req_p6[15] = valid[15] & (pri15==3'h6);
+assign req_p6[16] = valid[16] & (pri16==3'h6);
+assign req_p6[17] = valid[17] & (pri17==3'h6);
+assign req_p6[18] = valid[18] & (pri18==3'h6);
+assign req_p6[19] = valid[19] & (pri19==3'h6);
+assign req_p6[20] = valid[20] & (pri20==3'h6);
+assign req_p6[21] = valid[21] & (pri21==3'h6);
+assign req_p6[22] = valid[22] & (pri22==3'h6);
+assign req_p6[23] = valid[23] & (pri23==3'h6);
+assign req_p6[24] = valid[24] & (pri24==3'h6);
+assign req_p6[25] = valid[25] & (pri25==3'h6);
+assign req_p6[26] = valid[26] & (pri26==3'h6);
+assign req_p6[27] = valid[27] & (pri27==3'h6);
+assign req_p6[28] = valid[28] & (pri28==3'h6);
+assign req_p6[29] = valid[29] & (pri29==3'h6);
+assign req_p6[30] = valid[30] & (pri30==3'h6);
+
+assign req_p7[0] = valid[0] & (pri0==3'h7);
+assign req_p7[1] = valid[1] & (pri1==3'h7);
+assign req_p7[2] = valid[2] & (pri2==3'h7);
+assign req_p7[3] = valid[3] & (pri3==3'h7);
+assign req_p7[4] = valid[4] & (pri4==3'h7);
+assign req_p7[5] = valid[5] & (pri5==3'h7);
+assign req_p7[6] = valid[6] & (pri6==3'h7);
+assign req_p7[7] = valid[7] & (pri7==3'h7);
+assign req_p7[8] = valid[8] & (pri8==3'h7);
+assign req_p7[9] = valid[9] & (pri9==3'h7);
+assign req_p7[10] = valid[10] & (pri10==3'h7);
+assign req_p7[11] = valid[11] & (pri11==3'h7);
+assign req_p7[12] = valid[12] & (pri12==3'h7);
+assign req_p7[13] = valid[13] & (pri13==3'h7);
+assign req_p7[14] = valid[14] & (pri14==3'h7);
+assign req_p7[15] = valid[15] & (pri15==3'h7);
+assign req_p7[16] = valid[16] & (pri16==3'h7);
+assign req_p7[17] = valid[17] & (pri17==3'h7);
+assign req_p7[18] = valid[18] & (pri18==3'h7);
+assign req_p7[19] = valid[19] & (pri19==3'h7);
+assign req_p7[20] = valid[20] & (pri20==3'h7);
+assign req_p7[21] = valid[21] & (pri21==3'h7);
+assign req_p7[22] = valid[22] & (pri22==3'h7);
+assign req_p7[23] = valid[23] & (pri23==3'h7);
+assign req_p7[24] = valid[24] & (pri24==3'h7);
+assign req_p7[25] = valid[25] & (pri25==3'h7);
+assign req_p7[26] = valid[26] & (pri26==3'h7);
+assign req_p7[27] = valid[27] & (pri27==3'h7);
+assign req_p7[28] = valid[28] & (pri28==3'h7);
+assign req_p7[29] = valid[29] & (pri29==3'h7);
+assign req_p7[30] = valid[30] & (pri30==3'h7);
+
+// RR Arbiter for priority 0
+wb_dma_ch_arb u1(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p0 ),
+ .gnt( gnt_p0_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 1
+wb_dma_ch_arb u2(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p1 ),
+ .gnt( gnt_p1_d ),
+ .advance( next_ch )
+ );
+
+// RR Arbiter for priority 2
+wb_dma_ch_arb u3(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p2 ),
+ .gnt( gnt_p2_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 3
+wb_dma_ch_arb u4(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p3 ),
+ .gnt( gnt_p3_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 4
+wb_dma_ch_arb u5(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p4 ),
+ .gnt( gnt_p4_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 5
+wb_dma_ch_arb u6(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p5 ),
+ .gnt( gnt_p5_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 6
+wb_dma_ch_arb u7(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p6 ),
+ .gnt( gnt_p6_d ),
+ .advance( next_ch )
+ );
+// RR Arbiter for priority 7
+wb_dma_ch_arb u8(
+ .clk( clk ),
+ .rst( rst ),
+ .req( req_p7 ),
+ .gnt( gnt_p7_d ),
+ .advance( next_ch )
+ );
+
+// Select grant based on number of priorities
+assign gnt_p0 = gnt_p0_d;
+assign gnt_p1 = gnt_p1_d;
+assign gnt_p2 = (pri_sel==2'd0) ? 5'h0 : gnt_p2_d;
+assign gnt_p3 = (pri_sel==2'd0) ? 5'h0 : gnt_p3_d;
+assign gnt_p4 = (pri_sel==2'd2) ? gnt_p4_d : 5'h0;
+assign gnt_p5 = (pri_sel==2'd2) ? gnt_p5_d : 5'h0;
+assign gnt_p6 = (pri_sel==2'd2) ? gnt_p6_d : 5'h0;
+assign gnt_p7 = (pri_sel==2'd2) ? gnt_p7_d : 5'h0;
+
+endmodule
Index: wb_dma/trunk/rtl/verilog/wb_dma_defines.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_defines.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_defines.v (revision 17)
@@ -0,0 +1,116 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Definitions ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_defines.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.5 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.4 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// Revision 1.3 2001/09/07 15:34:38 rudi
+//
+// Changed reset to active high.
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:11:09 rudi
+// Initial Release
+//
+//
+//
+
+`timescale 1ns / 10ps
+
+// This define selects how the slave interface determines if
+// the internal register file or pass through mode are selected.
+// This should be a simple address decoder. "wb_addr_i" is the
+// WISHBONE address bus (32 bits wide).
+// NOTE: The entire pass-through mode is implemented in combinatorial
+// logic only. So the more address lines we look at and compare here
+// the higher will be the initial delay when pass-through mode is selected.
+// Here we look at the top 8 address bit. If they are all 1, the
+// register file is selected. Use this with caution !!!
+`define WDMA_REG_SEL (wb_addr_i[31:28] == rf_addr)
+
+
+// DO NOT MODIFY BEYOND THIS POINT
+// CSR Bits
+`define WDMA_CH_EN 0
+`define WDMA_DST_SEL 1
+`define WDMA_SRC_SEL 2
+`define WDMA_INC_DST 3
+`define WDMA_INC_SRC 4
+`define WDMA_MODE 5
+`define WDMA_ARS 6
+`define WDMA_USE_ED 7
+`define WDMA_WRB 8
+`define WDMA_STOP 9
+`define WDMA_BUSY 10
+`define WDMA_DONE 11
+`define WDMA_ERR 12
+`define WDMA_ED_EOL 20
+
Index: wb_dma/trunk/rtl/verilog/wb_dma_ch_arb.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_ch_arb.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_ch_arb.v (revision 17)
@@ -0,0 +1,2153 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Channel Arbiter ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_ch_arb.v,v 1.2 2002-02-01 01:54:44 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:44 $
+// $Revision: 1.2 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $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.4 2001/06/14 08:51:25 rudi
+//
+//
+// Changed Module name to match file name.
+//
+// Revision 1.3 2001/06/13 02:26:46 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.2 2001/06/05 10:22:34 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:10:47 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+// Arbiter
+//
+// Implements a simple round robin arbiter for DMA channels of
+// same priority
+
+module wb_dma_ch_arb(clk, rst, req, gnt, advance);
+
+input clk;
+input rst;
+input [30:0] req; // Req input
+output [4:0] gnt; // Grant output
+input advance; // Next Target
+
+///////////////////////////////////////////////////////////////////////
+//
+// Definitions
+//
+
+parameter [4:0]
+ grant0 = 5'h0,
+ grant1 = 5'h1,
+ grant2 = 5'h2,
+ grant3 = 5'h3,
+ grant4 = 5'h4,
+ grant5 = 5'h5,
+ grant6 = 5'h6,
+ grant7 = 5'h7,
+ grant8 = 5'h8,
+ grant9 = 5'h9,
+ grant10 = 5'ha,
+ grant11 = 5'hb,
+ grant12 = 5'hc,
+ grant13 = 5'hd,
+ grant14 = 5'he,
+ grant15 = 5'hf,
+ grant16 = 5'h10,
+ grant17 = 5'h11,
+ grant18 = 5'h12,
+ grant19 = 5'h13,
+ grant20 = 5'h14,
+ grant21 = 5'h15,
+ grant22 = 5'h16,
+ grant23 = 5'h17,
+ grant24 = 5'h18,
+ grant25 = 5'h19,
+ grant26 = 5'h1a,
+ grant27 = 5'h1b,
+ grant28 = 5'h1c,
+ grant29 = 5'h1d,
+ grant30 = 5'h1e;
+
+///////////////////////////////////////////////////////////////////////
+//
+// Local Registers and Wires
+//
+
+reg [4:0] state, next_state;
+
+///////////////////////////////////////////////////////////////////////
+//
+// Misc Logic
+//
+
+assign gnt = state;
+
+always@(posedge clk or negedge rst)
+ if(!rst) state <= #1 grant0;
+ else state <= #1 next_state;
+
+///////////////////////////////////////////////////////////////////////
+//
+// Next State Logic
+// - implements round robin arbitration algorithm
+// - switches grant if current req is dropped or next is asserted
+// - parks at last grant
+//
+
+always@(state or req or advance)
+ begin
+ next_state = state; // Default Keep State
+ case(state) // synopsys parallel_case full_case
+ grant0:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[0] | advance)
+ begin
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ end
+ grant1:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[1] | advance)
+ begin
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ end
+ grant2:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[2] | advance)
+ begin
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ end
+ grant3:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[3] | advance)
+ begin
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ end
+ grant4:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[4] | advance)
+ begin
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ end
+ grant5:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[5] | advance)
+ begin
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ end
+ grant6:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[6] | advance)
+ begin
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ end
+ grant7:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[7] | advance)
+ begin
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ end
+ grant8:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[8] | advance)
+ begin
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ end
+ grant9:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[9] | advance)
+ begin
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ end
+ grant10:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[10] | advance)
+ begin
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ end
+ grant11:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[11] | advance)
+ begin
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ end
+ grant12:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[12] | advance)
+ begin
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ end
+ grant13:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[13] | advance)
+ begin
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ end
+ grant14:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[14] | advance)
+ begin
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ end
+ grant15:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[15] | advance)
+ begin
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ end
+ grant16:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[16] | advance)
+ begin
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ end
+ grant17:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[17] | advance)
+ begin
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ end
+ grant18:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[18] | advance)
+ begin
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ end
+ grant19:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[19] | advance)
+ begin
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ end
+ grant20:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[20] | advance)
+ begin
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ end
+ grant21:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[21] | advance)
+ begin
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ end
+ grant22:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[22] | advance)
+ begin
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ end
+ grant23:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[23] | advance)
+ begin
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ end
+ grant24:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[24] | advance)
+ begin
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ end
+ grant25:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[25] | advance)
+ begin
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ end
+ grant26:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[26] | advance)
+ begin
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ end
+ grant27:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[27] | advance)
+ begin
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ end
+ grant28:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[28] | advance)
+ begin
+ if(req[29]) next_state = grant29;
+ else
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ end
+ grant29:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[29] | advance)
+ begin
+ if(req[30]) next_state = grant30;
+ else
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ end
+ grant30:
+ // if this req is dropped or next is asserted, check for other req's
+ if(!req[30] | advance)
+ begin
+ if(req[0]) next_state = grant0;
+ else
+ if(req[1]) next_state = grant1;
+ else
+ if(req[2]) next_state = grant2;
+ else
+ if(req[3]) next_state = grant3;
+ else
+ if(req[4]) next_state = grant4;
+ else
+ if(req[5]) next_state = grant5;
+ else
+ if(req[6]) next_state = grant6;
+ else
+ if(req[7]) next_state = grant7;
+ else
+ if(req[8]) next_state = grant8;
+ else
+ if(req[9]) next_state = grant9;
+ else
+ if(req[10]) next_state = grant10;
+ else
+ if(req[11]) next_state = grant11;
+ else
+ if(req[12]) next_state = grant12;
+ else
+ if(req[13]) next_state = grant13;
+ else
+ if(req[14]) next_state = grant14;
+ else
+ if(req[15]) next_state = grant15;
+ else
+ if(req[16]) next_state = grant16;
+ else
+ if(req[17]) next_state = grant17;
+ else
+ if(req[18]) next_state = grant18;
+ else
+ if(req[19]) next_state = grant19;
+ else
+ if(req[20]) next_state = grant20;
+ else
+ if(req[21]) next_state = grant21;
+ else
+ if(req[22]) next_state = grant22;
+ else
+ if(req[23]) next_state = grant23;
+ else
+ if(req[24]) next_state = grant24;
+ else
+ if(req[25]) next_state = grant25;
+ else
+ if(req[26]) next_state = grant26;
+ else
+ if(req[27]) next_state = grant27;
+ else
+ if(req[28]) next_state = grant28;
+ else
+ if(req[29]) next_state = grant29;
+ end
+ endcase
+ end
+
+endmodule
+
Index: wb_dma/trunk/rtl/verilog/wb_dma_inc30r.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_inc30r.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_inc30r.v (revision 17)
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA Primitives ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_inc30r.v,v 1.2 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.2 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $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.2 2001/06/05 10:22:37 rudi
+//
+//
+// - Added Support of up to 31 channels
+// - Added support for 2,4 and 8 priority levels
+// - Now can have up to 31 channels
+// - Added many configuration items
+// - Changed reset to async
+//
+// Revision 1.1.1.1 2001/03/19 13:11:12 rudi
+// Initial Release
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_inc30r(clk, in, out);
+input clk;
+input [29:0] in;
+output [29:0] out;
+
+// INC30_CENTER indicates the center bit of the 30 bit incrementor
+// so it can be easily manually optimized for best performance
+parameter INC30_CENTER = 16;
+
+reg [INC30_CENTER:0] out_r;
+
+always @(posedge clk)
+ out_r <= #1 in[(INC30_CENTER - 1):0] + 1;
+
+assign out[29:INC30_CENTER] = in[29:INC30_CENTER] + out_r[INC30_CENTER];
+assign out[(INC30_CENTER - 1):0] = out_r;
+
+endmodule
+
Index: wb_dma/trunk/rtl/verilog/wb_dma_ch_rf.v
===================================================================
--- wb_dma/trunk/rtl/verilog/wb_dma_ch_rf.v (nonexistent)
+++ wb_dma/trunk/rtl/verilog/wb_dma_ch_rf.v (revision 17)
@@ -0,0 +1,583 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE DMA One Channel Register File ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// 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. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_dma_ch_rf.v,v 1.5 2002-02-01 01:54:45 rudi Exp $
+//
+// $Date: 2002-02-01 01:54:45 $
+// $Revision: 1.5 $
+// $Author: rudi $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.4 2001/10/30 02:06:17 rudi
+//
+// - Fixed problem where synthesis tools would instantiate latches instead of flip-flops
+//
+// Revision 1.3 2001/10/19 04:35:04 rudi
+//
+// - Made the core parameterized
+//
+// 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
+//
+//
+// 1) Changed Directory Structure
+// 2) Added restart signal (REST)
+//
+// Revision 1.3 2001/06/14 08:50:01 rudi
+//
+// Changed Module Name to match file name.
+//
+// Revision 1.2 2001/06/13 02:26:48 rudi
+//
+//
+// Small changes after running lint.
+//
+// Revision 1.1 2001/06/05 10:25:27 rudi
+//
+//
+// Initial checkin of register file for one channel.
+//
+//
+//
+//
+
+`include "wb_dma_defines.v"
+
+module wb_dma_ch_rf( clk, rst,
+ pointer, pointer_s, ch_csr, ch_txsz, ch_adr0, ch_adr1,
+ ch_am0, ch_am1, sw_pointer, ch_stop, ch_dis, int,
+
+ wb_rf_din, wb_rf_adr, wb_rf_we, wb_rf_re,
+
+ // DMA Registers Write Back Channel Select
+ ch_sel, ndnr,
+
+ // DMA Engine Status
+ dma_busy, dma_err, dma_done, dma_done_all,
+
+ // DMA Engine Reg File Update ctrl signals
+ de_csr, de_txsz, de_adr0, de_adr1,
+ de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we,
+ de_fetch_descr, dma_rest,
+ ptr_set
+
+ );
+
+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_ED = 1'b1; // 1=this Instance Supports External Descriptors
+parameter [0:0] HAVE_CBUF= 1'b1; // 1=this Instance Supports Cyclic Buffers
+
+input clk, rst;
+
+output [31:0] pointer;
+output [31:0] pointer_s;
+output [31:0] ch_csr;
+output [31:0] ch_txsz;
+output [31:0] ch_adr0;
+output [31:0] ch_adr1;
+output [31:0] ch_am0;
+output [31:0] ch_am1;
+output [31:0] sw_pointer;
+output ch_stop;
+output ch_dis;
+output int;
+
+input [31:0] wb_rf_din;
+input [7:0] wb_rf_adr;
+input wb_rf_we;
+input wb_rf_re;
+
+input [4:0] ch_sel;
+input ndnr;
+
+// DMA Engine Status
+input dma_busy, dma_err, dma_done, dma_done_all;
+
+// DMA Engine Reg File Update ctrl signals
+input [31:0] de_csr;
+input [11:0] de_txsz;
+input [31:0] de_adr0;
+input [31:0] de_adr1;
+input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
+input de_fetch_descr;
+input dma_rest;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires and Registers
+//
+
+wire [31:0] pointer;
+reg [27:0] pointer_r;
+reg [27:0] pointer_sr;
+reg ptr_valid;
+reg ch_eol;
+
+wire [31:0] ch_csr, ch_txsz;
+
+reg [8:0] ch_csr_r;
+reg [2:0] ch_csr_r2;
+reg [2:0] ch_csr_r3;
+reg [2:0] int_src_r;
+reg ch_err_r;
+reg ch_stop;
+reg ch_busy;
+reg ch_done;
+reg ch_err;
+reg rest_en;
+
+reg [10:0] ch_chk_sz_r;
+reg [11:0] ch_tot_sz_r;
+reg [22:0] ch_txsz_s;
+reg ch_sz_inf;
+
+wire [31:0] ch_adr0, ch_adr1;
+reg [29:0] ch_adr0_r, ch_adr1_r;
+wire [31:0] ch_am0, ch_am1;
+reg [27:0] ch_am0_r, ch_am1_r;
+
+reg [29:0] ch_adr0_s, ch_adr1_s;
+
+reg [29:0] sw_pointer_r;
+wire sw_pointer_we;
+wire [28:0] cmp_adr;
+reg ch_dis;
+wire ch_enable;
+
+wire pointer_we;
+wire ch_csr_we, ch_csr_re, ch_txsz_we, ch_adr0_we, ch_adr1_we;
+wire ch_am0_we, ch_am1_we;
+reg ch_rl;
+wire ch_done_we;
+wire ch_err_we;
+wire chunk_done_we;
+
+wire ch_csr_dewe, ch_txsz_dewe, ch_adr0_dewe, ch_adr1_dewe;
+
+wire this_ptr_set;
+wire ptr_inv;
+
+////////////////////////////////////////////////////////////////////
+//
+// Aliases
+//
+
+assign ch_adr0 = CH_EN ? {ch_adr0_r, 2'h0} : 32'h0;
+assign ch_adr1 = CH_EN ? {ch_adr1_r, 2'h0} : 32'h0;
+assign ch_am0 = (CH_EN & HAVE_CBUF) ? {ch_am0_r, 4'h0} : 32'hffff_fff0;
+assign ch_am1 = (CH_EN & HAVE_CBUF) ? {ch_am1_r, 4'h0} : 32'hffff_fff0;
+assign sw_pointer = (CH_EN & HAVE_CBUF) ? {sw_pointer_r,2'h0} : 32'h0;
+
+assign pointer = CH_EN ? {pointer_r, 3'h0, ptr_valid} : 32'h0;
+assign pointer_s = CH_EN ? {pointer_sr, 4'h0} : 32'h0;
+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} : 32'h0;
+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_EN ? (ch_csr_r[`WDMA_CH_EN] & (HAVE_CBUF ? !ch_dis : 1'b1) ) : 1'b0;
+
+////////////////////////////////////////////////////////////////////
+//
+// CH0 control signals
+//
+
+parameter [4:0] CH_ADR = CH_NO + 5'h1;
+
+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 = CH_EN & wb_rf_re & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h0);
+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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h2);
+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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h4);
+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 = CH_EN & wb_rf_we & (wb_rf_adr[7:3] == CH_ADR) & (wb_rf_adr[2:0] == 3'h6);
+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_EN & (((ch_sel==CH_NO) & dma_done_all) | ndnr) &
+ (ch_csr[`WDMA_USE_ED] ? ch_eol : !ch_csr[`WDMA_ARS]);
+assign chunk_done_we = CH_EN & (ch_sel==CH_NO) & dma_done;
+assign ch_err_we = CH_EN & (ch_sel==CH_NO) & dma_err;
+assign ch_csr_dewe = CH_EN & de_csr_we & (ch_sel==CH_NO);
+assign ch_txsz_dewe = CH_EN & de_txsz_we & (ch_sel==CH_NO);
+assign ch_adr0_dewe = CH_EN & de_adr0_we & (ch_sel==CH_NO);
+assign ch_adr1_dewe = CH_EN & de_adr1_we & (ch_sel==CH_NO);
+
+assign ptr_inv = CH_EN & ((ch_sel==CH_NO) & dma_done_all) | ndnr;
+assign this_ptr_set = CH_EN & ptr_set & (ch_sel==CH_NO);
+
+always @(posedge clk)
+ ch_rl <= #1 CH_EN & HAVE_ARS & (
+ (rest_en & dma_rest) |
+ ((ch_sel==CH_NO) & dma_done_all & ch_csr[`WDMA_ARS] & !ch_csr[`WDMA_USE_ED])
+ );
+
+// ---------------------------------------------------
+// Pointers
+
+always @(posedge clk or negedge rst)
+ if(!rst) ptr_valid <= #1 1'b0;
+ else
+ if(CH_EN & HAVE_ED)
+ begin
+ if( this_ptr_set | (rest_en & dma_rest) )
+ ptr_valid <= #1 1'b1;
+ else
+ if(ptr_inv) ptr_valid <= #1 1'b0;
+ end
+ else ptr_valid <= #1 1'b0;
+
+always @(posedge clk or negedge rst)
+ if(!rst) ch_eol <= #1 1'b0;
+ else
+ if(CH_EN & HAVE_ED)
+ begin
+ if(ch_csr_dewe) ch_eol <= #1 de_csr[`WDMA_ED_EOL];
+ else
+ if(ch_done_we) ch_eol <= #1 1'b0;
+ end
+ else ch_eol <= #1 1'b0;
+
+always @(posedge clk)
+ if(CH_EN & HAVE_ED)
+ begin
+ if(pointer_we) pointer_r <= #1 wb_rf_din[31:4];
+ else
+ if(this_ptr_set) pointer_r <= #1 de_csr[31:4];
+ end
+ else pointer_r <= #1 1'b0;
+
+always @(posedge clk)
+ if(CH_EN & HAVE_ED)
+ begin
+ if(this_ptr_set) pointer_sr <= #1 pointer_r;
+ end
+ else pointer_sr <= #1 1'b0;
+
+// ---------------------------------------------------
+// CSR
+
+always @(posedge clk or negedge rst)
+ if(!rst) ch_csr_r <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(ch_csr_we) ch_csr_r <= #1 wb_rf_din[8:0];
+ else
+ begin
+ 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];
+ end
+ end
+
+// done bit
+always @(posedge clk or negedge rst)
+ if(!rst) ch_done <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(ch_csr_we) ch_done <= #1 !wb_rf_din[`WDMA_CH_EN];
+ else
+ if(ch_done_we) ch_done <= #1 1'b1;
+ end
+
+// busy bit
+always @(posedge clk)
+ ch_busy <= #1 CH_EN & (ch_sel==CH_NO) & dma_busy;
+
+// stop bit
+always @(posedge clk)
+ ch_stop <= #1 CH_EN & ch_csr_we & wb_rf_din[`WDMA_STOP];
+
+// error bit
+always @(posedge clk or negedge rst)
+ if(!rst) ch_err <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(ch_err_we) ch_err <= #1 1'b1;
+ else
+ if(ch_csr_re) ch_err <= #1 1'b0;
+ end
+
+// Priority Bits
+always @(posedge clk or negedge rst)
+ if(!rst) ch_csr_r2 <= #1 3'h0;
+ else
+ if(CH_EN & ch_csr_we) ch_csr_r2 <= #1 wb_rf_din[15:13];
+
+// Restart Enable Bit (REST)
+always @(posedge clk or negedge rst)
+ if(!rst) rest_en <= #1 1'b0;
+ else
+ if(CH_EN & ch_csr_we) rest_en <= #1 wb_rf_din[16];
+
+// INT Mask
+always @(posedge clk or negedge rst)
+ if(!rst) ch_csr_r3 <= #1 3'h0;
+ else
+ if(CH_EN & ch_csr_we) ch_csr_r3 <= #1 wb_rf_din[19:17];
+
+// INT Source
+always @(posedge clk or negedge rst)
+ if(!rst) int_src_r[2] <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(chunk_done_we) int_src_r[2] <= #1 1'b1;
+ else
+ if(ch_csr_re) int_src_r[2] <= #1 1'b0;
+ end
+
+always @(posedge clk or negedge rst)
+ if(!rst) int_src_r[1] <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(ch_done_we) int_src_r[1] <= #1 1'b1;
+ else
+ if(ch_csr_re) int_src_r[1] <= #1 1'b0;
+ end
+
+always @(posedge clk or negedge rst)
+ if(!rst) int_src_r[0] <= #1 1'b0;
+ else
+ if(CH_EN)
+ begin
+ if(ch_err_we) int_src_r[0] <= #1 1'b1;
+ else
+ if(ch_csr_re) int_src_r[0] <= #1 1'b0;
+ end
+
+// Interrupt Output
+assign int = |(int_src_r & ch_csr_r3) & CH_EN;
+
+// ---------------------------------------------------
+// TXZS
+always @(posedge clk)
+ if(CH_EN)
+ begin
+ if(ch_txsz_we)
+ {ch_chk_sz_r, ch_tot_sz_r} <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
+ else
+ if(ch_txsz_dewe)
+ ch_tot_sz_r <= #1 de_txsz;
+ else
+ if(ch_rl)
+ {ch_chk_sz_r, ch_tot_sz_r} <= #1 ch_txsz_s;
+ end
+
+// txsz shadow register
+always @(posedge clk)
+ if(CH_EN & HAVE_ARS)
+ begin
+
+ if(ch_txsz_we) ch_txsz_s <= #1 {wb_rf_din[26:16], wb_rf_din[11:0]};
+ else
+ if(rest_en & ch_txsz_dewe & de_fetch_descr)
+ ch_txsz_s[11:0] <= #1 de_txsz[11:0];
+ end
+
+// Infinite Size indicator
+always @(posedge clk)
+ if(CH_EN)
+ begin
+ if(ch_txsz_we) ch_sz_inf <= #1 wb_rf_din[15];
+ end
+
+// ---------------------------------------------------
+// ADR0
+always @(posedge clk)
+ if(CH_EN)
+ begin
+ if(ch_adr0_we) ch_adr0_r <= #1 wb_rf_din[31:2];
+ else
+ if(ch_adr0_dewe) ch_adr0_r <= #1 de_adr0[31:2];
+ else
+ if(ch_rl) ch_adr0_r <= #1 ch_adr0_s;
+ end
+
+// Adr0 shadow register
+always @(posedge clk)
+ if(CH_EN & HAVE_ARS)
+ begin
+ if(ch_adr0_we) ch_adr0_s <= #1 wb_rf_din[31:2];
+ else
+ if(rest_en & ch_adr0_dewe & de_fetch_descr)
+ ch_adr0_s <= #1 de_adr0[31:2];
+ end
+
+// ---------------------------------------------------
+// AM0
+always @(posedge clk or negedge rst)
+ if(!rst) ch_am0_r <= #1 28'hfffffff;
+ else
+ if(ch_am0_we) ch_am0_r <= #1 wb_rf_din[31:4];
+
+// ---------------------------------------------------
+// ADR1
+always @(posedge clk)
+ if(CH_EN)
+ begin
+ if(ch_adr1_we) ch_adr1_r <= #1 wb_rf_din[31:2];
+ else
+ if(ch_adr1_dewe) ch_adr1_r <= #1 de_adr1[31:2];
+ else
+ if(ch_rl) ch_adr1_r <= #1 ch_adr1_s;
+ end
+
+// Adr1 shadow register
+always @(posedge clk)
+ if(CH_EN & HAVE_ARS)
+ begin
+ if(ch_adr1_we) ch_adr1_s <= #1 wb_rf_din[31:2];
+ else
+ if(rest_en & ch_adr1_dewe & de_fetch_descr)
+ ch_adr1_s <= #1 de_adr1[31:2];
+ end
+
+// ---------------------------------------------------
+// AM1
+always @(posedge clk or negedge rst)
+ if(!rst) ch_am1_r <= #1 28'hfffffff;
+ else
+ if(ch_am1_we & CH_EN & HAVE_CBUF) ch_am1_r <= #1 wb_rf_din[31:4];
+
+// ---------------------------------------------------
+// Software Pointer
+always @(posedge clk or negedge rst)
+ if(!rst) sw_pointer_r <= #1 28'h0;
+ else
+ if(sw_pointer_we & CH_EN & HAVE_CBUF) sw_pointer_r <= #1 wb_rf_din[31:4];
+
+// ---------------------------------------------------
+// Software Pointer Match logic
+
+assign cmp_adr = ch_csr[2] ? ch_adr1[30:2] : ch_adr0[30:2];
+
+always @(posedge clk)
+ ch_dis <= #1 CH_EN & HAVE_CBUF & (sw_pointer[30:2] == cmp_adr) & sw_pointer[31];
+
+endmodule
+
+
+module wb_dma_ch_rf_dummy(clk, rst,
+ pointer, pointer_s, ch_csr, ch_txsz, ch_adr0, ch_adr1,
+ ch_am0, ch_am1, sw_pointer, ch_stop, ch_dis, int,
+
+ wb_rf_din, wb_rf_adr, wb_rf_we, wb_rf_re,
+
+ // DMA Registers Write Back Channel Select
+ ch_sel, ndnr,
+
+ // DMA Engine Status
+ dma_busy, dma_err, dma_done, dma_done_all,
+
+ // DMA Engine Reg File Update ctrl signals
+ de_csr, de_txsz, de_adr0, de_adr1,
+ de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we,
+ de_fetch_descr, dma_rest,
+ ptr_set
+
+ );
+
+parameter CH_NO = 0;
+parameter HAVE_ARS = 1;
+parameter HAVE_ED = 1;
+parameter HAVE_CBUF= 1;
+
+input clk, rst;
+
+output [31:0] pointer;
+output [31:0] pointer_s;
+output [31:0] ch_csr;
+output [31:0] ch_txsz;
+output [31:0] ch_adr0;
+output [31:0] ch_adr1;
+output [31:0] ch_am0;
+output [31:0] ch_am1;
+output [31:0] sw_pointer;
+output ch_stop;
+output ch_dis;
+output int;
+
+input [31:0] wb_rf_din;
+input [7:0] wb_rf_adr;
+input wb_rf_we;
+input wb_rf_re;
+
+input [4:0] ch_sel;
+input ndnr;
+
+// DMA Engine Status
+input dma_busy, dma_err, dma_done, dma_done_all;
+
+// DMA Engine Reg File Update ctrl signals
+input [31:0] de_csr;
+input [11:0] de_txsz;
+input [31:0] de_adr0;
+input [31:0] de_adr1;
+input de_csr_we, de_txsz_we, de_adr0_we, de_adr1_we, ptr_set;
+input de_fetch_descr;
+input dma_rest;
+
+assign pointer = 32'h0;
+assign pointer_s = 32'h0;
+assign ch_csr = 32'h0;
+assign ch_txsz = 32'h0;
+assign ch_adr0 = 32'h0;
+assign ch_adr1 = 32'h0;
+assign ch_am0 = 32'h0;
+assign ch_am1 = 32'h0;
+assign sw_pointer = 32'h0;
+assign ch_stop = 1'b0;
+assign ch_dis = 1'b0;
+assign int = 1'b0;
+
+endmodule
Index: wb_dma/trunk/doc/dma_doc.pdf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: wb_dma/trunk/doc/dma_doc.pdf
===================================================================
--- wb_dma/trunk/doc/dma_doc.pdf (nonexistent)
+++ wb_dma/trunk/doc/dma_doc.pdf (revision 17)
wb_dma/trunk/doc/dma_doc.pdf
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: wb_dma/trunk/doc/STATUS.txt
===================================================================
--- wb_dma/trunk/doc/STATUS.txt (nonexistent)
+++ wb_dma/trunk/doc/STATUS.txt (revision 17)
@@ -0,0 +1,60 @@
+This file describes the current status of the checked in HDL code.
+Please submit all bugs/comments/suggestions regarding the DMA core
+to: cores@opencores.org
+
+Need Help
+---------
+I'm looking for help in verifying the core. If you think you can help,
+please send an email to the list or to me directly.
+Even though I have written a test bench and a few test, I would prefer
+if someone else could verify the core as well.
+
+
+STATUS
+======
+
+Latest Release (10/19/2001)
+---------------------------
+- Made the core parameterizable - no more editing of the
+ wb_defines.v file, just pass the configuration to the core
+ when instantiating it !
+
+Third Release (7/27/2001)
+--------------------------
+- Added dma_rest_i. It allows to restart the current transfer at
+ the beginning. Beginning is defined as the original values that
+ where either written to the channel registers, or where fetched
+ from the last external descriptor fetch.
+- Made some minor changes:
+ - Parametarized HW handshake signals (ack, req, nd, rest)
+- There still might be many bugs ! Only little testing has been done !
+- Please do not modify the sources (yet !) ! I'm still working on the core.
+- Things that are not implemented yet, or are known not to work yet:
+ - The DMA currently ignores the RTY_I (retry) input.
+
+
+Second Release (5/6/2001)
+-------------------------
+- Made many, many changes, almost rewrote the entire thing !
+ The main changes are:
+
+ - Added Support of up to 31 channels
+ - Added support for 2,4 and 8 priority levels
+ - Now can have up to 31 channels
+ - Added many configuration items
+ - Changed reset to async
+
+- There still might be many bugs ! Only little testing has been done !
+- Please do not modify the sources (yet !) ! I'm still working on the core.
+- Things that are not implemented yet, or are known not to work yet:
+ - The DMA currently ignores the RTY_I (retry) input.
+
+
+Initial Release (19/3/2001)
+---------------------------
+- This is the very first release of the core
+- There might be still many bugs ! Only little testing has been done !
+- Please do not modify the sources (yet !) ! I'm still working on the core.
+- Things that are not implemented yet, or are known not to work yet:
+ - The DMA currently ignores the RTY_I (retry) input.
+
Index: wb_dma/trunk/doc/README.txt
===================================================================
--- wb_dma/trunk/doc/README.txt (nonexistent)
+++ wb_dma/trunk/doc/README.txt (revision 17)
@@ -0,0 +1,43 @@
+
+The WISHBONE DMA/Bridge Project Page is:
+http://www.opencores.org/cores/wb_dma/
+
+To find out more about me (Rudolf Usselmann), please visit:
+http://www.asics.ws
+
+Directory Structure
+-------------------
+[core_root]
+ |
+ +-doc Documentation
+ |
+ +-bench--+ Test Bench
+ | +- verilog Verilog Sources
+ | +-vhdl VHDL Sources
+ |
+ +-rtl----+ Core RTL Sources
+ | +-verilog Verilog Sources
+ | +-vhdl VHDL Sources
+ |
+ +-sim----+
+ | +-rtl_sim---+ Functional verification Directory
+ | | +-bin Makefiles/Run Scripts
+ | | +-run Working Directory
+ | |
+ | +-gate_sim--+ Functional & Timing Gate Level
+ | | Verification Directory
+ | +-bin Makefiles/Run Scripts
+ | +-run Working Directory
+ |
+ +-lint--+ Lint Directory Tree
+ | +-bin Makefiles/Run Scripts
+ | +-run Working Directory
+ | +-log Linter log & result files
+ |
+ +-syn---+ Synthesis Directory Tree
+ | +-bin Synthesis Scripts
+ | +-run Working Directory
+ | +-log Synthesis log files
+ | +-out Synthesis Output
+
+
Index: wb_dma/trunk/syn/bin/comp.dc
===================================================================
--- wb_dma/trunk/syn/bin/comp.dc (nonexistent)
+++ wb_dma/trunk/syn/bin/comp.dc (revision 17)
@@ -0,0 +1,121 @@
+#################################################################################
+#
+# Actual Synthesis Script
+#
+# This script does the actual synthesis
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+#################################################################################
+
+# ==============================================
+# Setup Design Parameters
+source ../bin/design_spec.dc
+
+# ==============================================
+# Setup Libraries
+source ../bin/lib_spec.dc
+
+# ==============================================
+# Setup IO Files
+
+append log_file ../log/$active_design "_cmp.log"
+append pre_comp_db_file ../out/$design_name "_pre.db"
+append post_comp_db_file ../out/$design_name ".db"
+append post_syn_verilog_file ../out/$design_name "_ps.v"
+
+set junk_file /dev/null
+sh rm -f $log_file
+
+# ==============================================
+# Setup Misc Variables
+
+set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
+
+# ==============================================
+# Read Design
+
+echo "+++++++++ Reading Design ..." >> $log_file
+read_file $pre_comp_db_file >> $log_file
+
+# ==============================================
+# Operating conditions
+
+echo "+++++++++ Setting up Operation Conditions ..." >> $log_file
+current_design $design_name
+set_operating_conditions WORST >> $log_file
+
+# Turn off automatic wire load selection, as this
+# always (WHY ???) defaults to "zero_load"
+#set auto_wire_load_selection false
+
+#set_wire_load_mode enclosed >> $log_file
+#set_wire_load_mode top >> $log_file
+#set_wire_load_model -name suggested_40K >> $log_file
+
+# ==============================================
+# Setup Clocks and Resets
+
+echo "+++++++++ Setting up Clocks ..." >> $log_file
+
+set_drive 0 [find port {clk_i}]
+
+# !!! WISHBONE Clock !!!
+set clock_period 5
+create_clock -period $clock_period clk_i
+set_clock_skew -uncertainty 0.2 clk_i
+set_clock_transition 0.2 clk_i
+set_dont_touch_network clk_i
+
+# !!! Reset !!!
+set_drive 0 [find port {rst*}]
+set_dont_touch_network [find port {rst*}]
+
+# ==============================================
+# Setup IOs
+
+echo "+++++++++ Setting up IOs ..." >> $log_file
+
+# Need to spell out external IOs
+
+set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file
+set_load 0.2 [all_outputs]
+
+set_input_delay 2.0 -clock clk_i [all_inputs]
+set_output_delay 2.0 -clock clk_i [all_outputs]
+
+# ==============================================
+# Setup Area Constrains
+set_max_area 0.0
+set compile_sequential_area_recovery true
+
+# ==============================================
+# Force Ultra
+set_ultra_optimization -f
+
+# ==============================================
+# Compile Design
+
+echo "+++++++++ Starting Compile ..." >> $log_file
+compile -map_effort low -area_effort low >> $log_file
+#compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file
+
+# ==============================================
+# Write Out the optimized design
+
+echo "+++++++++ Saving Optimized Design ..." >> $log_file
+write_file -hierarchy -format verilog -output $post_syn_verilog_file
+write_file -hierarchy -format db -output $post_comp_db_file
+
+# ==============================================
+# Create Some Basic Reports
+
+echo "+++++++++ Reporting Final Results ..." >> $log_file
+report_timing -nworst 10 >> $log_file
+report_area >> $log_file
+
Index: wb_dma/trunk/syn/bin/lib_spec.dc
===================================================================
--- wb_dma/trunk/syn/bin/lib_spec.dc (nonexistent)
+++ wb_dma/trunk/syn/bin/lib_spec.dc (revision 17)
@@ -0,0 +1,36 @@
+#################################################################################
+#
+# Library Specification
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+#################################################################################
+
+# ==============================================
+# Setup Libraries
+
+set search_path [list $search_path . \
+ /tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \
+ $hdl_src_dir]
+
+set snps [getenv "SYNOPSYS"]
+
+set synthetic_library ""
+append synthetic_library $snps "/libraries/syn/dw01.sldb "
+append synthetic_library $snps "/libraries/syn/dw02.sldb "
+append synthetic_library $snps "/libraries/syn/dw03.sldb "
+append synthetic_library $snps "/libraries/syn/dw04.sldb "
+append synthetic_library $snps "/libraries/syn/dw05.sldb "
+append synthetic_library $snps "/libraries/syn/dw06.sldb "
+append synthetic_library $snps "/libraries/syn/dw07.sldb "
+
+set target_library { umcl18u250t2_wc.db }
+set link_library ""
+append link_library $target_library " " $synthetic_library
+set symbol_library { umcl18u250t2.sdb }
+
Index: wb_dma/trunk/syn/bin/design_spec.dc
===================================================================
--- wb_dma/trunk/syn/bin/design_spec.dc (nonexistent)
+++ wb_dma/trunk/syn/bin/design_spec.dc (revision 17)
@@ -0,0 +1,26 @@
+#################################################################################
+#
+# Design Specification
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+#################################################################################
+
+# ==============================================
+# Setup Design Parameters
+
+set design_files {wb_dma_inc30r wb_dma_ch_arb wb_dma_pri_enc_sub wb_dma_ch_pri_enc wb_dma_ch_sel wb_dma_ch_rf wb_dma_rf wb_dma_wb_mast wb_dma_wb_slv wb_dma_wb_if wb_dma_de wb_dma_top }
+
+set design_name wb_dma_top
+set active_design wb_dma_top
+
+# Next Statement defines all clocks and resets in the design
+set special_net {rst clk}
+
+set hdl_src_dir ../../rtl/verilog/
+
Index: wb_dma/trunk/syn/bin/read.dc
===================================================================
--- wb_dma/trunk/syn/bin/read.dc (nonexistent)
+++ wb_dma/trunk/syn/bin/read.dc (revision 17)
@@ -0,0 +1,65 @@
+#################################################################################
+#
+# Pre Synthesis Script
+#
+# This script only reads in the design and saves it in a DB file
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+#################################################################################
+
+# ==============================================
+# Setup Design Parameters
+source ../bin/design_spec.dc
+
+# ==============================================
+# Setup Libraries
+source ../bin/lib_spec.dc
+
+# ==============================================
+# Setup IO Files
+
+append log_file ../log/$active_design "_pre.log"
+append pre_comp_db_file ../out/$design_name "_pre.db"
+sh rm -f $log_file
+
+# ==============================================
+# Setup Misc Variables
+
+set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
+
+# ==============================================
+# Read Design
+
+echo "+++++++++ Analyzing all design files ..." >> $log_file
+
+foreach module $design_files {
+ echo "+++++++++ Reading: $module" >> $log_file
+ echo +++++++++ Reading: $module
+ set module_file_name ""
+ append module_file_name $module ".v"
+ analyze -f verilog $module_file_name >> $log_file
+ elaborate $module >> $log_file
+ }
+
+current_design $active_design
+
+echo "+++++++++ Linking Design ..." >> $log_file
+link >> $log_file
+
+echo "+++++++++ Uniquifying Design ..." >> $log_file
+uniquify >> $log_file
+
+echo "+++++++++ Checking Design ..." >> $log_file
+check_design >> $log_file
+
+# ==============================================
+# Save Design
+echo "+++++++++ Saving Design ..." >> $log_file
+write_file -hierarchy -format db -output $pre_comp_db_file
+
Index: wb_dma/trunk
===================================================================
--- wb_dma/trunk (nonexistent)
+++ wb_dma/trunk (revision 17)
wb_dma/trunk
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: wb_dma/web_uploads
===================================================================
--- wb_dma/web_uploads (nonexistent)
+++ wb_dma/web_uploads (revision 17)
wb_dma/web_uploads
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: wb_dma/branches
===================================================================
--- wb_dma/branches (nonexistent)
+++ wb_dma/branches (revision 17)
wb_dma/branches
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: wb_dma/tags/start/doc/STATUS.txt
===================================================================
--- wb_dma/tags/start/doc/STATUS.txt (nonexistent)
+++ wb_dma/tags/start/doc/STATUS.txt (revision 17)
@@ -0,0 +1,23 @@
+This file describes the current status of the checked in HDL code.
+Please submit all bugs/comments/suggestions regarding the DMA core
+to: cores@opencores.org
+
+Need Help
+---------
+I'm looking for help in verifying the core. If you think you can help,
+please send an email to the list or to me directly.
+Even though I have written a test bench and a few test, I would prefer
+if someone else could verify the core as well.
+
+
+STATUS
+======
+
+Initial Release (19/3/2001)
+---------------------------
+- This is the very first release of the core
+- There might be still many bugs ! Only little testing has been done !
+- Please do not modify the sources (yet !) ! I'm still working on the core.
+- Things that are not implemented yet, or are known not to work yet:
+ - The DMA currently ignores the RTY_I (retry) input.
+
Index: wb_dma/tags/start/doc/README.txt
===================================================================
--- wb_dma/tags/start/doc/README.txt (nonexistent)
+++ wb_dma/tags/start/doc/README.txt (revision 17)
@@ -0,0 +1,10 @@
+
+The WISHBONE DMA/Bridge Project Page is:
+http://www.opencores.org/cores/wb_dma/
+
+The WISHBONE DMA/Bridge core specification can be downloaded from:
+http://www.opencores.org/cores/wb_dma/dma_doc.pdf
+
+To find out more about me (Rudolf Usselmann), please visit:
+http://www.asics.ws
+
Index: wb_dma/tags
===================================================================
--- wb_dma/tags (nonexistent)
+++ wb_dma/tags (revision 17)
wb_dma/tags
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##