Skip to content

Commit

Permalink
Refactored filters starting with J/K/L. See #650.
Browse files Browse the repository at this point in the history
  • Loading branch information
azonenberg committed Aug 28, 2022
1 parent 7a1b183 commit 629aa9f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 21 deletions.
21 changes: 14 additions & 7 deletions scopeprotocols/JitterFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,12 @@ void JitterFilter::Refresh()
return;
}

auto din = GetDigitalInputWaveform(0);
size_t len = din->m_samples.size();
auto din = GetInputWaveform(0);
auto sdin = dynamic_cast<SparseDigitalWaveform*>(din);
auto udin = dynamic_cast<UniformDigitalWaveform*>(din);
din->PrepareForCpuAccess();

size_t len = din->size();

float pjfreq = m_parameters[m_pjfreqname].GetIntVal();
float stdev = m_parameters[m_stdevname].GetFloatVal();
Expand All @@ -101,10 +105,13 @@ void JitterFilter::Refresh()
normal_distribution<> noise(0, stdev);

//Copy the initial configuration over
auto cap = SetupEmptyDigitalOutputWaveform(din, 0);
auto cap = SetupEmptySparseDigitalOutputWaveform(din, 0);
cap->PrepareForCpuAccess();
cap->Resize(len);
cap->m_samples.CopyFrom(din->m_samples);
cap->m_densePacked = false;
if(sdin)
cap->m_samples.CopyFrom(sdin->m_samples);
else
cap->m_samples.CopyFrom(udin->m_samples);
cap->m_timescale = 1;
cap->m_triggerPhase = 0;

Expand All @@ -117,15 +124,15 @@ void JitterFilter::Refresh()
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
for(size_t i=0; i<len; i++)
{
size_t tstart = din->m_offsets[i] * din->m_timescale + din->m_triggerPhase;
size_t tstart = GetOffsetScaled(sdin, udin, i);

size_t rj = noise(rng);
size_t pj = sin(tstart * radians_per_fs + startPhase) * pjamp;
size_t tj = rj + pj;

//Add jitter to the start time
cap->m_offsets[i] = tstart + tj;
cap->m_durations[i] = din->m_durations[i] * din->m_timescale;
cap->m_durations[i] = GetDurationScaled(sdin, udin, i);

//Update duration of previous sample
if(i > 0)
Expand Down
2 changes: 1 addition & 1 deletion scopeprotocols/JitterSpectrumFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* *
* libscopeprotocols *
* *
* Copyright (c) 2012-2021 Andrew D. Zonenberg and contributors *
* Copyright (c) 2012-2022 Andrew D. Zonenberg and contributors *
* All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
Expand Down
32 changes: 19 additions & 13 deletions scopeprotocols/JtagDecoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,24 +128,29 @@ void JtagDecoder::Refresh()
}

//Get the input data
auto tdi = GetDigitalInputWaveform(0);
auto tdo = GetDigitalInputWaveform(1);
auto tms = GetDigitalInputWaveform(2);
auto tck = GetDigitalInputWaveform(3);
auto tdi = GetInputWaveform(0);
auto tdo = GetInputWaveform(1);
auto tms = GetInputWaveform(2);
auto tck = GetInputWaveform(3);
tdi->PrepareForCpuAccess();
tdo->PrepareForCpuAccess();
tms->PrepareForCpuAccess();
tck->PrepareForCpuAccess();

//Sample the data stream at each clock edge
DigitalWaveform dtdi;
DigitalWaveform dtdo;
DigitalWaveform dtms;
SampleOnRisingEdges(tdi, tck, dtdi);
SampleOnRisingEdges(tdo, tck, dtdo);
SampleOnRisingEdges(tms, tck, dtms);
SparseDigitalWaveform dtdi;
SparseDigitalWaveform dtdo;
SparseDigitalWaveform dtms;
SampleOnRisingEdgesBase(tdi, tck, dtdi);
SampleOnRisingEdgesBase(tdo, tck, dtdo);
SampleOnRisingEdgesBase(tms, tck, dtms);

//Create the capture
auto cap = new JtagWaveform;
cap->m_timescale = 1;
cap->m_startTimestamp = tck->m_startTimestamp;
cap->m_startFemtoseconds = tck->m_startFemtoseconds;
cap->PrepareForCpuAccess();

//Table for state transitions
JtagSymbol::JtagState state_if_tms_high[] =
Expand Down Expand Up @@ -211,9 +216,9 @@ void JtagDecoder::Refresh()
vector<uint8_t> ibytes;
vector<uint8_t> obytes;
string irval = "??";
size_t len = dtms.m_samples.size();
len = min(len, dtdi.m_samples.size());
len = min(len, dtdo.m_samples.size());
size_t len = dtms.size();
len = min(len, dtdi.size());
len = min(len, dtdo.size());
for(size_t i=0; i<len; i++)
{
//Update the state
Expand Down Expand Up @@ -325,6 +330,7 @@ void JtagDecoder::Refresh()
//LogDebug("%zu packets\n", m_packets.size());

SetData(cap, 0);
cap->MarkModifiedFromCpu();
}

Gdk::Color JtagWaveform::GetColor(size_t i)
Expand Down

0 comments on commit 629aa9f

Please sign in to comment.