Ignore:
Timestamp:
Oct 27, 2014, 5:40:47 PM (9 years ago)
Author:
cfuguet
Message:

reconf: adding the CC_TEST FSM as one of the clients of the CC_SEND FSM

  • Now the CC_TEST FSM can send commands to the CC_SEND FSM in order to test the M2P coherence network.
Location:
branches/reconfiguration/modules/vci_mem_cache/caba/source
Files:
2 edited

Legend:

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

    r865 r868  
    134134        CC_SEND_CAS_IDLE,
    135135        CC_SEND_CONFIG_IDLE,
     136        CC_SEND_TEST_IDLE,
    136137        CC_SEND_XRAM_RSP_BRDCAST_HEADER,
    137138        CC_SEND_XRAM_RSP_BRDCAST_NLINE,
     
    152153        CC_SEND_CONFIG_INVAL_NLINE,
    153154        CC_SEND_CONFIG_BRDCAST_HEADER,
    154         CC_SEND_CONFIG_BRDCAST_NLINE
     155        CC_SEND_CONFIG_BRDCAST_NLINE,
     156        CC_SEND_TEST_HEADER,
     157        CC_SEND_TEST_SIGNATURE
    155158      };
    156159
     
    986989
    987990      sc_signal<int>      r_cc_test_fsm;
     991      sc_signal<size_t>   r_cc_test_srcid;
    988992
    989993      // Buffer between CC_TEST fsm and CC_SEND fsm
  • branches/reconfiguration/modules/vci_mem_cache/caba/source/src/vci_mem_cache.cpp

    r865 r868  
    104104        "CC_SEND_CAS_IDLE",
    105105        "CC_SEND_CONFIG_IDLE",
     106        "CC_SEND_TEST_IDLE",
    106107        "CC_SEND_XRAM_RSP_BRDCAST_HEADER",
    107108        "CC_SEND_XRAM_RSP_BRDCAST_NLINE",
     
    122123        "CC_SEND_CONFIG_INVAL_NLINE",
    123124        "CC_SEND_CONFIG_BRDCAST_HEADER",
    124         "CC_SEND_CONFIG_BRDCAST_NLINE"
     125        "CC_SEND_CONFIG_BRDCAST_NLINE",
     126        "CC_SEND_TEST_HEADER",
     127        "CC_SEND_TEST_SIGNATURE"
    125128    };
    126129    const char *cc_test_fsm_str[] =
     
    66896692        {
    66906693            case CC_TEST_IDLE:
     6694            {
    66916695                if (not m_cc_receive_to_cc_test_fifo.rok()) break;
    66926696
     6697                uint32_t srcid = DspinDhccpParam::dspin_get(
     6698                        m_cc_receive_to_cc_test_fifo.read(),
     6699                        DspinDhccpParam::CC_TEST_SRCID);
     6700
    66936701                cc_receive_to_cc_test_fifo_get = true;
     6702                r_cc_test_srcid = srcid;
    66946703                r_cc_test_fsm = CC_TEST_SEND;
    66956704                break;
     6705            }
    66966706
    66976707            case CC_TEST_SEND:
     
    67266736        // network, used to update or invalidate cache lines in L1 caches.
    67276737        //
    6728         // It implements a round-robin priority between the four possible client FSMs
    6729         //     XRAM_RSP > CAS > WRITE > CONFIG
     6738        // It implements a round-robin priority between the five possible client FSMs
     6739        //     XRAM_RSP > CAS > WRITE > CONFIG > TEST
    67306740        //
    67316741        // Each FSM can request the next services:
     
    67386748        // - r_config_to_cc_send_multi_req : multi-inval
    67396749        //   r_config_to_cc_send_brdcast_req : broadcast-inval
     6750        // - r_cc_test_to_cc_send_req : test req
    67406751        //
    67416752        // An inval request is a double DSPIN flit command containing:
     
    67466757        // 2. the index of the first modified word in the line.
    67476758        // 3. the data to update
     6759        //
     6760        // A test request is a two-flits DSPIN packet containing:
     6761        // 1. header flit with destination
     6762        // 2. a test signature
    67486763        ///////////////////////////////////////////////////////////////////////////////
    67496764
     
    67536768            case CC_SEND_CONFIG_IDLE:    // XRAM_RSP FSM has highest priority
    67546769            {
     6770                // CC_TEST
     6771                if (r_cc_test_to_cc_send_req.read())
     6772                {
     6773                    r_cc_send_fsm = CC_SEND_TEST_HEADER;
     6774                    break;
     6775                }
    67556776                // XRAM_RSP
    67566777                if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
     
    68166837                    break;
    68176838                }
     6839                // CC_TEST
     6840                if (r_cc_test_to_cc_send_req.read())
     6841                {
     6842                    r_cc_send_fsm = CC_SEND_TEST_HEADER;
     6843                    break;
     6844                }
    68186845                // XRAM_RSP
    68196846                if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
     
    68936920                    break;
    68946921                }
     6922                // CC_TEST
     6923                if (r_cc_test_to_cc_send_req.read())
     6924                {
     6925                    r_cc_send_fsm = CC_SEND_TEST_HEADER;
     6926                    break;
     6927                }
    68956928                // XRAM_RSP
    68966929                if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
     
    69106943            case CC_SEND_CAS_IDLE:   // CLEANUP FSM has highest priority
    69116944            {
     6945                // WRITE
    69126946                if (m_write_to_cc_send_inst_fifo.rok() or
    69136947                        r_write_to_cc_send_multi_req.read())
     
    69326966                    break;
    69336967                }
     6968                // CC_TEST
     6969                if (r_cc_test_to_cc_send_req.read())
     6970                {
     6971                    r_cc_send_fsm = CC_SEND_TEST_HEADER;
     6972                    break;
     6973                }
     6974                // XRAM_RSP
    69346975                if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
    69356976                        r_xram_rsp_to_cc_send_multi_req.read())
     
    69436984                    break;
    69446985                }
     6986                // CAS
    69456987                if (m_cas_to_cc_send_inst_fifo.rok() or
    69466988                        r_cas_to_cc_send_multi_req.read())
     
    69526994                {
    69536995                    r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
     6996                    break;
     6997                }
     6998                break;
     6999            }
     7000            //////////////////////
     7001            case CC_SEND_TEST_IDLE:
     7002            {
     7003                // WRITE
     7004                if (m_write_to_cc_send_inst_fifo.rok() or
     7005                        r_write_to_cc_send_multi_req.read())
     7006                {
     7007                    r_cc_send_fsm = CC_SEND_WRITE_UPDT_HEADER;
     7008                    break;
     7009                }
     7010                if (r_write_to_cc_send_brdcast_req.read())
     7011                {
     7012                    r_cc_send_fsm = CC_SEND_WRITE_BRDCAST_HEADER;
     7013                    break;
     7014                }
     7015                // CONFIG
     7016                if (r_config_to_cc_send_multi_req.read())
     7017                {
     7018                    r_cc_send_fsm = CC_SEND_CONFIG_INVAL_HEADER;
     7019                    break;
     7020                }
     7021                if (r_config_to_cc_send_brdcast_req.read())
     7022                {
     7023                    r_cc_send_fsm = CC_SEND_CONFIG_BRDCAST_HEADER;
     7024                    break;
     7025                }
     7026                // XRAM_RSP
     7027                if (m_xram_rsp_to_cc_send_inst_fifo.rok() or
     7028                        r_xram_rsp_to_cc_send_multi_req.read())
     7029                {
     7030                    r_cc_send_fsm = CC_SEND_XRAM_RSP_INVAL_HEADER;
     7031                    break;
     7032                }
     7033                if (r_xram_rsp_to_cc_send_brdcast_req.read())
     7034                {
     7035                    r_cc_send_fsm = CC_SEND_XRAM_RSP_BRDCAST_HEADER;
     7036                    break;
     7037                }
     7038                // CAS
     7039                if (m_cas_to_cc_send_inst_fifo.rok() or
     7040                        r_cas_to_cc_send_multi_req.read())
     7041                {
     7042                    r_cc_send_fsm = CC_SEND_CAS_UPDT_HEADER;
     7043                    break;
     7044                }
     7045                if (r_cas_to_cc_send_brdcast_req.read())
     7046                {
     7047                    r_cc_send_fsm = CC_SEND_CAS_BRDCAST_HEADER;
     7048                    break;
     7049                }
     7050                // CC_TEST
     7051                if (r_cc_test_to_cc_send_req.read())
     7052                {
     7053                    r_cc_send_fsm = CC_SEND_TEST_HEADER;
    69547054                    break;
    69557055                }
     
    72967396                break;
    72977397            }
     7398            ///////////////////////////////////
     7399            case CC_SEND_TEST_HEADER:         // send first flit TEST (from CC_TEST FSM)
     7400            {
     7401                if (not p_dspin_m2p.read) break;
     7402                r_cc_send_fsm = CC_SEND_TEST_SIGNATURE;
     7403                break;
     7404            }
     7405            //////////////////////////////////
     7406            case CC_SEND_TEST_SIGNATURE:      // send second flit TEST (from CC_TEST FSM)
     7407            {
     7408                if (not p_dspin_m2p.read) break;
     7409                r_cc_test_to_cc_send_req = false;
     7410                r_cc_send_fsm = CC_SEND_TEST_IDLE;
     7411                break;
     7412            }
    72987413        }
    72997414        // end switch r_cc_send_fsm
     
    73217436                    DspinDhccpParam::dspin_get(
    73227437                            p_dspin_p2m.data.read(),
    7323                             DspinDhccpParam::P2M_TEST);
     7438                            DspinDhccpParam::CC_TEST_TEST);
    73247439
    73257440                if ((type == DspinDhccpParam::TYPE_TEST) and (test == 1))
     
    94499564                break;
    94509565            }
     9566            /////////////////////////////////////
     9567            case CC_SEND_TEST_HEADER:
     9568            {
     9569                uint64_t flit = 0;
     9570
     9571                DspinDhccpParam::dspin_set(flit,
     9572                        r_cc_test_srcid.read(),
     9573                        DspinDhccpParam::CC_TEST_DEST);
     9574
     9575                DspinDhccpParam::dspin_set(flit,
     9576                        1ULL,
     9577                        DspinDhccpParam::CC_TEST_TEST);
     9578
     9579                // TODO: Send MemoryCache SRCID too ?
     9580
     9581                p_dspin_m2p.write = true;
     9582                p_dspin_m2p.data  = flit;
     9583                break;
     9584            }
     9585            ////////////////////////////////////
     9586            case CC_SEND_TEST_SIGNATURE:
     9587            {
     9588                uint64_t flit = 0;
     9589                uint64_t data = (uint64_t)m_cc_receive_to_cc_test_fifo.read();
     9590                uint64_t lsb  = (uint64_t)m_cc_receive_to_cc_test_fifo.read() & ((1 << 7) - 1);
     9591
     9592                DspinDhccpParam::dspin_set(flit,
     9593                        data | (lsb << 32),
     9594                        DspinDhccpParam::CC_TEST_SIGNATURE);
     9595
     9596                p_dspin_m2p.write = true;
     9597                p_dspin_m2p.eop   = true;
     9598                p_dspin_m2p.data  = flit;
     9599                break;
     9600            }
    94519601        }
    94529602
Note: See TracChangeset for help on using the changeset viewer.