Changeset 122 for sandbox


Ignore:
Timestamp:
Feb 18, 2011, 12:29:10 AM (14 years ago)
Author:
demin
Message:

add 4th stage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/MultiChannelUSB/cic_filter.v

    r121 r122  
    1212        );
    1313       
    14         localparam      widthr  =       width + 13;
     14        localparam      widthr  =       width + 18;
    1515
    1616        /*
     
    2020
    2121        reg                                                     int_wren_reg, int_wren_next;
     22        reg                                                     int_flag_reg, int_flag_next;
    2223        reg             [1:0]                           int_chan_reg, int_chan_next;
    2324        reg             [2:0]                           int_case_reg, int_case_next;
     
    2728
    2829        reg             [size*widthr-1:0]       acc_data_reg [3:0], acc_data_next [3:0];
    29         reg             [size*widthr-1:0]       int_data_reg [8:0], int_data_next [8:0];
     30        reg             [size*widthr-1:0]       int_data_reg [12:0], int_data_next [12:0];
    3031
    3132        wire    [size*widthr-1:0]       acc_data_wire [3:0], del_data_wire [1:0];
     
    6970
    7071        lpm_mux #(
    71                 .lpm_size(3),
     72                .lpm_size(4),
    7273                .lpm_type("LPM_MUX"),
    7374                .lpm_width(10),
     
    7576                .sel(int_chan_next),
    7677                .data({
     78                        2'd3, int_lfsr_reg[2*6+3:2*6], int_lfsr_reg[6+3:6],
    7779                        2'd2, int_lfsr_reg[2*5+3:2*5], int_lfsr_reg[5+3:5],
    7880                        2'd1, int_lfsr_reg[2*4+3:2*4], int_lfsr_reg[4+3:4],
     
    8587        begin
    8688                        int_wren_reg <= 1'b1;
     89                        int_flag_reg <= 1'b0;
    8790                        int_chan_reg <= 2'd0;
    8891                        int_case_reg <= 3'd0;
     
    9295                                acc_data_reg[i] <= {(size*widthr){1'b0}};
    9396                        end
    94                         for(i = 0; i <= 8; i = i + 1)
     97                        for(i = 0; i <= 12; i = i + 1)
    9598                        begin
    9699                                int_data_reg[i] <= {(size*widthr){1'b0}};
     
    101104                begin
    102105                        int_wren_reg <= int_wren_next;
     106                        int_flag_reg <= int_flag_next;
    103107                        int_chan_reg <= int_chan_next;
    104108                        int_case_reg <= int_case_next;
     
    108112                                acc_data_reg[i] <= acc_data_next[i];
    109113                        end
    110                         for(i = 0; i <= 8; i = i + 1)
     114                        for(i = 0; i <= 12; i = i + 1)
    111115                        begin
    112116                                int_data_reg[i] <= int_data_next[i];
     
    119123        begin
    120124                int_wren_next = int_wren_reg;
     125                int_flag_next = int_flag_reg;
    121126                int_chan_next = int_chan_reg;
    122127                int_case_next = int_case_reg;
     
    126131                        acc_data_next[i] = acc_data_reg[i];
    127132                end
    128                 for(i = 0; i <= 8; i = i + 1)
     133                for(i = 0; i <= 12; i = i + 1)
    129134                begin
    130135                        int_data_next[i] = int_data_reg[i];
     
    142147                                        acc_data_next[i] = {(size*widthr){1'b0}};
    143148                                end
    144                                 for(i = 0; i <= 8; i = i + 1)
     149                                for(i = 0; i <= 12; i = i + 1)
    145150                                begin
    146151                                        int_data_next[i] = {(size*widthr){1'b0}};
     
    155160                                begin
    156161                                        int_wren_next = 1'b0;
     162                                        int_flag_next = 1'b0;
    157163                                        int_chan_next = 2'd0;
    158164                                        int_lfsr_next = 16'h7650;
     
    162168                        2: // frame
    163169                        begin
     170                                int_flag_next = 1'b0;
    164171                                if (frame)
    165172                                begin
     
    179186                                        int_case_next = 3'd3;
    180187                                end
    181 
     188                                if (int_flag_reg) // register 4th sum
     189                                begin
     190                                        // register 4th sum
     191                                        int_data_next[9] = acc_data_wire[1];
     192                                        int_data_next[10] = acc_data_wire[2];
     193                                        int_data_next[11] = acc_data_wire[3];
     194                                end
    182195                        end
    183196                        3:  // 1st sum
     
    204217                        begin
    205218                                int_addr_next = {4'd2, int_lfsr_reg[3:0]};
     219
     220                                // set read addr for 4th pipeline
     221                                int_chan_next = 2'd3;
    206222
    207223                                // prepare registers for 3rd sum       
     
    222238                        5:  // 3rd sum
    223239                        begin                           
    224                                 int_wren_next = 1'b0;
     240                                int_flag_next = 1'b1;
     241
     242                                int_addr_next = {4'd3, int_lfsr_reg[4:1]};
    225243
    226244                                // set read addr for 1st pipeline
    227245                                int_chan_next = 2'd0;
     246
     247                                // prepare registers for 4th sum       
     248                                acc_data_next[0] = int_data_reg[8];
     249                                acc_data_next[1] = int_data_reg[9];
     250                                acc_data_next[2] = int_data_reg[10];
     251                                acc_data_next[3] = int_data_reg[11];
    228252
    229253                                // register 3rd sum
     
    231255                                int_data_next[7] = acc_data_wire[2];
    232256                                int_data_next[8] = acc_data_wire[3];
     257                               
     258                                // register 4th output
     259                                int_data_next[12] = int_data_reg[11];
    233260
    234261                                int_case_next = 3'd2;
     
    241268        end
    242269
    243         assign out_data = int_data_reg[2];
    244         assign out_data2 = int_data_reg[5];
    245         assign out_data3 = int_data_reg[8];
     270        assign out_data = int_data_reg[5];
     271        assign out_data2 = int_data_reg[8];
     272        assign out_data3 = int_data_reg[12];
    246273
    247274endmodule
Note: See TracChangeset for help on using the changeset viewer.