Ignore:
Timestamp:
Jul 17, 2013, 2:42:13 PM (12 years ago)
Author:
cfuguet
Message:

Merging branch/v5/vci_cc_vcache_wrapper with trunk modifications
to start the development of new coherence protocol modifications
in this component

Location:
branches/v5/modules/vci_cc_vcache_wrapper
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/v5/modules/vci_cc_vcache_wrapper

  • branches/v5/modules/vci_cc_vcache_wrapper/caba/source/include/vci_cc_vcache_wrapper.h

    r351 r443  
    5555
    5656////////////////////////////////////////////
    57 template<typename vci_param, typename iss_t>
     57template<typename vci_param,
     58         size_t   dspin_in_width,
     59         size_t   dspin_out_width,
     60         typename iss_t>
    5861class VciCcVCacheWrapper
    5962////////////////////////////////////////////
    6063    : public soclib::caba::BaseModule
    6164{
    62     typedef uint32_t vaddr_t;
    63     typedef uint32_t tag_t;
    64     typedef uint32_t type_t;
    65     typedef typename iss_t::DataOperationType data_op_t;
    66 
    67     typedef typename vci_param::addr_t  paddr_t;
    68     typedef typename vci_param::data_t  vci_data_t;
    69     typedef typename vci_param::be_t    vci_be_t;
    70     typedef typename vci_param::srcid_t vci_srcid_t;
    71     typedef typename vci_param::trdid_t vci_trdid_t;
    72     typedef typename vci_param::pktid_t vci_pktid_t;
    73     typedef typename vci_param::plen_t  vci_plen_t;
    74 
    75     enum icache_fsm_state_e {
     65
     66    typedef typename vci_param::fast_addr_t  paddr_t;
     67
     68    enum icache_fsm_state_e
     69    {
    7670        ICACHE_IDLE,
    7771        // handling XTN processor requests
     
    10195    };
    10296
    103     enum dcache_fsm_state_e {
     97    enum dcache_fsm_state_e
     98    {
    10499        DCACHE_IDLE,
    105100        // handling itlb & dtlb miss
     
    151146    };
    152147
    153     enum cmd_fsm_state_e {
     148    enum cmd_fsm_state_e
     149    {
    154150        CMD_IDLE,
    155151        CMD_INS_MISS,
     
    163159    };
    164160
    165     enum rsp_fsm_state_e {
     161    enum rsp_fsm_state_e
     162    {
    166163        RSP_IDLE,
    167164        RSP_INS_MISS,
     
    173170    };
    174171
    175     enum cc_receive_fsm_state_e {
     172    enum cc_receive_fsm_state_e
     173    {
    176174        CC_RECEIVE_IDLE,
    177175        CC_RECEIVE_CLACK,
     
    185183    };
    186184
    187     enum cc_send_fsm_state_e {
     185    enum cc_send_fsm_state_e
     186    {
    188187        CC_SEND_IDLE,
    189188        CC_SEND_CLEANUP_1,
     
    221220
    222221    // cc_send_type
    223     typedef enum {
     222    typedef enum
     223    {
    224224        CC_TYPE_CLEANUP,
    225225        CC_TYPE_MULTI_ACK,
     
    227227
    228228    // cc_receive_type
    229     typedef enum {
     229    typedef enum
     230    {
    230231        CC_TYPE_CLACK,
    231232        CC_TYPE_BRDCAST,
     
    235236
    236237    // TLB Mode : ITLB / DTLB / ICACHE / DCACHE
    237     enum {
     238    enum
     239    {
    238240        INS_TLB_MASK    = 0x8,
    239241        DATA_TLB_MASK   = 0x4,
     
    283285
    284286public:
    285     sc_in<bool>                             p_clk;
    286     sc_in<bool>                             p_resetn;
    287     sc_in<bool>                             p_irq[iss_t::n_irq];
    288     soclib::caba::VciInitiator<vci_param>   p_vci;
    289     soclib::caba::DspinInput <40>           p_dspin_in;
    290     soclib::caba::DspinOutput<33>           p_dspin_out;
     287    sc_in<bool>                                 p_clk;
     288    sc_in<bool>                                 p_resetn;
     289    sc_in<bool>                                 p_irq[iss_t::n_irq];
     290    soclib::caba::VciInitiator<vci_param>       p_vci;
     291    soclib::caba::DspinInput <dspin_in_width>   p_dspin_in;
     292    soclib::caba::DspinOutput<dspin_out_width>  p_dspin_out;
    291293
    292294private:
     
    295297    soclib::common::AddressDecodingTable<uint32_t, bool> m_cacheability_table;
    296298
    297     const vci_srcid_t                   m_srcid;
     299    const size_t                        m_srcid;
    298300    const size_t                        m_cc_global_id;
    299301    const size_t                        m_nline_width;
     
    327329
    328330    /////////////////////////////////////////////
    329     // debug variables (for each FSM)
     331    // debug variables
    330332    /////////////////////////////////////////////
    331     bool                                m_debug_previous_hit;
    332     bool                                m_idebug_previous_hit;
    333     bool                                m_debug_dcache_fsm;
    334     bool                                m_debug_icache_fsm;
    335     bool                                m_debug_inval_itlb_fsm;
    336     bool                                m_debug_inval_dtlb_fsm;
     333    bool                                m_debug_previous_i_hit;
     334    bool                                m_debug_previous_d_hit;
     335    bool                                m_debug_activated;
    337336
    338337    ///////////////////////////////
     
    401400    sc_signal<uint32_t>     r_dcache_save_vaddr;        // virtual address (from proc)
    402401    sc_signal<uint32_t>     r_dcache_save_wdata;        // write data (from proc)
    403     sc_signal<vci_be_t>     r_dcache_save_be;           // byte enable (from proc)
     402    sc_signal<uint32_t>     r_dcache_save_be;           // byte enable (from proc)
    404403    sc_signal<paddr_t>      r_dcache_save_paddr;        // physical address
    405404    sc_signal<bool>         r_dcache_save_cacheable;    // address cacheable
     
    416415    sc_signal<bool>         r_dcache_vci_miss_req;      // read miss request
    417416    sc_signal<bool>         r_dcache_vci_unc_req;       // uncacheable read request
    418     sc_signal<bool>         r_dcache_vci_unc_be;        // uncacheable read byte enable
     417    sc_signal<uint32_t>     r_dcache_vci_unc_be;        // uncacheable read byte enable
    419418    sc_signal<bool>         r_dcache_vci_cas_req;       // atomic write request CAS
    420419    sc_signal<uint32_t>     r_dcache_vci_cas_old;       // previous data value for a CAS
     
    422421    sc_signal<bool>         r_dcache_vci_ll_req;        // atomic read request LL
    423422    sc_signal<bool>         r_dcache_vci_sc_req;        // atomic write request SC
    424     sc_signal<vci_data_t>   r_dcache_vci_sc_data;       // SC data (command)
     423    sc_signal<uint32_t>     r_dcache_vci_sc_data;       // SC data (command)
    425424
    426425    // register used for XTN inval
     
    479478
    480479    // dcache directory extension
    481     bool                    *r_dcache_in_tlb;           // copy exist in dtlb or itlb
    482     bool                    *r_dcache_contains_ptd;     // cache line contains a PTD
     480    bool                    *r_dcache_in_tlb;               // copy exist in dtlb or itlb
     481    bool                    *r_dcache_contains_ptd;         // cache line contains a PTD
     482
     483    // Physical address extension for data access
     484    sc_signal<uint32_t>     r_dcache_paddr_ext;             // CP2 register (if vci_address > 32)
    483485
    484486    ///////////////////////////////////
     
    486488    ///////////////////////////////////
    487489    sc_signal<int>          r_vci_cmd_fsm;
    488     sc_signal<size_t>       r_vci_cmd_min;                  // used for write bursts
    489     sc_signal<size_t>       r_vci_cmd_max;                  // used for write bursts
    490     sc_signal<size_t>       r_vci_cmd_cpt;                  // used for write bursts
    491     sc_signal<bool>         r_vci_cmd_imiss_prio;           // round-robin between imiss & dmiss
     490    sc_signal<size_t>       r_vci_cmd_min;                      // used for write bursts
     491    sc_signal<size_t>       r_vci_cmd_max;                      // used for write bursts
     492    sc_signal<size_t>       r_vci_cmd_cpt;                      // used for write bursts
     493    sc_signal<bool>         r_vci_cmd_imiss_prio;               // round-robin between imiss & dmiss
    492494
    493495    ///////////////////////////////////
     
    498500    sc_signal<bool>         r_vci_rsp_ins_error;
    499501    sc_signal<bool>         r_vci_rsp_data_error;
    500     GenericFifo<uint32_t>   r_vci_rsp_fifo_icache;          // response FIFO to ICACHE FSM
    501     GenericFifo<uint32_t>   r_vci_rsp_fifo_dcache;          // response FIFO to DCACHE FSM
     502    GenericFifo<uint32_t>   r_vci_rsp_fifo_icache;              // response FIFO to ICACHE FSM
     503    GenericFifo<uint32_t>   r_vci_rsp_fifo_dcache;              // response FIFO to DCACHE FSM
    502504
    503505    ///////////////////////////////////
    504506    //  CC_SEND FSM REGISTER
    505507    ///////////////////////////////////
    506     sc_signal<int>          r_cc_send_fsm;          // state register
    507     sc_signal<bool>         r_cc_send_last_client;  // round robin flip-flop : 0 dcache / 1 icache
     508    sc_signal<int>          r_cc_send_fsm;                  // state register
     509    sc_signal<bool>         r_cc_send_last_client;          // 0 dcache / 1 icache
    508510
    509511    ///////////////////////////////////
    510512    //  CC_RECEIVE FSM REGISTER
    511513    ///////////////////////////////////
    512     sc_signal<int>          r_cc_receive_fsm;          // state register
    513     sc_signal<bool>         r_cc_receive_data_ins;     // request concerning : 0 dcache / 1 icache
    514 
    515     // communication cc updt FIFO between CC_RECEIVE FSM and ICACHE/DCACHE FSM
    516     sc_signal<size_t>       r_cc_receive_word_idx;  // word index
     514    sc_signal<int>          r_cc_receive_fsm;               // state register
     515    sc_signal<bool>         r_cc_receive_data_ins;          // request to : 0 dcache / 1 icache
     516
     517    // communication between CC_RECEIVE FSM and ICACHE/DCACHE FSM
     518    sc_signal<size_t>       r_cc_receive_word_idx;          // word index
    517519    GenericFifo<uint32_t>   r_cc_receive_updt_fifo_be;
    518520    GenericFifo<uint32_t>   r_cc_receive_updt_fifo_data;
     
    520522
    521523    // communication between CC_RECEIVE FSM and ICACHE FSM
    522     sc_signal<bool>         r_cc_receive_icache_req;       // cc_receive to icache request
    523     sc_signal<cc_receive_t> r_cc_receive_icache_type;      // cc_receive type of coherence request
    524     sc_signal<size_t>       r_cc_receive_icache_way;       // cc_receive to icache way
    525     sc_signal<size_t>       r_cc_receive_icache_set;       // cc_receive to icache set
     524    sc_signal<bool>         r_cc_receive_icache_req;        // cc_receive to icache request
     525    sc_signal<cc_receive_t> r_cc_receive_icache_type;       // cc_receive type of request
     526    sc_signal<size_t>       r_cc_receive_icache_way;        // cc_receive to icache way
     527    sc_signal<size_t>       r_cc_receive_icache_set;        // cc_receive to icache set
    526528    sc_signal<size_t>       r_cc_receive_icache_updt_tab_idx;  // cc_receive update table index
    527     sc_signal<paddr_t>      r_cc_receive_icache_nline;     // cache line physical address
     529    sc_signal<paddr_t>      r_cc_receive_icache_nline;      // cache line physical address
    528530
    529531    // communication between CC_RECEIVE FSM and DCACHE FSM
    530     sc_signal<bool>         r_cc_receive_dcache_req;       // cc_receive to dcache request
    531     sc_signal<cc_receive_t> r_cc_receive_dcache_type;      // cc_receive type of coherence request
    532     sc_signal<size_t>       r_cc_receive_dcache_way;       // cc_receive to dcache way
    533     sc_signal<size_t>       r_cc_receive_dcache_set;       // cc_receive to dcache set
     532    sc_signal<bool>         r_cc_receive_dcache_req;        // cc_receive to dcache request
     533    sc_signal<cc_receive_t> r_cc_receive_dcache_type;       // cc_receive type of request
     534    sc_signal<size_t>       r_cc_receive_dcache_way;        // cc_receive to dcache way
     535    sc_signal<size_t>       r_cc_receive_dcache_set;        // cc_receive to dcache set
    534536    sc_signal<size_t>       r_cc_receive_dcache_updt_tab_idx;  // cc_receive update table index
    535     sc_signal<paddr_t>      r_cc_receive_dcache_nline;     // cache line physical address
     537    sc_signal<paddr_t>      r_cc_receive_dcache_nline;      // cache line physical address
    536538
    537539    //////////////////////////////////////////////////////////////////
     
    675677
    676678    uint32_t m_cpt_stop_simulation;             // used to stop simulation if frozen
     679    bool     m_monitor_ok;                      // used to debug cache output 
     680    uint32_t m_monitor_base;               
     681    uint32_t m_monitor_length;             
    677682
    678683protected:
     
    711716    void print_trace(size_t mode = 0);
    712717    void cache_monitor(paddr_t addr);
    713     inline void iss_set_debug_mask(uint v) {
    714         r_iss.set_debug_mask(v);
     718    void start_monitor(paddr_t,paddr_t);
     719    void stop_monitor();
     720    inline void iss_set_debug_mask(uint v)
     721    {
     722            r_iss.set_debug_mask(v);
    715723    }
    716724
Note: See TracChangeset for help on using the changeset viewer.