123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # mach: bfin
- // GENERIC PN SEQUENCE GENERATOR
- // Linear Feedback Shift Register
- // -------------------------------
- // This solution implements an LFSR by applying an XOR reduction
- // function to the 40 bit accumulator, XORing the contents of the
- // CC bit, shifting by one the accumulator, and inserting the
- // resulting bit on the open bit slot.
- // CC --> ----- XOR--------------------------
- // | | | | | |
- // | | | | | |
- // +------------------------------+ v
- // | b0 b1 b2 b3 b38 b39 | in <-- by one
- // +------------------------------+
- // after:
- // +------------------------------+
- // | b1 b2 b3 b38 b39 in |
- // +------------------------------+
- // The program shown here is a PN sequence generator, and hence
- // does not take any input other than the initial state. However,
- // in order to accept an input, one simply needs to rotate the
- // input sequence via CC prior to applying the XOR reduction.
- .include "testutils.inc"
- start
- loadsym P1, output;
- init_r_regs 0;
- ASTAT = R0;
- // load Polynomial into A1
- A1 = A0 = 0;
- R0.L = 0x1cd4;
- R0.H = 0xab18;
- A1.w = R0;
- R0.L = 0x008d;
- A1.x = R0.L;
- // load InitState into A0
- R0.L = 0x0001;
- R0.H = 0x0000;
- A0.w = R0;
- R0.L = 0x0000;
- A0.x = R0.L;
- P4 = 4;
- LSETUP ( l$0 , l$0end ) LC0 = P4;
- l$0: // **** START l-LOOP *****
- P4 = 32;
- LSETUP ( m$1 , m$1 ) LC1 = P4; // **** START m-LOOP *****
- m$1:
- A0 = BXORSHIFT( A0 , A1, CC );
- // store 16 bits of outdata RL1
- R1 = A0.w;
- l$0end:
- [ P1 ++ ] = R1;
- // Check results
- loadsym I2, output;
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x5adf );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x2fc9 );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0xbd91 );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x5520 );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x80d5 );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x7fef );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x34d1 );
- R0.L = W [ I2 ++ ]; DBGA ( R0.L , 0x915c );
- pass
- .data;
- output:
- .dw 0x0000
- .dw 0x0000
- .dw 0x0000
- .dw 0x0000
|