Ignore:
Timestamp:
Jun 6, 2013, 9:42:29 PM (11 years ago)
Author:
alain
Message:

Updating vci_cc_vcache_wrapper and vci_mem_cache to comply with the new DSPIN signals (explcit EOP).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp

    r394 r403  
    21282128        size_t          tlb_way;
    21292129        size_t          tlb_set;
    2130         paddr_t         tlb_nline;
     2130        paddr_t         tlb_nline = 0;
    21312131        size_t          cache_way;
    21322132        size_t          cache_set;
     
    54055405    //   C_RECEIVE  FSM
    54065406    // This FSM receive all coherence packets on a DSPIN40 port.
    5407     // There is 4 packet types:
     5407    // There is 7 packet types:
    54085408    // - CC_DATA_INVAL : DCACHE invalidate request
    54095409    // - CC_DATA_UPDT  : DCACHE update request (multi-words)
     
    55665566            uint64_t receive_data = p_dspin_in.data.read();
    55675567            // for data INVAL, wait for dcache to take the request
    5568             if ((r_cc_receive_data_ins.read() == 0) and not (r_cc_receive_dcache_req.read()) and (p_dspin_in.write.read()))
     5568            if ( (r_cc_receive_data_ins.read() == 0) and
     5569                 not (r_cc_receive_dcache_req.read()) and
     5570                 (p_dspin_in.write.read()) )
    55695571            {
    55705572                // request dcache to handle the INVAL
     
    55885590            }
    55895591            // we should never get there
    5590             assert ( false && "CC_RECEIVE_INVAL_NLINE : incoherent handling of either r_cc_receive_data_ins or r_cc_receive_*cache_req\n");
     5592            assert ( false && "ERROR in CC_VCACHE : CC_RECEIVE_INVAL_NLINE\n");
    55915593        }
    55925594        ////////////////////////////
     
    56215623            // for data INVAL, wait for dcache to take the request and fifo to
    56225624            // be empty
    5623             if ((r_cc_receive_data_ins.read() == 0) and not (r_cc_receive_dcache_req.read()) and r_cc_receive_updt_fifo_be.empty() and (p_dspin_in.write.read()))
     5625            if ( (r_cc_receive_data_ins.read() == 0) and
     5626                 not (r_cc_receive_dcache_req.read()) and
     5627                 r_cc_receive_updt_fifo_be.empty() and
     5628                 (p_dspin_in.write.read()) )
    56245629            {
    56255630                r_cc_receive_dcache_nline  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_NLINE);
     
    56325637            // for ins INVAL, wait for icache to take the request and fifo to be
    56335638            // empty
    5634             if ((r_cc_receive_data_ins.read() == 1) and not (r_cc_receive_icache_req.read()) and r_cc_receive_updt_fifo_be.empty() and (p_dspin_in.write.read()))
     5639            if ( (r_cc_receive_data_ins.read() == 1) and
     5640                 not (r_cc_receive_icache_req.read()) and
     5641                 r_cc_receive_updt_fifo_be.empty() and
     5642                 (p_dspin_in.write.read()))
    56355643            {
    56365644                r_cc_receive_icache_nline  = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_NLINE);
     
    56425650            }
    56435651            // we should never get there
    5644             assert ( false && "CC_RECEIVE_UPDT_NLINE : incoherent handling of either r_cc_receive_data_ins or r_cc_receive_*cache_req or r_cc_receive_fifo\n");
     5652            assert ( false && "ERROR in CC_VCACHE : CC_RECEIVE_UPDT_NLINE \n");
    56455653            break;
    56465654        }
     
    56535661                r_cc_receive_icache_req = true;
    56545662
    5655             // sample data, be and eop
    5656             uint64_t receive_data = p_dspin_in.data.read();
    56575663            // wait for the fifo
    56585664            if (r_cc_receive_updt_fifo_be.wok() and (p_dspin_in.write.read()))
    56595665            {
    5660                 cc_receive_updt_fifo_be = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_BE);
     5666                uint64_t receive_data = p_dspin_in.data.read();
     5667                bool     receive_eop  = p_dspin_in.eop.read();
     5668                cc_receive_updt_fifo_be   = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_BE);
    56615669                cc_receive_updt_fifo_data = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::MULTI_UPDT_DATA);
    5662                 // sample eop to test for state exit
    5663                 bool flit_eop = DspinDhccpParam::dspin_get(receive_data,DspinDhccpParam::FROM_MC_EOP);
    5664                 cc_receive_updt_fifo_eop = flit_eop;
     5670                cc_receive_updt_fifo_eop  = receive_eop;
    56655671                cc_receive_updt_fifo_put  = true;
    5666                 if(flit_eop)
    5667                     r_cc_receive_fsm = CC_RECEIVE_IDLE;
     5672                if ( receive_eop ) r_cc_receive_fsm = CC_RECEIVE_IDLE;
    56685673            }
    56695674            break;
     
    58575862        {
    58585863            // initialize dspin send data
    5859             DspinDhccpParam::dspin_set(dspin_send_data,
    5860                                        0,
    5861                                        DspinDhccpParam::FROM_L1_EOP);
     5864//            DspinDhccpParam::dspin_set(dspin_send_data,
     5865//                                       0,
     5866//                                       DspinDhccpParam::FROM_L1_EOP);
    58625867            DspinDhccpParam::dspin_set(dspin_send_data,
    58635868                                       m_cc_global_id,
     
    59145919            p_dspin_out.data  = dspin_send_data;
    59155920            p_dspin_out.write = true;
     5921            p_dspin_out.eop   = false;
    59165922            break;
    59175923        }
     
    59205926        {
    59215927            // initialize dspin send data
    5922             DspinDhccpParam::dspin_set(dspin_send_data,
    5923                                        1,
    5924                                        DspinDhccpParam::FROM_L1_EOP);
     5928//            DspinDhccpParam::dspin_set(dspin_send_data,
     5929//                                       1,
     5930//                                       DspinDhccpParam::FROM_L1_EOP);
    59255931
    59265932            if(r_cc_send_last_client.read() == 0) // dcache active request
     
    59395945            p_dspin_out.data  = dspin_send_data;
    59405946            p_dspin_out.write = true;
     5947            p_dspin_out.eop   = true;
    59415948            break;
    59425949        }
     
    59455952        {
    59465953            // initialize dspin send data
    5947             DspinDhccpParam::dspin_set(dspin_send_data,
    5948                                        1,
    5949                                        DspinDhccpParam::FROM_L1_EOP);
     5954//            DspinDhccpParam::dspin_set(dspin_send_data,
     5955//                                       1,
     5956//                                       DspinDhccpParam::FROM_L1_EOP);
    59505957            DspinDhccpParam::dspin_set(dspin_send_data,
    59515958                                       0,
     
    59875994            p_dspin_out.data  = dspin_send_data;
    59885995            p_dspin_out.write = true;
     5996            p_dspin_out.eop   = true;
    59895997
    59905998            break;
Note: See TracChangeset for help on using the changeset viewer.