Changeset 100


Ignore:
Timestamp:
Mar 12, 2010, 11:58:29 AM (14 years ago)
Author:
demin
Message:

multiple fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MultiChannelUSB/analyser.v

    r90 r100  
    22        (
    33                input   wire                    clock, frame, reset,
    4                 input   wire    [12:0]  cfg_data,
     4                input   wire    [24:0]  cfg_data,
    55                input   wire    [1:0]   uwt_flag,
    66                input   wire    [11:0]  uwt_data,
     7                output  wire                    ana_dead,
    78                output  wire                    ana_good,
    89                output  wire    [11:0]  ana_data,
     
    1011        );
    1112
    12         reg                             state_reg, state_next;
     13        reg             [2:0]   state_reg, state_next;
    1314        reg             [4:0]   counter_reg, counter_next;
     15        reg                             dead_reg, dead_next;
    1416        reg                             good_reg, good_next;
    1517        reg             [11:0]  data_reg, data_next;
     18
     19        reg             [19:0]  sample_reg, sample_next;
    1620
    1721        reg             [19:0]  buffer_reg [31:0];
    1822        reg             [19:0]  buffer_next [31:0];
    1923
    20         wire    [19:0]  sample = {8'd0, uwt_data};
    2124        wire    [11:0]  baseline = buffer_reg[31][16:5];
    2225        wire                    counter_max = (&counter_reg);
     
    2831                if (reset)
    2932                begin
    30                         state_reg <= 1'b0;
     33                        state_reg <= 3'd0;
    3134                        counter_reg <= 5'd0;
     35                        sample_reg = 20'd0;
     36                        dead_reg <= 1'b0;
    3237                        good_reg <= 1'b0;
    3338                        data_reg <= 12'd0;
    34                         for(i = 0; i <= 31; i = i + 1)
     39
     40                        for (i = 0; i <= 31; i = i + 1)
    3541                        begin
    3642                                buffer_reg[i] <= 20'hfffff;
     
    4147                        state_reg <= state_next;
    4248                        counter_reg <= counter_next;
     49                        sample_reg <= sample_next;
     50                        dead_reg <= dead_next;
    4351                        good_reg <= good_next;
    4452                        data_reg <= data_next;
    4553
    46                         for(i = 0; i <= 31; i = i + 1)
     54                        for (i = 0; i <= 31; i = i + 1)
    4755                        begin
    4856                                buffer_reg[i] <= buffer_next[i];
     
    5563                state_next = state_reg;
    5664                counter_next = counter_reg;
     65                sample_next = sample_reg;
     66                dead_next = dead_reg;
    5767                good_next = good_reg;
    5868                data_next = data_reg;
    5969               
    60                 for(i = 0; i <= 31; i = i + 1)
     70                for (i = 0; i <= 31; i = i + 1)
    6171                begin
    6272                        buffer_next[i] = buffer_reg[i];
     
    7181                                        if (counter_max)
    7282                                        begin
    73                                                 state_next = 1'b1;
     83                                                state_next = 3'd1;
    7484                                        end
    7585                end
    7686                        end
    7787
    78                         1:
     88                        1: // skip first 32 baseline samples
     89                        begin
     90                                if (frame)
     91                                begin
     92                                        for (i = 0; i < 31; i = i + 1)
     93                                        begin
     94                                                buffer_next[i+1] = buffer_reg[i] + {8'd0, uwt_data};
     95                                        end
     96                                        buffer_next[0] = {8'd0, uwt_data};
     97
     98                                        counter_next = counter_reg + 5'd1;
     99                                        if (counter_max)
     100                                        begin
     101                                                state_next = 3'd2;
     102                                        end
     103                end
     104                        end
     105
     106                        2:
    79107                        begin
    80108                                if (frame)
    81109                                begin
    82110
    83                                         if (cfg_data[12])
     111                                        if (cfg_data[24])
    84112                                        begin
    85113                                                if (uwt_data > baseline)
     
    94122                                        else
    95123                                        begin
    96                                                 if (uwt_data > cfg_data[11:0])
     124                                                if (uwt_data > cfg_data[23:12])
    97125                                                begin
    98                                                         data_next = uwt_data - cfg_data[11:0];
     126                                                        data_next = uwt_data - cfg_data[23:12];
    99127                                                end
    100128                                                else
     
    103131                                                end
    104132                                        end
     133       
     134                                        sample_next = {8'd0, uwt_data};
    105135
    106        
    107                                         for(i = 0; i < 31; i = i + 1)
     136                                        dead_next = 1'b1;
     137                                        good_next = 1'b0;
     138
     139                                        state_next = 3'd3;
     140                                end
     141                        end
     142                       
     143                        3:
     144                        begin
     145
     146                                // if (sample - baseline < threshold)
     147                                if (data_reg < cfg_data[11:0])
     148                                begin
     149                                        for (i = 0; i < 31; i = i + 1)
    108150                                        begin
    109                                                 buffer_next[i+1] = buffer_reg[i] + sample;
     151                                                buffer_next[i+1] = buffer_reg[i] + sample_reg;
    110152                                        end
    111                                         buffer_next[0] = sample;
    112        
    113                                         good_next = uwt_flag[0] & counter_max;
     153                                        buffer_next[0] = sample_reg;
     154                                        dead_next = 1'b0;
     155                                end
    114156
    115                                         // skip first 32 baseline samples
    116                                         // skip 32 samples after peak
    117                                         if (counter_max)
     157                                state_next = 3'd2;
     158
     159                                // skip 32 samples after peak
     160                                if (counter_max)
     161                                begin
     162                                        if (uwt_flag[0])
    118163                                        begin
    119                                                 if (uwt_flag[0])
    120                                                 begin
    121                                                         counter_next = 5'd0;
    122                                                 end
    123                                         end
    124                                         else
    125                                         begin
    126                                                 counter_next = counter_reg + 5'd1;
     164                                                counter_next = 5'd0;
     165                                                state_next = 3'd4;
    127166                                        end
    128167                                end
     168                                else
     169                                begin
     170                                        counter_next = counter_reg + 5'd1;
     171                                end     
    129172                        end
     173
     174                        4:
     175                        begin
     176                                good_next = dead_reg;
     177                                state_next = 2'd2;
     178                        end
    130179                endcase
    131180        end
    132181
     182        assign ana_dead = dead_reg;
    133183        assign ana_good = good_reg;
    134184        assign ana_data = data_reg;
Note: See TracChangeset for help on using the changeset viewer.