From 363bf5566248154960b820bd1e19c45efebe0ae0 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Sat, 14 Dec 2024 14:40:37 +0900 Subject: [PATCH] Support discontinuous datqa channels --- src/SimpleParallelAnalyzerSettings.cpp | 22 ++++++++++++++++------ src/SimpleParallelAnalyzerSettings.h | 2 ++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/SimpleParallelAnalyzerSettings.cpp b/src/SimpleParallelAnalyzerSettings.cpp index cf0f037..c32e577 100644 --- a/src/SimpleParallelAnalyzerSettings.cpp +++ b/src/SimpleParallelAnalyzerSettings.cpp @@ -68,6 +68,18 @@ SimpleParallelAnalyzerSettings::~SimpleParallelAnalyzerSettings() delete mDataChannelsInterface[ i ]; } +U32 SimpleParallelAnalyzerSettings::MostSiginificantBitPosition() const +{ + const U32 count = mDataChannels.size(); + U32 most_significant_bit = 0; + for( U32 i = 0; i < count; i++ ) + { + if( mDataChannels[ i ] != UNDEFINED_CHANNEL && most_significant_bit < i ) + most_significant_bit = i; + } + return most_significant_bit; +} + bool SimpleParallelAnalyzerSettings::SetSettingsFromInterfaces() { U32 count = mDataChannels.size(); @@ -89,6 +101,7 @@ bool SimpleParallelAnalyzerSettings::SetSettingsFromInterfaces() { mDataChannels[ i ] = mDataChannelsInterface[ i ]->GetChannel(); } + mDataBits = MostSiginificantBitPosition() + 1; mClockChannel = mClockChannelInterface->GetChannel(); mClockEdge = static_cast( U32( mClockEdgeInterface->GetNumber() ) ); @@ -109,14 +122,13 @@ bool SimpleParallelAnalyzerSettings::SetSettingsFromInterfaces() void SimpleParallelAnalyzerSettings::UpdateInterfacesFromSettings() { U32 count = mDataChannels.size(); - U32 num_used_channels = 0; for( U32 i = 0; i < count; i++ ) { mDataChannelsInterface[ i ]->SetChannel( mDataChannels[ i ] ); if( mDataChannels[ i ] != UNDEFINED_CHANNEL ) num_used_channels++; } - mDataBits = num_used_channels; + mDataBits = MostSiginificantBitPosition() + 1; mClockChannelInterface->SetChannel( mClockChannel ); mClockEdgeInterface->SetNumber( static_cast( mClockEdge ) ); @@ -128,14 +140,12 @@ void SimpleParallelAnalyzerSettings::LoadSettings( const char* settings ) text_archive.SetString( settings ); U32 count = mDataChannels.size(); - U32 num_used_channels = 0; + for( U32 i = 0; i < count; i++ ) { text_archive >> mDataChannels[ i ]; - if( mDataChannels[ i ] != UNDEFINED_CHANNEL ) - num_used_channels++; } - mDataBits = num_used_channels; + mDataBits = MostSiginificantBitPosition() + 1; text_archive >> mClockChannel; U32 edge; diff --git a/src/SimpleParallelAnalyzerSettings.h b/src/SimpleParallelAnalyzerSettings.h index bfe8a5b..eff4388 100644 --- a/src/SimpleParallelAnalyzerSettings.h +++ b/src/SimpleParallelAnalyzerSettings.h @@ -34,6 +34,8 @@ class SimpleParallelAnalyzerSettings : public AnalyzerSettings ParallelAnalyzerClockEdge mClockEdge; protected: + U32 MostSiginificantBitPosition() const; + std::vector mDataChannelsInterface; std::unique_ptr mClockChannelInterface;