37#ifndef MultiLaneBERT_h
38#define MultiLaneBERT_h
Definition AcceleratorBuffer.h:204
Pattern
Set of patterns we can generate or accept.
Definition BERT.h:54
A MultiLANE BERT accessed via scopehal-mlbert-bridge.
Definition MultiLaneBERT.h:47
virtual int64_t GetRefclkInFrequency() override
Gets the refclk in frequency, in Hz, required to generate the currently selected data rate.
Definition MultiLaneBERT.cpp:532
RefclkMuxSelectors
Mux selectors for reference clock output.
Definition MultiLaneBERT.h:175
@ RX1_DIV8
Lane 1 recovered clock, 1/8 rate.
Definition MultiLaneBERT.h:183
@ SERDES
Custom pattern generator output.
Definition MultiLaneBERT.h:204
@ RX0_DIV8
Lane 0 recovered clock, 1/8 rate.
Definition MultiLaneBERT.h:177
@ RX2_DIV8
Lane 2 recovered clock, 1/8 rate.
Definition MultiLaneBERT.h:189
@ LO_DIV32_OR_80
TX local oscillator divided by 32 (in low rate mode) or 80 (in high rate mode)
Definition MultiLaneBERT.h:201
@ RX2_DIV16
Lane 2 recovered clock, 1/16 rate.
Definition MultiLaneBERT.h:192
@ RX3_DIV8
Lane 3 recovered clock, 1/8 rate.
Definition MultiLaneBERT.h:195
@ RX3_DIV16
Lane 3 recovered clock, 1/16 rate.
Definition MultiLaneBERT.h:198
@ RX0_DIV16
Lane 0 recovered clock, 1/16 rate.
Definition MultiLaneBERT.h:180
@ RX1_DIV16
Lane 1 recovered clock, 1/16 rate.
Definition MultiLaneBERT.h:186
virtual bool GetRxCdrLockState(size_t i) override
Gets the RX CDR lock state (true=lock, false=unlock)
Definition MultiLaneBERT.cpp:638
bool m_txInvert[4]
Transmit invert flag.
Definition MultiLaneBERT.h:132
virtual size_t GetCustomPatternLength() override
Returns the number of bits in a custom pattern (may change with line rate)
Definition MultiLaneBERT.cpp:293
size_t m_refclkOutMux
Reference clock output mux selector.
Definition MultiLaneBERT.h:156
virtual bool GetRxInvert(size_t i) override
Gets the transmit invert flag for a channel.
Definition MultiLaneBERT.cpp:188
virtual void SetDataRate(size_t i, int64_t rate) override
Sets the data rate (in symbols/sec)
Definition MultiLaneBERT.cpp:596
virtual bool HasRefclkOut() override
Returns true if this instrument has a reference clock output port.
Definition MultiLaneBERT.cpp:395
Pattern m_rxPattern[4]
Active receive pattern.
Definition MultiLaneBERT.h:129
virtual std::vector< float > GetAvailableTxDriveStrengths(size_t i) override
Gets the list of available drive strengths (in volts) for a channel.
Definition MultiLaneBERT.cpp:328
float m_txPreCursor[4]
TX FFE pre-cursor coefficient.
Definition MultiLaneBERT.h:144
virtual std::vector< std::string > GetRefclkOutMuxNames() override
Gets the list of available reference clock mux settings.
Definition MultiLaneBERT.cpp:458
virtual void SetRxPattern(size_t i, Pattern pattern) override
Sets the receive pattern for the selected channel.
Definition MultiLaneBERT.cpp:145
bool m_rxLock[4]
RX pattern lock state.
Definition MultiLaneBERT.h:150
virtual Pattern GetRxPattern(size_t i) override
Gets the currently selected receive pattern for a channel.
Definition MultiLaneBERT.cpp:140
virtual float GetTxDriveStrength(size_t i) override
Get the drive strength for a channel.
Definition MultiLaneBERT.cpp:339
virtual void SetUseExternalRefclk(bool external) override
Sets the reference clock source (internal or external)
Definition MultiLaneBERT.cpp:540
virtual void SetTxDriveStrength(size_t i, float drive) override
Set the drive strength for a channel.
Definition MultiLaneBERT.cpp:344
float m_txPostCursor[4]
TX FFE post-cursor coefficient.
Definition MultiLaneBERT.h:147
virtual uint64_t GetGlobalCustomPattern() override
Gets the global custom pattern (only valid if IsCustomPatternPerChannel returns false)
Definition MultiLaneBERT.cpp:305
float m_txDrive[4]
TX drive strength.
Definition MultiLaneBERT.h:138
virtual std::vector< Pattern > GetAvailableTxPatterns(size_t i) override
Gets the list of available transmit patterns for a channel.
Definition MultiLaneBERT.cpp:243
virtual size_t GetRefclkOutMux() override
Gets the currently selected reference clock output mux setting.
Definition MultiLaneBERT.cpp:400
virtual std::vector< float > GetRxCTLEGainSteps() override
Get the list of available RX CTLE gain values (in dB)
Definition MultiLaneBERT.cpp:208
Pattern m_txPattern[4]
Active transmit pattern.
Definition MultiLaneBERT.h:126
virtual std::vector< int64_t > GetAvailableDataRates() override
Gets the list of available data rates, in symbols/sec.
Definition MultiLaneBERT.cpp:606
virtual bool AcquireData() override
Pull data from the instrument.
Definition MultiLaneBERT.cpp:812
virtual void SetBERIntegrationLength(int64_t uis) override
Set the integration period for BER measurements.
Definition MultiLaneBERT.cpp:627
virtual bool HasRefclkIn() override
Returns true if this instrument has a reference clock input port.
Definition MultiLaneBERT.cpp:390
virtual int64_t GetDataRate(size_t i) override
Gets the currently selected line rate (in symbols/sec)
Definition MultiLaneBERT.cpp:591
virtual bool IsCustomPatternPerChannel() override
Determines whether custom patterns are settable per channel, or shared by the whole device.
Definition MultiLaneBERT.cpp:288
static std::string GetDriverNameInternal()
Return the constant driver name "mlbert".
Definition MultiLaneBERT.cpp:127
virtual bool GetTxInvert(size_t i) override
Gets the transmit invert flag for a channel.
Definition MultiLaneBERT.cpp:313
virtual bool GetUseExternalRefclk() override
Sets the reference clock source.
Definition MultiLaneBERT.cpp:554
virtual float GetTxPreCursor(size_t i) override
Get the pre-cursor equalizer tap for a channel.
Definition MultiLaneBERT.cpp:365
virtual void SetRxInvert(size_t i, bool invert) override
Sets the receive invert flag for a channel.
Definition MultiLaneBERT.cpp:193
int m_rxChannelBase
Index of the first receive channel.
Definition MultiLaneBERT.h:123
bool m_rxInvert[4]
Receive invert flag.
Definition MultiLaneBERT.h:135
virtual void SetRefclkOutMux(size_t i) override
Sets the reference clock output mux.
Definition MultiLaneBERT.cpp:405
virtual uint32_t GetInstrumentTypesForChannel(size_t i) const override
Returns a bitfield describing the set of instrument types that a given channel supports.
Definition MultiLaneBERT.cpp:132
int64_t m_integrationLength
BER integration period.
Definition MultiLaneBERT.h:162
virtual float GetTxPostCursor(size_t i) override
Get the post-cursor equalizer tap for a channel.
Definition MultiLaneBERT.cpp:376
virtual size_t GetRxCTLEGainStep(size_t i) override
Gets the currently selected RX CTLE gain index.
Definition MultiLaneBERT.cpp:229
int64_t m_sampleX[4]
Sample X position for BER measurements.
Definition MultiLaneBERT.h:165
bool m_txEnable[4]
Transmit enable flag.
Definition MultiLaneBERT.h:141
uint64_t m_txCustomPattern
Bit pattern for TX custom-pattern mode.
Definition MultiLaneBERT.h:153
virtual void SetTxInvert(size_t i, bool invert) override
Sets the transmit invert flag for a channel.
Definition MultiLaneBERT.cpp:318
size_t m_rxCtleGainSteps[4]
CTLE gain step selected for each RX channel.
Definition MultiLaneBERT.h:159
virtual void MeasureEye(size_t i) override
Acquires an eye pattern.
Definition MultiLaneBERT.cpp:737
virtual std::vector< Pattern > GetAvailableRxPatterns(size_t i) override
Gets the list of available receive patterns for a channel.
Definition MultiLaneBERT.cpp:173
virtual void SetBERSamplingPoint(size_t i, int64_t dx, float dy) override
Set the sampling point for BER measurements.
Definition MultiLaneBERT.cpp:562
virtual void MeasureHBathtub(size_t i) override
Acquires a bathtub curve.
Definition MultiLaneBERT.cpp:643
virtual bool GetTxEnable(size_t i) override
Gets the transmit enable flag for a channel.
Definition MultiLaneBERT.cpp:360
virtual void SetTxPattern(size_t i, Pattern pattern) override
Sets the transmit pattern for the selected channel.
Definition MultiLaneBERT.cpp:260
virtual int64_t GetRefclkOutFrequency() override
Gets the currently selected refclk out frequency, in Hz.
Definition MultiLaneBERT.cpp:481
uint64_t m_dataRate
Current data rate, in bits/sec.
Definition MultiLaneBERT.h:208
virtual void SetTxPostCursor(size_t i, float postcursor) override
Set the post-cursor equalizer tap for a channel.
Definition MultiLaneBERT.cpp:381
float m_sampleY[4]
Sample Y position for BER measurements.
Definition MultiLaneBERT.h:168
virtual Pattern GetTxPattern(size_t i) override
Gets the currently selected transmit pattern for a channel.
Definition MultiLaneBERT.cpp:255
virtual void SetRxCTLEGainStep(size_t i, size_t step) override
Sets the RX CTLE gain index.
Definition MultiLaneBERT.cpp:234
virtual void SetTxPreCursor(size_t i, float precursor) override
Set the pre-cursor equalizer tap for a channel.
Definition MultiLaneBERT.cpp:370
virtual bool IsDataRatePerChannel() override
Determines whether the TX/RX clock is a per-instrument or per-channel setting.
Definition MultiLaneBERT.cpp:586
virtual bool HasRxCTLE() override
Determines whether the input buffer has a continuous-time linear equalizer.
Definition MultiLaneBERT.cpp:203
virtual void SetTxEnable(size_t i, bool enable) override
Sets the transmit enable flag for a channel.
Definition MultiLaneBERT.cpp:350
virtual int64_t GetBERIntegrationLength() override
Get the integration period for BER measurements.
Definition MultiLaneBERT.cpp:633
virtual void PostCtorInit() override
Do initialization after the constructor finishes.
Definition MultiLaneBERT.cpp:81
bool m_useExternalRefclk
True if using external reference clock, false if internal.
Definition MultiLaneBERT.h:171
virtual void GetBERSamplingPoint(size_t i, int64_t &dx, float &dy) override
Get the sampling point for BER measurements.
Definition MultiLaneBERT.cpp:580
virtual void SetGlobalCustomPattern(uint64_t pattern) override
Sets the global custom pattern (only valid if IsCustomPatternPerChannel returns false)
Definition MultiLaneBERT.cpp:298
An SCPI-based BERT.
Definition SCPIBERT.h:38
An SCPI-based device.
Definition SCPIDevice.h:37
Abstraction of a transport layer for moving SCPI data between endpoints.
Definition SCPITransport.h:53