OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [projects/] [sp605_lx45t_wishbone/] [src/] [testbench/] [modelsim/] [required_tests/] [test0/] [block_check_wb_burst_slave_0.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
//////////////////////////////////////////////////////////////////////////////////
2
// Company:         ;)
3
// Engineer:        Kuzmi4
4
// 
5
// Create Date:     14:39:52 05/19/2010 
6
// Design Name: 
7
// Module Name:     block_check_wb_burst_slave_0
8
// Project Name:    DS_DMA
9
// Target Devices:  any
10
// Tool versions:   
11
// Description:     
12
//                  This component designed for test "pcie_core64_m6" inner logis (dsmv req)
13
//                  
14
//
15
// Revision: 
16
// Revision 0.01 - File Created
17
// Revision 0.02 - add full wrk functionality.
18
//
19
//////////////////////////////////////////////////////////////////////////////////
20
`timescale 1ns / 1ps
21
 
22
module block_check_wb_burst_slave
23
(
24
    //
25
    // SYS_CON
26
    input   i_clk,
27
    input   i_rst,
28
    //
29
    // WB BURST SLAVE IF (WRITE-ONLY IF)
30
    input       [11:0]  iv_wbs_burst_addr,
31
    input       [63:0]  iv_wbs_burst_data,
32
    input       [ 7:0]  iv_wbs_burst_sel,
33
    input               i_wbs_burst_we,
34
    input               i_wbs_burst_cyc,
35
    input               i_wbs_burst_stb,
36
    input       [ 2:0]  iv_wbs_burst_cti,
37
    input       [ 1:0]  iv_wbs_burst_bte,
38
 
39
    output              o_wbs_burst_ack,
40
    output              o_wbs_burst_err,
41
    output              o_wbs_burst_rty,
42
    //
43
    // TEST_CHECK IF (Output data with ENA) ==> always LOW
44
    output  reg [63:0]  ov_test_check_data,
45
    output  reg         o_test_check_data_ena,
46
    //
47
    // TEST_CHECK Controls (WBS_CFG)
48
    input       [15:0]  iv_control
49
);
50
//////////////////////////////////////////////////////////////////////////////////
51
/*
52
localparam  lp_ENA_DLY          =   1;
53
localparam  lp_START_DLY_POS    =   473;    // Stop IDX == 510
54
localparam  lp_WB_ACK_DLY       =    40;*/
55
//
56
localparam  lp_WB_BURST_DLY_POS_START       =    0;
57
localparam  lp_WB_BURST_DLY_POS_END         =    8;
58
 
59
localparam  lp_WB_BURST_ACK_DLY_POS_START   =    9;
60
localparam  lp_WB_BURST_ACK_DLY_POS_END     =   14;
61
 
62
localparam  lp_WB_BURST_DLY_ENA             =   15;
63
//////////////////////////////////////////////////////////////////////////////////
64
    // WBS stuff:
65
    wire            s_wb_transfer_ok_0;
66
    reg     [8:0]   sv_wbs_burst_counter;
67
    reg     [5:0]   sv_wb_ack_dly_counter;
68
    // WBS ACK delay output:
69
    wire    [lp_WB_BURST_ACK_DLY_POS_END-lp_WB_BURST_ACK_DLY_POS_START:0]   sv_wbs_ack_dly_value;
70
    wire    [lp_WB_BURST_DLY_POS_END-lp_WB_BURST_DLY_POS_START:0]           sv_wbs_dly_position;
71
    wire                                                                    s_wbs_dly_ena;
72
//////////////////////////////////////////////////////////////////////////////////
73
    // WBS ACK delay route/flags:
74
    assign  sv_wbs_ack_dly_value    =   iv_control[lp_WB_BURST_ACK_DLY_POS_END  : lp_WB_BURST_ACK_DLY_POS_START];
75
    assign  sv_wbs_dly_position     =   iv_control[lp_WB_BURST_DLY_POS_END      : lp_WB_BURST_DLY_POS_START];
76
    assign  s_wbs_dly_ena           =   iv_control[lp_WB_BURST_DLY_ENA];
77
    //
78
    // WBS controls output:
79
    assign  o_wbs_burst_ack =   (s_wbs_dly_ena)?
80
                                                (
81
                                                    (sv_wbs_burst_counter==sv_wbs_dly_position)?  0 : s_wb_transfer_ok_0
82
                                                ) :
83
                                                s_wb_transfer_ok_0;
84
    assign  o_wbs_burst_err =   0;
85
    assign  o_wbs_burst_rty =   0;
86
    // WBS inner ack flag:
87
    assign  s_wb_transfer_ok_0  =   (iv_wbs_burst_addr==0)                              & // START from INIT ADDR
88
                                    i_wbs_burst_cyc & i_wbs_burst_stb & i_wbs_burst_we  & // WB Transfer strobes
89
                                    iv_wbs_burst_sel==8'hFF                             & // WB_SEL point to 64bit transfer
90
                                    iv_wbs_burst_bte==2'b00                             ; // WB Burst Transfer type check (Linear Burst)
91
//////////////////////////////////////////////////////////////////////////////////
92
//
93
// Create TEST_CHECK data output:
94
//
95
always  @ (posedge i_clk or posedge i_rst)
96
begin   :   TEST_CHECK_DATA_OUT
97
    if (i_rst)
98
        begin   :   RST
99
            ov_test_check_data      <= 0;
100
            o_test_check_data_ena   <= 0;
101
        end
102
    else
103
        begin   :   WRK
104
            o_test_check_data_ena   <= o_wbs_burst_ack;
105
            ov_test_check_data      <= iv_wbs_burst_data;
106
        end
107
end
108
//////////////////////////////////////////////////////////////////////////////////
109
//
110
// Provide WBS ACK delay counter:
111
//
112
always @ (posedge i_clk or posedge i_rst)
113
begin   :   WB_ACK_ADD
114
    if (i_rst)
115
        begin   :   RST
116
            sv_wb_ack_dly_counter <= 0;
117
        end
118
    else
119
        begin   :   WRK
120
            if (sv_wbs_burst_counter!=0 & !o_wbs_burst_ack)
121
                begin   :   ENA_CNT
122
                    if (sv_wb_ack_dly_counter < sv_wbs_ack_dly_value)
123
                        sv_wb_ack_dly_counter <= sv_wb_ack_dly_counter + 1;
124
                    else
125
                        sv_wb_ack_dly_counter <= 0;
126
                end
127
        end
128
end
129
//////////////////////////////////////////////////////////////////////////////////
130
//
131
// Provide WBS Burst counter logic:
132
//
133
always @ (posedge i_clk or posedge i_rst)
134
begin   :   WB_BURST_COUNTER
135
    if (i_rst)
136
        begin   :   RST
137
            sv_wbs_burst_counter <= 0;
138
        end
139
    else
140
        begin   :   WRK
141
            if (i_wbs_burst_cyc)
142
                begin   :   TIME_TO_COUNT
143
                    if (o_wbs_burst_ack | sv_wb_ack_dly_counter==sv_wbs_ack_dly_value) // count ENA: wb_ack OR wb_ack_dly_counter issue
144
                        sv_wbs_burst_counter <= sv_wbs_burst_counter + 1;
145
                end
146
            else            // W8 for COUNT Time, CLR COUNTER 
147
                sv_wbs_burst_counter <= 0;
148
        end
149
end
150
//////////////////////////////////////////////////////////////////////////////////
151
endmodule

powered by: WebSVN 2.1.0

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