Ignore:
Timestamp:
Feb 21, 2011, 12:33:56 AM (14 years ago)
Author:
demin
Message:

first more or less working version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/MultiChannelUSB/deconv.v

    r120 r123  
    22        #(
    33                parameter       size    =       1, // number of channels
    4                 parameter       width   =       24 // bit width of the input data
     4                parameter       shift   =       24, // right shift of the result
     5                parameter       width   =       27, // bit width of the input data
     6                parameter       widthr  =       13 // bit width of the output data
    57        )
    68        (
     
    911                input   wire    [3*size*8-1:0]          amp_data,
    1012                input   wire    [3*size*16-1:0]         tau_data,
    11                 input   wire    [3*size*6-1:0]          cls_data,
    1213                input   wire    [3*size*width-1:0]      inp_data,
    1314                output  wire    [3*size*widthr-1:0]     out_data
     
    1617        localparam      width1  =       width + 1;
    1718        localparam      width2  =       width + 6 + 1;
    18         localparam      widthr  =       width + 16 + 3;
     19        localparam      width3  =       width + 16 + 3;
    1920
    2021        reg                                                     int_wren_reg, int_wren_next;
     
    3031        wire    [size*widthr-1:0]       out_data_wire;
    3132
    32         wire    [size*widthr-1:0]       add_data_wire;
    33 
    34         wire    [size*widthr-1:0]       mul_data_wire [1:0];
     33        wire    [size*width3-1:0]       add_data_wire;
     34
     35        wire    [size*width3-1:0]       mul_data_wire [1:0];
    3536
    3637        reg             [size*width2-1:0]       acc_data_reg [3:0], acc_data_next [3:0];
     
    4748        reg             [size*16-1:0]           tau_data_reg, tau_data_next;
    4849        wire    [size*16-1:0]           tau_data_wire [2:0];
    49 
    50         reg             [size*6-1:0]            cls_data_reg, cls_data_next;
    51         wire    [size*6-1:0]            cls_data_wire [2:0];
    5250
    5351        integer i;
     
    6664                        assign tau_data_wire[1][j*16+16-1:j*16] = tau_data[(3*j+1)*16+16-1:(3*j+1)*16];
    6765                        assign tau_data_wire[2][j*16+16-1:j*16] = tau_data[(3*j+2)*16+16-1:(3*j+2)*16];
    68                         assign cls_data_wire[0][j*6+6-1:j*6] = cls_data[(3*j+0)*6+6-1:(3*j+0)*6];
    69                         assign cls_data_wire[1][j*6+6-1:j*6] = cls_data[(3*j+1)*6+6-1:(3*j+1)*6];
    70                         assign cls_data_wire[2][j*6+6-1:j*6] = cls_data[(3*j+2)*6+6-1:(3*j+2)*6];
    7166                                                                                         
    7267                        lpm_mux #(
     
    119114                                .lpm_widtha(width1),
    120115                                .lpm_widthb(17),
    121                                 .lpm_widthp(widthr)) mult_unit_1 (
     116                                .lpm_widthp(width3)) mult_unit_1 (
    122117                                .clock(clock),
    123118                                .clken(int_wren_reg),
    124119                                .dataa(sub_data_wire[j*width1+width1-1:j*width1]),
    125120                                .datab({1'b0, tau_data_reg[j*16+16-1:j*16]}),
    126                                 .result(mul_data_wire[0][j*widthr+widthr-1:j*widthr]));
     121                                .result(mul_data_wire[0][j*width3+width3-1:j*width3]));
    127122
    128123                        lpm_mult #(
     
    133128                                .lpm_widtha(width2),
    134129                                .lpm_widthb(8),
    135                                 .lpm_widthp(widthr)) mult_unit_2 (
     130                                .lpm_widthp(width3)) mult_unit_2 (
    136131                                .clock(clock),
    137132                                .clken(int_wren_reg),
    138133                                .dataa(acc_data_reg[0][j*width2+width2-1:j*width2]),
    139134                                .datab(amp_data_reg[j*8+8-1:j*8]),
    140                                 .result(mul_data_wire[1][j*widthr+widthr-1:j*widthr]));
     135                                .result(mul_data_wire[1][j*width3+width3-1:j*width3]));
    141136
    142137                        lpm_add_sub     #(
     
    145140                                .lpm_representation("SIGNED"),
    146141                                .lpm_type("LPM_ADD_SUB"),
    147                                 .lpm_width(widthr)) add_unit_2 (
    148                                 .dataa(mul_data_wire[0][j*widthr+widthr-1:j*widthr]),
    149                                 .datab(mul_data_wire[1][j*widthr+widthr-1:j*widthr]),
    150                                 .result(add_data_wire[j*widthr+widthr-1:j*widthr]));
    151 
    152 
    153                         lpm_clshift     #(
    154                                 .lpm_shifttype("LOGICAL"),
    155                                 .lpm_type("LPM_CLSHIFT"),
    156                                 .lpm_width(widthr),
    157                                 .lpm_widthdist(6)) shift_unit_1 (
    158                                 .distance(cls_data_reg[j*6+6-1:j*6]),
    159                                 .direction(1'b1),
    160                                 .data(add_data_wire[j*widthr+widthr-1:j*widthr]),
     142                                .lpm_width(width3)) add_unit_2 (
     143                                .dataa(mul_data_wire[0][j*width3+width3-1:j*width3]),
     144                                .datab(mul_data_wire[1][j*width3+width3-1:j*width3]),
     145                                .result(add_data_wire[j*width3+width3-1:j*width3]));
     146
     147
     148                        lpm_add_sub     #(
     149                                .lpm_direction("ADD"),
     150                                .lpm_hint("ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO"),
     151                                .lpm_representation("UNSIGNED"),
     152                                .lpm_type("LPM_ADD_SUB"),
     153                                .lpm_width(widthr)) add_unit_3 (
     154                                .dataa(add_data_wire[j*width3+shift+widthr-1:j*width3+shift]),
     155                                .datab({{(widthr-1){1'b0}}, add_data_wire[j*width3+shift-1]}),
    161156                                .result(out_data_wire[j*widthr+widthr-1:j*widthr]));
    162157
     
    220215                        amp_data_reg <= 8'd0;
    221216                        tau_data_reg <= 16'd0;
    222                         cls_data_reg <= 6'd0;
    223217                        for(i = 0; i <= 2; i = i + 1)
    224218                        begin
     
    240234                        amp_data_reg <= amp_data_next;
    241235                        tau_data_reg <= tau_data_next;
    242                         cls_data_reg <= cls_data_next;
    243236                        for(i = 0; i <= 2; i = i + 1)
    244237                        begin
     
    262255                amp_data_next = amp_data_reg;
    263256                tau_data_next = tau_data_reg;
    264                 cls_data_next = cls_data_reg;
    265257                for(i = 0; i <= 2; i = i + 1)
    266258                begin
     
    282274                                amp_data_next = 8'd0;
    283275                                tau_data_next = 16'd0;
    284                                 cls_data_next = 6'd0;
    285276                                for(i = 0; i <= 2; i = i + 1)
    286277                                begin
     
    327318                                        tau_data_next = tau_data_wire[0];
    328319                                        amp_data_next = amp_data_wire[0];
    329                                         cls_data_next = cls_data_wire[0];
    330320                                       
    331321                                        int_case_next = 3'd3;
     
    346336                                tau_data_next = tau_data_wire[1];
    347337                                amp_data_next = amp_data_wire[1];
    348                                 cls_data_next = cls_data_wire[1];
    349338
    350339                                // register 1st sum
     
    364353                                tau_data_next = tau_data_wire[2];
    365354                                amp_data_next = amp_data_wire[2];
    366                                 cls_data_next = cls_data_wire[2];
    367355                               
    368356                                // register 2nd sum
Note: See TracChangeset for help on using the changeset viewer.