14 #define TRG_SHORT_NAMES
21 #include "trg/trg/Utilities.h"
22 #include "trg/trg/Debug.h"
23 #include "trg/trg/Clock.h"
24 #include "trg/trg/Signal.h"
25 #include "trg/trg/SignalVector.h"
26 #include "trg/trg/SignalBundle.h"
27 #include "trg/trg/State.h"
37 TRGSignalBundle::TRGSignalBundle(
const TRGClock& c)
52 const unsigned outputBitSize,
59 const vector<int> states = input.stateChanges();
60 const unsigned nStates = states.size();
63 vector<TRGState*> outputStates;
64 for (
unsigned i = 0; i < nStates; i++) {
71 outputStates.push_back(
new TRGState((* packer)(s)));
87 for (
unsigned i = 0; i < nStates; i++) {
89 sb->
set((*s), states[i]);
99 const unsigned outputBitSize,
100 const unsigned registerBitSize,
108 const string sn =
"TRGSignalBundle constructor(4)";
112 const vector<int> states = input.stateChanges();
113 const unsigned nStates = states.size();
117 for (
unsigned i = 0; i < nStates; i++)
123 TRGSignalVector* sb =
new TRGSignalVector(
_name, c, outputBitSize);
130 vector<TRGState*> outputStates;
131 vector<int> newStates;
132 int lastClock = states[0] - 1;
133 TRGState* r =
new TRGState(registerBitSize);
134 for (
unsigned i = 0; i < nStates; i++) {
137 cout <<
TRGDebug::tab() <<
"Last clock=" << lastClock << endl;
140 if (states[i] <= lastClock)
151 int clk = states[i] + nLoops;
154 TRGState s = input.state(clk);
155 outputStates.push_back(
new TRGState((* packer)(s, * r,
active)));
156 newStates.push_back(clk);
160 cout <<
TRGDebug::tab() <<
"state=" << i <<
",clock=" << clk <<
161 ",LogicActive=" <<
active << endl;
174 TRGSignalVector* sb =
new TRGSignalVector(
_name, c, outputBitSize);
181 const unsigned n = outputStates.size();
182 for (
unsigned i = 0; i < n; i++) {
183 const TRGState* s = outputStates[i];
184 sb->set((* s), newStates[i]);
199 const string& pre)
const
201 cout << pre <<
_name <<
":" << size() <<
" signal vector(s)" << endl;
202 for (
unsigned i = 0; i < size(); i++)
203 (*
this)[i]->dump(msg,
" " + pre);
209 for (
unsigned i = 0; i < size(); i++)
210 if ((*
this)[i]->active())
220 std::vector<int> list;
223 const unsigned n = size();
224 for (
unsigned i = 0; i < n; i++) {
225 vector<int> a = (* this)[i]->stateChanges();
226 for (
unsigned j = 0; j < a.size(); j++)
227 list.push_back(a[j]);
235 std::sort(list.begin(), list.end());
238 std::vector<int> list2;
239 int last = numeric_limits<int>::min();
240 for (
unsigned i = 0; i < list.size(); i++) {
241 const int j = list[i];
254 const unsigned n = size();
255 for (
unsigned i = 0; i < n; i++) {
256 TRGState t = (* this)[i]->state(clockPosition);
267 for (
unsigned i = 0; i < size(); i++) {
281 const unsigned nStates = states.size();
288 for (
unsigned i = 0; i < nStates; i++) {
298 cout <<
"TRGSginalBundle::ored !!! not completed yet" << endl;
310 if (fnIn.size() == 0)
314 ofstream file(fn +
".coe", ios::out);
315 if (! file.is_open()) {
316 cout <<
"!!! " <<
name() <<
" can not open file : " << fn << endl;
365 file <<
"; " <<
name() << endl;
366 file <<
"; generated at " << TRGUtil::dateString() << endl;
367 file <<
"; start clock = " << clk0 << endl;
368 file <<
"; end clock = " << clk1 << endl;
369 file <<
"; bit size = " << tmp.size() <<
" + clock counter(" << cc.size()
372 file <<
"memory_initialization_radix=2;" << endl;
373 file <<
"memory_initialization_vector=" << endl;
375 for (
int i = clk0; i <= clk1; i++) {