OpenCores
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 8 to Rev 9
    Reverse comparison

Rev 8 → Rev 9

/trunk/bench/verilog/wb_mast_model.v
11,7 → 11,7
//// ////
/////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2001 Rudolf Usselmann ////
//// Copyright (C) 2000 Rudolf Usselmann ////
//// rudi@asics.ws ////
//// ////
//// This source file may be used and distributed without ////
37,10 → 37,10
 
// CVS Log
//
// $Id: wb_mast_model.v,v 1.1 2001-07-29 08:57:02 rudi Exp $
// $Id: wb_mast_model.v,v 1.2 2001-09-07 15:34:36 rudi Exp $
//
// $Date: 2001-07-29 08:57:02 $
// $Revision: 1.1 $
// $Date: 2001-09-07 15:34:36 $
// $Revision: 1.2 $
// $Author: rudi $
// $Locker: $
// $State: Exp $
47,11 → 47,17
//
// 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:11:34 rudi
// Initial Release
//
//
//
//
 
`include "wb_model_defines.v"
 
71,6 → 77,8
// Local Wires
//
 
parameter mem_size = 4096;
 
reg [31:0] adr;
reg [31:0] dout;
reg cyc, stb;
77,6 → 85,11
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
92,10 → 105,28
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;n<mem_size;n=n+1)
begin
rd_mem[n] = $random;
wr_mem[n] = $random;
end
end
endtask
 
////////////////////////////////////////////////////////////////////
//
// Write 1 Word Task
118,20 → 149,20
sel = s;
 
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#1;
cyc=0;
stb=0;
adr = 32'hxxxx_xxxx;
//adr = 32'hffff_ffff;
//adr = 0;
dout = 32'hxxxx_xxxx;
we = 1'hx;
sel = 4'hx;
 
//@(posedge clk);
end
endtask
 
 
////////////////////////////////////////////////////////////////////
//
// Write 4 Words Task
164,7 → 195,7
dout = d1;
stb = 1;
we=1;
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
181,7 → 212,7
dout = d2;
we=1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
197,7 → 228,7
dout = d3;
we=1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
213,12 → 244,14
dout = d4;
we=1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#1;
stb=0;
cyc=0;
 
adr = 32'hxxxx_xxxx;
//adr = 0;
//adr = 32'hffff_ffff;
dout = 32'hxxxx_xxxx;
we = 1'hx;
sel = 4'hx;
227,6 → 260,240
endtask
 
 
task wb_wr_mult;
input [31:0] a;
input [3:0] s;
input delay;
input count;
 
integer delay;
integer count;
integer n;
 
begin
 
@(posedge clk);
#1;
cyc = 1;
 
for(n=0;n<count;n=n+1)
begin
repeat(delay)
begin
@(posedge clk);
#1;
end
adr = a + (n*4);
dout = wr_mem[n + wr_cnt];
stb = 1;
we=1;
sel = s;
if(n!=0) @(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
sel = 4'hx;
dout = 32'hxxxx_xxxx;
adr = 32'hxxxx_xxxx;
end
 
cyc=0;
 
adr = 32'hxxxx_xxxx;
//adr = 32'hffff_ffff;
 
wr_cnt = wr_cnt + count;
end
endtask
 
 
task wb_rmw;
input [31:0] a;
input [3:0] s;
input delay;
input rcount;
input wcount;
 
integer delay;
integer rcount;
integer wcount;
integer n;
 
begin
 
@(posedge clk);
#1;
cyc = 1;
we = 0;
sel = s;
repeat(delay) @(posedge clk);
 
for(n=0;n<rcount-1;n=n+1)
begin
adr = a + (n*4);
stb = 1;
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
//$display("Rd Mem[%0d]: %h", (n + rd_cnt), rd_mem[n + rd_cnt] );
#2;
stb=0;
we = 1'hx;
sel = 4'hx;
adr = 32'hxxxx_xxxx;
repeat(delay)
begin
@(posedge clk);
#1;
end
we = 0;
sel = s;
end
 
adr = a+(n*4);
stb = 1;
@(posedge clk);
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
//$display("Rd Mem[%0d]: %h", (n + rd_cnt), rd_mem[n + rd_cnt] );
#1;
stb=0;
we = 1'hx;
sel = 4'hx;
adr = 32'hxxxx_xxxx;
 
rd_cnt = rd_cnt + rcount;
 
//@(posedge clk);
 
 
for(n=0;n<wcount;n=n+1)
begin
repeat(delay)
begin
@(posedge clk);
#1;
end
adr = a + (n*4);
dout = wr_mem[n + wr_cnt];
stb = 1;
we=1;
sel = s;
// if(n!=0)
@(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
sel = 4'hx;
dout = 32'hxxxx_xxxx;
adr = 32'hxxxx_xxxx;
end
 
cyc=0;
 
adr = 32'hxxxx_xxxx;
//adr = 32'hffff_ffff;
 
wr_cnt = wr_cnt + wcount;
end
endtask
 
 
 
 
task wb_wmr;
input [31:0] a;
input [3:0] s;
input delay;
input rcount;
input wcount;
 
integer delay;
integer rcount;
integer wcount;
integer n;
 
begin
 
@(posedge clk);
#1;
cyc = 1;
we = 1'bx;
sel = 4'hx;
sel = s;
 
for(n=0;n<wcount;n=n+1)
begin
repeat(delay)
begin
@(posedge clk);
#1;
end
adr = a + (n*4);
dout = wr_mem[n + wr_cnt];
stb = 1;
we=1;
sel = s;
@(posedge clk);
while(~ack & ~err) @(posedge clk);
#2;
stb=0;
we=1'bx;
sel = 4'hx;
dout = 32'hxxxx_xxxx;
adr = 32'hxxxx_xxxx;
end
 
wr_cnt = wr_cnt + wcount;
stb=0;
repeat(delay) @(posedge clk);
#1;
 
sel = s;
we = 0;
for(n=0;n<rcount-1;n=n+1)
begin
adr = a + (n*4);
stb = 1;
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
//$display("Rd Mem[%0d]: %h", (n + rd_cnt), rd_mem[n + rd_cnt] );
#2;
stb=0;
we = 1'hx;
sel = 4'hx;
adr = 32'hxxxx_xxxx;
repeat(delay)
begin
@(posedge clk);
#1;
end
we = 0;
sel = s;
end
 
adr = a+(n*4);
stb = 1;
@(posedge clk);
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
rd_cnt = rd_cnt + rcount;
//$display("Rd Mem[%0d]: %h", (n + rd_cnt), rd_mem[n + rd_cnt] );
#1;
 
cyc = 0;
stb = 0;
we = 1'hx;
sel = 4'hx;
adr = 32'hxxxx_xxxx;
 
end
endtask
 
 
 
 
////////////////////////////////////////////////////////////////////
//
// Read 1 Word Task
248,7 → 515,7
sel = s;
 
//@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
d = din;
#1;
cyc=0;
291,7 → 558,7
 
adr = a;
stb = 1;
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
d1 = din;
#2;
stb=0;
308,7 → 575,7
adr = a+4;
stb = 1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
d2 = din;
#2;
stb=0;
326,7 → 593,7
adr = a+8;
stb = 1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
d3 = din;
#2;
stb=0;
343,7 → 610,7
adr = a+12;
stb = 1;
@(posedge clk);
while(~ack) @(posedge clk);
while(~ack & ~err) @(posedge clk);
d4 = din;
#1;
stb=0;
355,4 → 622,61
endtask
 
 
 
task wb_rd_mult;
input [31:0] a;
input [3:0] s;
input delay;
input count;
 
integer delay;
integer count;
integer n;
 
begin
 
@(posedge clk);
#1;
cyc = 1;
we = 0;
sel = s;
repeat(delay) @(posedge clk);
 
for(n=0;n<count-1;n=n+1)
begin
adr = a + (n*4);
stb = 1;
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
#2;
stb=0;
we = 1'hx;
sel = 4'hx;
adr = 32'hxxxx_xxxx;
repeat(delay)
begin
@(posedge clk);
#1;
end
we = 0;
sel = s;
end
 
adr = a+(n*4);
stb = 1;
@(posedge clk);
while(~ack & ~err) @(posedge clk);
rd_mem[n + rd_cnt] = din;
#1;
stb=0;
cyc=0;
we = 1'hx;
sel = 4'hx;
adr = 32'hffff_ffff;
adr = 32'hxxxx_xxxx;
 
rd_cnt = rd_cnt + count;
end
endtask
 
endmodule
/trunk/bench/verilog/test_bench_top.v
37,10 → 37,10
 
// CVS Log
//
// $Id: test_bench_top.v,v 1.2 2001-08-15 05:40:29 rudi Exp $
// $Id: test_bench_top.v,v 1.3 2001-09-07 15:34:36 rudi Exp $
//
// $Date: 2001-08-15 05:40:29 $
// $Revision: 1.2 $
// $Date: 2001-09-07 15:34:36 $
// $Revision: 1.3 $
// $Author: rudi $
// $Locker: $
// $State: Exp $
47,6 → 47,12
//
// 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
//
//
135,7 → 141,7
 
 
`define MEM 32'h0002_0000
`define REG_BASE 32'hff00_0000
`define REG_BASE 32'hb000_0000
 
