Ignore:
Timestamp:
Jan 27, 2014, 3:49:22 PM (11 years ago)
Author:
demin
Message:

fix classifier

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/3DEES/classifier.v

    r183 r184  
    55        (
    66                input   wire                                    clock, frame, reset,
    7                 input   wire    [14*width-1:0]  cfg_data,
     7                input   wire    [18*width-1:0]  cfg_data,
    88                input   wire    [6*width-1:0]   inp_data, // {D3, D2, D1, S2, S1_S, S1_F}
    99                input   wire    [5:0]                   inp_flag,
    10                 output  wire    [5:0]                   out_data,
     10                output  wire    [6:0]                   out_data,
    1111                output  wire                                    out_flag
    1212        );
    1313
    1414        reg                                     out_flag_reg [2:0], out_flag_next [2:0];
    15         reg             [5:0]           out_data_reg [2:0], out_data_next [2:0];
     15        reg             [6:0]           out_data_reg [2:0], out_data_next [2:0];
    1616        reg             [5:0]           inp_flag_reg, inp_flag_next;
    1717        reg             [width-1:0]     inp_data_reg [5:0], inp_data_next [5:0];
     
    2222        wire    [width-1:0]     inp_data_wire [5:0];
    2323        wire    [3:0]           int_pipe_wire [5:0];
    24         wire    [13:0]          int_comp_wire;
     24        wire    [15:0]          int_comp_wire;
    2525
    2626        integer i;
     
    3535
    3636        generate
    37                 assign int_comp_wire[0] = (inp_data_reg[0] > cfg_data[width-1:0]);
    38                 assign int_comp_wire[1] = (inp_data_reg[1] > cfg_data[2*width-1:width]);
     37                assign int_comp_wire[0] = inp_flag_reg[0] & (inp_data_reg[0] < cfg_data[width-1:0]);
     38                assign int_comp_wire[1] = inp_flag_reg[0] & (inp_data_reg[0] > cfg_data[2*width-1:1*width]) & (inp_data_reg[0] < cfg_data[3*width-1:2*width]);
     39
     40                assign int_comp_wire[2] = inp_flag_reg[1] & (inp_data_reg[1] < cfg_data[4*width-1:3*width]);
     41                assign int_comp_wire[3] = inp_flag_reg[1] & (inp_data_reg[1] > cfg_data[5*width-1:4*width]) & (inp_data_reg[1] < cfg_data[6*width-1:5*width]);
     42
    3943                for (j = 0; j < 4; j = j + 1)
    4044                begin : CLASSIFIER_COMPARTORS
    41                         assign int_comp_wire[j*3+0+2] = (inp_data_reg[j+2] > cfg_data[(j*3+0+2)*width+width-1:(j*3+0+2)*width]);
    42                         assign int_comp_wire[j*3+1+2] = (inp_data_reg[j+2] > cfg_data[(j*3+1+2)*width+width-1:(j*3+1+2)*width]);
    43                         assign int_comp_wire[j*3+2+2] = (inp_data_reg[j+2] > cfg_data[(j*3+2+2)*width+width-1:(j*3+2+2)*width]);
     45                        assign int_comp_wire[j*3+0+4] = (inp_data_reg[j+2] > cfg_data[(j*3+0+6)*width+width-1:(j*3+0+6)*width]);
     46                        assign int_comp_wire[j*3+1+4] = (inp_data_reg[j+2] > cfg_data[(j*3+1+6)*width+width-1:(j*3+1+6)*width]);
     47                        assign int_comp_wire[j*3+2+4] = (inp_data_reg[j+2] > cfg_data[(j*3+2+6)*width+width-1:(j*3+2+6)*width]);
    4448                end
    4549        endgenerate
     
    168172                                out_flag_next[2] = out_flag_reg[1] & (out_data_reg[1] > out_data_reg[0]);
    169173
    170                                 int_pipe_next[0] = {int_pipe_reg[0][14:0], int_comp_wire[0]};
    171                                 int_pipe_next[1] = {int_pipe_reg[1][14:0], int_comp_wire[1]};
    172                                 for (i = 2; i < 8; i = i + 1)
     174                                for (i = 0; i < 4; i = i + 1)
     175                                begin
     176                                        int_pipe_next[i] = {int_pipe_reg[i][14:0], int_comp_wire[i]};
     177                                end
     178                                for (i = 4; i < 8; i = i + 1)
    173179                                begin
    174180                                        int_pipe_next[i] = {int_pipe_reg[i][14:0], inp_flag_reg[i-2]};
     
    176182                                for (i = 8; i < 20; i = i + 1)
    177183                                begin
    178                                         int_pipe_next[i] = {int_pipe_reg[i][14:0], int_comp_wire[i-6]};
     184                                        int_pipe_next[i] = {int_pipe_reg[i][14:0], int_comp_wire[i-4]};
    179185                                end
    180186
     
    182188                                begin
    183189                                        case (int_pipe_wire[i+2][2:0])
    184                                                 3'b000: int_data_next[i] = 2'd0;
    185                                                 3'b001: int_data_next[i] = 2'd1;
    186                                                 3'b011: int_data_next[i] = 2'd2;
    187                                                 3'b111: int_data_next[i] = 2'd3;
     190                                                3'b000: int_data_next[i] = 2'b00;
     191                                                3'b001: int_data_next[i] = 2'b01;
     192                                                3'b011: int_data_next[i] = 2'b10;
     193                                                3'b111: int_data_next[i] = 2'b11;
    188194                                                default: int_data_next[i] = 2'd0;
    189195                                        endcase
    190196                                end
    191197
    192                                 int_temp_next[0] = {int_pipe_wire[1], int_pipe_wire[0][3]^int_pipe_wire[0][2]};
     198                                int_temp_next[0] = {int_pipe_wire[1], ^int_pipe_wire[0]};
    193199                                int_temp_next[1] = {1'b0, int_pipe_wire[0]};
    194200
    195201                                case (int_temp_reg[0][4:0])
    196                                         5'b00011: out_data_next[0][3:0] = {2'd0, int_data_next[0]};
    197                                         5'b00111: out_data_next[0][3:0] = {2'd1, int_data_next[1]};
    198                                         5'b01111: out_data_next[0][3:0] = {2'd2, int_data_next[2]};
    199                                         5'b11111: out_data_next[0][3:0] = {2'd3, int_data_next[3]};
     202                                        5'b00011: out_data_next[0][3:0] = {2'b00, int_data_next[0]};
     203                                        5'b00111: out_data_next[0][3:0] = {2'b01, int_data_next[1]};
     204                                        5'b01111: out_data_next[0][3:0] = {2'b10, int_data_next[2]};
     205                                        5'b11111: out_data_next[0][3:0] = {2'b11, int_data_next[3]};
    200206                                        default: out_flag_next[0] = 1'b0;
    201207                                endcase
     
    203209                                case (int_temp_reg[1][3:0])
    204210                                        // S1_F, electron
    205                                         4'b0100: out_data_next[0][5:4] = 2'd0;
     211                                        4'b0001: out_data_next[0][6:4] = 3'b100;
    206212
    207213                                        // S1_F, proton
    208                                         4'b0101: out_data_next[0][5:4] = 2'd1;
     214                                        4'b0010: out_data_next[0][6:4] = 3'b101;
    209215
    210216                                        // S1_S, electron
    211                                         4'b1000: out_data_next[0][5:4] = 2'd2;
     217                                        4'b0100: out_data_next[0][6:4] = 3'b110;
    212218
    213219                                        // S1_S, proton
    214                                         4'b1010: out_data_next[0][5:4] = 2'd3;
     220                                        4'b1000: out_data_next[0][6:4] = 3'b111;
    215221
    216222                                        default: out_flag_next[0] = 1'b0;
Note: See TracChangeset for help on using the changeset viewer.