9 #define TRG_SHORT_NAMES
16 #include "trg/trg/Utilities.h"
17 #include "trg/trg/Debug.h"
18 #include "trg/trg/Clock.h"
19 #include "trg/trg/Signal.h"
20 #include "trg/trg/SignalVector.h"
21 #include "trg/trg/SignalBundle.h"
22 #include "trg/trg/State.h"
32 TRGSignalBundle::TRGSignalBundle(
const TRGClock& c)
47 const unsigned outputBitSize,
54 const vector<int> states = input.stateChanges();
55 const unsigned nStates = states.size();
58 vector<TRGState*> outputStates;
59 for (
unsigned i = 0; i < nStates; i++) {
66 outputStates.push_back(
new TRGState((* packer)(s)));
82 for (
unsigned i = 0; i < nStates; i++) {
84 sb->
set((*s), states[i]);
94 const unsigned outputBitSize,
95 const unsigned registerBitSize,
103 const string sn =
"TRGSignalBundle constructor(4)";
107 const vector<int> states = input.stateChanges();
108 const unsigned nStates = states.size();
112 for (
unsigned i = 0; i < nStates; i++)
118 TRGSignalVector* sb =
new TRGSignalVector(
_name, c, outputBitSize);
125 vector<TRGState*> outputStates;
126 vector<int> newStates;
127 int lastClock = states[0] - 1;
128 TRGState* r =
new TRGState(registerBitSize);
129 for (
unsigned i = 0; i < nStates; i++) {
132 cout <<
TRGDebug::tab() <<
"Last clock=" << lastClock << endl;
135 if (states[i] <= lastClock)
147 int clk = states[i] + nLoops;
150 TRGState s = input.state(clk);
151 outputStates.push_back(
new TRGState((* packer)(s, * r,
active)));
152 newStates.push_back(clk);
156 cout <<
TRGDebug::tab() <<
"state=" << i <<
",clock=" << clk <<
157 ",LogicActive=" <<
active << endl;
170 TRGSignalVector* sb =
new TRGSignalVector(
_name, c, outputBitSize);
177 const unsigned n = outputStates.size();
178 for (
unsigned i = 0; i < n; i++) {
179 const TRGState* s = outputStates[i];
180 sb->set((* s), newStates[i]);
195 const string& pre)
const
197 cout << pre <<
_name <<
":" << size() <<
" signal vector(s)" << endl;
198 for (
unsigned i = 0; i < size(); i++)
199 (*
this)[i]->dump(msg,
" " + pre);
205 for (
unsigned i = 0; i < size(); i++)
206 if ((*
this)[i]->active())
216 std::vector<int> list;
219 const unsigned n = size();
220 for (
unsigned i = 0; i < n; i++) {
221 vector<int> a = (* this)[i]->stateChanges();
222 for (
unsigned j = 0; j < a.size(); j++)
223 list.push_back(a[j]);
231 std::sort(list.begin(), list.end());
234 std::vector<int> list2;
235 int last = numeric_limits<int>::min();
236 for (
unsigned i = 0; i < list.size(); i++) {
237 const int j = list[i];
250 const unsigned n = size();
251 for (
unsigned i = 0; i < n; i++) {
252 TRGState t = (* this)[i]->state(clockPosition);
263 for (
unsigned i = 0; i < size(); i++) {
277 const unsigned nStates = states.size();
284 for (
unsigned i = 0; i < nStates; i++) {
294 cout <<
"TRGSginalBundle::ored !!! not completed yet" << endl;
306 if (fnIn.size() == 0)
310 ofstream file(fn +
".coe", ios::out);
311 if (! file.is_open()) {
312 cout <<
"!!! " <<
name() <<
" can not open file : " << fn << endl;
361 file <<
"; " <<
name() << endl;
362 file <<
"; generated at " << TRGUtil::dateString() << endl;
363 file <<
"; start clock = " << clk0 << endl;
364 file <<
"; end clock = " << clk1 << endl;
365 file <<
"; bit size = " << tmp.size() <<
" + clock counter(" << cc.size()
368 file <<
"memory_initialization_radix=2;" << endl;
369 file <<
"memory_initialization_vector=" << endl;
371 for (
int i = clk0; i <= clk1; i++) {
A class to represent a digitized signal. Unit is nano second.
A class to represent a bundle of SignalVectors.
const TRGClock * _clock
Clock.
A class to represent a bundle of digitized signals.
A class to represent a digitized signal. Unit is nano second.
A class to represent a state of multi bits.
static std::string tab(void)
returns tab spaces.
const TRGSignalVector & set(const TRGState &, int clockPosition)
sets state at given clock.
virtual ~TRGSignalBundle()
Destructor.
TRGState state(int clockPosition) const
returns state at given clock position.
const TRGClock & clock(void) const
returns clock.
const std::string & name(void) const
returns name.
std::vector< int > stateChanges(void) const
returns a list of clock position of state change.
static void enterStage(const std::string &stageName)
Declare that you enter new stage.
int min(void) const
returns min. clock point.
TRGSignalBundle(const TRGClock &)
Default constructor.
TRGSignal ored(void) const
returns signal of all ORed.
static int level(void)
returns the debug level.
bool active(void) const
returns true if there is a signal.
const TRGSignalVector & clockCounter(void) const
returns the clock counter.
static void leaveStage(const std::string &stageName)
Declare that you leave a stage.
void dumpCOE(const std::string &fileName="", int start=0, int stop=0) const
makes coe output.
void dump(const std::string &message="", const std::string &pre="") const
dumps contents.
Abstract base class for different kinds of events.