`define COR 8'h0
`define INT_MASKA 8'h4
199,17 → 205,21
ack_cnt_clr = 0;
error_cnt = 0;
clk = 0;
rst = 0;
rst = 1;
rest_i = 0;
 
repeat(10) @(posedge clk);
rst = 1;
rst = 0;
repeat(10) @(posedge clk);
 
// HERE IS WHERE THE TEST CASES GO ...
 
if(1) // Full Regression Run
if(0) // Full Regression Run
begin
$display(" ......................................................");
$display(" : :");
$display(" : Long Regression Run ... :");
$display(" :....................................................:");
pt10_rd;
pt01_wr;
pt01_rd;
226,6 → 236,10
else
if(1) // Quick Regression Run
begin
$display(" ......................................................");
$display(" : :");
$display(" : Short Regression Run ... :");
$display(" :....................................................:");
pt10_rd;
pt01_wr;
pt01_rd;
245,8 → 259,9
//
// TEST DEVELOPMENT AREA
//
sw_dma1(3);
 
arb_test1;
//arb_test1;
 
repeat(100) @(posedge clk);
 
348,7 → 363,7
 
wb_slv #(14) s0(
.clk( clk ),
.rst( rst ),
.rst( ~rst ),
.adr( wb0_addr_o ),
.din( wb0s_data_o ),
.dout( wb0s_data_i ),
363,7 → 378,7
 
