rogue
Loading...
Searching...
No Matches
Prbs.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_UTILITIES_PRBS_H__
18#define __ROGUE_UTILITIES_PRBS_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <atomic>
24#include <memory>
25#include <thread>
26
29
30namespace rogue {
31namespace utilities {
32
50 // Max size
51 static const uint32_t MaxBytes = 64;
52
53 // PRBS taps
54 uint8_t* taps_;
55
56 // PRBS tap count
57 uint32_t tapCnt_;
58
59 // Data width in bytes
60 uint32_t width_;
61
62 // Data width in bytes
63 uint32_t byteWidth_;
64
65 // Min size
66 uint32_t minSize_;
67
68 // Lock
69 std::mutex pMtx_;
70
71 // rx sequence tracking
72 uint32_t rxSeq_;
73
74 // RX Error count
75 uint32_t rxErrCount_;
76
77 // Rx count
78 uint32_t rxCount_;
79
80 // Rx bytes
81 uint64_t rxBytes_;
82
83 // tx sequence tracking
84 uint32_t txSeq_;
85
86 // Transmit size
87 uint32_t txSize_;
88
89 // TX Error count
90 uint32_t txErrCount_;
91
92 // TX count
93 uint32_t txCount_;
94
95 // TX bytes
96 uint64_t txBytes_;
97
98 // Check payload
99 bool checkPl_;
100
101 // Gen payload
102 bool genPl_;
103
104 // Send count
105 bool sendCount_;
106
107 // Receive enable
108 bool rxEnable_;
109
110 // Tx Rate Period in microseconds
111 uint32_t txPeriod_;
112
113 // Stats
114 uint32_t lastRxCount_;
115 uint64_t lastRxBytes_;
116 struct timeval lastRxTime_;
117 double rxRate_;
118 double rxBw_;
119
120 uint32_t lastTxCount_;
121 uint64_t lastTxBytes_;
122 struct timeval lastTxTime_;
123 double txRate_;
124 double txBw_;
125
126 // Logger
127 std::shared_ptr<rogue::Logging> rxLog_;
128 std::shared_ptr<rogue::Logging> txLog_;
129
131 protected:
132 std::thread* txThread_ = nullptr;
133 std::atomic<bool> threadEn_{false};
135
136 private:
137 // Internal computation
138 void flfsr(uint8_t* data);
139
140 // Thread background
141 void runThread();
142
143 static double updateTime(struct timeval* last);
144
145 public:
156 static std::shared_ptr<rogue::utilities::Prbs> create();
157
159 static void setup_python();
160
168 Prbs();
169
171 ~Prbs();
172
177 void setWidth(uint32_t width);
178
184 void setTaps(uint32_t tapCnt, uint8_t* taps);
185
186#ifndef NO_PYTHON
191 void setTapsPy(boost::python::object p);
192#endif
193
198 void sendCount(bool state);
199
204 void genFrame(uint32_t size);
205
215 void enable(uint32_t size);
216
223 void disable();
224
229 bool getRxEnable();
230
235 void setRxEnable(bool state);
236
241 uint32_t getRxErrors();
242
247 uint32_t getRxCount();
248
253 uint64_t getRxBytes();
254
259 double getRxRate();
260
265 double getRxBw();
266
271 double getTxRate();
272
277 void setTxPeriod(uint32_t txPeriod);
278
283 uint32_t getTxPeriod();
284
289 double getTxBw();
290
295 uint32_t getTxErrors();
296
301 uint32_t getTxCount();
302
307 uint64_t getTxBytes();
308
313 void checkPayload(bool state);
314
319 void genPayload(bool state);
320
322 void resetCount();
323
328 void acceptFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
329};
330
331// Convenience
332typedef std::shared_ptr<rogue::utilities::Prbs> PrbsPtr;
333
334} // namespace utilities
335} // namespace rogue
336#endif
Stream master endpoint.
Definition Master.h:65
Stream slave endpoint and default frame pool.
Definition Slave.h:72
PRBS generator/checker that can act as both stream master and slave.
Definition Prbs.h:49
void resetCount()
Resets RX/TX counters and statistics.
Definition Prbs.cpp:323
uint64_t getTxBytes()
Returns TX byte count.
Definition Prbs.cpp:307
void enable(uint32_t size)
Enables periodic background frame generation.
Definition Prbs.cpp:211
void checkPayload(bool state)
Enables or disables payload checking.
Definition Prbs.cpp:312
uint32_t getTxCount()
Returns TX frame count.
Definition Prbs.cpp:272
void setTaps(uint32_t tapCnt, uint8_t *taps)
Configures LFSR taps.
Definition Prbs.cpp:144
void setTxPeriod(uint32_t txPeriod)
Sets background TX period.
Definition Prbs.cpp:297
uint32_t getRxCount()
Returns RX frame count.
Definition Prbs.cpp:257
double getRxBw()
Returns computed RX bandwidth.
Definition Prbs.cpp:282
Prbs()
Constructs a PRBS instance with default taps and width.
Definition Prbs.cpp:55
uint32_t getTxErrors()
Returns TX error count.
Definition Prbs.cpp:267
uint32_t getTxPeriod()
Returns configured background TX period.
Definition Prbs.cpp:292
uint64_t getRxBytes()
Returns RX byte count.
Definition Prbs.cpp:262
double getTxRate()
Returns computed TX frame rate.
Definition Prbs.cpp:287
void acceptFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Accepts a frame from an upstream master.
Definition Prbs.cpp:410
void genFrame(uint32_t size)
Generates and transmits one PRBS frame.
Definition Prbs.cpp:335
void disable()
Disables periodic background frame generation.
Definition Prbs.cpp:228
void sendCount(bool state)
Enables or disables transmission of sequence counters in payload.
Definition Prbs.cpp:172
bool getRxEnable()
Returns whether RX checking is enabled.
Definition Prbs.cpp:239
static std::shared_ptr< rogue::utilities::Prbs > create()
Creates a PRBS generator/checker instance.
Definition Prbs.cpp:49
uint32_t getRxErrors()
Returns RX error count.
Definition Prbs.cpp:252
static void setup_python()
Registers Python bindings for this class.
Definition Prbs.cpp:523
void genPayload(bool state)
Enables or disables payload generation.
Definition Prbs.cpp:317
double getTxBw()
Returns computed TX bandwidth.
Definition Prbs.cpp:302
void setWidth(uint32_t width)
Sets generator/checker data width.
Definition Prbs.cpp:132
void setTapsPy(boost::python::object p)
Configures LFSR taps from a Python sequence.
Definition Prbs.cpp:159
void setRxEnable(bool state)
Enables or disables RX checking.
Definition Prbs.cpp:244
double getRxRate()
Returns computed RX frame rate.
Definition Prbs.cpp:277
~Prbs()
Destroys the PRBS instance and stops background generation.
Definition Prbs.cpp:102
std::shared_ptr< rogue::utilities::Prbs > PrbsPtr
Definition Prbs.h:332