source: ReferenceDesigns/w3_802.11/sysgen/wlan_phy_rx_pmd/mcode_blocks/rx_fft_ctrl_fsm.m

Last change on this file was 4282, checked in by murphpo, 9 years ago

re-worded comments using word "punt"

File size: 2.4 KB
Line 
1function [fft_load, fft_lts_load, samp_skip_mode] = rx_fft_ctrl_fsm(lts_sync, fft_load_done, pkt_done)
2
3persistent fsm_state, fsm_state=xl_state(0, {xlUnsigned, 3, 0});
4
5%Inputs:
6% lts_sync: Successful correlation of second LTS (must be 1 cycle)
7% fft_load_done: Last FFT input sample loaded
8% pkt_done: Resets state (last FFT is performed, pkt Rx ends early, etc.)
9
10%Outputs:
11% fft_load: Start FFT load operation
12% samp_skip_mode: Selection of number of samples to skip post FFT load
13%  0: Skip 0 samples (first LTS)
14%  1: Skip CP_LEN samples (second LTS and all DATA symbols)
15
16%States:
17% ST_LTS_WAIT: Waiting for LTS sync (this is the idle/reset state)
18% ST_LTS_LOAD1: Load first LTS into FFT
19% ST_LTS_LOAD2: Load second LTS into FFT
20% ST_DATA_LOAD: Load DATA symbols into FFT
21% ST_DATA_DONE: Finished loading DATA symbols (returns to LTS_WAIT)
22
23ST_LTS_WAIT = 0;
24ST_LTS_LOAD1 = 1;
25ST_LTS_LOAD2 = 2;
26ST_DATA_LOAD = 3;
27ST_DATA_DONE = 4;
28
29switch double(fsm_state)
30   
31    case ST_LTS_WAIT
32        fft_load = 0;
33        samp_skip_mode = 0;
34        fft_lts_load = 0;
35       
36        if( (pkt_done==1) )
37            fsm_state = ST_LTS_WAIT;
38        elseif( (lts_sync==1) )
39            fsm_state = ST_LTS_LOAD1;
40        else
41            fsm_state = ST_LTS_WAIT;
42        end
43
44    case ST_LTS_LOAD1
45        fft_load = 0;%1;
46        fft_lts_load = 1;
47        samp_skip_mode = 0;
48
49        if( (pkt_done==1) )
50            fsm_state = ST_LTS_WAIT;
51        elseif( (fft_load_done==1) )
52            fsm_state = ST_LTS_LOAD2;
53        else
54            fsm_state = ST_LTS_LOAD1;
55        end
56
57    case ST_LTS_LOAD2
58        fft_load = 0;%1;
59        fft_lts_load = 1;
60        samp_skip_mode = 1;
61
62        if( (pkt_done==1) )
63            fsm_state = ST_LTS_WAIT;
64        elseif( (fft_load_done==1) )
65            fsm_state = ST_DATA_LOAD;
66        else
67            fsm_state = ST_LTS_LOAD2;
68        end
69
70    case ST_DATA_LOAD
71        fft_load = 1;
72        fft_lts_load = 0;
73        samp_skip_mode = 1;
74
75        if( (pkt_done==1) )
76            fsm_state = ST_DATA_DONE;
77        else
78            fsm_state = ST_DATA_LOAD;
79        end
80
81    case ST_DATA_DONE
82        fft_load = 0;
83        fft_lts_load = 0;
84        samp_skip_mode = 0;
85        fsm_state = ST_LTS_WAIT;
86       
87    otherwise
88        fft_load = 0;
89        fft_lts_load = 0;
90        samp_skip_mode = 0;
91        fsm_state = ST_LTS_WAIT;
92
93end %end switch
94       
95end %end function
96
Note: See TracBrowser for help on using the repository browser.