wb_slv #(14) s1(
.clk( clk ),
.rst( rst ),
.rst( ~rst ),
.adr( wb1_addr_o ),
.din( wb1s_data_o ),
.dout( wb1s_data_i ),
378,7 → 393,7
 
wb_mast m0(
.clk( clk ),
.rst( rst ),
.rst( ~rst ),
.adr( wb0_addr_i ),
.din( wb0m_data_o ),
.dout( wb0m_data_i ),
393,7 → 408,7
 
wb_mast m1(
.clk( clk ),
.rst( rst ),
.rst( ~rst ),
.adr( wb1_addr_i ),
.din( wb1m_data_o ),
.dout( wb1m_data_i ),
/trunk/bench/verilog/tests.v
37,10 → 37,10
 
// CVS Log
//
// $Id: tests.v,v 1.2 2001-08-15 05:40:29 rudi Exp $
// $Id: tests.v,v 1.3 2001-09-07 15:34:36 rudi Exp $
//
// $Date: 2001-08-15 05:40:29 $
// $Revision: 1.2 $
// $Date: 2001-09-07 15:34:36 $
// $Revision: 1.3 $
// $Author: rudi $
// $Locker: $
// $State: Exp $
47,6 → 47,12
//
// 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
//
//
76,10 → 82,10
$display("*** SW DMA No Buffer Ext. Descr LL ... ***");
$display("*****************************************************\n");
 
rst = 1;
repeat(10) @(posedge clk);
rst = 0;
repeat(10) @(posedge clk);
rst = 1;
repeat(10) @(posedge clk);
 
if(quick)
begin
/trunk/rtl/verilog/wb_dma_top.v
37,10 → 37,10
 
// CVS Log
//
// $Id: wb_dma_top.v,v 1.2 2001-08-15 05:40:30 rudi Exp $
// $Id: wb_dma_top.v,v 1.3 2001-09-07 15:34:38 rudi Exp $
//
// $Date: 2001-08-15 05:40:30 $
// $Revision: 1.2 $
// $Date: 2001-09-07 15:34:38 $
// $Revision: 1.3 $
// $Author: rudi $
// $Locker: $
// $State: Exp $
47,6 → 47,12
//
// 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
//
//
300,7 → 306,7
 
wb_dma_rf u0(
.clk( clk_i ),
.rst( rst_i ),
.rst( ~rst_i ),
.wb_rf_adr( slv0_adr[9:2] ),
.wb_rf_din( slv0_dout ),
.wb_rf_dout( slv0_din ),
581,7 → 587,7
// Channel Select
wb_dma_ch_sel u1(
.clk( clk_i ),
.rst( rst_i ),
.rst( ~rst_i ),
.req_i( dma_req ),
.ack_o( dma_ack ),
.nd_i( dma_nd ),
856,7 → 862,7
// DMA Engine
wb_dma_de u2(
.clk( clk_i ),
.rst( rst_i ),
.rst( ~rst_i ),
.mast0_go( mast0_go ),
.mast0_we( mast0_we ),
.mast0_adr( mast0_adr ),
907,7 → 913,7
// Wishbone Interface 0
wb_dma_wb_if u3(
.clk( clk_i ),
.rst( rst_i ),
.rst( ~rst_i ),
.wbs_data_i( wb0s_data_i ),
.wbs_data_o( wb0s_data_o ),
.wb_addr_i( wb0_addr_i ),
952,7 → 958,7
// Wishbone Interface 1
wb_dma_wb_if u4(
.clk( clk_i ),
.rst( rst_i ),
.rst( ~rst_i ),
.wbs_data_i( wb1s_data_i ),
.wbs_data_o( wb1s_data_o ),
.wb_addr_i( wb1_addr_i ),
/trunk/rtl/verilog/wb_dma_defines.v
37,10 → 37,10
 
// CVS Log
//
// $Id: wb_dma_defines.v,v 1.2 2001-08-15 05:40:30 rudi Exp $
// $Id: wb_dma_defines.v,v 1.3 2001-09-07 15:34:38 rudi Exp $
//
// $Date: 2001-08-15 05:40:30 $
// $Revision: 1.2 $
// $Date: 2001-09-07 15:34:38 $
// $Revision: 1.3 $
// $Author: rudi $
// $Locker: $
// $State: Exp $
47,6 → 47,12
//
// 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
//
//
223,7 → 229,8
// 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:24] == 8'hff)
//`define WDMA_REG_SEL (wb_addr_i[31:24] == 8'hff)
`define WDMA_REG_SEL (wb_addr_i[31:28] == 4'hb)
 
 
// CSR Bits
/trunk/sim/rtl_sim/bin/Makefile
43,6 → 43,8
INCDIR="-INCDIR ./$(DUT_SRC_DIR)/ -INCDIR ./$(TB_SRC_DIR)/"
LOGF=-LOGFILE .nclog
NCCOMMON=-CDSLIB ncwork/cds.lib -HDLVAR ncwork/hdl.var -NOCOPYRIGHT
UMC_LIB=/tools/dc_libraries/virtual_silicon/umc_lib.v
GATE_NETLIST = ../../../syn/out/wb_dma_top_ps.v
 
##########################################################################
#
77,6 → 79,26
@$(MAKE) $(MS) ncsim TOP=$(_TOP_)
@echo ""
 
gatew:
@$(MAKE) -s gate ACCESS="-ACCESS +r " WAVES="-DEFINE WAVES"
 
gate:
@echo ""
@echo "----- Running NCVLOG ... ----------"
@$(MAKE) $(MS) vlog \
TARGETS="$(UMC_LIB) $(GATE_NETLIST)" \
TB="$(_TB_)" \
INCDIR=$(INCDIR) \
WAVES="$(WAVES)"
@echo ""
@echo "----- Running NCELAB ... ----------"
@$(MAKE) $(MS) elab \
ACCESS="$(ACCESS)" TOP=$(_TOP_)
@echo ""
@echo "----- Running NCSIM ... ----------"
@$(MAKE) $(MS) ncsim TOP=$(_TOP_)
@echo ""
 
hal:
@echo ""
@echo "----- Running HAL ... ----------"
/trunk/syn/bin/comp.dc
63,14 → 63,14
 
echo "+++++++++ Setting up Clocks ..." >> $log_file
 
set_drive 0 [find port {*clk}]
set_drive 0 [find port {clk_i}]
# !!! WISHBONE Clock !!!
set clock_period 5
create_clock -period $clock_period clk
set_clock_skew -uncertainty 0.1 clk
set_clock_transition 0.5 clk
set_dont_touch_network clk
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*}]
86,12 → 86,13
set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file
set_load 0.2 [all_outputs]
 
set_input_delay -max 1 -clock clk [all_inputs]
set_output_delay -max 1 -clock clk [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
101,17 → 102,15
# Compile Design
 
echo "+++++++++ Starting Compile ..." >> $log_file
#compile -map_effort medium -area_effort medium -ungroup_all >> $log_file
compile -map_effort low -area_effort low >> $log_file
#compile -map_effort high -area_effort high -ungroup_all >> $log_file
#compile -map_effort high -area_effort high -auto_ungroup >> $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 -format verilog -output $post_syn_verilog_file
write_file -hierarchy -format db -output $post_comp_db_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
/trunk/syn/bin/lib_spec.dc
15,7 → 15,7
# Setup Libraries
 
set search_path [list $search_path . \
/tools/dc_libraries/umc/umc_0.18/UMCL18U250D2_2.1/design_compiler/ \
/tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \
$hdl_src_dir]
 
set snps [getenv "SYNOPSYS"]

powered by: WebSVN 2.1.0

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