OpenCores
URL https://opencores.org/ocsvn/cic_core_2/cic_core_2/trunk

Subversion Repositories cic_core_2

[/] [cic_core_2/] [trunk/] [rtl/] [verilog/] [cic_d.sv] - Diff between revs 6 and 7

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 6 Rev 7
Line 25... Line 25...
/*********************************************************************************************/
/*********************************************************************************************/
 
 
genvar  i;
genvar  i;
generate
generate
        for (i = 0; i < CIC_N; i = i + 1) begin : int_stage
        for (i = 0; i < CIC_N; i = i + 1) begin : int_stage
                localparam B_j          = B(i + 1, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
                localparam B_jm1        = B_calc(i    , CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
                localparam B_jm1        = B(i    , CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
                localparam B_j          = B_calc(i + 1, CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
                localparam logic [127:0 ] F_sq_j        = F_sq(i , CIC_R, CIC_M, CIC_N);
                localparam F_sq_j = 0;
                localparam dw_cur = B_max - B_j + 1;
                localparam idw_cur = B_max - B_jm1 + 1;
                localparam odw_cur = dw_cur;
                localparam odw_cur = B_max - B_j   + 1;
                localparam B_dw_prev = (i != 0) ? B_max - B_jm1 + 1 : 0;
                localparam B_dw_prev = (i != 0) ? B_max - B_jm1 + 1 : 0;
                localparam odw_prev = (B_dw_prev > 1) ? B_dw_prev : 2;  /// icarus stops with error if in [a -: b] a is <= 0
 
                localparam idw_cur = dw_cur > 0 ? dw_cur : 1;
 
                wire signed [idw_cur - 1 : 0] int_in;
                wire signed [idw_cur - 1 : 0] int_in;
                if ( i == 0 )   assign int_in = inp_samp_data;
                if ( i == 0 )   assign int_in = inp_samp_data;
                        else            assign int_in = int_stage[i - 1].int_out[odw_prev - 1 -: idw_cur];
                        else            assign int_in = int_stage[i - 1].int_out;
 
                wire signed [idw_cur - 1 : 0] int_inst_out;
                wire signed [odw_cur - 1 : 0] int_out;
                wire signed [odw_cur - 1 : 0] int_out;
 
                assign int_out = int_inst_out[idw_cur - 1 -: odw_cur];
                integrator #(
                integrator #(
                                idw_cur,
                                idw_cur,
                                odw_cur
                                idw_cur
                        )
                        )
                        int_inst(
                        int_inst(
                                .clk                    (clk),
                                .clk                    (clk),
                                .reset_n                (reset_n),
                                .reset_n                (reset_n),
                                .clear                  (clear) ,
                                .clear                  (clear) ,
                                .inp_samp_data  (int_in),
                                .inp_samp_data  (int_in),
                                .inp_samp_str   (inp_samp_str),
                                .inp_samp_str   (inp_samp_str),
                                .out_samp_data  (int_out)
                                .out_samp_data  (int_inst_out)
                                );
                                );
                initial begin
                initial begin
                        //$display("i:%d integ dw %d         B(%d, %d, %d, %d, %d, %d)=%d, F_sq=%d", i, odw_cur, i + 1, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW, B_j, F_sq_j);
                        //$display("i:%d integ idw=%2d odw=%2d  B(%2d, %3d, %2d, %2d, %2d, %2d)=%2d, Bj-1=%2d, F_sq=%8d", i, idw_cur, odw_cur, i + 1, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW, B_j, B_jm1, F_sq_j);
                        $display("i:%d integ dw %d ", i, odw_cur);
                        $display("i:%d integ idw=%d ", i, idw_cur);
                end
                end
        end
        end
endgenerate
endgenerate
/*********************************************************************************************/
/*********************************************************************************************/
localparam B_m = B(CIC_N, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
localparam B_m = B_calc(CIC_N, CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
localparam ds_dw = B_max - B_m + 1;
localparam ds_dw = B_max - B_m + 1;
wire    signed [ds_dw - 1 : 0]  ds_out_samp_data;
wire    signed [ds_dw - 1 : 0]  ds_out_samp_data;
wire                                                    ds_out_samp_str;
wire                                                    ds_out_samp_str;
/*********************************************************************************************/
/*********************************************************************************************/
initial begin
initial begin
Line 97... Line 97...
        if (SMALL_FOOTPRINT == 0)       assign summ_rdy_str = '0;
        if (SMALL_FOOTPRINT == 0)       assign summ_rdy_str = '0;
        else                                            assign summ_rdy_str = comb_inp_str_d[CIC_N];
        else                                            assign summ_rdy_str = comb_inp_str_d[CIC_N];
 
 
 
 
        for (j = 0; j < CIC_N; j = j + 1) begin : comb_stage
        for (j = 0; j < CIC_N; j = j + 1) begin : comb_stage
                localparam j_cic                = CIC_N + j + 1;
                localparam B_m_j_m1             =    B_calc(CIC_N + j    ,      CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
                localparam B_m_j                =    B(            j_cic,       CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
                localparam B_m_j                =    B_calc(CIC_N + j + 1,      CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
                localparam F_sq_j               = F_sq(            j_cic,       CIC_R, CIC_M, CIC_N);
                localparam F_sq_j               = 1;
                localparam B_m_j_m1             =    B(    CIC_N + j,   CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
                localparam idw_cur = B_max - B_m_j_m1 + 1;
                localparam F_sq_2Np1    = F_sq(2 * CIC_N + 1,   CIC_R, CIC_M, CIC_N);
                localparam odw_cur = B_max - B_m_j + 1;
                localparam idw_cur = B_max - B_m_j + 1;
 
                localparam odw_cur = idw_cur;
 
                localparam odw_prev = (j != 0) ? B_max - B_m_j_m1 + 1 : 0;
 
                wire signed [idw_cur - 1 : 0] comb_in;
                wire signed [idw_cur - 1 : 0] comb_in;
 
                wire signed [idw_cur - 1 : 0] comb_inst_out;
                wire signed [odw_cur - 1 : 0] comb_out;
                wire signed [odw_cur - 1 : 0] comb_out;
                wire comb_dv;
                wire comb_dv;
                if (j == 0)     assign comb_in = ds_out_samp_data[ds_dw - 1 -: idw_cur];
                if (j == 0)     assign comb_in = ds_out_samp_data;
                        else    assign comb_in = comb_stage[j - 1].comb_out[odw_prev - 1 -: idw_cur];
                        else    assign comb_in = comb_stage[j - 1].comb_out;
 
                assign comb_out = comb_inst_out[idw_cur - 1 -: odw_cur];
                comb #(
                comb #(
                                .SAMP_WIDTH             (idw_cur),
                                .SAMP_WIDTH             (idw_cur),
                                .CIC_M                  (CIC_M),
                                .CIC_M                  (CIC_M),
                                .SMALL_FOOTPRINT(SMALL_FOOTPRINT)
                                .SMALL_FOOTPRINT(SMALL_FOOTPRINT)
                        )
                        )
Line 123... Line 122...
                                .clear                  (clear),
                                .clear                  (clear),
                                .samp_inp_str   (ds_out_samp_str),
                                .samp_inp_str   (ds_out_samp_str),
                                .samp_inp_data  (comb_in),
                                .samp_inp_data  (comb_in),
                                .summ_rdy_str   (summ_rdy_str),
                                .summ_rdy_str   (summ_rdy_str),
                                .samp_out_str   (comb_dv),
                                .samp_out_str   (comb_dv),
                                .samp_out_data  (comb_out)
                                .samp_out_data  (comb_inst_out)
                                );
                                );
                if (SMALL_FOOTPRINT == 0)       assign comb_chain_out_str = comb_stage[CIC_N - 1].comb_dv;
                if (SMALL_FOOTPRINT == 0)       assign comb_chain_out_str = comb_stage[CIC_N - 1].comb_dv;
                else                                            assign comb_chain_out_str = comb_inp_str_d[CIC_N - 1];
                else                                            assign comb_chain_out_str = comb_inp_str_d[CIC_N - 1];
                initial begin
                initial begin
                        //$display("i:%d  comb dw %d inp comb_out[%2d -: %2d]; B(%2d, %1d, %1d, %1d, %1d, %1d)=%2d, ln(F_sq)=%4d, F_sq=%8d", j, odw_cur, odw_prev - 1, idw_cur, CIC_N + j + 1, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW, B_m_j, $ln(F_sq_j), F_sq_j);
                        //$display("i:%d  comb idw=%2d odw=%2d  B(%2d, %3d, %2d, %2d, %2d, %2d)=%2d, ln(F_sq)=%4d, F_sq=%8d", j, idw_cur, odw_cur, CIC_N + j + 1, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW, B_m_j, $ln(F_sq_j), F_sq_j);
                        $display("i:%d  comb dw %d", j, odw_cur);
                        //if (j != 0) $display("odw_prev=%2d, comb_stage[j - 1].odw_cur=%2d", odw_prev, comb_stage[j - 1].odw_cur);
 
                        $display("i:%d  comb idw=%d", j, idw_cur);
                end
                end
        end
        end
endgenerate
endgenerate
/*********************************************************************************************/
/*********************************************************************************************/
localparam dw_out = B_max - B(2 * CIC_N, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW) + 1;
localparam dw_out = B_max - B_calc(2 * CIC_N, CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW) + 1;
reg             signed [OUT_DW-1:0]     comb_out_samp_data_reg;
reg             signed [OUT_DW-1:0]     comb_out_samp_data_reg;
reg                                                     comb_out_samp_str_reg;
reg                                                     comb_out_samp_str_reg;
 
 
always @(negedge reset_n or posedge clk)
always @(negedge reset_n or posedge clk)
begin
begin
Line 187... Line 187...
                h_f0_x_mul = x_multiplier * h_f0_pre / 2**(B_2Np1 + 1);
                h_f0_x_mul = x_multiplier * h_f0_pre / 2**(B_2Np1 + 1);
        end
        end
        $display("CIC inp_dw   %d", INP_DW);
        $display("CIC inp_dw   %d", INP_DW);
        $display("CIC out_dw   %d", OUT_DW);
        $display("CIC out_dw   %d", OUT_DW);
        $display("CIC B_max    %d", B_max);
        $display("CIC B_max    %d", B_max);
 
        $display("CIC B_out    %d", dw_out);
        $display("CIC B_2Np1   %d", B_2Np1);
        $display("CIC B_2Np1   %d", B_2Np1);
        $display("CIC h(f=0)   %1d.%1d", h_f0_x_mul / x_multiplier, h_f0_x_mul % x_multiplier);
        $display("CIC h(f=0)   %1d.%1d", h_f0_x_mul / x_multiplier, h_f0_x_mul % x_multiplier);
        $display(" clog2_l((r*m)**n)  %d", clog2_l((CIC_R*CIC_M)**CIC_N));
        $display(" clog2_l((r*m)**n)  %d", clog2_l((CIC_R*CIC_M)**CIC_N));
        tot_registers = 0;
        tot_registers = 0;
        for (j = 1; j < 2 * CIC_N + 2; j = j + 1) begin : check_Bj
        for (j = 1; j < 2 * CIC_N + 2; j = j + 1) begin : check_Bj
                F_sq_curr = F_sq(j, CIC_R, CIC_M, CIC_N);
                F_sq_curr = F_sq_calc(j, CIC_N, CIC_R, CIC_M);
                B_j = B(j, CIC_R, CIC_M, CIC_N, INP_DW, OUT_DW);
                B_j = B_calc(j, CIC_N, CIC_R, CIC_M, INP_DW, OUT_DW);
                dw_j = B_max - B_j + 1;
                dw_j = B_max - B_j + 1;
                tot_registers = tot_registers + dw_j;
                tot_registers = tot_registers + dw_j;
        end
        end
        $display("CIC total registers %2d", tot_registers);
        $display("CIC total registers %2d", tot_registers);
endtask
endtask
 
 
 
 
generate
generate
        initial begin : initial_print_parameters
        initial begin : initial_print_parameters
        if (0) begin
        if (1) begin
                print_parameters_nice;
                print_parameters_nice;
        end
        end
 
 
        end
        end
        if (0) begin
        if (0) begin

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.