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

Subversion Repositories ht_tunnel

[/] [ht_tunnel/] [tags/] [START/] [bench/] [csr_l2/] [csr_l2_tb.h] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 acastong
//csr_l2_tb.h
2
 
3
/* ***** BEGIN LICENSE BLOCK *****
4
 * Version: MPL 1.1
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version
7
 * 1.1 (the "License"); you may not use this file except in compliance with
8
 * the License. You may obtain a copy of the License at
9
 * http://www.mozilla.org/MPL/
10
 *
11
 * Software distributed under the License is distributed on an "AS IS" basis,
12
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
 * for the specific language governing rights and limitations under the
14
 * License.
15
 *
16
 * The Original Code is HyperTransport Tunnel IP Core.
17
 *
18
 * The Initial Developer of the Original Code is
19
 * Ecole Polytechnique de Montreal.
20
 * Portions created by the Initial Developer are Copyright (C) 2005
21
 * the Initial Developer. All Rights Reserved.
22
 *
23
 * Contributor(s):
24
 *   Ami Castonguay <acastong@grm.polymtl.ca>
25
 *
26
 * Alternatively, the contents of this file may be used under the terms
27
 * of the Polytechnique HyperTransport Tunnel IP Core Source Code License
28
 * (the  "PHTICSCL License", see the file PHTICSCL.txt), in which case the
29
 * provisions of PHTICSCL License are applicable instead of those
30
 * above. If you wish to allow use of your version of this file only
31
 * under the terms of the PHTICSCL License and not to allow others to use
32
 * your version of this file under the MPL, indicate your decision by
33
 * deleting the provisions above and replace them with the notice and
34
 * other provisions required by the PHTICSCL License. If you do not delete
35
 * the provisions above, a recipient may use your version of this file
36
 * under either the MPL or the PHTICSCL License."
37
 *
38
 * ***** END LICENSE BLOCK ***** */
39
 
40
#ifndef CSR_L2_TB_H
41
#define CSR_L2_TB_H
42
 
43
#include "../../rtl/systemc/core_synth/synth_datatypes.h"
44
#include "../../rtl/systemc/core_synth/constants.h"
45
#include "../core/ht_datatypes.h"
46
#include <deque>
47
 
