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 <memory>
24#include <thread>
25
28
29namespace rogue {
30namespace utilities {
31
49 // Max size
50 static const uint32_t MaxBytes = 64;
51
52 // PRBS taps
53 uint8_t* taps_;
54
55 // PRBS tap count
56 uint32_t tapCnt_;
57
58 // Data width in bytes
59 uint32_t width_;
60
61 // Data width in bytes
62 uint32_t byteWidth_;
63
64 // Min size
65 uint32_t minSize_;
66
67 // Lock
68 std::mutex pMtx_;
69
70 // rx sequence tracking
71 uint32_t rxSeq_;
72
73 // RX Error count
74 uint32_t rxErrCount_;
75
76 // Rx count
77 uint32_t rxCount_;
78
79 // Rx bytes
80 uint64_t rxBytes_;
81
82 // tx sequence tracking
83 uint32_t txSeq_;
84
85 // Transmit size
86 uint32_t txSize_;
87
88 // TX Error count
89 uint32_t txErrCount_;
90
91 // TX count
92 uint32_t txCount_;
93
94 // TX bytes
95 uint64_t txBytes_;
96
97 // Check payload
98 bool checkPl_;
99
100 // Gen payload
101 bool genPl_;
102
103 // Send count
104 bool sendCount_;
105
106 // Receive enable
107 bool rxEnable_;
108
109 // Tx Rate Period in microseconds
110 uint32_t txPeriod_;
111
112 // Stats
113 uint32_t lastRxCount_;
114 uint64_t lastRxBytes_;
115 struct timeval lastRxTime_;
116 double rxRate_;
117 double rxBw_;
118
119 uint32_t lastTxCount_;
120 uint64_t lastTxBytes_;
121 struct timeval lastTxTime_;
122 double txRate_;
123 double txBw_;
124
125 // Logger
126 std::shared_ptr<rogue::Logging> rxLog_;
127 std::shared_ptr<rogue::Logging> txLog_;
128
129 // TX thread
130 std::thread* txThread_;
131 bool threadEn_;
132
133 // Internal computation
134 void flfsr(uint8_t* data);
135
136 // Thread background
137 void runThread();
138
139 static double updateTime(struct timeval* last);
140
141 public:
152 static std::shared_ptr<rogue::utilities::Prbs> create();
153
155 static void setup_python();
156
164 Prbs();
165
167 ~Prbs();
168
173 void setWidth(uint32_t width);
174
180 void setTaps(uint32_t tapCnt, uint8_t* taps);
181
182#ifndef NO_PYTHON
187 void setTapsPy(boost::python::object p);
188#endif
189
194 void sendCount(bool state);
195
200 void genFrame(uint32_t size);
201
211 void enable(uint32_t size);
212
219 void disable();
220
225 bool getRxEnable();
226
231 void setRxEnable(bool state);
232
237 uint32_t getRxErrors();
238
243 uint32_t getRxCount();
244
249 uint64_t getRxBytes();
250
255 double getRxRate();
256
261 double getRxBw();
262
267 double getTxRate();
268
273 void setTxPeriod(uint32_t txPeriod);
274
279 uint32_t getTxPeriod();
280
285 double getTxBw();
286
291 uint32_t getTxErrors();
292
297 uint32_t getTxCount();
298
303 uint64_t getTxBytes();
304
309 void checkPayload(bool state);
310
315 void genPayload(bool state);
316
318 void resetCount();
319
324 void acceptFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
325};
326
327// Convenience
328typedef std::shared_ptr<rogue::utilities::Prbs> PrbsPtr;
329
330} // namespace utilities
331} // namespace rogue
332#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:48
void resetCount()
Resets RX/TX counters and statistics.
Definition Prbs.cpp:321
uint64_t getTxBytes()
Returns TX byte count.
Definition Prbs.cpp:305
void enable(uint32_t size)
Enables periodic background frame generation.
Definition Prbs.cpp:209
void checkPayload(bool state)
Enables or disables payload checking.
Definition Prbs.cpp:310
uint32_t getTxCount()
Returns TX frame count.
Definition Prbs.cpp:270
void setTaps(uint32_t tapCnt, uint8_t *taps)
Configures LFSR taps.
Definition Prbs.cpp:142
void setTxPeriod(uint32_t txPeriod)
Sets background TX period.
Definition Prbs.cpp:295
uint32_t getRxCount()
Returns RX frame count.
Definition Prbs.cpp:255
double getRxBw()
Returns computed RX bandwidth.
Definition Prbs.cpp:280
Prbs()
Constructs a PRBS instance with default taps and width.
Definition Prbs.cpp:55
uint32_t getTxErrors()
Returns TX error count.
Definition Prbs.cpp:265
uint32_t getTxPeriod()
Returns configured background TX period.
Definition Prbs.cpp:290
uint64_t getRxBytes()
Returns RX byte count.
Definition Prbs.cpp:260
double getTxRate()
Returns computed TX frame rate.
Definition Prbs.cpp:285
void acceptFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Accepts a frame from an upstream master.
Definition Prbs.cpp:408
void genFrame(uint32_t size)
Generates and transmits one PRBS frame.
Definition Prbs.cpp:333
void disable()
Disables periodic background frame generation.
Definition Prbs.cpp:226
void sendCount(bool state)
Enables or disables transmission of sequence counters in payload.
Definition Prbs.cpp:170
bool getRxEnable()
Returns whether RX checking is enabled.
Definition Prbs.cpp:237
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:250
static void setup_python()
Registers Python bindings for this class.
Definition Prbs.cpp:521
void genPayload(bool state)
Enables or disables payload generation.
Definition Prbs.cpp:315
double getTxBw()
Returns computed TX bandwidth.
Definition Prbs.cpp:300
void setWidth(uint32_t width)
Sets generator/checker data width.
Definition Prbs.cpp:130
void setTapsPy(boost::python::object p)
Configures LFSR taps from a Python sequence.
Definition Prbs.cpp:157
void setRxEnable(bool state)
Enables or disables RX checking.
Definition Prbs.cpp:242
double getRxRate()
Returns computed RX frame rate.
Definition Prbs.cpp:275
~Prbs()
Destroys the PRBS instance and stops background generation.
Definition Prbs.cpp:102
std::shared_ptr< rogue::utilities::Prbs > PrbsPtr
Definition Prbs.h:328