Ignore:
Timestamp:
Jan 7, 2012, 7:17:34 PM (12 years ago)
Author:
alain
Message:

mproving the debug mechanisms

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h

    r177 r184  
    8080        TGT_CMD_IDLE,
    8181        TGT_CMD_READ,
    82         TGT_CMD_READ_EOP,
    8382        TGT_CMD_WRITE,
    8483        TGT_CMD_ATOMIC,
     
    8988        TGT_RSP_READ_IDLE,
    9089        TGT_RSP_WRITE_IDLE,
    91         TGT_RSP_LLSC_IDLE,
     90        TGT_RSP_SC_IDLE,
    9291        TGT_RSP_XRAM_IDLE,
    9392        TGT_RSP_INIT_IDLE,
     
    9594        TGT_RSP_READ,
    9695        TGT_RSP_WRITE,
    97         TGT_RSP_LLSC,
     96        TGT_RSP_SC,
    9897        TGT_RSP_XRAM,
    9998        TGT_RSP_INIT,
     
    139138        READ_TRT_LOCK,
    140139        READ_TRT_SET,
    141         READ_XRAM_REQ,
     140        READ_TRT_REQ,
    142141      };
    143142
     
    197196        IXR_CMD_READ_IDLE,
    198197        IXR_CMD_WRITE_IDLE,
    199         IXR_CMD_LLSC_IDLE,
     198        IXR_CMD_SC_IDLE,
    200199        IXR_CMD_XRAM_IDLE,
    201200        IXR_CMD_READ_NLINE,
    202201        IXR_CMD_WRITE_NLINE,
    203         IXR_CMD_LLSC_NLINE,
     202        IXR_CMD_SC_NLINE,
    204203        IXR_CMD_XRAM_DATA,
    205204      };
    206205
    207       /* States of the LLSC fsm */
    208       enum llsc_fsm_state_e{
    209         LLSC_IDLE,
     206      /* States of the SC fsm */
     207      enum sc_fsm_state_e{
     208        SC_IDLE,
    210209        SC_DIR_LOCK,
    211210        SC_DIR_HIT_READ,
     
    215214        SC_HEAP_LOCK,
    216215        SC_UPT_REQ,
    217         SC_UPDATE,
    218         SC_TRT_LOCK,
     216        SC_UPT_NEXT,
     217        SC_TRT_PUT_LOCK,
    219218        SC_INVAL_LOCK,
    220219        SC_DIR_INVAL,
    221220        SC_INVAL,
    222         SC_XRAM_SEND,
    223         SC_RSP_FALSE,
    224         SC_RSP_TRUE,
    225         LLSC_TRT_LOCK,
    226         LLSC_TRT_SET,
    227         LLSC_XRAM_REQ,
     221        SC_TRT_PUT_REQ,
     222        SC_RSP_FAIL,
     223        SC_RSP_SUCCESS,
     224        SC_TRT_GET_LOCK,
     225        SC_TRT_GET_SET,
     226        SC_TRT_GET_REQ,
    228227      };
    229228
     
    247246        ALLOC_DIR_READ,
    248247        ALLOC_DIR_WRITE,
    249         ALLOC_DIR_LLSC,
     248        ALLOC_DIR_SC,
    250249        ALLOC_DIR_CLEANUP,
    251250        ALLOC_DIR_XRAM_RSP,
     
    256255        ALLOC_TRT_READ,
    257256        ALLOC_TRT_WRITE,
    258         ALLOC_TRT_LLSC,
     257        ALLOC_TRT_SC,
    259258        ALLOC_TRT_XRAM_RSP,
    260259        ALLOC_TRT_IXR_RSP,
     
    267266        ALLOC_UPT_INIT_RSP,
    268267        ALLOC_UPT_CLEANUP,
    269         ALLOC_UPT_LLSC,
     268        ALLOC_UPT_SC,
    270269      };
    271270
     
    274273        ALLOC_HEAP_READ,
    275274        ALLOC_HEAP_WRITE,
    276         ALLOC_HEAP_LLSC,
     275        ALLOC_HEAP_SC,
    277276        ALLOC_HEAP_CLEANUP,
    278277        ALLOC_HEAP_XRAM_RSP,
    279278      };
    280279
     280      // debug variables (for each FSM)
     281      size_t       m_debug_start_cycle;
     282      bool         m_debug_ok;
     283      bool         m_debug_global;
     284      bool         m_debug_tgt_cmd_fsm;
     285      bool         m_debug_tgt_rsp_fsm;
     286      bool         m_debug_init_cmd_fsm;
     287      bool         m_debug_init_rsp_fsm;
     288      bool         m_debug_read_fsm;
     289      bool         m_debug_write_fsm;
     290      bool         m_debug_sc_fsm;
     291      bool         m_debug_cleanup_fsm;
     292      bool         m_debug_ixr_cmd_fsm;
     293      bool         m_debug_ixr_rsp_fsm;
     294      bool         m_debug_xram_rsp_fsm;
     295      bool         m_debug_previous_hit;
     296      size_t       m_debug_previous_count;
     297
     298      // instrumentation counters
    281299      uint32_t     m_cpt_cycles;            // Counter of cycles
    282300      uint32_t     m_cpt_read;              // Number of READ transactions
     
    297315      uint32_t     m_cpt_sc;                // Number of SC transactions
    298316
     317      size_t       m_prev_count;
     318
    299319      protected:
    300320
     
    310330
    311331      VciMemCacheV4(
    312           sc_module_name name,                              // Instance Name
    313           const soclib::common::MappingTable &mtp,          // Mapping table for primary requets
    314           const soclib::common::MappingTable &mtc,          // Mapping table for coherence requets
    315           const soclib::common::MappingTable &mtx,          // Mapping table for XRAM
    316           const soclib::common::IntTab &vci_ixr_index,      // VCI port to XRAM (initiator)
    317           const soclib::common::IntTab &vci_ini_index,      // VCI port to PROC (initiator)
    318           const soclib::common::IntTab &vci_tgt_index,      // VCI port to PROC (target)
    319           const soclib::common::IntTab &vci_tgt_index_cleanup,    // VCI port to PROC (target) for cleanup
    320           size_t nways,                                     // Number of ways per set
    321           size_t nsets,                                     // Number of sets
    322           size_t nwords,                                    // Number of words per line
    323           size_t heap_size=1024,                            // Size of the heap
    324           size_t transaction_tab_lines=TRANSACTION_TAB_LINES,// Size of the TRT
    325           size_t update_tab_lines=UPDATE_TAB_LINES          // Size of the UPT
    326           );
     332          sc_module_name name,                                // Instance Name
     333          const soclib::common::MappingTable &mtp,            // Mapping table for primary requets
     334          const soclib::common::MappingTable &mtc,            // Mapping table for coherence requets
     335          const soclib::common::MappingTable &mtx,            // Mapping table for XRAM
     336          const soclib::common::IntTab &vci_ixr_index,        // VCI port to XRAM (initiator)
     337          const soclib::common::IntTab &vci_ini_index,        // VCI port to PROC (initiator)
     338          const soclib::common::IntTab &vci_tgt_index,        // VCI port to PROC (target)
     339          const soclib::common::IntTab &vci_tgt_index_cleanup,// VCI port to PROC (target) for cleanup
     340          size_t nways,                                       // Number of ways per set
     341          size_t nsets,                                       // Number of sets
     342          size_t nwords,                                      // Number of words per line
     343          size_t heap_size=1024,                              // Size of the heap
     344          size_t transaction_tab_lines=TRANSACTION_TAB_LINES, // Size of the TRT
     345          size_t update_tab_lines=UPDATE_TAB_LINES,           // Size of the UPT
     346          size_t debug_start_cycle=0,
     347          bool   debug_ok=false);
    327348
    328349      ~VciMemCacheV4();
    329350
    330351      void transition();
    331 
    332352      void genMoore();
    333 
    334353      void print_stats();
    335 
    336354      void print_trace();
     355      void cache_monitor(vci_addr_t addr);
    337356
    338357      private:
     
    343362      const size_t                              m_ways;                 // Number of ways in a set
    344363      const size_t                              m_sets;                 // Number of cache sets
    345       const size_t                              m_words;                // Number of words in a line
    346       const size_t                              m_srcid_ixr;            // Srcid for requests to XRAM
    347       const size_t                              m_srcid_ini;            // Srcid for requests to processors
     364      const size_t                              m_words;                        // Number of words in a line
     365      const size_t                              m_srcid_ixr;                // Srcid for requests to XRAM
     366      const size_t                              m_srcid_ini;                // Srcid for requests to processors
    348367      std::list<soclib::common::Segment>        m_seglist;              // memory cached into the cache
    349368      std::list<soclib::common::Segment>        m_cseglist;             // coherence segment for the cache
    350369      vci_addr_t                                *m_coherence_table;     // address(srcid)
    351370      uint32_t                                  m_transaction_tab_lines;
    352       TransactionTab                            m_transaction_tab;      // xram transaction table
     371      TransactionTab                            m_transaction_tab;          // xram transaction table
    353372      uint32_t                                  m_update_tab_lines;
    354       UpdateTab                                 m_update_tab;           // pending update & invalidate
    355       CacheDirectory                            m_cache_directory;      // data cache directory
    356       HeapDirectory                             m_heap_directory;       // heap directory
    357 
    358       data_t                                    ***m_cache_data;        // data array[set][way][word]
     373      UpdateTab                                 m_update_tab;               // pending update & invalidate
     374      CacheDirectory                            m_cache_directory;          // data cache directory
     375      HeapDirectory                             m_heap;                 // heap for copies
     376
     377      data_t                                    ***m_cache_data;            // data array[set][way][word]
    359378
    360379      // adress masks
     
    371390      //////////////////////////////////////////////////
    372391      sc_signal<size_t>   r_copies_limit; // Limit of the number of copies for one line
     392      sc_signal<size_t>   xxx_count;
    373393
    374394      //////////////////////////////////////////////////
     
    392412      GenericFifo<be_t>      m_cmd_write_be_fifo;
    393413
    394       // Fifo between TGT_CMD fsm and LLSC fsm
    395       GenericFifo<uint64_t>  m_cmd_llsc_addr_fifo;
    396       GenericFifo<bool>      m_cmd_llsc_eop_fifo;
    397       GenericFifo<size_t>    m_cmd_llsc_srcid_fifo;
    398       GenericFifo<size_t>    m_cmd_llsc_trdid_fifo;
    399       GenericFifo<size_t>    m_cmd_llsc_pktid_fifo;
    400       GenericFifo<data_t>    m_cmd_llsc_wdata_fifo;
     414      // Fifo between TGT_CMD fsm and SC fsm
     415      GenericFifo<uint64_t>  m_cmd_sc_addr_fifo;
     416      GenericFifo<bool>      m_cmd_sc_eop_fifo;
     417      GenericFifo<size_t>    m_cmd_sc_srcid_fifo;
     418      GenericFifo<size_t>    m_cmd_sc_trdid_fifo;
     419      GenericFifo<size_t>    m_cmd_sc_pktid_fifo;
     420      GenericFifo<data_t>    m_cmd_sc_wdata_fifo;
    401421
    402422      sc_signal<int>         r_tgt_cmd_fsm;
     
    555575
    556576      ///////////////////////////////////////////////////////
    557       // Registers controlled by LLSC fsm
     577      // Registers controlled by SC fsm
    558578      ///////////////////////////////////////////////////////
    559579
    560       sc_signal<int>       r_llsc_fsm;          // FSM state
    561       sc_signal<data_t>    r_llsc_wdata;                // write data word
    562       sc_signal<data_t>    *r_llsc_rdata;               // read data word
    563       sc_signal<uint32_t>  r_llsc_lfsr;         // lfsr for random introducing
    564       sc_signal<size_t>    r_llsc_cpt;              // size of command
    565       sc_signal<copy_t>    r_llsc_copy;             // Srcid of the first copy
    566       sc_signal<copy_t>    r_llsc_copy_cache;   // Srcid of the first copy
    567       sc_signal<bool>      r_llsc_copy_inst;    // Type of the first copy
    568       sc_signal<size_t>    r_llsc_count;            // number of copies
    569       sc_signal<size_t>    r_llsc_ptr;              // pointer to the heap
    570       sc_signal<size_t>    r_llsc_next_ptr;     // next pointer to the heap
    571       sc_signal<bool>      r_llsc_is_cnt;           // is_cnt bit (in directory)
    572       sc_signal<bool>      r_llsc_dirty;            // dirty bit (in directory)
    573       sc_signal<size_t>    r_llsc_way;              // way in directory
    574       sc_signal<size_t>    r_llsc_set;              // set in directory
    575       sc_signal<data_t>    r_llsc_tag;              // cache line tag (in directory)
    576       sc_signal<size_t>    r_llsc_trt_index;    // Transaction Table index
    577       sc_signal<size_t>    r_llsc_upt_index;    // Update Table index
    578 
    579       // Buffer between LLSC fsm and INIT_CMD fsm (XRAM read)   
    580       sc_signal<bool>      r_llsc_to_ixr_cmd_req;   // valid request
    581       sc_signal<addr_t>    r_llsc_to_ixr_cmd_nline; // cache line index
    582       sc_signal<size_t>    r_llsc_to_ixr_cmd_trdid; // index in Transaction Table
    583       sc_signal<bool>      r_llsc_to_ixr_cmd_write; // write request
    584       sc_signal<data_t>   *r_llsc_to_ixr_cmd_data;  // cache line data
    585 
    586 
    587       // Buffer between LLSC fsm and TGT_RSP fsm
    588       sc_signal<bool>      r_llsc_to_tgt_rsp_req;   // valid request
    589       sc_signal<data_t>    r_llsc_to_tgt_rsp_data;  // read data word
    590       sc_signal<size_t>    r_llsc_to_tgt_rsp_srcid; // Transaction srcid
    591       sc_signal<size_t>    r_llsc_to_tgt_rsp_trdid; // Transaction trdid
    592       sc_signal<size_t>    r_llsc_to_tgt_rsp_pktid; // Transaction pktid
    593 
    594       // Buffer between LLSC fsm and INIT_CMD fsm (Update/Invalidate L1 caches)
    595       sc_signal<bool>      r_llsc_to_init_cmd_multi_req;    // valid request
    596       sc_signal<bool>      r_llsc_to_init_cmd_brdcast_req;  // brdcast request
    597       sc_signal<addr_t>    r_llsc_to_init_cmd_nline;        // cache line index
    598       sc_signal<size_t>    r_llsc_to_init_cmd_trdid;        // index in Update Table
    599       sc_signal<data_t>    r_llsc_to_init_cmd_wdata;        // data (one word)
    600       sc_signal<bool>      r_llsc_to_init_cmd_is_long;      // it is a 64 bits SC
    601       sc_signal<data_t>    r_llsc_to_init_cmd_wdata_high;   // data high (one word)
    602       sc_signal<size_t>    r_llsc_to_init_cmd_index;        // index of the word in line
    603       GenericFifo<bool>    m_llsc_to_init_cmd_inst_fifo;    // fifo for the L1 type
    604       GenericFifo<size_t>  m_llsc_to_init_cmd_srcid_fifo;   // fifo for srcids
    605       GenericFifo<size_t>  m_llsc_to_init_cmd_cache_id_fifo;// fifo for srcids
    606 
    607       // Buffer between LLSC fsm and INIT_RSP fsm (Decrement UPT entry)
    608       sc_signal<bool>      r_llsc_to_init_rsp_req;          // valid request
    609       sc_signal<size_t>    r_llsc_to_init_rsp_upt_index;    // index in update table
     580      sc_signal<int>       r_sc_fsm;                        // FSM state
     581      sc_signal<data_t>    r_sc_wdata;                      // write data word
     582      sc_signal<data_t>    *r_sc_rdata;                     // read data word
     583      sc_signal<uint32_t>  r_sc_lfsr;                       // lfsr for random introducing
     584      sc_signal<size_t>    r_sc_cpt;                        // size of command
     585      sc_signal<copy_t>    r_sc_copy;                       // Srcid of the first copy
     586      sc_signal<copy_t>    r_sc_copy_cache;                 // Srcid of the first copy
     587      sc_signal<bool>      r_sc_copy_inst;                      // Type of the first copy
     588      sc_signal<size_t>    r_sc_count;                      // number of copies
     589      sc_signal<size_t>    r_sc_ptr;                        // pointer to the heap
     590      sc_signal<size_t>    r_sc_next_ptr;                       // next pointer to the heap
     591      sc_signal<bool>      r_sc_is_cnt;                     // is_cnt bit (in directory)
     592      sc_signal<bool>      r_sc_dirty;                      // dirty bit (in directory)
     593      sc_signal<size_t>    r_sc_way;                            // way in directory
     594      sc_signal<size_t>    r_sc_set;                            // set in directory
     595      sc_signal<data_t>    r_sc_tag;                            // cache line tag (in directory)
     596      sc_signal<size_t>    r_sc_trt_index;                  // Transaction Table index
     597      sc_signal<size_t>    r_sc_upt_index;                  // Update Table index
     598
     599      // Buffer between SC fsm and INIT_CMD fsm (XRAM read)     
     600      sc_signal<bool>      r_sc_to_ixr_cmd_req;             // valid request
     601      sc_signal<addr_t>    r_sc_to_ixr_cmd_nline;          // cache line index
     602      sc_signal<size_t>    r_sc_to_ixr_cmd_trdid;          // index in Transaction Table
     603      sc_signal<bool>      r_sc_to_ixr_cmd_write;          // write request
     604      sc_signal<data_t>   *r_sc_to_ixr_cmd_data;            // cache line data
     605
     606
     607      // Buffer between SC fsm and TGT_RSP fsm
     608      sc_signal<bool>      r_sc_to_tgt_rsp_req;             // valid request
     609      sc_signal<data_t>    r_sc_to_tgt_rsp_data;            // read data word
     610      sc_signal<size_t>    r_sc_to_tgt_rsp_srcid;          // Transaction srcid
     611      sc_signal<size_t>    r_sc_to_tgt_rsp_trdid;          // Transaction trdid
     612      sc_signal<size_t>    r_sc_to_tgt_rsp_pktid;          // Transaction pktid
     613
     614      // Buffer between SC fsm and INIT_CMD fsm (Update/Invalidate L1 caches)
     615      sc_signal<bool>      r_sc_to_init_cmd_multi_req;      // valid request
     616      sc_signal<bool>      r_sc_to_init_cmd_brdcast_req;    // brdcast request
     617      sc_signal<addr_t>    r_sc_to_init_cmd_nline;              // cache line index
     618      sc_signal<size_t>    r_sc_to_init_cmd_trdid;              // index in Update Table
     619      sc_signal<data_t>    r_sc_to_init_cmd_wdata;          // data (one word)
     620      sc_signal<bool>      r_sc_to_init_cmd_is_long;        // it is a 64 bits SC
     621      sc_signal<data_t>    r_sc_to_init_cmd_wdata_high;     // data high (one word)
     622      sc_signal<size_t>    r_sc_to_init_cmd_index;              // index of the word in line
     623      GenericFifo<bool>    m_sc_to_init_cmd_inst_fifo;      // fifo for the L1 type
     624      GenericFifo<size_t>  m_sc_to_init_cmd_srcid_fifo;     // fifo for srcids
     625      GenericFifo<size_t>  m_sc_to_init_cmd_cache_id_fifo;  // fifo for srcids
     626
     627      // Buffer between SC fsm and INIT_RSP fsm (Decrement UPT entry)
     628      sc_signal<bool>      r_sc_to_init_rsp_req;            // valid request
     629      sc_signal<size_t>    r_sc_to_init_rsp_upt_index;      // index in update table
    610630
    611631      ////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.