48
///Testbench for the csr_l2 module
49
/**
50
        @class csr_l2_tb
51
        @author Ami Castonguay
52
*/
53
class csr_l2_tb : public sc_module {
54
 
55
        ///Structure that groups both packet complete and it's associated data
56
        struct PacketContainerWithData{
57
                ControlPacketComplete pkt_cplt;
58
                int data[16];
59
        };
60
 
61
        ///Expected response to a request to CSR
62
        struct ExpectedResponse{
63
                unsigned int dwords[17];///< The dwords of the response, including data
64
                unsigned int size_with_data;///< Size of the response, including data
65
        };
66
 
67
public:
68
 
69
        /// Global system clock signal.
70
        sc_in_clk                                                                       clk;
71
 
72
 
73
        /** Warm Reset signal (active low) */
74
        sc_out<bool> resetx;
75
        ///Power is stable (used for cold reset of the design
76
        sc_out<bool> pwrok;
77
        ///LDSTOP sequence (power saving mode)
78
        sc_out<bool> ldtstopx;
79
 
80
 
81
        ///If the tunnel is in sync mode
82
        /**
83
                When a critical error is detected, sync flood is sent.  When
84
                a sync flood is received, we also fall in sync mode.  This
85
                cascades and resyncs the complete HT chain.
86
        */
87
        sc_in<bool>             csr_sync;
88
 
89
        //****************************************************
90
        //  Signals for communication with User Interface module
91
        //****************************************************
92
 
93
        /** Access to the databuffer is shared with UI, must request acess*/
94
        sc_in<bool> csr_request_databuffer0_access_ui;
95
        /** Access to the databuffer is shared with UI, must request acess*/
96
        sc_in<bool> csr_request_databuffer1_access_ui;
97
        /** When the access to databuffer is granted following the assertion of
98
        ::csr_request_databuffer0_access_ui or ::csr_request_databuffer1_access_ui*/
99
        sc_out<bool> ui_databuffer_access_granted_csr;
100
 
101
 
102
        //****************************************************
103
        //  Signals for communication with Reordering module
104
        //****************************************************
105
 
106
        /** @name Reordering
107
        *  Signals for communication with Reordering module
108
        */
109
        //@{
110
        /** Packet is ready to read from Reordering module */
111
        sc_out<bool> ro0_available_csr;
112
        /** Packet from Reordering module */
113
        sc_out<syn_ControlPacketComplete > ro0_packet_csr;
114
        /** Packet from Reordering has been read by CSR */
115
        sc_in<bool> csr_ack_ro0;
116
 
117
        /** Packet is ready to read from Reordering module */
118
        sc_out<bool> ro1_available_csr;
119
        /** Packet from Reordering module */
120
        sc_out<syn_ControlPacketComplete > ro1_packet_csr;
121
        /** Packet from Reordering has been read by CSR */
122
        sc_in<bool> csr_ack_ro1;
123
 
124
        //@}
125
 
126
 
127
        //*****************************************************
128
        //  Signals for communication with Data Buffer module
129
        //*****************************************************
130
 
131
        /** @name DataBuffer
132
        *  Signals for communication with Data Buffer module
133
        */
134
        //@{
135
 
136
        /** Consume data from Data Buffer */
137
        sc_in<bool> csr_read_db0;
138
        /** Consume data from Data Buffer 1 */
139
        sc_in<bool> csr_read_db1;
140
 
141
        /** Address of the data packet requested in Data Buffer 0 */
142
        sc_in<sc_uint<BUFFERS_ADDRESS_WIDTH> > csr_address_db0;
143
        /** Address of the data packet requested in Data Buffer 1 */
144
        sc_in<sc_uint<BUFFERS_ADDRESS_WIDTH> > csr_address_db1;
145
 
146
        /** Virtual Channel of the data requested in Data Buffer 0 */
147
        sc_in<VirtualChannel > csr_vctype_db0;
148
        /** Virtual Channel of the data requested in Data Buffer 1 */
149
        sc_in<VirtualChannel > csr_vctype_db1;
150
 
151
        /** 32 bit data sent from Data Buffer to CSR */
152
        sc_out<sc_bv<32> > db0_data_csr;
153
        /** 32 bit data sent from Data Buffer to CSR */
154
        sc_out<sc_bv<32> > db1_data_csr;
155
 
156
        /** Last dword of data from Data Buffer 0 */
157
        sc_in<bool> csr_erase_db0;
158
        /** Last dword of data from Data Buffer 1 */
159
        sc_in<bool> csr_erase_db1;
160
        //@}
161
 
162
 
163
        //******************************************************
164
        //  Signals for communication with Flow Control module
165
        //******************************************************
166
 
167
        /** @name FlowControl
168
        *  Signals for communication with Flow Control module
169
        */
170
        //@{
171
 
172
        /** Request to Flow Control to send packet */
173
        sc_in<bool> csr_available_fc0;
174
        /** 32 bit packet or data to Flow Control */
175
        sc_in<sc_bv<32> > csr_dword_fc0;
176
        /** Flow Control has read the last 32 bit packet or data */
177
        sc_out<bool> fc0_ack_csr;
178
 
179
 
180
        /** Request to Flow Control to send packet */
181
        sc_in<bool> csr_available_fc1;
182
        /** 32 bit packet or data to Flow Control */
183
        sc_in<sc_bv<32> > csr_dword_fc1;
184
        /** Flow Control has read the last 32 bit packet or data */
185
        sc_out<bool> fc1_ack_csr;
186
 
187
        //@}
188
 
189
        ///SystemC Macro
190
        SC_HAS_PROCESS(csr_l2_tb);
191
 
192
        ///Testbench module constructor
193
        csr_l2_tb(sc_module_name name);
194
 
195
        ///Queue of packets to send from size 0
196
        std::deque<PacketContainerWithData> to_send0;
197
        ///Queue of packets that are expected to be received on side 0
198
        std::deque<ExpectedResponse> to_receive0;
199
        ///Queue of packets to send from size 1
200
        std::deque<PacketContainerWithData> to_send1;
201
        ///Queue of packets that are expected to be received on side 1
202
        std::deque<ExpectedResponse> to_receive1;
203
        ///Queue of packets to send from any side (
204
        std::deque<PacketContainerWithData> to_send;
205
        ///Queue of packets that are expected to be received on any side
206
        std::deque<ExpectedResponse> to_receive;
207
 
208
        /**
209
                When sending a packet from within the queue of packets to send, if
210
                it contains data, it must then be sent by a process simulating the databuffer.
211
                The information about the data to be sent from side 0 is store in these variables
212
        */
213
        //@{
214
        ///Actual data to send
215
        unsigned int data0[16];
216
        ///Number of dwords to send
217
        unsigned int data_size0;
218
        ///Number of dwords to are currently sent
219
        unsigned int data_sent0;
220
        ///If the data being sent to CSR is valid (it takes a delay of one cycle)
221
        sc_signal<bool> valid_output0;
222
        ///The address where the data is stored
223
        sc_uint<BUFFERS_ADDRESS_WIDTH> data_address0;
224
        ///The virtual channel of the data
225
        VirtualChannel data_vc0;
226
        //@}
227
 
228
        /**
229
                When sending a packet from within the queue of packets to send, if
230
                it contains data, it must then be sent by a process simulating the databuffer.
231
                The information about the data to be sent from side 1 is store in these variables
232
        */
233
        //@{
234
        ///Actual data to send
235
        unsigned int data1[16];
236
        ///Number of dwords to send
237
        unsigned int data_size1;
238
        ///Number of dwords to are currently sent
239
        unsigned int data_sent1;
240
        ///If the data being sent to CSR is valid (it takes a delay of one cycle)
241
        sc_signal<bool> valid_output1;
242
        ///The address where the data is stored
243
        sc_uint<BUFFERS_ADDRESS_WIDTH> data_address1;
244
        ///The virtual channel of the data
245
        VirtualChannel data_vc1;
246
        //@}
247
 
248
        ///The number of dword received fomr the CSR response to side 0
249
        unsigned int received0;
250
        ///The number of dword received fomr the CSR response to side 1
251
        unsigned int received1;
252
 
253
        ///The side from which the request has been sent
254
        /** to_send queue contains packets that can be sent to any side,
255
                this stores which side it is sent to so that the response can
256
                be correctly verified.
257
        */
258
        int side_pkt_sent;
259
 
260
        ///Process that sends packets in the queues to the CSR module
261
        void send_packets_csr();
262
        ///Process that verifies that the responses of the CSR are corerct
263
        void verify_csr_response();
264
        ///Process that simulates the databuffer so that the CSR can access data
265
        void simulate_databuffer();
266
        ///Process that generates packets to be sent to CSR
267
        void generate_csr_requests_and_responses();
268
        ///Randomly acks dwords sent to flow control
269
        void flow_control_read_signals();
270
        ///Process that takes care of granting access to databuffer when CSR needs data
271
        void grant_access_databuffer();
272
};
273
 
274
#endif

powered by: WebSVN 2.1.0

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