Changeset 483


Ignore:
Timestamp:
Aug 5, 2013, 5:40:31 PM (11 years ago)
Author:
devigne
Message:

Revert commit r481

Location:
trunk/modules/vci_mem_cache/caba/source
Files:
2 edited

Legend:

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

    r481 r483  
    104104        TGT_RSP_XRAM,
    105105        TGT_RSP_MULTI_ACK,
    106         TGT_RSP_CLEANUP,
    107         TGT_RSP_UPT_LOCK,
    108         TGT_RSP_IVT_LOCK
     106        TGT_RSP_CLEANUP
    109107      };
    110108
     
    335333        ALLOC_UPT_WRITE,
    336334        ALLOC_UPT_CAS,
    337         ALLOC_UPT_MULTI_ACK,
    338         ALLOC_UPT_TGT_RSP
     335        ALLOC_UPT_MULTI_ACK
    339336      };
    340337
     
    346343        ALLOC_IVT_CLEANUP,
    347344        ALLOC_IVT_CAS,
    348         ALLOC_IVT_CONFIG,
    349         ALLOC_IVT_TGT_RSP
     345        ALLOC_IVT_CONFIG
    350346      };
    351347
     
    496492      void genMoore();
    497493      void check_monitor(addr_t addr, data_t data, bool read);
    498       bool hit_cleanup_req(size_t *index);
    499       bool hit_multi_ack_req(size_t *index);
    500494
    501495      // Component attributes
     
    516510      TransactionTab                     m_trt;              // xram transaction table
    517511      uint32_t                           m_upt_lines;
    518       uint32_t                           m_ivt_lines;
    519512      UpdateTab                          m_upt;              // pending update
    520513      UpdateTab                          m_ivt;              // pending invalidate
     
    743736
    744737      // Buffer between MULTI_ACK fsm and TGT_RSP fsm (complete write/update transaction)
    745       sc_signal<bool>     *r_multi_ack_to_tgt_rsp_req;  // valid request
     738      sc_signal<bool>     r_multi_ack_to_tgt_rsp_req;   // valid request
    746739      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_srcid; // Transaction srcid
    747740      sc_signal<size_t>   r_multi_ack_to_tgt_rsp_trdid; // Transaction trdid
     
    791784       
    792785      // Buffer between CLEANUP fsm and TGT_RSP fsm (acknowledge a write command from L1)
    793       sc_signal<bool>     *r_cleanup_to_tgt_rsp_req;   // valid request
     786      sc_signal<bool>     r_cleanup_to_tgt_rsp_req;   // valid request
    794787      sc_signal<size_t>   r_cleanup_to_tgt_rsp_srcid; // transaction srcid
    795788      sc_signal<size_t>   r_cleanup_to_tgt_rsp_trdid; // transaction trdid
     
    926919      sc_signal<int>      r_tgt_rsp_fsm;
    927920      sc_signal<size_t>   r_tgt_rsp_cpt;
    928       sc_signal<size_t>   r_tgt_rsp_prio_multi_ack;
    929       sc_signal<size_t>   r_tgt_rsp_prio_cleanup;
    930921      sc_signal<bool>     r_tgt_rsp_key_sent;
    931922
  • trunk/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp

    r482 r483  
    8484  "TGT_RSP_XRAM",
    8585  "TGT_RSP_MULTI_ACK",
    86   "TGT_RSP_CLEANUP",
    87   "TGT_RSP_UPT_LOCK",
    88   "TGT_RSP_IVT_LOCK"
     86  "TGT_RSP_CLEANUP"
    8987};
    9088const char *cc_receive_fsm_str[] =
     
    287285  "ALLOC_UPT_WRITE",
    288286  "ALLOC_UPT_CAS",
    289   "ALLOC_UPT_MULTI_ACK",
    290   "ALLOC_UPT_TGT_RSP"
     287  "ALLOC_UPT_MULTI_ACK"
    291288};
    292289const char *alloc_ivt_fsm_str[] =
     
    296293  "ALLOC_IVT_CLEANUP",
    297294  "ALLOC_IVT_CAS",
    298   "ALLOC_IVT_CONFIG",
    299   "ALLOC_IVT_TGT_RSP"
     295  "ALLOC_IVT_CONFIG"
    300296};
    301297const char *alloc_heap_fsm_str[] =
     
    365361    m_trt(this->name(), trt_lines, nwords),
    366362    m_upt_lines(upt_lines),
    367     m_ivt_lines(ivt_lines),
    368363    m_upt(upt_lines),
    369364    m_ivt(ivt_lines),
     
    507502        i++;
    508503    }
    509     // Allocation for MULTI_ACK FSM
    510     r_multi_ack_to_tgt_rsp_req = new sc_signal<bool>[m_upt_lines];
    511     r_cleanup_to_tgt_rsp_req   = new sc_signal<bool>[m_ivt_lines];
    512504
    513505    // Allocation for IXR_RSP FSM
     
    579571              << " at cycle " << std::dec << m_cpt_cycles << std::endl;
    580572  }
    581 }
    582 // Index is the value of the current priority
    583 ///////////////////////////////////////////////////////////////////////
    584 tmpl(bool) ::hit_cleanup_req(size_t *index)
    585 ///////////////////////////////////////////////////////////////////////
    586 {
    587   size_t i = *index;
    588   do
    589   {
    590     if(r_cleanup_to_tgt_rsp_req[i].read())
    591     {
    592       *index = i;
    593       return true;
    594     }
    595     i = (i + 1) % m_ivt_lines;
    596   } while (i != *index);
    597   return false;
    598 }
    599 
    600 // Index is the value of the current priority
    601 ///////////////////////////////////////////////////////////////////////
    602 tmpl(bool) ::hit_multi_ack_req(size_t *index)
    603 ///////////////////////////////////////////////////////////////////////
    604 {
    605   size_t i = *index;
    606   do
    607   {
    608     if(r_multi_ack_to_tgt_rsp_req[i].read())
    609     {
    610       *index = i;
    611       return true;
    612     }
    613     i = (i + 1) % m_upt_lines;
    614   } while (i != *index);
    615   return false;
    616573}
    617574
     
    717674{
    718675  delete [] r_ixr_rsp_to_xram_rsp_rok;
    719   delete [] r_multi_ack_to_tgt_rsp_req;
    720   delete [] r_cleanup_to_tgt_rsp_req;
     676
    721677  delete [] r_xram_rsp_victim_data;
    722678  delete [] r_xram_rsp_to_tgt_rsp_data;
     
    820776#endif
    821777
     778    r_cleanup_to_tgt_rsp_req      = false;
     779
    822780    m_cc_receive_to_cleanup_fifo.init();
    823     for(size_t i = 0; i < m_upt_lines; i++)
    824     {
    825       r_multi_ack_to_tgt_rsp_req[i] = false;
    826     }
    827     for(size_t i = 0; i < m_ivt_lines; i++)
    828     {
    829       r_cleanup_to_tgt_rsp_req[i] = false;
    830     }
     781
     782    r_multi_ack_to_tgt_rsp_req     = false;
    831783
    832784    m_cc_receive_to_multi_ack_fifo.init();
     
    866818    r_alloc_heap_reset_cpt = 0;
    867819
    868     r_tgt_rsp_key_sent        = false;
    869     r_tgt_rsp_prio_multi_ack  = 0;
    870     r_tgt_rsp_prio_cleanup  = 0;
     820    r_tgt_rsp_key_sent  = false;
    871821
    872822    // Activity counters
     
    13871337        size_t count = 0;
    13881338        bool valid   = m_upt.decrement(r_multi_ack_upt_index.read(), count);
    1389        
    1390         bool need_rsp     = m_upt.need_rsp(r_multi_ack_upt_index.read());
    13911339
    13921340        if(not valid)
     
    13981346        }
    13991347
    1400         if(count == 0 and need_rsp)
    1401         {
    1402           r_multi_ack_fsm = MULTI_ACK_WRITE_RSP;
    1403         }
    1404         else if(count == 0)
     1348        if(count == 0)
    14051349        {
    14061350          r_multi_ack_fsm = MULTI_ACK_UPT_CLEAR;
     
    14361380        r_multi_ack_pktid = m_upt.pktid(r_multi_ack_upt_index.read());
    14371381        r_multi_ack_nline = m_upt.nline(r_multi_ack_upt_index.read());
     1382        bool need_rsp     = m_upt.need_rsp(r_multi_ack_upt_index.read());
    14381383        bool need_ack     = m_upt.need_ack(r_multi_ack_upt_index.read());
    14391384
     
    14411386        m_upt.clear(r_multi_ack_upt_index.read());
    14421387
    1443         if ( need_ack )      r_multi_ack_fsm = MULTI_ACK_CONFIG_ACK;
     1388        if      ( need_rsp ) r_multi_ack_fsm = MULTI_ACK_WRITE_RSP;
     1389        else if ( need_ack ) r_multi_ack_fsm = MULTI_ACK_CONFIG_ACK;
    14441390        else                 r_multi_ack_fsm = MULTI_ACK_IDLE;
    14451391
     
    14541400    /////////////////////////
    14551401    case MULTI_ACK_WRITE_RSP:     // Post a response request to TGT_RSP FSM
    1456     {
    1457         r_multi_ack_to_tgt_rsp_req[r_multi_ack_upt_index.read()]   = true;
    1458         r_multi_ack_fsm = MULTI_ACK_IDLE;
     1402                                  // Wait if pending request
     1403    {
     1404        if ( r_multi_ack_to_tgt_rsp_req.read() ) break;
     1405
     1406        r_multi_ack_to_tgt_rsp_req   = true;
     1407        r_multi_ack_to_tgt_rsp_srcid = r_multi_ack_srcid.read();
     1408        r_multi_ack_to_tgt_rsp_trdid = r_multi_ack_trdid.read();
     1409        r_multi_ack_to_tgt_rsp_pktid = r_multi_ack_pktid.read();
     1410        r_multi_ack_fsm              = MULTI_ACK_IDLE;
    14591411
    14601412#if DEBUG_MEMC_MULTI_ACK
    14611413if(m_debug)
    14621414std::cout << "  <MEMC " << name() << " MULTI_ACK_WRITE_RSP>"
    1463           << " Request TGT_RSP FSM to send a response"
    1464           << " / Request for upt index " << r_multi_ack_upt_index.read() << std::endl;
     1415          << " Request TGT_RSP FSM to send a response to srcid "
     1416          << std::hex << r_multi_ack_srcid.read() << std::endl;
    14651417#endif
    14661418        break;
     
    49614913      size_t count = 0;
    49624914      m_ivt.decrement(r_cleanup_index.read(), count);
    4963      
    4964       if((count == 0) and r_cleanup_need_rsp.read())   // multi inval transaction completed
    4965       {
    4966         r_cleanup_fsm = CLEANUP_WRITE_RSP;
    4967       }
    4968       else if(count == 0)   // multi inval transaction completed
     4915
     4916      if(count == 0)   // multi inval transaction completed
    49694917      {
    49704918        r_cleanup_fsm = CLEANUP_IVT_CLEAR;
     
    50004948      m_ivt.clear(r_cleanup_index.read());
    50014949
    5002       if ( r_cleanup_need_ack.read() )      r_cleanup_fsm = CLEANUP_CONFIG_ACK;
     4950      if      ( r_cleanup_need_rsp.read() ) r_cleanup_fsm = CLEANUP_WRITE_RSP;
     4951      else if ( r_cleanup_need_ack.read() ) r_cleanup_fsm = CLEANUP_CONFIG_ACK;
    50034952      else                                  r_cleanup_fsm = CLEANUP_SEND_CLACK;
    50044953
     
    50154964                               // wait if pending request to the TGT_RSP FSM
    50164965    {
     4966      if(r_cleanup_to_tgt_rsp_req.read()) break;
    50174967
    50184968      // no pending request
    5019       r_cleanup_to_tgt_rsp_req[r_cleanup_index.read()]     = true;
     4969      r_cleanup_to_tgt_rsp_req     = true;
     4970      r_cleanup_to_tgt_rsp_srcid   = r_cleanup_write_srcid.read();
     4971      r_cleanup_to_tgt_rsp_trdid   = r_cleanup_write_trdid.read();
     4972      r_cleanup_to_tgt_rsp_pktid   = r_cleanup_write_pktid.read();
    50204973
    50214974      r_cleanup_fsm                = CLEANUP_SEND_CLACK;
     
    50244977if(m_debug)
    50254978std::cout << "  <MEMC " << name() << " CLEANUP_WRITE_RSP>"
    5026           << " Send a response to a previous write request"
    5027           << std::endl;
     4979          << " Send a response to a previous write request: "
     4980          << " rsrcid = "   << std::hex << r_cleanup_write_srcid.read()
     4981          << " / rtrdid = " << r_cleanup_write_trdid.read()
     4982          << " / rpktid = " << r_cleanup_write_pktid.read() << std::endl;
    50284983#endif
    50294984      break;
     
    65306485    case TGT_RSP_CONFIG_IDLE:  // tgt_cmd requests have the highest priority
    65316486    {
    6532       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6533       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    65346487      if(r_tgt_cmd_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
    65356488      else if(r_read_to_tgt_rsp_req)
     
    65456498        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    65466499      }
    6547       else if(hit_multi_ack_req(&prio_multi_ack))
    6548       {
    6549         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6550         // update rr priority
    6551         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6552       }
    6553       else if(hit_cleanup_req(&prio_cleanup))
    6554       {
    6555         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6556         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6557       }
     6500      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
     6501      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    65586502      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    65596503      break;
     
    65626506    case TGT_RSP_TGT_CMD_IDLE: // read requests have the highest priority
    65636507    {
    6564       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6565       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    65666508      if(r_read_to_tgt_rsp_req)
    65676509      {
     
    65766518        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    65776519      }
    6578       else if(hit_multi_ack_req(&prio_multi_ack))
    6579       {
    6580         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6581         // update rr priority
    6582         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6583       }
    6584       else if(hit_cleanup_req(&prio_cleanup))
    6585       {
    6586         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6587         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6588       }
     6520      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
     6521      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    65896522      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    65906523      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    65946527    case TGT_RSP_READ_IDLE: // write requests have the highest priority
    65956528    {
    6596       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6597       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    65986529      if(r_write_to_tgt_rsp_req)          r_tgt_rsp_fsm = TGT_RSP_WRITE;
    65996530      else if(r_cas_to_tgt_rsp_req)       r_tgt_rsp_fsm = TGT_RSP_CAS;
     
    66036534        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    66046535      }
    6605       else if(hit_multi_ack_req(&prio_multi_ack))
    6606       {
    6607         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6608         // update rr priority
    6609         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6610       }
    6611       else if(hit_cleanup_req(&prio_cleanup))
    6612       {
    6613         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6614         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6615       }
     6536      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
     6537      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    66166538      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    66176539      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    66266548    case TGT_RSP_WRITE_IDLE: // cas requests have the highest priority
    66276549    {
    6628       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6629       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    66306550      if(r_cas_to_tgt_rsp_req)            r_tgt_rsp_fsm = TGT_RSP_CAS;
    66316551      else if(r_xram_rsp_to_tgt_rsp_req)
     
    66346554        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    66356555      }
    6636       else if(hit_multi_ack_req(&prio_multi_ack))
    6637       {
    6638         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6639         // update rr priority
    6640         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6641       }
    6642       else if(hit_cleanup_req(&prio_cleanup))
    6643       {
    6644         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6645         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6646       }
     6556      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
     6557      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    66476558      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    66486559      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    66586569    case TGT_RSP_CAS_IDLE: // xram_rsp requests have the highest priority
    66596570    {
    6660       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6661       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    66626571      if(r_xram_rsp_to_tgt_rsp_req)
    66636572      {
     
    66656574        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    66666575      }
    6667       else if(hit_multi_ack_req(&prio_multi_ack))
    6668       {
    6669         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6670         // update rr priority
    6671         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6672       }
    6673       else if(hit_cleanup_req(&prio_cleanup))
    6674       {
    6675         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6676         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6677       }
     6576      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
     6577      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    66786578      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    66796579      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    66906590    case TGT_RSP_XRAM_IDLE: // multi ack requests have the highest priority
    66916591    {
    6692       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6693       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    6694 
    6695       if(hit_multi_ack_req(&prio_multi_ack))
    6696       {
    6697         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6698         // update rr priority
    6699         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6700       }
    6701       else if(hit_cleanup_req(&prio_cleanup))
    6702       {
    6703         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6704         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6705       }
     6592
     6593      if(r_multi_ack_to_tgt_rsp_req)      r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
     6594      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    67066595      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    67076596      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    67236612    case TGT_RSP_MULTI_ACK_IDLE: // cleanup requests have the highest priority
    67246613    {
    6725       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6726       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    6727       if(hit_cleanup_req(&prio_cleanup))
    6728       {
    6729         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6730         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6731       }
     6614      if(r_cleanup_to_tgt_rsp_req)        r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    67326615      else if(r_config_to_tgt_rsp_req)    r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    67336616      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    67446627        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    67456628      }
    6746       else if(hit_multi_ack_req(&prio_multi_ack))
    6747       {
    6748         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6749         // update rr priority
    6750         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6751       }
     6629      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
    67526630      break;
    67536631    }
     
    67556633    case TGT_RSP_CLEANUP_IDLE: // tgt cmd requests have the highest priority
    67566634    {
    6757       size_t prio_multi_ack = r_tgt_rsp_prio_multi_ack.read();
    6758       size_t prio_cleanup   = r_tgt_rsp_prio_cleanup.read();
    67596635      if(r_config_to_tgt_rsp_req)         r_tgt_rsp_fsm = TGT_RSP_CONFIG;
    67606636      else if(r_tgt_cmd_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_TGT_CMD;
     
    67716647        r_tgt_rsp_cpt = r_xram_rsp_to_tgt_rsp_word.read();
    67726648      }
    6773       else if(hit_multi_ack_req(&prio_multi_ack))
    6774       {
    6775         r_tgt_rsp_fsm = TGT_RSP_UPT_LOCK;
    6776         // update rr priority
    6777         r_tgt_rsp_prio_multi_ack = prio_multi_ack;
    6778       }
    6779       else if(hit_cleanup_req(&prio_cleanup))
    6780       {
    6781         r_tgt_rsp_fsm = TGT_RSP_IVT_LOCK;
    6782         r_tgt_rsp_prio_cleanup = prio_cleanup;
    6783       }
     6649      else if(r_multi_ack_to_tgt_rsp_req) r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK   ;
     6650      else if(r_cleanup_to_tgt_rsp_req)   r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    67846651      break;
    67856652    }
     
    68946761      break;
    68956762    }
    6896    
    6897     ///////////////////////
    6898     case TGT_RSP_IVT_LOCK:      // Clear IVT entry
    6899     {
    6900       if (r_alloc_ivt_fsm.read() != ALLOC_IVT_TGT_RSP) break;
    6901 
    6902       r_cleanup_to_tgt_rsp_srcid = m_ivt.srcid(r_tgt_rsp_prio_cleanup.read());
    6903       r_cleanup_to_tgt_rsp_trdid = m_ivt.trdid(r_tgt_rsp_prio_cleanup.read());
    6904       r_cleanup_to_tgt_rsp_pktid = m_ivt.pktid(r_tgt_rsp_prio_cleanup.read());
    6905 
    6906       m_ivt.clear(r_tgt_rsp_prio_cleanup.read());
    6907 
    6908       r_tgt_rsp_fsm = TGT_RSP_CLEANUP;
    6909       break;
    6910     }
    6911 
    69126763    /////////////////////
    69136764    case TGT_RSP_CLEANUP:   // pas clair pour moi (AG)
     
    69246775#endif
    69256776        r_tgt_rsp_fsm = TGT_RSP_CLEANUP_IDLE;
    6926         r_cleanup_to_tgt_rsp_req[r_tgt_rsp_prio_cleanup.read()] = false;
    6927         r_tgt_rsp_prio_cleanup = (r_tgt_rsp_prio_cleanup.read() + 1) % m_ivt_lines;
     6777        r_cleanup_to_tgt_rsp_req = false;
    69286778      }
    69296779      break;
     
    69916841    }
    69926842    ///////////////////////
    6993     case TGT_RSP_UPT_LOCK:      // Clear UPT entry
    6994     {
    6995       if (r_alloc_upt_fsm.read() != ALLOC_UPT_TGT_RSP) break;
    6996 
    6997       r_multi_ack_to_tgt_rsp_srcid = m_upt.srcid(r_tgt_rsp_prio_multi_ack.read());
    6998       r_multi_ack_to_tgt_rsp_trdid = m_upt.trdid(r_tgt_rsp_prio_multi_ack.read());
    6999       r_multi_ack_to_tgt_rsp_pktid = m_upt.pktid(r_tgt_rsp_prio_multi_ack.read());
    7000 
    7001       m_upt.clear(r_tgt_rsp_prio_multi_ack.read());
    7002 
    7003       r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK;
    7004       break;
    7005     }
    7006 
    7007     ///////////////////////
    70086843    case TGT_RSP_MULTI_ACK:    // send the write response after coherence transaction
    70096844    {
     
    70196854#endif
    70206855        r_tgt_rsp_fsm = TGT_RSP_MULTI_ACK_IDLE;
    7021         r_multi_ack_to_tgt_rsp_req[r_tgt_rsp_prio_multi_ack.read()] = false;
    7022         r_tgt_rsp_prio_multi_ack = (r_tgt_rsp_prio_multi_ack.read() + 1) % m_upt_lines;
     6856        r_multi_ack_to_tgt_rsp_req = false;
    70236857      }
    70246858      break;
     
    70486882              else if (r_multi_ack_fsm.read() == MULTI_ACK_UPT_LOCK)
    70496883                  r_alloc_upt_fsm = ALLOC_UPT_MULTI_ACK;
    7050              
    7051               else if (r_tgt_rsp_fsm.read() == TGT_RSP_UPT_LOCK)
    7052                   r_alloc_upt_fsm = ALLOC_UPT_TGT_RSP;
    70536884          }
    70546885          break;
     
    70606891              if (r_multi_ack_fsm.read() == MULTI_ACK_UPT_LOCK)
    70616892                  r_alloc_upt_fsm = ALLOC_UPT_MULTI_ACK;
    7062              
    7063               else if (r_tgt_rsp_fsm.read() == TGT_RSP_UPT_LOCK)
    7064                   r_alloc_upt_fsm = ALLOC_UPT_TGT_RSP;
    70656893
    70666894              else if (r_write_fsm.read() == WRITE_UPT_LOCK)
     
    70746902              (r_multi_ack_fsm.read() != MULTI_ACK_UPT_CLEAR))
    70756903          {
    7076               if (r_tgt_rsp_fsm.read() == TGT_RSP_UPT_LOCK)
    7077                   r_alloc_upt_fsm = ALLOC_UPT_TGT_RSP;
    7078              
    7079               else if (r_write_fsm.read() == WRITE_UPT_LOCK)
     6904              if (r_write_fsm.read() == WRITE_UPT_LOCK)
    70806905                  r_alloc_upt_fsm = ALLOC_UPT_WRITE;
    70816906
    70826907              else if (r_cas_fsm.read() == CAS_UPT_LOCK)
    70836908                  r_alloc_upt_fsm = ALLOC_UPT_CAS;
    7084           }
    7085           break;
    7086      
    7087       /////////////////////////
    7088       case ALLOC_UPT_TGT_RSP:     // allocated to TGT_RSP FSM
    7089           if (r_tgt_rsp_fsm.read() != TGT_RSP_UPT_LOCK )
    7090           {
    7091               if (r_write_fsm.read() == WRITE_UPT_LOCK)
    7092                   r_alloc_upt_fsm = ALLOC_UPT_WRITE;
    7093 
    7094               else if (r_cas_fsm.read() == CAS_UPT_LOCK)
    7095                   r_alloc_upt_fsm = ALLOC_UPT_CAS;
    7096              
    7097               else if (r_multi_ack_fsm.read() == MULTI_ACK_UPT_LOCK)
    7098                   r_alloc_upt_fsm = ALLOC_UPT_MULTI_ACK;
    7099              
    71006909          }
    71016910          break;
     
    71346943              else if (r_config_fsm.read() == CONFIG_DIR_IVT_LOCK)
    71356944                  r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
    7136              
    7137               else if (r_tgt_rsp_fsm.read() == TGT_RSP_IVT_LOCK)
    7138                   r_alloc_ivt_fsm = ALLOC_IVT_TGT_RSP;
    71396945          }
    71406946          break;
     
    71526958              else if (r_config_fsm.read() == CONFIG_DIR_IVT_LOCK)
    71536959                  r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
    7154              
    7155               else if (r_tgt_rsp_fsm.read() == TGT_RSP_IVT_LOCK)
    7156                   r_alloc_ivt_fsm = ALLOC_IVT_TGT_RSP;
    71576960
    71586961              else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
     
    71716974              else if (r_config_fsm.read() == CONFIG_DIR_IVT_LOCK)
    71726975                  r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
    7173              
    7174               else if (r_tgt_rsp_fsm.read() == TGT_RSP_IVT_LOCK)
    7175                   r_alloc_ivt_fsm = ALLOC_IVT_TGT_RSP;
    71766976
    71776977              else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
     
    71896989              if (r_config_fsm.read() == CONFIG_DIR_IVT_LOCK)
    71906990                  r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
    7191              
    7192               else if (r_tgt_rsp_fsm.read() == TGT_RSP_IVT_LOCK)
    7193                   r_alloc_ivt_fsm = ALLOC_IVT_TGT_RSP;
    71946991
    71956992              else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
     
    72077004      case ALLOC_IVT_CONFIG:           // allocated to CONFIG FSM
    72087005          if (r_config_fsm.read() != CONFIG_DIR_IVT_LOCK)
    7209           {
    7210               if (r_tgt_rsp_fsm.read() == TGT_RSP_IVT_LOCK)
    7211                   r_alloc_ivt_fsm = ALLOC_IVT_TGT_RSP;
    7212              
    7213               else if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
     7006          {
     7007              if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
    72147008                  r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
    72157009
     
    72227016              else if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
    72237017                  r_alloc_ivt_fsm = ALLOC_IVT_CAS;
    7224           }
    7225           break;
    7226      
    7227       //////////////////////////
    7228       case ALLOC_IVT_TGT_RSP:           // allocated to TGT RSP FSM
    7229           if (r_tgt_rsp_fsm.read() != TGT_RSP_IVT_LOCK)
    7230           {
    7231               if (r_write_fsm.read() == WRITE_BC_IVT_LOCK)
    7232                   r_alloc_ivt_fsm = ALLOC_IVT_WRITE;
    7233 
    7234               else if (r_xram_rsp_fsm.read() == XRAM_RSP_INVAL_LOCK)
    7235                   r_alloc_ivt_fsm = ALLOC_IVT_XRAM_RSP;
    7236 
    7237               else if (r_cleanup_fsm.read() == CLEANUP_IVT_LOCK)
    7238                   r_alloc_ivt_fsm = ALLOC_IVT_CLEANUP;
    7239 
    7240               else if (r_cas_fsm.read() == CAS_BC_IVT_LOCK)
    7241                   r_alloc_ivt_fsm = ALLOC_IVT_CAS;
    7242              
    7243               else if (r_config_fsm.read() == CONFIG_DIR_IVT_LOCK)
    7244                   r_alloc_ivt_fsm = ALLOC_IVT_CONFIG;
    72457018          }
    72467019          break;
Note: See TracChangeset for help on using the changeset viewer.