51 GenXSequence::GenXSequence(
const unsigned int initialState,
52 const unsigned int tapRegister,
53 const int initialLengthOfSequence,
65 unsigned int mask12bits[12] = { 0x0001, 0x0002, 0x0004, 0x0008,
66 0x0010, 0x0020, 0x0040, 0x0080,
67 0x0100, 0x0200, 0x0400, 0x0800 };
69 unsigned int reg = initialState;
70 lengthOfSequence = initialLengthOfSequence;
71 maxOfSequence = lengthOfSequence + maxDelay;
80 for ( i=0; i<
MAX_WORD; ++i ) bits[i] = 0x00000000;
83 for ( i=0; i<lengthOfSequence ; ++i)
86 if ( (reg & 0x0800) != 0 ) output = 0x00000001;
87 else output = 0x00000000;
88 addBitToSequence( output );
91 andBits = reg & tapRegister;
95 for (
int bit12cnt=0; bit12cnt<12; ++bit12cnt)
97 if (( andBits & mask12bits[bit12cnt] ) != 0) ++cnt;
104 for ( i=0; i<maxDelay; ++i) addBitToSequence( output );
108 if (bit_num>0) bits[word_num] <<= (
MAX_BIT-bit_num);
112 void GenXSequence::addBitToSequence( uint32_t newBit )
116 bits[word_num] <<= 1;
117 bits[word_num] |= newBit;
139 uint32_t GenXSequence::operator[] (
int ia )
141 uint32_t retArg = 0x00000000;
143 if (i >= lengthOfSequence) i = i % lengthOfSequence;
146 if ( (i+
MAX_BIT) <= lengthOfSequence )
148 if (offset==0) retArg = bits[ndx1];
149 else retArg =
merge( bits[ndx1], bits[ndx1+1], offset );
163 int numRemainingInSequence = lengthOfSequence - i;
164 int numRemainingInWord =
MAX_BIT - offset;
170 if (numRemainingInWord<numRemainingInSequence)
172 retArg = bits[ndx1++] << offset;
173 numRemainingInSequence -= numRemainingInWord;
174 numFilled = numRemainingInWord;
177 uint32_t
temp = bits[ndx1];
185 if (numFilled==0 && offset!=0)
189 temp <<= (
MAX_BIT - (numRemainingInSequence+numFilled) );
195 temp <<= (
MAX_BIT-(numRemainingInSequence+numFilled));
201 retArg |= bits[0] >> (numRemainingInSequence+numFilled);
206 void GenXSequence::setLengthOfSequence(
int los )
208 lengthOfSequence = los;