home *** CD-ROM | disk | FTP | other *** search
- .subckt $$pseudo_random CLOCK RAND_OUT
- A$U2 [U1_D13 U1_D14] U2_OUT HC86D
- A$U3 U2_OUT RAND_OUT HC04D
- A$U1 [CLOCK RAND_OUT] [U1_D0 U1_D1 U1_D2 U1_D3 U1_D4 U1_D5 U1_D6 U1_D7 U1_D8 U1_D9 U1_D10 U1_D11 U1_D12 U1_D13 U1_D14] $$ShiftU1
- .model $$ShiftU1 d_logic_block file=$$shiftU1 user=[10n]
- .file $$shiftU1
- PORT (DELAY=1e-12) output out[0:31] ;
- EDGE (CLOCK=in[0], DELAY=USER[0]) shift ;
- shift = shift<<1 | in[1] ;
- output=shift ;
- .endf
-
- .ends
-
- .keep /subs
-
- .model Manch_enc d_logic_block file = manchenc
- .file manchenc
- EDGE (clock=in[1], WIDTH=1) bit1 ;
- EDGE (clock=in[1], WIDTH=1) bit2 ;
- bit1 = !bit1 & !bit2 | bit1 & !bit2 & in[0] | !bit1 & bit2 & in[0] ;
- bit2 = in[0] ;
- out[0] = bit1 ;
- .endf
-
- .model manchester_decoder d_logic_block file = manch_dec
-
- .file manch_dec
- * Manchester decoder
-
- PORT count_d out[0:5];
- PORT st_d out[6:9]; // state machine
-
- PORT data in[0];
-
- EDGE (CLOCK=in[1], WIDTH=6) count;
- EDGE (CLOCK=in[1], WIDTH=1) shift0;
- EDGE (CLOCK=in[1], WIDTH=1) shift1;
- EDGE (CLOCK=in[2], WIDTH=4) state;
-
- * state machine
- READONLY state_0[16] = 6 0 0 2 10 4 10 6 14 8 4 10 0 12 8 14;
- READONLY state_1[16] = 1 3 3 5 5 3 7 9 9 7 11 13 13 11 15 3;
-
- shift0 = data;
- shift1 = shift0;
-
- trig = shift0 ^ shift1;
-
- hold = (count>=0 && count<=15 || count>=32 && count<=47) && trig;
- skip = (count>=16 && count<=31 || count>=48 && count<=63) && trig;
-
- count = (hold ? count : skip ? count+2 : count+1);
- state = data ? state_1[state] : state_0[state];
-
-
- count_d = count;
- st_d = state ;
- .endf
-
-