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

mproving the debug mechanisms

Location:
trunk/modules/vci_mem_cache_v4/caba/source/include
Files:
3 edited

Legend:

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

    r2 r184  
    4747      size_t i_count)
    4848  {
    49     valid               = i_valid;
    50     update          = i_update;
     49    valid       = i_valid;
     50    update      = i_update;
    5151    brdcast     = i_brdcast;
    5252    rsp         = i_rsp;
    53     srcid               = i_srcid;
    54     trdid               = i_trdid;
    55     pktid               = i_pktid;
    56     nline               = i_nline;
    57     count               = i_count;
     53    srcid       = i_srcid;
     54    trdid       = i_trdid;
     55    pktid       = i_pktid;
     56    nline       = i_nline;
     57    count       = i_count;
    5858  }
    5959
     
    156156
    157157  ////////////////////////////////////////////////////////////////////
    158   // The size() function returns the size of the tab
     158  // The print() function diplays the tab content
    159159  ////////////////////////////////////////////////////////////////////
    160160  void print(){
     
    262262
    263263  /////////////////////////////////////////////////////////////////////
     264  // The is_not_empty() function returns true if the table is not empty
     265  /////////////////////////////////////////////////////////////////////
     266  bool is_not_empty()
     267  {
     268    for(size_t i = 0 ; i < size_tab ; i++){
     269      if(tab[i].valid){
     270        return true;
     271      }
     272    }
     273    return false;
     274  }
     275
     276  /////////////////////////////////////////////////////////////////////
    264277  // The need_rsp() function returns the need of a response
    265278  // Arguments :
  • 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      ////////////////////////////////////////////////////
  • trunk/modules/vci_mem_cache_v4/caba/source/include/xram_transaction_v4.h

    r138 r184  
    1414
    1515class TransactionTabEntry {
    16   typedef uint32_t size_t;
    17   typedef uint32_t data_t;
    18   typedef sc_dt::sc_uint<40> addr_t;
    19   typedef uint32_t be_t;
     16  typedef uint32_t              size_t;
     17  typedef uint32_t              data_t;
     18  typedef sc_dt::sc_uint<40>    addr_t;
     19  typedef uint32_t              be_t;
    2020
    2121 public:
    22   bool                valid;                // entry valid
    23   bool                xram_read;            // read request to XRAM
    24   addr_t              nline;                // index (zy) of the requested line
    25   size_t              srcid;                // processor requesting the transaction
    26   size_t              trdid;                // processor requesting the transaction
    27   size_t              pktid;                // processor requesting the transaction
    28   bool                proc_read;            // read request from processor
    29   size_t                  read_length;      // length of the read (for the response)
    30   size_t              word_index;       // index of the first read word (for the response)
    31   std::vector<data_t> wdata;        // write buffer (one cache line)
    32   std::vector<be_t>   wdata_be;         // be for each data in the write buffer
    33   bool            rerror;           // error returned by xram
     22  bool                      valid;          // entry valid
     23  bool                      xram_read;      // read request to XRAM
     24  addr_t                    nline;          // index (zy) of the requested line
     25  size_t                    srcid;          // processor requesting the transaction
     26  size_t                    trdid;          // processor requesting the transaction
     27  size_t                    pktid;          // processor requesting the transaction
     28  bool                      proc_read;      // read request from processor
     29  size_t                    read_length;    // length of the read (for the response)
     30  size_t                    word_index;         // index of the first read word (for the response)
     31  std::vector<data_t>   wdata;          // write buffer (one cache line)
     32  std::vector<be_t>     wdata_be;       // be for each data in the write buffer
     33  bool                  rerror;         // error returned by xram
    3434
    3535  /////////////////////////////////////////////////////////////////////
     
    3939  {
    4040    valid               = false;
     41    rerror      = false;
    4142  }
    4243
     
    5051    wdata_be.reserve( (int)n_words );
    5152    wdata.reserve( (int)n_words );
    52     for(size_t i=0; i<n_words; i++){
    53       wdata_be.push_back(false);
     53    for(size_t i=0; i<n_words; i++)
     54    {
     55      wdata_be.push_back(0);
    5456      wdata.push_back(0);
    5557    }
     
    352354    tab[index].read_length          = read_length;
    353355    tab[index].word_index           = word_index;
    354     for(size_t i=0; i<tab[index].wdata.size(); i++) {
     356    for(size_t i=0; i<tab[index].wdata.size(); i++)
     357    {
    355358      tab[index].wdata_be[i]    = data_be[i];
    356359      tab[index].wdata[i]       = data[i];
     
    361364  // The write_rsp() function writes a word of the response to an
    362365  // XRAM read transaction.
    363   // The data is only written when the corresponding BE field is Ox0.
     366  // The BE field in TRT is taken into account.
    364367  // Arguments :
    365368  // - index : the index of the transaction in the transaction tab
    366369  // - word_index : the index of the data in the line
    367370  // - data : the data to write
     371  // - error : invalid data
    368372  /////////////////////////////////////////////////////////////////////
    369373  void write_rsp(const size_t index,
     
    396400            && "The selected entry is out of range in erase() Transaction Tab");
    397401    tab[index].valid    = false;
     402    tab[index].rerror   = false;
    398403  }
    399404}; // end class TransactionTab
Note: See TracChangeset for help on using the changeset viewer.