source: trunk/modules/vci_mem_cache/caba/source/include/vci_mem_cache.h @ 601

Last change on this file since 601 was 601, checked in by cfuguet, 10 years ago

Modifications in vci_mem_cache:

  • The out of segment read or write does not activate any more an assert on the memory cache. Instead, the request is sent to the XRAM and the error from the XRAM will be propagated to the processor doing the access.

The propagation of the error is done in two different ways:

  • When is a READ MISS: The error is propagated through the VCI rerror to the processor doing the read.
  • When is a WRITE MISS: The error is propagated through an IRQ which normally is connected to the local XICU.
File size: 43.6 KB
Line 
1/* -*- c++ -*-
2 * File         : vci_mem_cache.h
3 * Date         : 26/10/2008
4 * Copyright    : UPMC / LIP6
5 * Authors      : Alain Greiner / Eric Guthmuller
6 *
7 * SOCLIB_LGPL_HEADER_BEGIN
8 *
9 * This file is part of SoCLib, GNU LGPLv2.1.
10 *
11 * SoCLib is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU Lesser General Public License as published
13 * by the Free Software Foundation; version 2.1 of the License.
14 *
15 * SoCLib is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with SoCLib; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * 02110-1301 USA
24 *
25 * SOCLIB_LGPL_HEADER_END
26 *
27 * Maintainers: alain.greiner@lip6.fr
28 *              eric.guthmuller@polytechnique.edu
29 *              cesar.fuguet-tortolero@lip6.fr
30 *              alexandre.joannou@lip6.fr
31 */
32
33#ifndef SOCLIB_CABA_MEM_CACHE_H
34#define SOCLIB_CABA_MEM_CACHE_H
35
36#include <inttypes.h>
37#include <systemc>
38#include <list>
39#include <cassert>
40#include "arithmetics.h"
41#include "alloc_elems.h"
42#include "caba_base_module.h"
43#include "vci_target.h"
44#include "vci_initiator.h"
45#include "generic_fifo.h"
46#include "mapping_table.h"
47#include "int_tab.h"
48#include "generic_llsc_global_table.h"
49#include "mem_cache_directory.h"
50#include "xram_transaction.h"
51#include "update_tab.h"
52#include "dspin_interface.h"
53#include "dspin_dhccp_param.h"
54
55#define TRT_ENTRIES      4      // Number of entries in TRT
56#define UPT_ENTRIES      4      // Number of entries in UPT
57#define IVT_ENTRIES      4      // Number of entries in IVT
58#define HEAP_ENTRIES     1024   // Number of entries in HEAP
59
60namespace soclib {  namespace caba {
61
62  using namespace sc_core;
63
64  template<typename vci_param_int, 
65           typename vci_param_ext,
66           size_t   dspin_in_width,
67           size_t   dspin_out_width>
68    class VciMemCache
69    : public soclib::caba::BaseModule
70    {
71      typedef typename vci_param_int::fast_addr_t  addr_t;
72      typedef typename sc_dt::sc_uint<64>          wide_data_t;
73      typedef uint32_t                             data_t;
74      typedef uint32_t                             tag_t;
75      typedef uint32_t                             be_t;
76      typedef uint32_t                             copy_t;
77
78      /* States of the TGT_CMD fsm */
79      enum tgt_cmd_fsm_state_e
80      {
81        TGT_CMD_IDLE,
82        TGT_CMD_READ,
83        TGT_CMD_WRITE,
84        TGT_CMD_CAS,
85        TGT_CMD_ERROR,
86        TGT_CMD_CONFIG
87      };
88
89      /* States of the TGT_RSP fsm */
90      enum tgt_rsp_fsm_state_e
91      {
92        TGT_RSP_READ_IDLE,
93        TGT_RSP_WRITE_IDLE,
94        TGT_RSP_CAS_IDLE,
95        TGT_RSP_XRAM_IDLE,
96        TGT_RSP_MULTI_ACK_IDLE,
97        TGT_RSP_CLEANUP_IDLE,
98        TGT_RSP_CONFIG_IDLE,
99        TGT_RSP_TGT_CMD_IDLE,
100        TGT_RSP_READ,
101        TGT_RSP_WRITE,
102        TGT_RSP_CAS,
103        TGT_RSP_XRAM,
104        TGT_RSP_MULTI_ACK,
105        TGT_RSP_CLEANUP,
106        TGT_RSP_CONFIG,
107        TGT_RSP_TGT_CMD
108      };
109
110      /* States of the DSPIN_TGT fsm */
111      enum cc_receive_fsm_state_e
112      {
113        CC_RECEIVE_IDLE,
114        CC_RECEIVE_CLEANUP,
115        CC_RECEIVE_CLEANUP_EOP,
116        CC_RECEIVE_MULTI_ACK
117      };
118
119      /* States of the CC_SEND fsm */
120      enum cc_send_fsm_state_e
121      {
122        CC_SEND_XRAM_RSP_IDLE,
123        CC_SEND_WRITE_IDLE,
124        CC_SEND_CAS_IDLE,
125        CC_SEND_CONFIG_IDLE,
126        CC_SEND_XRAM_RSP_BRDCAST_HEADER,
127        CC_SEND_XRAM_RSP_BRDCAST_NLINE,
128        CC_SEND_XRAM_RSP_INVAL_HEADER,
129        CC_SEND_XRAM_RSP_INVAL_NLINE,
130        CC_SEND_WRITE_BRDCAST_HEADER,
131        CC_SEND_WRITE_BRDCAST_NLINE,
132        CC_SEND_WRITE_UPDT_HEADER,
133        CC_SEND_WRITE_UPDT_NLINE,
134        CC_SEND_WRITE_UPDT_DATA,
135        CC_SEND_CAS_BRDCAST_HEADER,
136        CC_SEND_CAS_BRDCAST_NLINE,
137        CC_SEND_CAS_UPDT_HEADER,
138        CC_SEND_CAS_UPDT_NLINE,
139        CC_SEND_CAS_UPDT_DATA,
140        CC_SEND_CAS_UPDT_DATA_HIGH,
141        CC_SEND_CONFIG_INVAL_HEADER,
142        CC_SEND_CONFIG_INVAL_NLINE,
143        CC_SEND_CONFIG_BRDCAST_HEADER,
144        CC_SEND_CONFIG_BRDCAST_NLINE
145      };
146
147      /* States of the MULTI_ACK fsm */
148      enum multi_ack_fsm_state_e
149      {
150        MULTI_ACK_IDLE,
151        MULTI_ACK_UPT_LOCK,
152        MULTI_ACK_UPT_CLEAR,
153        MULTI_ACK_WRITE_RSP
154      };
155
156      /* States of the CONFIG fsm */
157      enum config_fsm_state_e
158      {
159        CONFIG_IDLE,
160        CONFIG_LOOP,
161        CONFIG_WAIT,
162        CONFIG_RSP,
163        CONFIG_DIR_REQ,
164        CONFIG_DIR_ACCESS,
165        CONFIG_IVT_LOCK,
166        CONFIG_BC_SEND,
167        CONFIG_INVAL_SEND,
168        CONFIG_HEAP_REQ,
169        CONFIG_HEAP_SCAN,
170        CONFIG_HEAP_LAST,
171        CONFIG_TRT_LOCK,
172        CONFIG_TRT_SET,
173        CONFIG_PUT_REQ
174      };
175
176      /* States of the READ fsm */
177      enum read_fsm_state_e
178      {
179        READ_IDLE,
180        READ_DIR_REQ,
181        READ_DIR_LOCK,
182        READ_DIR_HIT,
183        READ_HEAP_REQ,
184        READ_HEAP_LOCK,
185        READ_HEAP_WRITE,
186        READ_HEAP_ERASE,
187        READ_HEAP_LAST,
188        READ_RSP,
189        READ_TRT_LOCK,
190        READ_TRT_SET,
191        READ_TRT_REQ
192      };
193
194      /* States of the WRITE fsm */
195      enum write_fsm_state_e
196      {
197        WRITE_IDLE,
198        WRITE_NEXT,
199        WRITE_DIR_REQ,
200        WRITE_DIR_LOCK,
201        WRITE_DIR_HIT,
202        WRITE_UPT_LOCK,
203        WRITE_UPT_HEAP_LOCK,
204        WRITE_UPT_REQ,
205        WRITE_UPT_NEXT,
206        WRITE_UPT_DEC,
207        WRITE_RSP,
208        WRITE_MISS_TRT_LOCK,
209        WRITE_MISS_TRT_DATA,
210        WRITE_MISS_TRT_SET,
211        WRITE_MISS_XRAM_REQ,
212        WRITE_BC_DIR_READ,
213        WRITE_BC_TRT_LOCK,
214        WRITE_BC_IVT_LOCK,
215        WRITE_BC_DIR_INVAL,
216        WRITE_BC_CC_SEND,
217        WRITE_BC_XRAM_REQ,
218        WRITE_WAIT
219      };
220
221      /* States of the IXR_RSP fsm */
222      enum ixr_rsp_fsm_state_e
223      {
224        IXR_RSP_IDLE,
225        IXR_RSP_TRT_ERASE,
226        IXR_RSP_TRT_READ
227      };
228
229      /* States of the XRAM_RSP fsm */
230      enum xram_rsp_fsm_state_e
231      {
232        XRAM_RSP_IDLE,
233        XRAM_RSP_TRT_COPY,
234        XRAM_RSP_TRT_DIRTY,
235        XRAM_RSP_DIR_LOCK,
236        XRAM_RSP_DIR_UPDT,
237        XRAM_RSP_DIR_RSP,
238        XRAM_RSP_IVT_LOCK,
239        XRAM_RSP_INVAL_WAIT,
240        XRAM_RSP_INVAL,
241        XRAM_RSP_WRITE_DIRTY,
242        XRAM_RSP_HEAP_REQ,
243        XRAM_RSP_HEAP_ERASE,
244        XRAM_RSP_HEAP_LAST,
245        XRAM_RSP_ERROR_ERASE,
246        XRAM_RSP_ERROR_RSP
247      };
248
249      /* States of the IXR_CMD fsm */
250      enum ixr_cmd_fsm_state_e
251      {
252        IXR_CMD_READ_IDLE,
253        IXR_CMD_WRITE_IDLE,
254        IXR_CMD_CAS_IDLE,
255        IXR_CMD_XRAM_IDLE,
256        IXR_CMD_CONFIG_IDLE,
257        IXR_CMD_READ_TRT,
258        IXR_CMD_WRITE_TRT,
259        IXR_CMD_CAS_TRT,
260        IXR_CMD_XRAM_TRT,
261        IXR_CMD_CONFIG_TRT,
262        IXR_CMD_READ_SEND,
263        IXR_CMD_WRITE_SEND,
264        IXR_CMD_CAS_SEND,
265        IXR_CMD_XRAM_SEND,
266        IXR_CMD_CONFIG_SEND
267      };
268
269      /* States of the CAS fsm */
270      enum cas_fsm_state_e
271      {
272        CAS_IDLE,
273        CAS_DIR_REQ,
274        CAS_DIR_LOCK,
275        CAS_DIR_HIT_READ,
276        CAS_DIR_HIT_COMPARE,
277        CAS_DIR_HIT_WRITE,
278        CAS_UPT_LOCK,
279        CAS_UPT_HEAP_LOCK,
280        CAS_UPT_REQ,
281        CAS_UPT_NEXT,
282        CAS_BC_TRT_LOCK,
283        CAS_BC_IVT_LOCK,
284        CAS_BC_DIR_INVAL,
285        CAS_BC_CC_SEND,
286        CAS_BC_XRAM_REQ,
287        CAS_RSP_FAIL,
288        CAS_RSP_SUCCESS,
289        CAS_MISS_TRT_LOCK,
290        CAS_MISS_TRT_SET,
291        CAS_MISS_XRAM_REQ,
292        CAS_WAIT
293      };
294
295      /* States of the CLEANUP fsm */
296      enum cleanup_fsm_state_e
297      {
298        CLEANUP_IDLE,
299        CLEANUP_GET_NLINE,
300        CLEANUP_DIR_REQ,
301        CLEANUP_DIR_LOCK,
302        CLEANUP_DIR_WRITE,
303        CLEANUP_HEAP_REQ,
304        CLEANUP_HEAP_LOCK,
305        CLEANUP_HEAP_SEARCH,
306        CLEANUP_HEAP_CLEAN,
307        CLEANUP_HEAP_FREE,
308        CLEANUP_IVT_LOCK,
309        CLEANUP_IVT_DECREMENT,
310        CLEANUP_IVT_CLEAR,
311        CLEANUP_WRITE_RSP,
312        CLEANUP_SEND_CLACK
313      };
314
315      /* States of the ALLOC_DIR fsm */
316      enum alloc_dir_fsm_state_e
317      {
318        ALLOC_DIR_RESET,
319        ALLOC_DIR_READ,
320        ALLOC_DIR_WRITE,
321        ALLOC_DIR_CAS,
322        ALLOC_DIR_CLEANUP,
323        ALLOC_DIR_XRAM_RSP,
324        ALLOC_DIR_CONFIG
325      };
326
327      /* States of the ALLOC_TRT fsm */
328      enum alloc_trt_fsm_state_e
329      {
330        ALLOC_TRT_READ,
331        ALLOC_TRT_WRITE,
332        ALLOC_TRT_CAS,
333        ALLOC_TRT_XRAM_RSP,
334        ALLOC_TRT_IXR_RSP,
335        ALLOC_TRT_IXR_CMD,
336        ALLOC_TRT_CONFIG
337      };
338
339      /* States of the ALLOC_UPT fsm */
340      enum alloc_upt_fsm_state_e
341      {
342        ALLOC_UPT_WRITE,
343        ALLOC_UPT_CAS,
344        ALLOC_UPT_MULTI_ACK
345      };
346
347      /* States of the ALLOC_IVT fsm */
348      enum alloc_ivt_fsm_state_e
349      {
350        ALLOC_IVT_WRITE,
351        ALLOC_IVT_XRAM_RSP,
352        ALLOC_IVT_CLEANUP,
353        ALLOC_IVT_CAS,
354        ALLOC_IVT_CONFIG
355      };
356
357      /* States of the ALLOC_HEAP fsm */
358      enum alloc_heap_fsm_state_e
359      {
360        ALLOC_HEAP_RESET,
361        ALLOC_HEAP_READ,
362        ALLOC_HEAP_WRITE,
363        ALLOC_HEAP_CAS,
364        ALLOC_HEAP_CLEANUP,
365        ALLOC_HEAP_XRAM_RSP,
366        ALLOC_HEAP_CONFIG
367      };
368
369      /* transaction type, pktid field */
370      enum transaction_type_e
371      {
372          // b3 unused
373          // b2 READ / NOT READ
374          // Si READ
375          //  b1 DATA / INS
376          //  b0 UNC / MISS
377          // Si NOT READ
378          //  b1 accÚs table llsc type SW / other
379          //  b2 WRITE/CAS/LL/SC
380          TYPE_READ_DATA_UNC          = 0x0,
381          TYPE_READ_DATA_MISS         = 0x1,
382          TYPE_READ_INS_UNC           = 0x2,
383          TYPE_READ_INS_MISS          = 0x3,
384          TYPE_WRITE                  = 0x4,
385          TYPE_CAS                    = 0x5,
386          TYPE_LL                     = 0x6,
387          TYPE_SC                     = 0x7
388      };
389
390      /* SC return values */
391      enum sc_status_type_e
392      {
393          SC_SUCCESS  =   0x00000000,
394          SC_FAIL     =   0x00000001
395      };
396
397      // debug variables
398      bool                 m_debug;
399      bool                 m_debug_previous_valid;
400      size_t               m_debug_previous_count;
401      bool                 m_debug_previous_dirty;
402      data_t *             m_debug_previous_data;
403      data_t *             m_debug_data;
404
405      // instrumentation counters
406      uint32_t     m_cpt_cycles;         // Counter of cycles
407
408      // Counters accessible in software (not yet but eventually)
409      uint32_t     m_cpt_read_local;     // Number of local READ transactions
410      uint32_t     m_cpt_read_remote;    // number of remote READ transactions
411      uint32_t     m_cpt_read_cost;      // Number of (flits * distance) for READs
412
413      uint32_t     m_cpt_write_local;    // Number of local WRITE transactions
414      uint32_t     m_cpt_write_remote;   // number of remote WRITE transactions
415      uint32_t     m_cpt_write_flits_local;  // number of flits for local WRITEs
416      uint32_t     m_cpt_write_flits_remote; // number of flits for remote WRITEs
417      uint32_t     m_cpt_write_cost;     // Number of (flits * distance) for WRITEs
418
419      uint32_t     m_cpt_ll_local;       // Number of local LL transactions
420      uint32_t     m_cpt_ll_remote;      // number of remote LL transactions
421      uint32_t     m_cpt_ll_cost;        // Number of (flits * distance) for LLs
422
423      uint32_t     m_cpt_sc_local;       // Number of local SC transactions
424      uint32_t     m_cpt_sc_remote;      // number of remote SC transactions
425      uint32_t     m_cpt_sc_cost;        // Number of (flits * distance) for SCs
426
427      uint32_t     m_cpt_cas_local;      // Number of local SC transactions
428      uint32_t     m_cpt_cas_remote;     // number of remote SC transactions
429      uint32_t     m_cpt_cas_cost;       // Number of (flits * distance) for SCs
430
431      uint32_t     m_cpt_update;         // Number of requests causing an UPDATE
432      uint32_t     m_cpt_update_local;   // Number of local UPDATE transactions
433      uint32_t     m_cpt_update_remote;  // Number of remote UPDATE transactions
434      uint32_t     m_cpt_update_cost;    // Number of (flits * distance) for UPDT
435
436      uint32_t     m_cpt_minval;         // Number of requests causing M_INV
437      uint32_t     m_cpt_minval_local;   // Number of local M_INV transactions
438      uint32_t     m_cpt_minval_remote;  // Number of remote M_INV transactions
439      uint32_t     m_cpt_minval_cost;    // Number of (flits * distance) for M_INV
440
441      uint32_t     m_cpt_binval;         // Number of BROADCAST INVAL
442
443      uint32_t     m_cpt_cleanup_local;  // Number of local CLEANUP transactions
444      uint32_t     m_cpt_cleanup_remote; // Number of remote CLEANUP transactions
445      uint32_t     m_cpt_cleanup_cost;   // Number of (flits * distance) for CLEANUPs
446
447      // Counters not accessible by software
448      uint32_t     m_cpt_read_miss;      // Number of MISS READ
449      uint32_t     m_cpt_write_miss;     // Number of MISS WRITE
450      uint32_t     m_cpt_write_dirty;    // Cumulated length for WRITE transactions
451      uint32_t     m_cpt_write_broadcast;// Number of BROADCAST INVAL because write
452
453      uint32_t     m_cpt_trt_rb;         // Read blocked by a hit in trt
454      uint32_t     m_cpt_trt_full;       // Transaction blocked due to a full trt
455
456      uint32_t     m_cpt_get;
457      uint32_t     m_cpt_put;
458
459      size_t       m_prev_count;
460
461      protected:
462
463      SC_HAS_PROCESS(VciMemCache);
464
465      public:
466      sc_in<bool>                                 p_clk;
467      sc_in<bool>                                 p_resetn;
468      sc_out<bool>                                p_irq;
469      soclib::caba::VciTarget<vci_param_int>      p_vci_tgt;
470      soclib::caba::VciInitiator<vci_param_ext>   p_vci_ixr;
471      soclib::caba::DspinInput<dspin_in_width>    p_dspin_p2m;
472      soclib::caba::DspinOutput<dspin_out_width>  p_dspin_m2p;
473      soclib::caba::DspinOutput<dspin_out_width>  p_dspin_clack;
474
475#if MONITOR_MEMCACHE_FSM == 1
476      sc_out<int> p_read_fsm; 
477      sc_out<int> p_write_fsm; 
478      sc_out<int> p_xram_rsp_fsm; 
479      sc_out<int> p_cas_fsm; 
480      sc_out<int> p_cleanup_fsm; 
481      sc_out<int> p_config_fsm; 
482      sc_out<int> p_alloc_heap_fsm; 
483      sc_out<int> p_alloc_dir_fsm; 
484      sc_out<int> p_alloc_trt_fsm; 
485      sc_out<int> p_alloc_upt_fsm; 
486      sc_out<int> p_alloc_ivt_fsm; 
487      sc_out<int> p_tgt_cmd_fsm; 
488      sc_out<int> p_tgt_rsp_fsm; 
489      sc_out<int> p_ixr_cmd_fsm; 
490      sc_out<int> p_ixr_rsp_fsm; 
491      sc_out<int> p_cc_send_fsm; 
492      sc_out<int> p_cc_receive_fsm; 
493      sc_out<int> p_multi_ack_fsm; 
494#endif
495
496      VciMemCache(
497          sc_module_name name,                                // Instance Name
498          const soclib::common::MappingTable &mtp,            // Mapping table INT network
499          const soclib::common::MappingTable &mtx,            // Mapping table RAM network
500          const soclib::common::IntTab       &srcid_x,        // global index RAM network
501          const soclib::common::IntTab       &tgtid_d,        // global index INT network
502          const size_t                       x_width,         // X width in platform
503          const size_t                       y_width,         // Y width in platform
504          const size_t                       nways,           // Number of ways per set
505          const size_t                       nsets,           // Number of sets
506          const size_t                       nwords,          // Number of words per line
507          const size_t                       max_copies,      // max number of copies
508          const size_t                       heap_size=HEAP_ENTRIES,
509          const size_t                       trt_lines=TRT_ENTRIES, 
510          const size_t                       upt_lines=UPT_ENTRIES,     
511          const size_t                       ivt_lines=IVT_ENTRIES,     
512          const size_t                       debug_start_cycle=0,
513          const bool                         debug_ok=false );
514
515      ~VciMemCache();
516
517      void print_stats(bool activity_counters, bool stats);
518      void print_trace( size_t detailed = 0 );
519      void cache_monitor(addr_t addr);
520      void start_monitor(addr_t addr, addr_t length);
521      void stop_monitor();
522
523      private:
524
525      void transition();
526      void genMoore();
527      void check_monitor(addr_t addr, data_t data, bool read);
528
529      uint32_t req_distance(uint32_t req_srcid);
530      bool is_local_req(uint32_t req_srcid);
531      int  read_instrumentation(uint32_t regr, uint32_t & rdata);
532
533      // Component attributes
534      std::list<soclib::common::Segment> m_seglist;          // segments allocated
535      size_t                             m_nseg;             // number of segments
536      soclib::common::Segment            **m_seg;            // array of segments pointers
537      size_t                             m_seg_config;       // config segment index
538      const size_t                       m_srcid_x;          // global index on RAM network
539      const size_t                       m_initiators;       // Number of initiators
540      const size_t                       m_heap_size;        // Size of the heap
541      const size_t                       m_ways;             // Number of ways in a set
542      const size_t                       m_sets;             // Number of cache sets
543      const size_t                       m_words;            // Number of words in a line
544      size_t                             m_x_self;           // X self coordinate
545      size_t                             m_y_self;           // Y self coordinate
546      const size_t                       m_x_width;          // number of x bits in platform
547      const size_t                       m_y_width;          // number of y bits in platform
548      size_t                             m_debug_start_cycle;
549      bool                               m_debug_ok;
550      uint32_t                           m_trt_lines;
551      TransactionTab                     m_trt;              // xram transaction table
552      uint32_t                           m_upt_lines;
553      UpdateTab                          m_upt;              // pending update
554      UpdateTab                          m_ivt;              // pending invalidate
555      CacheDirectory                     m_cache_directory;  // data cache directory
556      CacheData                          m_cache_data;       // data array[set][way][word]
557      HeapDirectory                      m_heap;             // heap for copies
558      size_t                             m_max_copies;       // max number of copies in heap
559      GenericLLSCGlobalTable
560      < 32  ,    // number of slots
561        4096,    // number of processors in the system
562        8000,    // registration life (# of LL operations)
563        addr_t >                         m_llsc_table;       // ll/sc registration table
564
565      // adress masks
566      const soclib::common::AddressMaskingTable<addr_t>   m_x;
567      const soclib::common::AddressMaskingTable<addr_t>   m_y;
568      const soclib::common::AddressMaskingTable<addr_t>   m_z;
569      const soclib::common::AddressMaskingTable<addr_t>   m_nline;
570
571      // broadcast address
572      uint32_t                           m_broadcast_boundaries;
573
574      // configuration interface constants
575      const uint32_t m_config_addr_mask;
576      const uint32_t m_config_regr_width;
577      const uint32_t m_config_func_width;
578      const uint32_t m_config_regr_idx_mask;
579      const uint32_t m_config_func_idx_mask;
580
581      // Fifo between TGT_CMD fsm and READ fsm
582      GenericFifo<addr_t>    m_cmd_read_addr_fifo;
583      GenericFifo<size_t>    m_cmd_read_length_fifo;
584      GenericFifo<size_t>    m_cmd_read_srcid_fifo;
585      GenericFifo<size_t>    m_cmd_read_trdid_fifo;
586      GenericFifo<size_t>    m_cmd_read_pktid_fifo;
587
588      // Fifo between TGT_CMD fsm and WRITE fsm
589      GenericFifo<addr_t>    m_cmd_write_addr_fifo;
590      GenericFifo<bool>      m_cmd_write_eop_fifo;
591      GenericFifo<size_t>    m_cmd_write_srcid_fifo;
592      GenericFifo<size_t>    m_cmd_write_trdid_fifo;
593      GenericFifo<size_t>    m_cmd_write_pktid_fifo;
594      GenericFifo<data_t>    m_cmd_write_data_fifo;
595      GenericFifo<be_t>      m_cmd_write_be_fifo;
596
597      // Fifo between TGT_CMD fsm and CAS fsm
598      GenericFifo<addr_t>    m_cmd_cas_addr_fifo;
599      GenericFifo<bool>      m_cmd_cas_eop_fifo;
600      GenericFifo<size_t>    m_cmd_cas_srcid_fifo;
601      GenericFifo<size_t>    m_cmd_cas_trdid_fifo;
602      GenericFifo<size_t>    m_cmd_cas_pktid_fifo;
603      GenericFifo<data_t>    m_cmd_cas_wdata_fifo;
604
605      // Fifo between CC_RECEIVE fsm and CLEANUP fsm
606      GenericFifo<uint64_t>  m_cc_receive_to_cleanup_fifo;
607     
608      // Fifo between CC_RECEIVE fsm and MULTI_ACK fsm
609      GenericFifo<uint64_t>  m_cc_receive_to_multi_ack_fifo;
610
611      // Buffer between TGT_CMD fsm and TGT_RSP fsm
612      // (segmentation violation response request)
613      sc_signal<bool>     r_tgt_cmd_to_tgt_rsp_req;
614
615      sc_signal<uint32_t> r_tgt_cmd_to_tgt_rsp_rdata;
616      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_error;
617      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_srcid;
618      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_trdid;
619      sc_signal<size_t>   r_tgt_cmd_to_tgt_rsp_pktid;
620
621      sc_signal<addr_t>   r_tgt_cmd_config_addr;
622      sc_signal<size_t>   r_tgt_cmd_config_cmd;
623
624      //////////////////////////////////////////////////
625      // Registers controlled by the TGT_CMD fsm
626      //////////////////////////////////////////////////
627
628      sc_signal<int>         r_tgt_cmd_fsm;
629
630      ///////////////////////////////////////////////////////
631      // Registers controlled by the CONFIG fsm
632      ///////////////////////////////////////////////////////
633
634      sc_signal<int>      r_config_fsm;               // FSM state
635      sc_signal<bool>     r_config_lock;              // lock protecting exclusive access
636      sc_signal<int>      r_config_cmd;               // config request type 
637      sc_signal<addr_t>   r_config_address;           // target buffer physical address
638      sc_signal<size_t>   r_config_srcid;             // config request srcid
639      sc_signal<size_t>   r_config_trdid;             // config request trdid
640      sc_signal<size_t>   r_config_pktid;             // config request pktid
641      sc_signal<size_t>   r_config_cmd_lines;         // number of lines to be handled
642      sc_signal<size_t>   r_config_rsp_lines;         // number of lines not completed
643      sc_signal<size_t>   r_config_dir_way;           // DIR: selected way
644      sc_signal<bool>     r_config_dir_lock;          // DIR: locked entry
645      sc_signal<size_t>   r_config_dir_count;         // DIR: number of copies
646      sc_signal<bool>     r_config_dir_is_cnt;        // DIR: counter mode (broadcast)
647      sc_signal<size_t>   r_config_dir_copy_srcid;    // DIR: first copy SRCID
648      sc_signal<bool>     r_config_dir_copy_inst;     // DIR: first copy L1 type
649      sc_signal<size_t>   r_config_dir_ptr;           // DIR: index of next copy in HEAP
650      sc_signal<size_t>   r_config_heap_next;         // current pointer to scan HEAP
651      sc_signal<size_t>   r_config_trt_index;         // selected entry in TRT
652      sc_signal<size_t>   r_config_ivt_index;         // selected entry in IVT
653
654      // Buffer between CONFIG fsm and IXR_CMD fsm
655      sc_signal<bool>     r_config_to_ixr_cmd_req;    // valid request
656      sc_signal<size_t>   r_config_to_ixr_cmd_index;  // TRT index
657
658      // Buffer between CONFIG fsm and TGT_RSP fsm (send a done response to L1 cache)
659      sc_signal<bool>     r_config_to_tgt_rsp_req;    // valid request
660      sc_signal<bool>     r_config_to_tgt_rsp_error;  // error response
661      sc_signal<size_t>   r_config_to_tgt_rsp_srcid;  // Transaction srcid
662      sc_signal<size_t>   r_config_to_tgt_rsp_trdid;  // Transaction trdid
663      sc_signal<size_t>   r_config_to_tgt_rsp_pktid;  // Transaction pktid
664
665      // Buffer between CONFIG fsm and CC_SEND fsm (multi-inval / broadcast-inval)
666      sc_signal<bool>     r_config_to_cc_send_multi_req;    // multi-inval request
667      sc_signal<bool>     r_config_to_cc_send_brdcast_req;  // broadcast-inval request
668      sc_signal<addr_t>   r_config_to_cc_send_nline;        // line index
669      sc_signal<size_t>   r_config_to_cc_send_trdid;        // UPT index
670      GenericFifo<bool>   m_config_to_cc_send_inst_fifo;    // fifo for the L1 type
671      GenericFifo<size_t> m_config_to_cc_send_srcid_fifo;   // fifo for owners srcid
672
673      ///////////////////////////////////////////////////////
674      // Registers controlled by the READ fsm
675      ///////////////////////////////////////////////////////
676
677      sc_signal<int>      r_read_fsm;                 // FSM state
678      sc_signal<size_t>   r_read_copy;                // Srcid of the first copy
679      sc_signal<size_t>   r_read_copy_cache;          // Srcid of the first copy
680      sc_signal<bool>     r_read_copy_inst;           // Type of the first copy
681      sc_signal<tag_t>    r_read_tag;                 // cache line tag (in directory)
682      sc_signal<bool>     r_read_is_cnt;              // is_cnt bit (in directory)
683      sc_signal<bool>     r_read_lock;                // lock bit (in directory)
684      sc_signal<bool>     r_read_dirty;               // dirty bit (in directory)
685      sc_signal<size_t>   r_read_count;               // number of copies
686      sc_signal<size_t>   r_read_ptr;                 // pointer to the heap
687      sc_signal<data_t> * r_read_data;                // data (one cache line)
688      sc_signal<size_t>   r_read_way;                 // associative way (in cache)
689      sc_signal<size_t>   r_read_trt_index;           // Transaction Table index
690      sc_signal<size_t>   r_read_next_ptr;            // Next entry to point to
691      sc_signal<bool>     r_read_last_free;           // Last free entry
692      sc_signal<addr_t>   r_read_ll_key;              // LL key from llsc_global_table
693
694      // Buffer between READ fsm and IXR_CMD fsm
695      sc_signal<bool>     r_read_to_ixr_cmd_req;      // valid request
696      sc_signal<size_t>   r_read_to_ixr_cmd_index;    // TRT index
697
698      // Buffer between READ fsm and TGT_RSP fsm (send a hit read response to L1 cache)
699      sc_signal<bool>     r_read_to_tgt_rsp_req;      // valid request
700      sc_signal<size_t>   r_read_to_tgt_rsp_srcid;    // Transaction srcid
701      sc_signal<size_t>   r_read_to_tgt_rsp_trdid;    // Transaction trdid
702      sc_signal<size_t>   r_read_to_tgt_rsp_pktid;    // Transaction pktid
703      sc_signal<data_t> * r_read_to_tgt_rsp_data;     // data (one cache line)
704      sc_signal<size_t>   r_read_to_tgt_rsp_word;     // first word of the response
705      sc_signal<size_t>   r_read_to_tgt_rsp_length;   // length of the response
706      sc_signal<addr_t>   r_read_to_tgt_rsp_ll_key;   // LL key from llsc_global_table
707
708      ///////////////////////////////////////////////////////////////
709      // Registers controlled by the WRITE fsm
710      ///////////////////////////////////////////////////////////////
711
712      sc_signal<int>      r_write_fsm;                // FSM state
713      sc_signal<addr_t>   r_write_address;            // first word address
714      sc_signal<size_t>   r_write_word_index;         // first word index in line
715      sc_signal<size_t>   r_write_word_count;         // number of words in line
716      sc_signal<size_t>   r_write_srcid;              // transaction srcid
717      sc_signal<size_t>   r_write_trdid;              // transaction trdid
718      sc_signal<size_t>   r_write_pktid;              // transaction pktid
719      sc_signal<data_t> * r_write_data;               // data (one cache line)
720      sc_signal<be_t>   * r_write_be;                 // one byte enable per word
721      sc_signal<bool>     r_write_byte;               // (BE != 0X0) and (BE != 0xF)
722      sc_signal<bool>     r_write_is_cnt;             // is_cnt bit (in directory)
723      sc_signal<bool>     r_write_lock;               // lock bit (in directory)
724      sc_signal<tag_t>    r_write_tag;                // cache line tag (in directory)
725      sc_signal<size_t>   r_write_copy;               // first owner of the line
726      sc_signal<size_t>   r_write_copy_cache;         // first owner of the line
727      sc_signal<bool>     r_write_copy_inst;          // is this owner a ICache ?
728      sc_signal<size_t>   r_write_count;              // number of copies
729      sc_signal<size_t>   r_write_ptr;                // pointer to the heap
730      sc_signal<size_t>   r_write_next_ptr;           // next pointer to the heap
731      sc_signal<bool>     r_write_to_dec;             // need to decrement update counter
732      sc_signal<size_t>   r_write_way;                // way of the line
733      sc_signal<size_t>   r_write_trt_index;          // index in Transaction Table
734      sc_signal<size_t>   r_write_upt_index;          // index in Update Table
735      sc_signal<bool>     r_write_sc_fail;            // sc command failed
736      sc_signal<data_t>   r_write_sc_key;             // sc command key
737      sc_signal<bool>     r_write_bc_data_we;         // Write enable for data buffer
738
739      // Buffer between WRITE fsm and TGT_RSP fsm (acknowledge a write command from L1)
740      sc_signal<bool>     r_write_to_tgt_rsp_req;     // valid request
741      sc_signal<size_t>   r_write_to_tgt_rsp_srcid;   // transaction srcid
742      sc_signal<size_t>   r_write_to_tgt_rsp_trdid;   // transaction trdid
743      sc_signal<size_t>   r_write_to_tgt_rsp_pktid;   // transaction pktid
744      sc_signal<bool>     r_write_to_tgt_rsp_sc_fail; // sc command failed
745
746      // Buffer between WRITE fsm and IXR_CMD fsm
747      sc_signal<bool>     r_write_to_ixr_cmd_req;     // valid request
748      sc_signal<size_t>   r_write_to_ixr_cmd_index;   // TRT index
749
750      // Buffer between WRITE fsm and CC_SEND fsm (Update/Invalidate L1 caches)
751      sc_signal<bool>     r_write_to_cc_send_multi_req;     // valid multicast request
752      sc_signal<bool>     r_write_to_cc_send_brdcast_req;   // valid brdcast request
753      sc_signal<addr_t>   r_write_to_cc_send_nline;         // cache line index
754      sc_signal<size_t>   r_write_to_cc_send_trdid;         // index in Update Table
755      sc_signal<data_t> * r_write_to_cc_send_data;          // data (one cache line)
756      sc_signal<be_t>   * r_write_to_cc_send_be;            // word enable
757      sc_signal<size_t>   r_write_to_cc_send_count;         // number of words in line
758      sc_signal<size_t>   r_write_to_cc_send_index;         // index of first word in line
759      GenericFifo<bool>   m_write_to_cc_send_inst_fifo;     // fifo for the L1 type
760      GenericFifo<size_t> m_write_to_cc_send_srcid_fifo;    // fifo for srcids
761
762      // Buffer between WRITE fsm and MULTI_ACK fsm (Decrement UPT entry)
763      sc_signal<bool>     r_write_to_multi_ack_req;       // valid request
764      sc_signal<size_t>   r_write_to_multi_ack_upt_index; // index in update table
765
766      /////////////////////////////////////////////////////////
767      // Registers controlled by MULTI_ACK fsm
768      //////////////////////////////////////////////////////////
769
770      sc_signal<int>      r_multi_ack_fsm;       // FSM state
771      sc_signal<size_t>   r_multi_ack_upt_index; // index in the Update Table
772      sc_signal<size_t>   r_multi_ack_srcid;     // pending write srcid
773      sc_signal<size_t>   r_multi_ack_trdid;     // pending write trdid
774      sc_signal<size_t>   r_multi_ack_pktid;     // pending write pktid
775      sc_signal<addr_t>   r_multi_ack_nline;     // pending write nline
776
777      // Buffer between MULTI_ACK fsm and TGT_RSP fsm (complete write/update transaction)
778      sc_signal<bool>     r_multi_ack_to_tgt_rsp_req;   // valid request
779      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_srcid; // Transaction srcid
780      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_trdid; // Transaction trdid
781      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_pktid; // Transaction pktid
782
783      ///////////////////////////////////////////////////////
784      // Registers controlled by CLEANUP fsm
785      ///////////////////////////////////////////////////////
786
787      sc_signal<int>      r_cleanup_fsm;           // FSM state
788      sc_signal<size_t>   r_cleanup_srcid;         // transaction srcid
789      sc_signal<bool>     r_cleanup_inst;          // Instruction or Data ?
790      sc_signal<size_t>   r_cleanup_way_index;     // L1 Cache Way index
791      sc_signal<addr_t>   r_cleanup_nline;         // cache line index
792
793
794      sc_signal<copy_t>   r_cleanup_copy;          // first copy
795      sc_signal<copy_t>   r_cleanup_copy_cache;    // first copy
796      sc_signal<size_t>   r_cleanup_copy_inst;     // type of the first copy
797      sc_signal<copy_t>   r_cleanup_count;         // number of copies
798      sc_signal<size_t>   r_cleanup_ptr;           // pointer to the heap
799      sc_signal<size_t>   r_cleanup_prev_ptr;      // previous pointer to the heap
800      sc_signal<size_t>   r_cleanup_prev_srcid;    // srcid of previous heap entry
801      sc_signal<size_t>   r_cleanup_prev_cache_id; // srcid of previous heap entry
802      sc_signal<bool>     r_cleanup_prev_inst;     // inst bit of previous heap entry
803      sc_signal<size_t>   r_cleanup_next_ptr;      // next pointer to the heap
804      sc_signal<tag_t>    r_cleanup_tag;           // cache line tag (in directory)
805      sc_signal<bool>     r_cleanup_is_cnt;        // inst bit (in directory)
806      sc_signal<bool>     r_cleanup_lock;          // lock bit (in directory)
807      sc_signal<bool>     r_cleanup_dirty;         // dirty bit (in directory)
808      sc_signal<size_t>   r_cleanup_way;           // associative way (in cache)
809
810      sc_signal<size_t>   r_cleanup_write_srcid;   // srcid of write rsp
811      sc_signal<size_t>   r_cleanup_write_trdid;   // trdid of write rsp
812      sc_signal<size_t>   r_cleanup_write_pktid;   // pktid of write rsp
813
814      sc_signal<bool>     r_cleanup_need_rsp;      // write response required
815      sc_signal<bool>     r_cleanup_need_ack;      // config acknowledge required
816
817      sc_signal<size_t>   r_cleanup_index;         // index of the INVAL line (in the UPT)
818
819      // Buffer between CLEANUP fsm and TGT_RSP fsm (acknowledge a write command from L1)
820      sc_signal<bool>     r_cleanup_to_tgt_rsp_req;   // valid request
821      sc_signal<size_t>   r_cleanup_to_tgt_rsp_srcid; // transaction srcid
822      sc_signal<size_t>   r_cleanup_to_tgt_rsp_trdid; // transaction trdid
823      sc_signal<size_t>   r_cleanup_to_tgt_rsp_pktid; // transaction pktid
824
825      ///////////////////////////////////////////////////////
826      // Registers controlled by CAS fsm
827      ///////////////////////////////////////////////////////
828
829      sc_signal<int>      r_cas_fsm;              // FSM state
830      sc_signal<data_t>   r_cas_wdata;            // write data word
831      sc_signal<data_t> * r_cas_rdata;            // read data word
832      sc_signal<uint32_t> r_cas_lfsr;             // lfsr for random introducing
833      sc_signal<size_t>   r_cas_cpt;              // size of command
834      sc_signal<copy_t>   r_cas_copy;             // Srcid of the first copy
835      sc_signal<copy_t>   r_cas_copy_cache;       // Srcid of the first copy
836      sc_signal<bool>     r_cas_copy_inst;        // Type of the first copy
837      sc_signal<size_t>   r_cas_count;            // number of copies
838      sc_signal<size_t>   r_cas_ptr;              // pointer to the heap
839      sc_signal<size_t>   r_cas_next_ptr;         // next pointer to the heap
840      sc_signal<bool>     r_cas_is_cnt;           // is_cnt bit (in directory)
841      sc_signal<bool>     r_cas_dirty;            // dirty bit (in directory)
842      sc_signal<size_t>   r_cas_way;              // way in directory
843      sc_signal<size_t>   r_cas_set;              // set in directory
844      sc_signal<data_t>   r_cas_tag;              // cache line tag (in directory)
845      sc_signal<size_t>   r_cas_trt_index;        // Transaction Table index
846      sc_signal<size_t>   r_cas_upt_index;        // Update Table index
847      sc_signal<data_t> * r_cas_data;             // cache line data
848
849      // Buffer between CAS fsm and IXR_CMD fsm
850      sc_signal<bool>     r_cas_to_ixr_cmd_req;   // valid request
851      sc_signal<size_t>   r_cas_to_ixr_cmd_index; // TRT index
852
853      // Buffer between CAS fsm and TGT_RSP fsm
854      sc_signal<bool>     r_cas_to_tgt_rsp_req;   // valid request
855      sc_signal<data_t>   r_cas_to_tgt_rsp_data;  // read data word
856      sc_signal<size_t>   r_cas_to_tgt_rsp_srcid; // Transaction srcid
857      sc_signal<size_t>   r_cas_to_tgt_rsp_trdid; // Transaction trdid
858      sc_signal<size_t>   r_cas_to_tgt_rsp_pktid; // Transaction pktid
859
860      // Buffer between CAS fsm and CC_SEND fsm (Update/Invalidate L1 caches)
861      sc_signal<bool>     r_cas_to_cc_send_multi_req;     // valid request
862      sc_signal<bool>     r_cas_to_cc_send_brdcast_req;   // brdcast request
863      sc_signal<addr_t>   r_cas_to_cc_send_nline;         // cache line index
864      sc_signal<size_t>   r_cas_to_cc_send_trdid;         // index in Update Table
865      sc_signal<data_t>   r_cas_to_cc_send_wdata;         // data (one word)
866      sc_signal<bool>     r_cas_to_cc_send_is_long;       // it is a 64 bits CAS
867      sc_signal<data_t>   r_cas_to_cc_send_wdata_high;    // data high (one word)
868      sc_signal<size_t>   r_cas_to_cc_send_index;         // index of the word in line
869      GenericFifo<bool>   m_cas_to_cc_send_inst_fifo;     // fifo for the L1 type
870      GenericFifo<size_t> m_cas_to_cc_send_srcid_fifo;    // fifo for srcids
871
872      ////////////////////////////////////////////////////
873      // Registers controlled by the IXR_RSP fsm
874      ////////////////////////////////////////////////////
875
876      sc_signal<int>      r_ixr_rsp_fsm;                // FSM state
877      sc_signal<size_t>   r_ixr_rsp_trt_index;          // TRT entry index
878      sc_signal<size_t>   r_ixr_rsp_cpt;                // word counter
879
880      // Buffer between IXR_RSP fsm and CONFIG fsm  (response from the XRAM)
881      sc_signal<bool>     r_ixr_rsp_to_config_ack;      // one single bit   
882
883      // Buffer between IXR_RSP fsm and XRAM_RSP fsm  (response from the XRAM)
884      sc_signal<bool>   * r_ixr_rsp_to_xram_rsp_rok;    // one bit per TRT entry
885
886      ////////////////////////////////////////////////////
887      // Registers controlled by the XRAM_RSP fsm
888      ////////////////////////////////////////////////////
889
890      sc_signal<int>      r_xram_rsp_fsm;               // FSM state
891      sc_signal<size_t>   r_xram_rsp_trt_index;         // TRT entry index
892      TransactionTabEntry r_xram_rsp_trt_buf;           // TRT entry local buffer
893      sc_signal<bool>     r_xram_rsp_victim_inval;      // victim line invalidate
894      sc_signal<bool>     r_xram_rsp_victim_is_cnt;     // victim line inst bit
895      sc_signal<bool>     r_xram_rsp_victim_dirty;      // victim line dirty bit
896      sc_signal<size_t>   r_xram_rsp_victim_way;        // victim line way
897      sc_signal<size_t>   r_xram_rsp_victim_set;        // victim line set
898      sc_signal<addr_t>   r_xram_rsp_victim_nline;      // victim line index
899      sc_signal<copy_t>   r_xram_rsp_victim_copy;       // victim line first copy
900      sc_signal<copy_t>   r_xram_rsp_victim_copy_cache; // victim line first copy
901      sc_signal<bool>     r_xram_rsp_victim_copy_inst;  // victim line type of first copy
902      sc_signal<size_t>   r_xram_rsp_victim_count;      // victim line number of copies
903      sc_signal<size_t>   r_xram_rsp_victim_ptr;        // victim line pointer to the heap
904      sc_signal<data_t> * r_xram_rsp_victim_data;       // victim line data
905      sc_signal<size_t>   r_xram_rsp_ivt_index;         // IVT entry index
906      sc_signal<size_t>   r_xram_rsp_next_ptr;          // Next pointer to the heap
907      sc_signal<bool>     r_xram_rsp_rerror_irq;        // WRITE MISS rerror irq
908      sc_signal<bool>     r_xram_rsp_rerror_irq_enable; // WRITE MISS rerror irq enable
909      sc_signal<addr_t>   r_xram_rsp_rerror_address;    // WRITE MISS rerror address
910      sc_signal<size_t>   r_xram_rsp_rerror_rsrcid;     // WRITE MISS rerror srcid
911
912      // Buffer between XRAM_RSP fsm and TGT_RSP fsm  (response to L1 cache)
913      sc_signal<bool>     r_xram_rsp_to_tgt_rsp_req;    // Valid request
914      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_srcid;  // Transaction srcid
915      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_trdid;  // Transaction trdid
916      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_pktid;  // Transaction pktid
917      sc_signal<data_t> * r_xram_rsp_to_tgt_rsp_data;   // data (one cache line)
918      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_word;   // first word index
919      sc_signal<size_t>   r_xram_rsp_to_tgt_rsp_length; // length of the response
920      sc_signal<bool>     r_xram_rsp_to_tgt_rsp_rerror; // send error to requester
921      sc_signal<addr_t>   r_xram_rsp_to_tgt_rsp_ll_key; // LL key from llsc_global_table
922
923      // Buffer between XRAM_RSP fsm and CC_SEND fsm (Inval L1 Caches)
924      sc_signal<bool>     r_xram_rsp_to_cc_send_multi_req;     // Valid request
925      sc_signal<bool>     r_xram_rsp_to_cc_send_brdcast_req;   // Broadcast request
926      sc_signal<addr_t>   r_xram_rsp_to_cc_send_nline;         // cache line index;
927      sc_signal<size_t>   r_xram_rsp_to_cc_send_trdid;         // index of UPT entry
928      GenericFifo<bool>   m_xram_rsp_to_cc_send_inst_fifo;     // fifo for the L1 type
929      GenericFifo<size_t> m_xram_rsp_to_cc_send_srcid_fifo;    // fifo for srcids
930
931      // Buffer between XRAM_RSP fsm and IXR_CMD fsm
932      sc_signal<bool>     r_xram_rsp_to_ixr_cmd_req;   // Valid request
933      sc_signal<size_t>   r_xram_rsp_to_ixr_cmd_index; // TRT index
934
935      ////////////////////////////////////////////////////
936      // Registers controlled by the IXR_CMD fsm
937      ////////////////////////////////////////////////////
938
939      sc_signal<int>      r_ixr_cmd_fsm;
940      sc_signal<size_t>   r_ixr_cmd_word;              // word index for a put
941      sc_signal<size_t>   r_ixr_cmd_trdid;             // TRT index value     
942      sc_signal<addr_t>   r_ixr_cmd_address;           // address to XRAM
943      sc_signal<data_t> * r_ixr_cmd_wdata;             // cache line buffer
944      sc_signal<bool>     r_ixr_cmd_get;               // transaction type (PUT/GET)
945
946      ////////////////////////////////////////////////////
947      // Registers controlled by TGT_RSP fsm
948      ////////////////////////////////////////////////////
949
950      sc_signal<int>      r_tgt_rsp_fsm;
951      sc_signal<size_t>   r_tgt_rsp_cpt;
952      sc_signal<bool>     r_tgt_rsp_key_sent;
953
954      ////////////////////////////////////////////////////
955      // Registers controlled by CC_SEND fsm
956      ////////////////////////////////////////////////////
957
958      sc_signal<int>      r_cc_send_fsm;
959      sc_signal<size_t>   r_cc_send_cpt;
960      sc_signal<bool>     r_cc_send_inst;
961
962      ////////////////////////////////////////////////////
963      // Registers controlled by CC_RECEIVE fsm
964      ////////////////////////////////////////////////////
965
966      sc_signal<int>      r_cc_receive_fsm;
967
968      ////////////////////////////////////////////////////
969      // Registers controlled by ALLOC_DIR fsm
970      ////////////////////////////////////////////////////
971
972      sc_signal<int>      r_alloc_dir_fsm;
973      sc_signal<unsigned> r_alloc_dir_reset_cpt;
974
975      ////////////////////////////////////////////////////
976      // Registers controlled by ALLOC_TRT fsm
977      ////////////////////////////////////////////////////
978
979      sc_signal<int>      r_alloc_trt_fsm;
980
981      ////////////////////////////////////////////////////
982      // Registers controlled by ALLOC_UPT fsm
983      ////////////////////////////////////////////////////
984
985      sc_signal<int>      r_alloc_upt_fsm;
986
987      ////////////////////////////////////////////////////
988      // Registers controlled by ALLOC_IVT fsm
989      ////////////////////////////////////////////////////
990
991      sc_signal<int>      r_alloc_ivt_fsm;
992
993      ////////////////////////////////////////////////////
994      // Registers controlled by ALLOC_HEAP fsm
995      ////////////////////////////////////////////////////
996
997      sc_signal<int>      r_alloc_heap_fsm;
998      sc_signal<unsigned> r_alloc_heap_reset_cpt;
999    }; // end class VciMemCache
1000
1001}}
1002
1003#endif
1004
1005// Local Variables:
1006// tab-width: 2
1007// c-basic-offset: 2
1008// c-file-offsets:((innamespace . 0)(inline-open . 0))
1009// indent-tabs-mode: nil
1010// End:
1011
1012// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=2:softtabstop=2
1013
Note: See TracBrowser for help on using the repository browser.