! ! BDS architecture description for HEC circuit, which computes ! the HEC of a 32-bit header. ! r contains the CRC bits. ! l contains the initial values of CRC bits; initialized to 'O' in this case. ! c represents the coset polynomial. ! Refer to TurboChannel-ATM Interface document for derivation of equations. ! Note that you can get rid of all 'l' terms since they are all zero, but ! they are included for the sake of completeness. This is not the structure ! for the actual implementation. Instead of computing r<.> in one operation ! on 32 bits, four partial results are computed first on 8 bits each. MODEL hec r<7:0> = h<31:0>; state partial<7:0>; constant c<7:0> = 01010101#2; ROUTINE hec0<7:0>(h<7:0>); r<7> = h<7> XOR h<6> XOR h<0>; r<6> = h<6> XOR h<1> XOR h<0>; r<5> = h<2> XOR h<1> XOR h<0>; r<4> = h<7> XOR h<3> XOR h<2> XOR h<1>; r<3> = h<4> XOR h<3> XOR h<2>; r<2> = h<5> XOR h<4> XOR h<3>; r<1> = h<6> XOR h<5> XOR h<4>; r<0> = h<7> XOR h<6> XOR h<5>; return r; ENDROUTINE; ROUTINE hec1<7:0>(h<15:8>); r<7> = h<14> XOR h<12> XOR h<8>; r<6> = h<15> XOR h<14> XOR h<13> XOR h<12> XOR h<9>; r<5> = h<15> XOR h<13> XOR h<12> XOR h<10> XOR h<8>; r<4> = h<14> XOR h<13> XOR h<11> XOR h<9>; r<3> = h<15> XOR h<14> XOR h<12> XOR h<10> XOR h<8>; r<2> = h<15> XOR h<13> XOR h<11> XOR h<9>; r<1> = h<14> XOR h<12> XOR h<10>; r<0> = h<15> XOR h<13> XOR h<11>; return r; ENDROUTINE; ROUTINE hec2<7:0>(h<23:16>); r<7> = h<23> XOR h<21> XOR h<19> XOR h<18> XOR h<16>; r<6> = h<23> XOR h<22> XOR h<21> XOR h<20> XOR h<19> XOR h<18> XOR h<17> XOR h<16>; r<5> = h<22> XOR h<17>; r<4> = h<23> XOR h<18> XOR h<16>; r<3> = h<19> XOR h<17>; r<2> = h<20> XOR h<18> XOR h<16>; r<1> = h<21> XOR h<19> XOR h<17> XOR h<16>; r<0> = h<22> XOR h<20> XOR h<18> XOR h<17>; return r; ENDROUTINE; ROUTINE hec3<7:0>(h<31:24>); r<7> = h<31> XOR h<30> XOR h<28>; r<6> = h<30> XOR h<29> XOR h<28> XOR h<24>; r<5> = h<29> XOR h<28> XOR h<25> XOR h<24>; r<4> = h<30> XOR h<29> XOR h<26> XOR h<25>; r<3> = h<31> XOR h<30> XOR h<27> XOR h<26> XOR h<24>; r<2> = h<31> XOR h<28> XOR h<27> XOR h<25>; r<1> = h<29> XOR h<28> XOR h<26>; r<0> = h<30> XOR h<29> XOR h<27>; return r; ENDROUTINE; ROUTINE main; partial = hec0(h<7:0>); partial = partial XOR hec1(h<15:8>); partial = partial XOR hec2(h<23:16>); partial = partial XOR hec3(h<31:24>); r = partial XOR c; ENDROUTINE; ENDMODEL;