Use integer address in decode function again
This commit is contained in:
@@ -609,7 +609,7 @@ void Controller::manageRequests(const sc_time& delay)
|
||||
{
|
||||
// continuous block of data that can be fetched with a single burst
|
||||
DecodedAddress decodedAddress =
|
||||
addressDecoder.decodeAddress(*transToAcquire.payload);
|
||||
addressDecoder.decodeAddress(transToAcquire.payload->get_address());
|
||||
ControllerExtension::setAutoExtension(
|
||||
*transToAcquire.payload,
|
||||
nextChannelPayloadIDToAppend++,
|
||||
@@ -781,7 +781,7 @@ void Controller::createChildTranses(tlm::tlm_generic_payload& parentTrans)
|
||||
|
||||
for (auto* childTrans : childTranses)
|
||||
{
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(*childTrans);
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(childTrans->get_address());
|
||||
ControllerExtension::setAutoExtension(*childTrans,
|
||||
nextChannelPayloadIDToAppend,
|
||||
Rank(decodedAddress.rank),
|
||||
|
||||
@@ -304,12 +304,11 @@ void AddressDecoder::checkBurstLengthBits(const MemSpec& memSpec) {
|
||||
}
|
||||
|
||||
|
||||
DecodedAddress AddressDecoder::decodeAddress(tlm::tlm_generic_payload& trans) const
|
||||
DecodedAddress AddressDecoder::decodeAddress(uint64_t address) const
|
||||
{
|
||||
uint64_t encAddr = trans.get_address();
|
||||
uint64_t encAddr = address;
|
||||
if (encAddr > upperBoundAddress)
|
||||
{
|
||||
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
||||
SC_REPORT_WARNING("AddressDecoder",
|
||||
("Address " + std::to_string(encAddr) +
|
||||
" out of range (maximum address is " + std::to_string(upperBoundAddress) +
|
||||
@@ -343,9 +342,11 @@ DecodedAddress AddressDecoder::decodeAddress(tlm::tlm_generic_payload& trans) co
|
||||
decAddr.column= get_component(columnBits);
|
||||
decAddr.byte = get_component(byteBits);
|
||||
|
||||
if (np2Flag)
|
||||
if (!isAddressValid(decAddr))
|
||||
trans.set_response_status(tlm::TLM_ADDRESS_ERROR_RESPONSE);
|
||||
if (np2Flag && !isAddressValid(decAddr))
|
||||
{
|
||||
SC_REPORT_WARNING("AddressDecoder",
|
||||
("Address " + std::to_string(encAddr) + " invalid)").c_str());
|
||||
}
|
||||
|
||||
// Important: This offsets must be added after(!) the address validation!
|
||||
decAddr.bankgroup = decAddr.bankgroup + decAddr.rank * bankgroupsPerRank;
|
||||
|
||||
@@ -96,10 +96,10 @@ public:
|
||||
/**
|
||||
* @brief Decodes an address from a transaction payload into its address components.
|
||||
*
|
||||
* @param trans The transaction payload.
|
||||
* @param address The encoded address.
|
||||
* @return The decoded address.
|
||||
*/
|
||||
[[nodiscard]] DecodedAddress decodeAddress(tlm::tlm_generic_payload& trans) const;
|
||||
[[nodiscard]] DecodedAddress decodeAddress(uint64_t address) const;
|
||||
|
||||
/**
|
||||
* @brief Decodes the channel component from an encoded address.
|
||||
|
||||
@@ -195,7 +195,7 @@ void Arbiter::b_transport([[maybe_unused]] int id,
|
||||
{
|
||||
trans.set_address(trans.get_address() - addressOffset);
|
||||
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(trans);
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(trans.get_address());
|
||||
iSocket[static_cast<int>(decodedAddress.channel)]->b_transport(trans, delay);
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ unsigned int Arbiter::transport_dbg([[maybe_unused]] int id, tlm::tlm_generic_pa
|
||||
{
|
||||
trans.set_address(trans.get_address() - addressOffset);
|
||||
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(trans);
|
||||
DecodedAddress decodedAddress = addressDecoder.decodeAddress(trans.get_address());
|
||||
return iSocket[static_cast<int>(decodedAddress.channel)]->transport_dbg(trans);
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ void EccModule::peqCallback(tlm::tlm_generic_payload& cbPayload, const tlm::tlm_
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
|
||||
DRAMSys::DecodedAddress decodedAddress =
|
||||
addressDecoder.decodeAddress(cbPayload);
|
||||
addressDecoder.decodeAddress(cbPayload.get_address());
|
||||
decodedAddress = calculateOffsetAddress(decodedAddress);
|
||||
|
||||
// Update the original address to account for the offsets
|
||||
@@ -157,7 +157,7 @@ void EccModule::peqCallback(tlm::tlm_generic_payload& cbPayload, const tlm::tlm_
|
||||
sc_time tDelay = SC_ZERO_TIME;
|
||||
|
||||
DRAMSys::DecodedAddress decodedAddress =
|
||||
addressDecoder.decodeAddress(tPayload);
|
||||
addressDecoder.decodeAddress(tPayload.get_address());
|
||||
decodedAddress = calculateOffsetAddress(decodedAddress);
|
||||
|
||||
#ifdef ECC_ENABLE
|
||||
|
||||
Reference in New Issue
Block a user