Changeset 451 for trunk/modules/vci_io_bridge/caba/source/src
- Timestamp:
- Jul 18, 2013, 6:46:58 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/modules/vci_io_bridge/caba/source/src/vci_io_bridge.cpp
r434 r451 1214 1214 // This FSM is mainly intended to handle single flit config transactions, 1215 1215 // but it can also handle software driven, multi-flits data transactions. 1216 // - The configuration requests can be local (IO_BRIDGE config registers) 1217 // or remote (config registers of peripherals on IOX network). 1218 // - The data requests are always remote. 1219 // In case of local config, this FSM put a VCI response in CONFIG_RSP fifo. 1220 // In case of remote transaction, it put the VCI command in CONFIG_CMD fifo. 1216 // The configuration requests can be local (IO_BRIDGE config registers) 1217 // or remote (config registers of peripherals on IOX network). 1218 // - The local configuration segment is identified by the "special" atribute. 1219 // - All configuration requests are checkeg against segmentation violation. 1220 // - In case of local config request, or in case of segmentation violation, 1221 // the FSM put a VCI response request in CONFIG_RSP fifo. 1222 // - In case of remote transaction, it put the VCI command in CONFIG_CMD fifo. 1221 1223 /////////////////////////////////////////////////////////////////////////////// 1222 1224 … … 1244 1246 uint32_t cell = (uint32_t)((paddr & 0x1FF)>>2); 1245 1247 1246 // The "local" segment must be the first in the seglist 1247 soclib::common::Segment seg = m_int_seglist.front(); 1248 // chek segments 1249 std::list<soclib::common::Segment>::iterator seg; 1250 bool found = false; 1251 for ( seg = m_int_seglist.begin() ; 1252 seg != m_int_seglist.end() and not found ; seg++ ) 1253 { 1254 if ( seg->contains(paddr) ) found = true; 1255 } 1248 1256 1249 if ( seg.contains(paddr) ) // IO_BRIDGE itself1257 if ( found and seg->special() ) // IO_BRIDGE itself 1250 1258 { 1251 1259 uint32_t rdata = 0; … … 1325 1333 rerror = true; 1326 1334 } 1327 r_config_cmd_rdata 1335 r_config_cmd_rdata = rdata; 1328 1336 r_config_cmd_error = rerror; 1329 r_config_cmd_fsm 1330 } 1331 else 1337 r_config_cmd_fsm = CONFIG_CMD_FIFO_PUT_RSP; 1338 } 1339 else if ( found ) // remote peripheral 1332 1340 { 1333 1341 r_config_cmd_fsm = CONFIG_CMD_FIFO_PUT_CMD; 1342 } 1343 else // out of segment 1344 { 1345 r_config_cmd_rdata = 0; 1346 r_config_cmd_error = true; 1347 r_config_cmd_fsm = CONFIG_CMD_FIFO_PUT_RSP; 1334 1348 } 1335 1349 } // end if cmdval
Note: See TracChangeset
for help on using the changeset viewer.