Changeset 984 for trunk/modules
- Timestamp:
- Apr 19, 2015, 5:19:34 PM (10 years ago)
- Location:
- trunk/modules/vci_io_bridge/caba/source
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/modules/vci_io_bridge/caba/source/include/vci_io_bridge.h
r715 r984 24 24 * 25 25 * SOCLIB_LGPL_HEADER_END 26 * 27 * Maintainers: Cesar Fuguet Tortolero <cesar.fuguet-tortolero@lip6.fr> 26 28 */ 27 29 ///////////////////////////////////////////////////////////////////////////////// … … 120 122 enum 121 123 { 122 CACHE_LINE_MASK = 0xFFFFFFFFC0 LL,124 CACHE_LINE_MASK = 0xFFFFFFFFC0ULL, 123 125 PPN1_MASK = 0x0007FFFF, 124 126 PPN2_MASK = 0x0FFFFFFF, … … 365 367 sc_signal<vci_pktid_t> r_miss_wti_rsp_to_dma_rsp_rpktid; 366 368 369 sc_signal<bool> r_miss_wti_rsp_to_tlb_done; 367 370 368 371 ///////////////////////////////////////////////////// -
trunk/modules/vci_io_bridge/caba/source/src/vci_io_bridge.cpp
r952 r984 23 23 * 24 24 * SOCLIB_LGPL_HEADER_END 25 * 26 * Maintainers: Cesar Fuguet Tortolero <cesar.fuguet-tortolero@lip6.fr> 25 27 */ 26 28 … … 115 117 } 116 118 117 #define tmpl(...) template<typename vci_param_int,typename vci_param_ext> __VA_ARGS__ VciIoBridge<vci_param_int,vci_param_ext> 119 #define tmpl(...) template<typename vci_param_int,typename vci_param_ext> \ 120 __VA_ARGS__ VciIoBridge<vci_param_int,vci_param_ext> 118 121 119 122 //////////////////////// … … 258 261 r_miss_wti_rsp_to_dma_rsp_rtrdid("r_miss_wti_rsp_to_dma_rsp_rtrdid"), 259 262 r_miss_wti_rsp_to_dma_rsp_rpktid("r_miss_wti_rsp_to_dma_rsp_rpktid"), 263 264 r_miss_wti_rsp_to_tlb_done("r_miss_wti_rsp_to_tlb_done"), 260 265 261 266 // TLB for IOMMU … … 546 551 r_tlb_to_miss_wti_cmd_req = false; 547 552 r_miss_wti_rsp_to_dma_rsp_req = false; 553 r_miss_wti_rsp_to_tlb_done = false; 548 554 549 555 // error flip_flops … … 610 616 vci_pktid_t miss_wti_cmd_fifo_pktid = 0; 611 617 int_data_t miss_wti_cmd_fifo_wdata = 0; 618 vci_plen_t miss_wti_cmd_fifo_plen = 0; 612 619 613 620 #ifdef INSTRUMENTATION … … 649 656 if ( p_vci_tgt_iox.cmdval.read() ) 650 657 { 651 if ( not r_iommu_active.read() ) // tlb not activated652 {653 // save paddr address654 r_dma_cmd_paddr = p_vci_tgt_iox.address.read();655 656 // analyse paddr for WTI/DMA routing657 // WTI requests must be single flit (READ or WRITE)658 if ( is_wti( p_vci_tgt_iox.address.read() ) )659 {660 assert( p_vci_tgt_iox.eop.read() and661 "ERROR in VCI_IOB illegal VCI WTI command from IOX network");662 663 r_dma_cmd_fsm = DMA_CMD_WTI_IOX_REQ;664 }665 else666 {667 r_dma_cmd_fsm = DMA_CMD_DMA_REQ;668 }669 658 670 659 #if DEBUG_DMA_CMD … … 678 667 << " / eop = " << p_vci_tgt_iox.eop.read() << std::endl; 679 668 #endif 669 670 if ( not r_iommu_active.read() ) // tlb not activated 671 { 672 // save paddr address 673 r_dma_cmd_paddr = p_vci_tgt_iox.address.read(); 674 675 // analyse paddr for WTI/DMA routing 676 // WTI requests must be single flit (READ or WRITE) 677 if ( is_wti( p_vci_tgt_iox.address.read() ) ) 678 { 679 assert( p_vci_tgt_iox.eop.read() and 680 "ERROR in VCI_IOB illegal VCI WTI command from IOX network"); 681 682 r_dma_cmd_fsm = DMA_CMD_WTI_IOX_REQ; 683 } 684 else 685 { 686 r_dma_cmd_fsm = DMA_CMD_DMA_REQ; 687 } 688 680 689 } 681 690 else if (r_tlb_fsm.read() == TLB_IDLE || … … 735 744 if ( is_wti( iotlb_paddr ) ) 736 745 { 737 assert( p_vci_tgt_iox.eop.read() and 738 (p_vci_tgt_iox.cmd.read() == vci_param_int::CMD_WRITE) and 746 assert( p_vci_tgt_iox.eop.read() && 739 747 "ERROR in VCI_IOB illegal VCI WTI command from IOX network"); 740 748 … … 1080 1088 { 1081 1089 // Checking prefetch buffer 1082 if( not r_tlb_buf_big_page ) // small page => PTE21083 { 1084 if ( r_tlb_buf_valid && // Hit on prefetch buffer1090 if( r_tlb_buf_valid.read() ) 1091 { 1092 if ( !r_tlb_buf_big_page.read() && // Hit on prefetch buffer and small page => PTE2 1085 1093 (r_tlb_buf_vaddr.read() == 1086 (r_dma_cmd_to_tlb_vaddr.read() & ~PTE2_LINE_OFFSET & ~K_PAGE_OFFSET_MASK)))1087 { 1088 size_t pte_offset = (r_dma_cmd_to_tlb_vaddr.read() & PTE2_LINE_OFFSET)>>12;1094 (r_dma_cmd_to_tlb_vaddr.read() & ~PTE2_LINE_OFFSET & ~K_PAGE_OFFSET_MASK))) 1095 { 1096 size_t pte_offset = (r_dma_cmd_to_tlb_vaddr.read() & PTE2_LINE_OFFSET) >> 12; 1089 1097 uint32_t pte_flags = r_tlb_buf_data[2*pte_offset]; 1090 1098 uint32_t pte_ppn = r_tlb_buf_data[2*pte_offset+1]; … … 1122 1130 break; 1123 1131 } 1124 } 1125 else // big page => PTE1 1126 { 1127 if( r_tlb_buf_valid && // Hit on prefetch buffer 1132 1133 if( r_tlb_buf_big_page.read() && // Hit on prefetch buffer and big page 1128 1134 (r_tlb_buf_vaddr.read() == 1129 (r_dma_cmd_to_tlb_vaddr.read() & ~PTE1_LINE_OFFSET & ~M_PAGE_OFFSET_MASK )))1130 { 1131 size_t pte_offset = (r_dma_cmd_to_tlb_vaddr.read() & PTE1_LINE_OFFSET)>>21;1135 (r_dma_cmd_to_tlb_vaddr.read() & ~PTE1_LINE_OFFSET & ~M_PAGE_OFFSET_MASK ))) 1136 { 1137 size_t pte_offset = (r_dma_cmd_to_tlb_vaddr.read() & PTE1_LINE_OFFSET) >> 21; 1132 1138 uint32_t pte_flags = r_tlb_buf_data[pte_offset]; 1133 1139 … … 1150 1156 } 1151 1157 1158 #if DEBUG_TLB_MISS 1159 if ( m_debug_activated ) 1160 std::cout << name() 1161 << " <IOB TLB_PTE1_GET> Hit on prefetch buffer: PTE1" << std::hex 1162 << " / paddr = " << r_tlb_paddr.read() 1163 << std::hex << " / PTE1 = " << pte_flags << std::endl; 1164 #endif 1152 1165 // valid PTE1 : we must update the TLB 1153 1166 r_tlb_pte_flags = pte_flags; 1154 1167 r_tlb_fsm = TLB_PTE1_SELECT; 1168 1169 break; 1170 } 1171 } 1172 1173 // prefetch buffer miss 1174 r_tlb_fsm = TLB_MISS; 1175 1155 1176 #if DEBUG_TLB_MISS 1156 1177 if ( m_debug_activated ) 1157 1178 std::cout << name() 1158 << " <IOB TLB_PTE1_GET> Hit on prefetch buffer: PTE1" << std::hex1159 << " / paddr = " << r_tlb_paddr.read()1160 << std::hex << " / PTE1 = " << pte_flags << std::endl;1161 #endif1162 break;1163 }1164 }1165 1166 // prefetch buffer miss1167 r_tlb_fsm = TLB_MISS;1168 1169 #if DEBUG_TLB_MISS1170 if ( m_debug_activated )1171 std::cout << name()1172 1179 << " <IOB TLB_IDLE> Miss on prefetch buffer" 1173 1180 << std::hex << " / vaddr = " << r_dma_cmd_to_tlb_vaddr.read() << std::endl; 1174 1181 #endif 1175 1182 } 1183 1176 1184 break; 1177 1185 } … … 1192 1200 if ( not bypass ) // Read PTE1/PTD1 in XRAM 1193 1201 { 1194 1195 #if DEBUG_TLB_MISS 1196 if ( m_debug_activated ) 1197 std::cout << name() 1198 << " <IOB TLB_MISS> Read PTE1/PTD1 in memory" << std::endl; 1199 #endif 1200 pte_paddr = (vci_addr_t)((r_iommu_ptpr.read()) << (INDEX1_NBITS+2)) | 1201 (vci_addr_t)((r_dma_cmd_to_tlb_vaddr.read() >> PAGE_M_NBITS) << 2); 1202 r_tlb_paddr = pte_paddr; 1203 1202 pte_paddr = 1203 ((vci_addr_t)r_iommu_ptpr.read() << (INDEX1_NBITS+2)) | 1204 ((vci_addr_t)(r_dma_cmd_to_tlb_vaddr.read() >> PAGE_M_NBITS) << 2); 1205 r_tlb_paddr = pte_paddr; 1204 1206 r_tlb_to_miss_wti_cmd_req = true; 1205 1207 r_tlb_miss_type = PTE1_MISS; 1206 1208 r_tlb_fsm = TLB_WAIT; 1209 1210 #if DEBUG_TLB_MISS 1211 if ( m_debug_activated ) 1212 std::cout << name() 1213 << " <IOB TLB_MISS> Read PTE1/PTD1 in memory: PADDR = " << std::hex 1214 << pte_paddr << std::dec << std::endl; 1215 #endif 1207 1216 } 1208 1217 else // Read PTE2 in XRAM … … 1215 1224 #endif 1216 1225 //&PTE2 = PTBA + IX2 * 8 1217 pte_paddr = (vci_addr_t)ptba << PAGE_K_NBITS | 1218 (vci_addr_t)(r_dma_cmd_to_tlb_vaddr.read()&PTD_ID2_MASK)>>(PAGE_K_NBITS-3); 1219 1220 r_tlb_paddr = pte_paddr; 1221 1226 pte_paddr = 1227 ((vci_addr_t)ptba << PAGE_K_NBITS) | 1228 ((vci_addr_t)(r_dma_cmd_to_tlb_vaddr.read()&PTD_ID2_MASK)>>(PAGE_K_NBITS-3)); 1229 r_tlb_paddr = pte_paddr; 1222 1230 r_tlb_to_miss_wti_cmd_req = true; 1223 1231 r_tlb_miss_type = PTE2_MISS; … … 1238 1246 // Hit test. Just to verify. 1239 1247 // Hit must happen, since we've just finished its' miss transaction 1240 bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read() == line_number) );1241 assert(hit and"Error: No hit on prefetch buffer after Miss Transaction");1248 bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read() == line_number) ); 1249 assert(hit && "Error: No hit on prefetch buffer after Miss Transaction"); 1242 1250 1243 1251 entry = r_tlb_buf_data[word_position]; … … 1257 1265 if ( m_debug_activated ) 1258 1266 { 1259 1260 1261 1262 1267 std::cout << name() 1268 << " <IOB DMA_PTE1_GET> First level entry Unmapped" 1269 << std::hex << " / paddr = " << r_tlb_paddr.read() 1270 << std::hex << " / PTE = " << entry << std::endl; 1263 1271 } 1264 1272 #endif 1265 1273 break; 1266 1274 } 1267 1275 … … 1275 1283 // &PTE2 = PTBA + IX2 * 8 1276 1284 // ps: PAGE_K_NBITS corresponds also to the size of a second level page table 1277 r_tlb_paddr = (vci_addr_t)(entry & ((1<<(vci_param_int::N-PAGE_K_NBITS))-1)) << PAGE_K_NBITS | 1278 (vci_addr_t)(((r_dma_cmd_to_tlb_vaddr.read() & PTD_ID2_MASK) >> PAGE_K_NBITS) << 3); 1285 r_tlb_paddr = 1286 (((vci_addr_t)entry & ((1ULL<<(vci_param_int::N-PAGE_K_NBITS))-1)) << PAGE_K_NBITS) | 1287 (((vci_addr_t)(r_dma_cmd_to_tlb_vaddr.read() & PTD_ID2_MASK) >> PAGE_K_NBITS) << 3); 1279 1288 1280 1289 r_tlb_to_miss_wti_cmd_req = true; … … 1297 1306 // Should not occur if working only with small pages 1298 1307 { 1299 r_tlb_pte_flags 1300 r_tlb_fsm = TLB_PTE1_SELECT;1308 r_tlb_pte_flags = entry; 1309 r_tlb_fsm = TLB_PTE1_SELECT; 1301 1310 1302 1311 #if DEBUG_TLB_MISS … … 1316 1325 size_t set; 1317 1326 1318 r_iotlb.select( 1327 r_iotlb.select( r_dma_cmd_to_tlb_vaddr.read(), 1319 1328 true, // PTE1 1320 1329 &way, … … 1333 1342 r_tlb_way = way; 1334 1343 r_tlb_set = set; 1335 r_tlb_fsm 1344 r_tlb_fsm = TLB_PTE1_UPDT; 1336 1345 break; 1337 1346 } … … 1340 1349 // not necessary to treat the L/R bit 1341 1350 { 1342 uint32_t pte = r_tlb_pte_flags.read(); 1343 1344 r_tlb_paddr = (vci_addr_t)( ((r_tlb_pte_flags.read() & PPN1_MASK) << 21) 1345 | (r_dma_cmd_to_tlb_vaddr.read()& M_PAGE_OFFSET_MASK) ); 1351 uint32_t pte = r_tlb_pte_flags.read(); 1346 1352 1347 1353 // update TLB 1348 1354 r_iotlb.write( true, // 2M page 1349 pte,1350 0, // argument unused for a PTE11351 r_dma_cmd_to_tlb_vaddr.read(),1352 r_tlb_way.read(),1353 r_tlb_set.read(),1354 0 ); //we set nline = 01355 pte, 1356 0, // argument unused for a PTE1 1357 r_dma_cmd_to_tlb_vaddr.read(), 1358 r_tlb_way.read(), 1359 r_tlb_set.read(), 1360 0 ); //we set nline = 0 1355 1361 1356 1362 #ifdef INSTRUMENTATION … … 1381 1387 size_t word_position = (size_t)( ((r_tlb_paddr.read())&(~CACHE_LINE_MASK))>>2 ); 1382 1388 1383 1384 1389 // Hit test. Just to verify. 1385 bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read() == line_number) );1390 bool hit = (r_tlb_buf_valid && (r_tlb_buf_tag.read() == line_number) ); 1386 1391 assert(hit and "Error: No hit on prefetch buffer after Miss Transaction"); 1387 1392 pte_flags= r_tlb_buf_data[word_position]; … … 1394 1399 << "The Page Table entry ins't valid (unmapped)" << std::endl; 1395 1400 1396 r_tlb_miss_error 1397 r_dma_cmd_to_tlb_req 1401 r_tlb_miss_error = true; 1402 r_dma_cmd_to_tlb_req = false; 1398 1403 r_tlb_fsm = TLB_IDLE; 1399 1404 … … 1451 1456 // not necessary to treat the L/R bit 1452 1457 { 1453 uint32_t pte_flags = r_tlb_pte_flags.read(); 1454 uint32_t pte_ppn = r_tlb_pte_ppn.read(); 1455 1456 r_tlb_paddr = (vci_addr_t)( ((r_tlb_pte_ppn.read() & PPN2_MASK) << 12) 1457 | (r_dma_cmd_to_tlb_vaddr.read()& K_PAGE_OFFSET_MASK) ); 1458 uint32_t pte_flags = r_tlb_pte_flags.read(); 1459 uint32_t pte_ppn = r_tlb_pte_ppn.read(); 1458 1460 1459 1461 // update TLB for a PTE2 … … 1497 1499 m_cost_iotlbmiss_transaction++; 1498 1500 #endif 1499 if ( not r_tlb_to_miss_wti_cmd_req.read() ) // Miss transaction completed 1500 { 1501 if ( r_miss_wti_rsp_to_tlb_done.read() ) // Miss transaction completed 1502 { 1503 r_miss_wti_rsp_to_tlb_done = false; 1504 1505 r_tlb_buf_valid = true; 1506 r_tlb_buf_vaddr = r_dma_cmd_to_tlb_vaddr.read(); 1507 r_tlb_buf_tag = r_tlb_paddr.read() & CACHE_LINE_MASK; 1508 1501 1509 if ( r_miss_wti_rsp_error_miss.read() ) // bus error reported 1502 1510 { … … 1508 1516 else if(r_tlb_miss_type == PTE1_MISS) 1509 1517 { 1518 r_tlb_buf_big_page = true; 1510 1519 r_tlb_fsm = TLB_PTE1_GET; 1511 1520 } 1512 1521 else 1513 1522 { 1523 r_tlb_buf_big_page = false; 1514 1524 r_tlb_fsm = TLB_PTE2_GET; 1515 1525 } … … 1638 1648 "ERROR in vci_io_bridge : local config access must be one flit"); 1639 1649 1650 #if DEBUG_CONFIG_CMD 1651 if( m_debug_activated ) 1652 std::cout << name() 1653 << " <IOB CONFIG_CMD_IDLE> Command on IOB configuration registers" << std::endl; 1654 #endif 1655 1640 1656 if ( not read && (cell == IOB_IOMMU_PTPR) ) // WRITE PTPR 1641 1657 { 1642 1658 r_iommu_ptpr = (uint32_t)wdata; 1659 1660 #if DEBUG_CONFIG_CMD 1661 if( m_debug_activated ) 1662 std::cout << name() 1663 << " <IOB CONFIG_CMD_IDLE> Write IOB_IOMMU_PTPR: / wdata = " << std::hex 1664 << wdata << std::dec << std::endl; 1665 #endif 1643 1666 } 1644 1667 else if ( read && (cell == IOB_IOMMU_PTPR) ) // READ PTPR 1645 1668 { 1646 1669 rdata = r_iommu_ptpr.read(); 1647 } 1648 else if( not read && (cell == IOB_WTI_ENABLE)) // WRITE WTI_ENABLE 1670 1671 #if DEBUG_CONFIG_CMD 1672 if( m_debug_activated ) 1673 std::cout << name() 1674 << " <IOB CONFIG_CMD_IDLE> Read IOB_IOMMU_PTPR: / rdata = " << std::hex 1675 << rdata << std::dec << std::endl; 1676 #endif 1677 } 1678 else if ( not read && (cell == IOB_IOMMU_ACTIVE) ) // WRITE ACTIVE 1679 { 1680 r_iommu_active = wdata ? true : false; 1681 1682 #if DEBUG_CONFIG_CMD 1683 if( m_debug_activated ) 1684 std::cout << name() 1685 << " <IOB CONFIG_CMD_IDLE> Write IOB_IOMMU_ACTIVE: / wdata = " << std::hex 1686 << wdata << std::dec << std::endl; 1687 #endif 1688 } 1689 else if ( read && (cell == IOB_IOMMU_ACTIVE) ) // READ ACTIVE 1690 { 1691 rdata = r_iommu_active.read(); 1692 1693 #if DEBUG_CONFIG_CMD 1694 if( m_debug_activated ) 1695 std::cout << name() 1696 << " <IOB CONFIG_CMD_IDLE> Read IOB_IOMMU_ACTIVE: / rdata = " << std::hex 1697 << rdata << std::dec << std::endl; 1698 #endif 1699 } 1700 else if( not read && (cell == IOB_WTI_ENABLE)) // WRITE WTI_ENABLE 1649 1701 { 1650 1702 r_iommu_wti_enable = wdata; 1651 1703 } 1652 else if( read && (cell == IOB_WTI_ENABLE)) // READ WTI ENABLE1704 else if( read && (cell == IOB_WTI_ENABLE)) // READ WTI ENABLE 1653 1705 { 1654 1706 rdata = r_iommu_wti_enable.read(); … … 1658 1710 rdata = r_iommu_bvar.read(); 1659 1711 } 1660 else if( read && (cell == IOB_IOMMU_ETR)) 1712 else if( read && (cell == IOB_IOMMU_ETR)) // READ ETR 1661 1713 { 1662 1714 rdata = r_iommu_etr.read(); … … 1671 1723 r_config_cmd_to_tlb_vaddr = (uint32_t)wdata; 1672 1724 } 1673 else if( not read && (cell == IOB_WTI_ADDR_LO)) // WRITE WTI_PADDR_LO1725 else if( not read && (cell == IOB_WTI_ADDR_LO)) // WRITE WTI_PADDR_LO 1674 1726 { 1675 1727 r_iommu_wti_addr_lo = (vci_addr_t)wdata; 1676 1728 } 1677 else if( read && (cell == IOB_WTI_ADDR_LO)) // READ WTI_PADDR_LO1729 else if( read && (cell == IOB_WTI_ADDR_LO)) // READ WTI_PADDR_LO 1678 1730 { 1679 1731 rdata = r_iommu_wti_addr_lo.read(); 1680 1732 } 1681 else if( not read && (cell == IOB_WTI_ADDR_HI)) // WRITE WTI_PADDR_HI1733 else if( not read && (cell == IOB_WTI_ADDR_HI)) // WRITE WTI_PADDR_HI 1682 1734 { 1683 1735 r_iommu_wti_addr_hi = (vci_addr_t)wdata; 1684 1736 } 1685 else if( read && (cell == IOB_WTI_ADDR_HI)) // READ WTI_PADDR_HI1737 else if( read && (cell == IOB_WTI_ADDR_HI)) // READ WTI_PADDR_HI 1686 1738 { 1687 1739 rdata = r_iommu_wti_addr_hi.read(); … … 2118 2170 m_miss_wti_cmd_addr_fifo.wok() ) // put MISS READ 2119 2171 { 2172 r_tlb_to_miss_wti_cmd_req = false; 2173 2120 2174 miss_wti_cmd_fifo_put = true; 2121 miss_wti_cmd_fifo_address = r_tlb_paddr.read() ;2175 miss_wti_cmd_fifo_address = r_tlb_paddr.read() & CACHE_LINE_MASK; 2122 2176 miss_wti_cmd_fifo_wdata = 0; 2123 2177 miss_wti_cmd_fifo_cmd = vci_param_int::CMD_READ; … … 2125 2179 miss_wti_cmd_fifo_srcid = m_int_srcid; 2126 2180 miss_wti_cmd_fifo_trdid = 0; 2181 miss_wti_cmd_fifo_plen = m_words * vci_param_int::B; 2127 2182 2128 2183 #if DEBUG_MISS_WTI_CMD … … 2130 2185 std::cout << name() 2131 2186 << " <IOB MISS_WTI_CMD_WTI> push MISS TLB command into MISS_WTI FIFO" 2132 << " / PADDR = " << miss_wti_cmd_fifo_address << std::endl; 2187 << " / PADDR = " << std::hex << miss_wti_cmd_fifo_address << std::dec 2188 << std::endl; 2133 2189 #endif 2134 2190 … … 2146 2202 miss_wti_cmd_fifo_trdid = r_dma_cmd_to_miss_wti_cmd_trdid.read(); 2147 2203 miss_wti_cmd_fifo_pktid = r_dma_cmd_to_miss_wti_cmd_pktid.read(); 2204 miss_wti_cmd_fifo_plen = vci_param_int::B; 2148 2205 2149 2206 #if DEBUG_MISS_WTI_CMD … … 2152 2209 << " <IOB MISS_WTI_CMD_WTI> push WTI command into MISS_WTI FIFO" 2153 2210 << " / CMD = " << miss_wti_cmd_fifo_cmd 2154 << " / PADDR = " << miss_wti_cmd_fifo_address << std::endl; 2211 << " / PADDR = " << std::hex << miss_wti_cmd_fifo_address << std::dec 2212 << std::endl; 2155 2213 #endif 2156 2214 … … 2279 2337 if ( p_vci_ini_int.reop.read() ) // last flit 2280 2338 { 2281 bool eop = p_vci_ini_int.eop.read(); 2282 assert(((eop == (r_miss_wti_rsp_count.read() == (m_words-1)))) and 2339 assert((r_miss_wti_rsp_count.read() == (m_words-1)) and 2283 2340 "VCI_IO_BRIDGE ERROR: invalid length for a TLB MISS response"); 2284 2341 2285 r_miss_wti_rsp_count = 0;2286 r_miss_wti_rsp_fsm = MISS_WTI_RSP_IDLE;2287 r_ tlb_to_miss_wti_cmd_req = false;2342 r_miss_wti_rsp_count = 0; 2343 r_miss_wti_rsp_fsm = MISS_WTI_RSP_IDLE; 2344 r_miss_wti_rsp_to_tlb_done = true; 2288 2345 } 2289 2346 else // not the last flit … … 2457 2514 m_miss_wti_cmd_plen_fifo.update( miss_wti_cmd_fifo_get, 2458 2515 miss_wti_cmd_fifo_put, 2459 4);2516 miss_wti_cmd_fifo_plen ); 2460 2517 m_miss_wti_cmd_wrap_fifo.update( miss_wti_cmd_fifo_get, 2461 2518 miss_wti_cmd_fifo_put,
Note: See TracChangeset
for help on using the changeset viewer.