1 |
2 |
dsmv |
//////////////////////////////////////////////////////////////////////////////////
|
2 |
|
|
// Company: ;)
|
3 |
|
|
// Engineer: Kuzmi4
|
4 |
|
|
//
|
5 |
|
|
// Create Date: 14:39:52 05/19/2010
|
6 |
|
|
// Design Name:
|
7 |
|
|
// Module Name: tb/core64_pb_wishbone_ctrl
|
8 |
|
|
// Project Name: DS_DMA
|
9 |
|
|
// Target Devices: no
|
10 |
|
|
// Tool versions: any with SV support
|
11 |
|
|
// Description:
|
12 |
|
|
//
|
13 |
|
|
// Simple TB, waveform oriented.
|
14 |
|
|
//
|
15 |
|
|
//
|
16 |
|
|
// Revision:
|
17 |
|
|
// Revision 0.01 - File Created
|
18 |
|
|
//
|
19 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
20 |
|
|
`timescale 1ns / 1ps
|
21 |
|
|
|
22 |
|
|
//
|
23 |
|
|
`include "ds_dma_pb_if.v"
|
24 |
|
|
`include "wb_simple_ram_slave_if.v"
|
25 |
|
|
`include "wb_slave_if.v"
|
26 |
|
|
|
27 |
|
|
module tb;
|
28 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
29 |
|
|
//
|
30 |
|
|
parameter p_Tclk = 10ns;
|
31 |
|
|
parameter p_Trst = 120ns;
|
32 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
33 |
|
|
// Declare SYS_CON stuff:
|
34 |
|
|
reg s_sys_clk;
|
35 |
|
|
reg s_sys_rst;
|
36 |
|
|
// Declare
|
37 |
|
|
logic [63:0] sv_ds_dma_income_data_0;
|
38 |
|
|
logic [63:0] sv_ds_dma_income_data_1 [512];
|
39 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
40 |
|
|
//
|
41 |
|
|
// System Clock:
|
42 |
|
|
//
|
43 |
|
|
always
|
44 |
|
|
begin : SYS_CLK
|
45 |
|
|
#(p_Tclk/2) s_sys_clk <= !s_sys_clk;
|
46 |
|
|
end
|
47 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
48 |
|
|
//
|
49 |
|
|
// Instantiate TEST IF's:
|
50 |
|
|
//
|
51 |
|
|
// PB_IF:
|
52 |
|
|
ds_dma_pb_if DS_DMA_PB_IF(s_sys_clk);
|
53 |
|
|
// WBS IF (+TB params):
|
54 |
|
|
wb_simple_ram_slave_if #(32, 64, 8) WB_SLAVE(s_sys_clk, s_sys_rst);
|
55 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
56 |
|
|
//
|
57 |
|
|
// Local Initial PowerOnReset:
|
58 |
|
|
//
|
59 |
|
|
initial
|
60 |
|
|
begin : init_POR
|
61 |
|
|
//
|
62 |
|
|
$timeformat(-9, 3, " ns", 10);
|
63 |
|
|
//
|
64 |
|
|
s_sys_clk <= 0;
|
65 |
|
|
s_sys_rst <= 0;
|
66 |
|
|
DS_DMA_PB_IF.init();
|
67 |
|
|
|
68 |
|
|
// PowerOnReset case
|
69 |
|
|
s_sys_rst <= 1; #p_Trst;
|
70 |
|
|
s_sys_rst <= 0;
|
71 |
|
|
|
72 |
|
|
end
|
73 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
74 |
|
|
//
|
75 |
|
|
// Test:
|
76 |
|
|
//
|
77 |
|
|
initial
|
78 |
|
|
begin : TB
|
79 |
|
|
//
|
80 |
|
|
do @(posedge s_sys_clk);
|
81 |
|
|
while (s_sys_rst); #1us;
|
82 |
|
|
//
|
83 |
|
|
DS_DMA_PB_IF.write_1_word (32'h1234_5678, 64'h0123_4567_89AB_CDEF); #100ns;
|
84 |
|
|
DS_DMA_PB_IF.write_1_word (32'h5678_1234, 64'h89AB_CDEF_0123_4567); #100ns;
|
85 |
|
|
DS_DMA_PB_IF.write_512_word(32'h8765_4321, 64'h0000_0000_0000_0001); #100ns;#6us; // for now, req w8 while previous transfer ends
|
86 |
|
|
DS_DMA_PB_IF.read_1_word (32'h5612_7834, sv_ds_dma_income_data_0); #100ns;
|
87 |
|
|
DS_DMA_PB_IF.read_512_word (32'h7834_1256, sv_ds_dma_income_data_1); #100ns;
|
88 |
|
|
//DS_DMA_PB_IF.write_512_word(32'h8765_4321, 64'hCDEF_4567_89AB_0123); #1us;
|
89 |
|
|
//
|
90 |
|
|
#6us;
|
91 |
|
|
$finish(2);
|
92 |
|
|
end
|
93 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
94 |
|
|
//
|
95 |
|
|
// Instantiate DesignUnderTest:
|
96 |
|
|
//
|
97 |
|
|
core64_pb_wishbone_ctrl
|
98 |
|
|
DUT
|
99 |
|
|
(
|
100 |
|
|
// SYS_CON (same for PB/WB bus)
|
101 |
|
|
.i_clk (s_sys_clk),
|
102 |
|
|
.i_rst (s_sys_rst),
|
103 |
|
|
//
|
104 |
|
|
// PB_MASTER (in) IF
|
105 |
|
|
.i_pb_master_stb0 (DS_DMA_PB_IF.o_pb_master_stb0), // CMD STB
|
106 |
|
|
.i_pb_master_stb1 (DS_DMA_PB_IF.o_pb_master_stb1), // DATA STB
|
107 |
|
|
.iv_pb_master_cmd (DS_DMA_PB_IF.ov_pb_master_cmd), // CMD
|
108 |
|
|
.iv_pb_master_addr (DS_DMA_PB_IF.ov_pb_master_addr), // ADDR
|
109 |
|
|
.iv_pb_master_data (DS_DMA_PB_IF.ov_pb_master_data), // DATA
|
110 |
|
|
//
|
111 |
|
|
// PB_SLAVE (out) IF:
|
112 |
|
|
.o_pb_slave_ready (DS_DMA_PB_IF.i_pb_slave_ready), //
|
113 |
|
|
.o_pb_slave_complete(DS_DMA_PB_IF.i_pb_slave_complete), //
|
114 |
|
|
.o_pb_slave_stb0 (DS_DMA_PB_IF.i_pb_slave_stb0), // WR CMD ACK STB (to pcie_core64_m6)
|
115 |
|
|
.o_pb_slave_stb1 (DS_DMA_PB_IF.i_pb_slave_stb1), // DATA ACK STB (to pcie_core64_m6)
|
116 |
|
|
.ov_pb_slave_data (DS_DMA_PB_IF.iv_pb_slave_data), // DATA (to pcie_core64_m6)
|
117 |
|
|
.ov_pb_slave_dmar (DS_DMA_PB_IF.iv_pb_slave_dmar), // ...
|
118 |
|
|
.o_pb_slave_irq (DS_DMA_PB_IF.i_pb_slave_irq), // ...
|
119 |
|
|
//
|
120 |
|
|
// WB BUS:
|
121 |
|
|
.ov_wbm_addr (WB_SLAVE.adr_i),
|
122 |
|
|
.ov_wbm_data (WB_SLAVE.dat_i),
|
123 |
|
|
.ov_wbm_sel (WB_SLAVE.sel_i),
|
124 |
|
|
.o_wbm_we (WB_SLAVE.we_i),
|
125 |
|
|
.o_wbm_cyc (WB_SLAVE.cyc_i),
|
126 |
|
|
.o_wbm_stb (WB_SLAVE.stb_i),
|
127 |
|
|
.ov_wbm_cti (), // Cycle Type Identifier Address Tag
|
128 |
|
|
.ov_wbm_bte (), // Burst Type Extension Address Tag
|
129 |
|
|
|
130 |
|
|
.iv_wbm_data (WB_SLAVE.dat_o), //
|
131 |
|
|
.i_wbm_ack (WB_SLAVE.ack_o), //
|
132 |
|
|
.i_wbm_err (WB_SLAVE.err_o), // error input - abnormal cycle termination
|
133 |
|
|
.i_wbm_rty (WB_SLAVE.rty_o), // retry input - interface is not ready
|
134 |
|
|
|
135 |
|
|
.i_wdm_irq_0 (1'b0),
|
136 |
|
|
.iv_wbm_irq_dmar (2'b0)
|
137 |
|
|
|
138 |
|
|
);
|
139 |
|
|
//////////////////////////////////////////////////////////////////////////////////
|
140 |
|
|
endmodule
|