37#ifndef MultiLaneBERT_h
38#define MultiLaneBERT_h
70 virtual void SetTxInvert(
size_t i,
bool invert)
override;
74 virtual void SetTxEnable(
size_t i,
bool enable)
override;
83 virtual void SetRxInvert(
size_t i,
bool invert)
override;
115 virtual void SetDataRate(
size_t i, int64_t rate)
override;
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:529
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:635
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:290
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:185
virtual void SetDataRate(size_t i, int64_t rate) override
Sets the data rate (in symbols/sec)
Definition: MultiLaneBERT.cpp:593
virtual bool HasRefclkOut() override
Returns true if this instrument has a reference clock output port.
Definition: MultiLaneBERT.cpp:392
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:325
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:455
virtual void SetRxPattern(size_t i, Pattern pattern) override
Sets the receive pattern for the selected channel.
Definition: MultiLaneBERT.cpp:142
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:137
virtual float GetTxDriveStrength(size_t i) override
Get the drive strength for a channel.
Definition: MultiLaneBERT.cpp:336
virtual void SetUseExternalRefclk(bool external) override
Sets the reference clock source (internal or external)
Definition: MultiLaneBERT.cpp:537
virtual void SetTxDriveStrength(size_t i, float drive) override
Set the drive strength for a channel.
Definition: MultiLaneBERT.cpp:341
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:302
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:240
virtual size_t GetRefclkOutMux() override
Gets the currently selected reference clock output mux setting.
Definition: MultiLaneBERT.cpp:397
virtual std::vector< float > GetRxCTLEGainSteps() override
Get the list of available RX CTLE gain values (in dB)
Definition: MultiLaneBERT.cpp:205
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:603
virtual bool AcquireData() override
Pull data from the instrument.
Definition: MultiLaneBERT.cpp:810
virtual void SetBERIntegrationLength(int64_t uis) override
Set the integration period for BER measurements.
Definition: MultiLaneBERT.cpp:624
virtual bool HasRefclkIn() override
Returns true if this instrument has a reference clock input port.
Definition: MultiLaneBERT.cpp:387
virtual int64_t GetDataRate(size_t i) override
Gets the currently selected line rate (in symbols/sec)
Definition: MultiLaneBERT.cpp:588
virtual bool IsCustomPatternPerChannel() override
Determines whether custom patterns are settable per channel, or shared by the whole device.
Definition: MultiLaneBERT.cpp:285
static std::string GetDriverNameInternal()
Return the constant driver name "mlbert".
Definition: MultiLaneBERT.cpp:124
virtual bool GetTxInvert(size_t i) override
Gets the transmit invert flag for a channel.
Definition: MultiLaneBERT.cpp:310
virtual bool GetUseExternalRefclk() override
Sets the reference clock source.
Definition: MultiLaneBERT.cpp:551
virtual float GetTxPreCursor(size_t i) override
Get the pre-cursor equalizer tap for a channel.
Definition: MultiLaneBERT.cpp:362
virtual void SetRxInvert(size_t i, bool invert) override
Sets the receive invert flag for a channel.
Definition: MultiLaneBERT.cpp:190
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:402
MultiLaneBERT(SCPITransport *transport)
Initialize the driver.
Definition: MultiLaneBERT.cpp:51
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:129
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:373
virtual size_t GetRxCTLEGainStep(size_t i) override
Gets the currently selected RX CTLE gain index.
Definition: MultiLaneBERT.cpp:226
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:315
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:734
virtual std::vector< Pattern > GetAvailableRxPatterns(size_t i) override
Gets the list of available receive patterns for a channel.
Definition: MultiLaneBERT.cpp:170
virtual void SetBERSamplingPoint(size_t i, int64_t dx, float dy) override
Set the sampling point for BER measurements.
Definition: MultiLaneBERT.cpp:559
virtual void MeasureHBathtub(size_t i) override
Acquires a bathtub curve.
Definition: MultiLaneBERT.cpp:640
virtual bool GetTxEnable(size_t i) override
Gets the transmit enable flag for a channel.
Definition: MultiLaneBERT.cpp:357
virtual void SetTxPattern(size_t i, Pattern pattern) override
Sets the transmit pattern for the selected channel.
Definition: MultiLaneBERT.cpp:257
virtual int64_t GetRefclkOutFrequency() override
Gets the currently selected refclk out frequency, in Hz.
Definition: MultiLaneBERT.cpp:478
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:378
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:252
virtual void SetRxCTLEGainStep(size_t i, size_t step) override
Sets the RX CTLE gain index.
Definition: MultiLaneBERT.cpp:231
virtual void SetTxPreCursor(size_t i, float precursor) override
Set the pre-cursor equalizer tap for a channel.
Definition: MultiLaneBERT.cpp:367
virtual bool IsDataRatePerChannel() override
Determines whether the TX/RX clock is a per-instrument or per-channel setting.
Definition: MultiLaneBERT.cpp:583
virtual bool HasRxCTLE() override
Determines whether the input buffer has a continuous-time linear equalizer.
Definition: MultiLaneBERT.cpp:200
virtual void SetTxEnable(size_t i, bool enable) override
Sets the transmit enable flag for a channel.
Definition: MultiLaneBERT.cpp:347
virtual int64_t GetBERIntegrationLength() override
Get the integration period for BER measurements.
Definition: MultiLaneBERT.cpp:630
virtual void PostCtorInit() override
Do initialization after the constructor finishes.
Definition: MultiLaneBERT.cpp:78
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:577
virtual void SetGlobalCustomPattern(uint64_t pattern) override
Sets the global custom pattern (only valid if IsCustomPatternPerChannel returns false)
Definition: MultiLaneBERT.cpp:295
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:47