Changeset 721 for trunk/modules/vci_cc_vcache_wrapper/caba/source/src
- Timestamp:
- Jun 25, 2014, 10:49:08 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp
r711 r721 85 85 "DCACHE_XTN_IC_FLUSH", 86 86 "DCACHE_XTN_IC_INVAL_PA", 87 "DCACHE_XTN_IC_PADDR_EXT", 87 88 "DCACHE_XTN_IT_INVAL", 88 89 "DCACHE_XTN_DC_FLUSH", … … 244 245 m_debug_start_cycle( debug_start_cycle ), 245 246 m_debug_ok( debug_ok ), 247 m_dcache_paddr_ext_reset(0), 248 m_icache_paddr_ext_reset(0), 246 249 247 250 r_mmu_ptpr("r_mmu_ptpr"), … … 740 743 741 744 // reset data physical address extension 742 r_dcache_paddr_ext = 0; 745 r_dcache_paddr_ext = m_dcache_paddr_ext_reset; 746 747 // reset inst physical address extension 748 r_icache_paddr_ext = m_icache_paddr_ext_reset; 743 749 744 750 // reset dcache directory extension … … 1055 1061 1056 1062 // XTN requests sent by DCACHE FSM 1057 // These request are not executed in this IDLE state , because1058 // they require access to icache or itlb, that are already accessed1063 // These request are not executed in this IDLE state (except XTN_INST_PADDR_EXT), 1064 // because they require access to icache or itlb, that are already accessed 1059 1065 if ( r_dcache_xtn_req.read() ) 1060 1066 { … … 1078 1084 else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_MMU_ICACHE_PA_INV) 1079 1085 { 1080 1086 if (sizeof(paddr_t) <= 32) 1081 1087 { 1082 1083 1084 1088 assert(r_mmu_word_hi.read() == 0 && 1089 "illegal XTN request in ICACHE: high bits should be 0 for 32bit paddr"); 1090 r_icache_vci_paddr = (paddr_t)r_mmu_word_lo.read(); 1085 1091 } 1086 1092 else 1087 1093 { 1088 r_icache_vci_paddr = (paddr_t)r_mmu_word_hi.read() << 32 | 1089 (paddr_t)r_mmu_word_lo.read(); 1090 } 1091 r_icache_fsm = ICACHE_XTN_CACHE_INVAL_PA; 1094 r_icache_vci_paddr = (paddr_t)r_mmu_word_hi.read() << 32 | 1095 (paddr_t)r_mmu_word_lo.read(); 1096 } 1097 r_icache_fsm = ICACHE_XTN_CACHE_INVAL_PA; 1098 } 1099 else if ( (int)r_dcache_xtn_opcode.read() == (int)iss_t::XTN_INST_PADDR_EXT) 1100 { 1101 r_icache_paddr_ext = r_dcache_save_wdata.read(); 1102 r_dcache_xtn_req = false; 1092 1103 } 1093 1104 else … … 1128 1139 &paddr, 1129 1140 &tlb_flags, 1130 &tlb_nline, 1131 &tlb_way, 1132 &tlb_set ); 1141 &tlb_nline, // unused 1142 &tlb_way, // unused 1143 &tlb_set ); // unused 1133 1144 } 1134 1145 else 1135 1146 { 1136 paddr = (paddr_t)m_ireq.addr; 1147 if (vci_param::N > 32) 1148 { 1149 paddr = (paddr_t)m_ireq.addr | 1150 ((paddr_t)r_icache_paddr_ext.read() << 32); 1151 } 1152 else 1153 { 1154 paddr = (paddr_t)m_ireq.addr; 1155 } 1137 1156 } 1138 1157 … … 2480 2499 break; 2481 2500 2501 case iss_t::XTN_INST_PADDR_EXT: 2502 m_drsp.rdata = r_icache_paddr_ext.read(); 2503 m_drsp.valid = true; 2504 m_drsp.error = false; 2505 break; 2506 2482 2507 default: 2483 2508 r_mmu_detr = MMU_READ_UNDEFINED_XTN; … … 2608 2633 break; 2609 2634 2610 case iss_t::XTN_ICACHE_PREFETCH: // not implemented : no action 2611 case iss_t::XTN_DCACHE_PREFETCH: // not implemented : no action 2635 case iss_t::XTN_INST_PADDR_EXT: // no cache or tlb access 2636 r_dcache_xtn_req = true; 2637 r_dcache_fsm = DCACHE_XTN_IC_PADDR_EXT; 2638 break; 2639 2640 case iss_t::XTN_ICACHE_PREFETCH: // not implemented : no action 2641 case iss_t::XTN_DCACHE_PREFETCH: // not implemented : no action 2612 2642 m_drsp.valid = true; 2613 2643 r_dcache_fsm = DCACHE_IDLE; 2614 2644 break; 2615 2645 2616 2646 case iss_t::XTN_DEBUG_MASK: // debug mask … … 3726 3756 } 3727 3757 //////////////////////// 3728 case DCACHE_XTN_IC_FLUSH: // Waiting completion of an XTN request to the ICACHE FSM 3729 case DCACHE_XTN_IC_INVAL_VA: // Caution : the itlb miss requests must be taken 3730 case DCACHE_XTN_IC_INVAL_PA: // because the XTN_ICACHE_INVAL request to icache 3731 case DCACHE_XTN_IT_INVAL: // can generate an itlb miss, 3732 // and because it can exist a simultaneous ITLB miss 3758 case DCACHE_XTN_IC_FLUSH: // Waiting completion of an XTN request to the ICACHE FSM 3759 case DCACHE_XTN_IC_INVAL_VA: // Caution : the itlb miss requests must be taken 3760 case DCACHE_XTN_IC_INVAL_PA: // because the XTN_ICACHE_INVAL request to icache 3761 case DCACHE_XTN_IC_PADDR_EXT: // can generate an itlb miss, 3762 case DCACHE_XTN_IT_INVAL: // and because it can exist a simultaneous ITLB miss 3763 3733 3764 { 3734 3765 // coherence clack request (from DSPIN CLACK)
Note: See TracChangeset
for help on using the changeset viewer.