16路超前计算到1G
1.16路62.5M输入,1G 2.使用复数乘法器,并优化为一个复数乘法器使用3个实数乘法器 3.四指数修正
This commit is contained in:
		
							parent
							
								
									6ce1cd456e
								
							
						
					
					
						commit
						db735c9dfc
					
				|  | @ -7,7 +7,7 @@ module  CoefGen #( | |||
| ( | ||||
|  input	 rstn | ||||
| ,input	 clk | ||||
| ,input	 [5:0] vldi   | ||||
| ,input	 [3:0] vldi   | ||||
| ,input      signed [31:0]   a0_re             | ||||
| ,input      signed [31:0]   b0_re             | ||||
| ,input      signed [31:0]   a1_re             | ||||
|  | @ -16,10 +16,14 @@ module  CoefGen #( | |||
| ,input      signed [31:0]   b2_re             | ||||
| ,input      signed [31:0]   a3_re             | ||||
| ,input      signed [31:0]   b3_re             | ||||
| ,input  signed [31:0]   a4_re             | ||||
| ,input  signed [31:0]   b4_re             | ||||
| ,input  signed [31:0]   a5_re             | ||||
| ,input  signed [31:0]   b5_re             | ||||
| ,input      signed [31:0]   a0_im             | ||||
| ,input      signed [31:0]   b0_im             | ||||
| ,input      signed [31:0]   a1_im             | ||||
| ,input      signed [31:0]   b1_im             | ||||
| ,input      signed [31:0]   a2_im             | ||||
| ,input      signed [31:0]   b2_im             | ||||
| ,input      signed [31:0]   a3_im             | ||||
| ,input      signed [31:0]   b3_im             | ||||
| ,output reg signed [31:0]   a_re0 | ||||
| ,output reg signed [31:0]   b_re0 | ||||
| ,output reg signed [31:0]   ab_re0 | ||||
|  | @ -29,7 +33,15 @@ module  CoefGen #( | |||
| ,output reg signed [31:0]   ab_pow5_re0 | ||||
| ,output reg signed [31:0]   ab_pow6_re0 | ||||
| ,output reg signed [31:0]   ab_pow7_re0 | ||||
| ,output reg signed [31:0]   b_pow8_re0 | ||||
| ,output reg signed [31:0]   ab_pow8_re0 | ||||
| ,output reg signed [31:0]   ab_pow9_re0 | ||||
| ,output reg signed [31:0]   ab_powa_re0 | ||||
| ,output reg signed [31:0]   ab_powb_re0 | ||||
| ,output reg signed [31:0]   ab_powc_re0 | ||||
| ,output reg signed [31:0]   ab_powd_re0 | ||||
| ,output reg signed [31:0]   ab_powe_re0 | ||||
| ,output reg signed [31:0]   ab_powf_re0 | ||||
| ,output reg signed [31:0]   b_pow16_re0 | ||||
| ,output reg signed [31:0]   a_re1 | ||||
| ,output reg signed [31:0]   b_re1 | ||||
| ,output reg signed [31:0]   ab_re1 | ||||
|  | @ -39,7 +51,15 @@ module  CoefGen #( | |||
| ,output reg signed [31:0]   ab_pow5_re1 | ||||
| ,output reg signed [31:0]   ab_pow6_re1 | ||||
| ,output reg signed [31:0]   ab_pow7_re1 | ||||
| ,output reg signed [31:0]   b_pow8_re1 | ||||
| ,output reg signed [31:0]   ab_pow8_re1 | ||||
| ,output reg signed [31:0]   ab_pow9_re1 | ||||
| ,output reg signed [31:0]   ab_powa_re1 | ||||
| ,output reg signed [31:0]   ab_powb_re1 | ||||
| ,output reg signed [31:0]   ab_powc_re1 | ||||
| ,output reg signed [31:0]   ab_powd_re1 | ||||
| ,output reg signed [31:0]   ab_powe_re1 | ||||
| ,output reg signed [31:0]   ab_powf_re1 | ||||
| ,output reg signed [31:0]   b_pow16_re1 | ||||
| ,output reg signed [31:0]   a_re2 | ||||
| ,output reg signed [31:0]   b_re2 | ||||
| ,output reg signed [31:0]   ab_re2 | ||||
|  | @ -49,7 +69,15 @@ module  CoefGen #( | |||
| ,output reg signed [31:0]   ab_pow5_re2 | ||||
| ,output reg signed [31:0]   ab_pow6_re2 | ||||
| ,output reg signed [31:0]   ab_pow7_re2 | ||||
| ,output reg signed [31:0]   b_pow8_re2 | ||||
| ,output reg signed [31:0]   ab_pow8_re2 | ||||
| ,output reg signed [31:0]   ab_pow9_re2 | ||||
| ,output reg signed [31:0]   ab_powa_re2 | ||||
| ,output reg signed [31:0]   ab_powb_re2 | ||||
| ,output reg signed [31:0]   ab_powc_re2 | ||||
| ,output reg signed [31:0]   ab_powd_re2 | ||||
| ,output reg signed [31:0]   ab_powe_re2 | ||||
| ,output reg signed [31:0]   ab_powf_re2 | ||||
| ,output reg signed [31:0]   b_pow16_re2 | ||||
| ,output reg signed [31:0]   a_re3 | ||||
| ,output reg signed [31:0]   b_re3 | ||||
| ,output reg signed [31:0]   ab_re3 | ||||
|  | @ -59,27 +87,88 @@ module  CoefGen #( | |||
| ,output reg signed [31:0]   ab_pow5_re3 | ||||
| ,output reg signed [31:0]   ab_pow6_re3 | ||||
| ,output reg signed [31:0]   ab_pow7_re3 | ||||
| ,output reg signed [31:0]   b_pow8_re3 | ||||
| ,output reg signed [31:0]   a_re4 | ||||
| ,output reg signed [31:0]   b_re4 | ||||
| ,output reg signed [31:0]   ab_re4 | ||||
| ,output reg signed [31:0]   abb_re4 | ||||
| ,output reg signed [31:0]   ab_pow3_re4 | ||||
| ,output reg signed [31:0]   ab_pow4_re4 | ||||
| ,output reg signed [31:0]   ab_pow5_re4 | ||||
| ,output reg signed [31:0]   ab_pow6_re4 | ||||
| ,output reg signed [31:0]   ab_pow7_re4 | ||||
| ,output reg signed [31:0]   b_pow8_re4 | ||||
| ,output reg signed [31:0]   a_re5 | ||||
| ,output reg signed [31:0]   b_re5 | ||||
| ,output reg signed [31:0]   ab_re5 | ||||
| ,output reg signed [31:0]   abb_re5 | ||||
| ,output reg signed [31:0]   ab_pow3_re5 | ||||
| ,output reg signed [31:0]   ab_pow4_re5 | ||||
| ,output reg signed [31:0]   ab_pow5_re5 | ||||
| ,output reg signed [31:0]   ab_pow6_re5 | ||||
| ,output reg signed [31:0]   ab_pow7_re5 | ||||
| ,output reg signed [31:0]   b_pow8_re5 | ||||
| ,output reg signed [31:0]   ab_pow8_re3 | ||||
| ,output reg signed [31:0]   ab_pow9_re3 | ||||
| ,output reg signed [31:0]   ab_powa_re3 | ||||
| ,output reg signed [31:0]   ab_powb_re3 | ||||
| ,output reg signed [31:0]   ab_powc_re3 | ||||
| ,output reg signed [31:0]   ab_powd_re3 | ||||
| ,output reg signed [31:0]   ab_powe_re3 | ||||
| ,output reg signed [31:0]   ab_powf_re3 | ||||
| ,output reg signed [31:0]   b_pow16_re3 | ||||
| ,output reg signed [31:0]   a_im0 | ||||
| ,output reg signed [31:0]   b_im0 | ||||
| ,output reg signed [31:0]   ab_im0 | ||||
| ,output reg signed [31:0]   abb_im0 | ||||
| ,output reg signed [31:0]   ab_pow3_im0 | ||||
| ,output reg signed [31:0]   ab_pow4_im0 | ||||
| ,output reg signed [31:0]   ab_pow5_im0 | ||||
| ,output reg signed [31:0]   ab_pow6_im0 | ||||
| ,output reg signed [31:0]   ab_pow7_im0 | ||||
| ,output reg signed [31:0]   ab_pow8_im0 | ||||
| ,output reg signed [31:0]   ab_pow9_im0 | ||||
| ,output reg signed [31:0]   ab_powa_im0 | ||||
| ,output reg signed [31:0]   ab_powb_im0 | ||||
| ,output reg signed [31:0]   ab_powc_im0 | ||||
| ,output reg signed [31:0]   ab_powd_im0 | ||||
| ,output reg signed [31:0]   ab_powe_im0 | ||||
| ,output reg signed [31:0]   ab_powf_im0 | ||||
| ,output reg signed [31:0]   b_pow16_im0 | ||||
| ,output reg signed [31:0]   a_im1 | ||||
| ,output reg signed [31:0]   b_im1 | ||||
| ,output reg signed [31:0]   ab_im1 | ||||
| ,output reg signed [31:0]   abb_im1 | ||||
| ,output reg signed [31:0]   ab_pow3_im1 | ||||
| ,output reg signed [31:0]   ab_pow4_im1 | ||||
| ,output reg signed [31:0]   ab_pow5_im1 | ||||
| ,output reg signed [31:0]   ab_pow6_im1 | ||||
| ,output reg signed [31:0]   ab_pow7_im1 | ||||
| ,output reg signed [31:0]   ab_pow8_im1 | ||||
| ,output reg signed [31:0]   ab_pow9_im1 | ||||
| ,output reg signed [31:0]   ab_powa_im1 | ||||
| ,output reg signed [31:0]   ab_powb_im1 | ||||
| ,output reg signed [31:0]   ab_powc_im1 | ||||
| ,output reg signed [31:0]   ab_powd_im1 | ||||
| ,output reg signed [31:0]   ab_powe_im1 | ||||
| ,output reg signed [31:0]   ab_powf_im1 | ||||
| ,output reg signed [31:0]   b_pow16_im1 | ||||
| ,output reg signed [31:0]   a_im2 | ||||
| ,output reg signed [31:0]   b_im2 | ||||
| ,output reg signed [31:0]   ab_im2 | ||||
| ,output reg signed [31:0]   abb_im2 | ||||
| ,output reg signed [31:0]   ab_pow3_im2 | ||||
| ,output reg signed [31:0]   ab_pow4_im2 | ||||
| ,output reg signed [31:0]   ab_pow5_im2 | ||||
| ,output reg signed [31:0]   ab_pow6_im2 | ||||
| ,output reg signed [31:0]   ab_pow7_im2 | ||||
| ,output reg signed [31:0]   ab_pow8_im2 | ||||
| ,output reg signed [31:0]   ab_pow9_im2 | ||||
| ,output reg signed [31:0]   ab_powa_im2 | ||||
| ,output reg signed [31:0]   ab_powb_im2 | ||||
| ,output reg signed [31:0]   ab_powc_im2 | ||||
| ,output reg signed [31:0]   ab_powd_im2 | ||||
| ,output reg signed [31:0]   ab_powe_im2 | ||||
| ,output reg signed [31:0]   ab_powf_im2 | ||||
| ,output reg signed [31:0]   b_pow16_im2 | ||||
| ,output reg signed [31:0]   a_im3 | ||||
| ,output reg signed [31:0]   b_im3 | ||||
| ,output reg signed [31:0]   ab_im3 | ||||
| ,output reg signed [31:0]   abb_im3 | ||||
| ,output reg signed [31:0]   ab_pow3_im3 | ||||
| ,output reg signed [31:0]   ab_pow4_im3 | ||||
| ,output reg signed [31:0]   ab_pow5_im3 | ||||
| ,output reg signed [31:0]   ab_pow6_im3 | ||||
| ,output reg signed [31:0]   ab_pow7_im3 | ||||
| ,output reg signed [31:0]   ab_pow8_im3 | ||||
| ,output reg signed [31:0]   ab_pow9_im3 | ||||
| ,output reg signed [31:0]   ab_powa_im3 | ||||
| ,output reg signed [31:0]   ab_powb_im3 | ||||
| ,output reg signed [31:0]   ab_powc_im3 | ||||
| ,output reg signed [31:0]   ab_powd_im3 | ||||
| ,output reg signed [31:0]   ab_powe_im3 | ||||
| ,output reg signed [31:0]   ab_powf_im3 | ||||
| ,output reg signed [31:0]   b_pow16_im3 | ||||
| 
 | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -89,6 +178,8 @@ sirv_gnrl_dffr #(1) dff_vldi_or_1(vldi_or, vldi_or_r1 ,clk,rstn); | |||
| 
 | ||||
| reg 	signed	[data_in_width-1:0]    a_re_r1; | ||||
| reg 	signed	[data_in_width-1:0]    b_re_r1; | ||||
| reg 	signed	[data_in_width-1:0]    a_im_r1; | ||||
| reg 	signed	[data_in_width-1:0]    b_im_r1; | ||||
| 
 | ||||
| always @(posedge clk or negedge rstn) begin | ||||
|     if(rstn == 1'b0) begin | ||||
|  | @ -100,26 +191,26 @@ always @(posedge clk or negedge rstn) begin | |||
|             vldi[0]: begin | ||||
|                 a_re_r1 <= a0_re; | ||||
|                 b_re_r1 <= b0_re;    | ||||
|                 a_im_r1 <= a0_im; | ||||
|                 b_im_r1 <= b0_im; | ||||
|             end | ||||
|             vldi[1]: begin | ||||
|                 a_re_r1 <= a1_re; | ||||
|                 b_re_r1 <= b1_re; | ||||
|                 a_im_r1 <= a1_im; | ||||
|                 b_im_r1 <= b1_im; | ||||
|             end | ||||
|             vldi[2]: begin | ||||
|                 a_re_r1 <= a2_re; | ||||
|                 b_re_r1 <= b2_re; | ||||
|                 a_im_r1 <= a2_im; | ||||
|                 b_im_r1 <= b2_im; | ||||
|             end | ||||
|             vldi[3]: begin | ||||
|                 a_re_r1 <= a3_re; | ||||
|                 b_re_r1 <= b3_re; | ||||
|             end | ||||
|             vldi[4]: begin | ||||
|                 a_re_r1 <= a4_re; | ||||
|                 b_re_r1 <= b4_re; | ||||
|             end | ||||
|             vldi[5]: begin | ||||
|                 a_re_r1 <= a5_re; | ||||
|                 b_re_r1 <= b5_re; | ||||
|                 a_im_r1 <= a3_im; | ||||
|                 b_im_r1 <= b3_im; | ||||
|             end | ||||
| //            default: begin
 | ||||
| //                a_re_r1 <= a_re[0];
 | ||||
|  | @ -133,7 +224,7 @@ reg en; | |||
| reg en_r1; | ||||
| sirv_gnrl_dffr #(1) dff_en_1(en, en_r1 ,clk,rstn); | ||||
| 
 | ||||
| reg [3:0] cnt0; | ||||
| reg [4:0] cnt0; | ||||
| wire add_cnt0; | ||||
| wire end_cnt0; | ||||
| always @(posedge clk or negedge rstn)begin | ||||
|  | @ -149,7 +240,7 @@ always @(posedge clk or negedge rstn)begin | |||
| end | ||||
| 
 | ||||
| assign add_cnt0 = en; | ||||
| assign end_cnt0 = add_cnt0 && cnt0== 8-1; | ||||
| assign end_cnt0 = add_cnt0 && cnt0== 16-1; | ||||
| 
 | ||||
| wire    en_l; | ||||
| wire    en_h; | ||||
|  | @ -170,57 +261,98 @@ assign    en_l = end_cnt0; | |||
| 
 | ||||
| reg 	signed	[data_in_width-1:0]   bin_re; | ||||
| wire 	signed	[data_in_width-1:0]   bout_re; | ||||
| reg 	signed	[data_in_width-1:0]   bin_im; | ||||
| wire 	signed	[data_in_width-1:0]   bout_im; | ||||
| always  @(*)begin | ||||
|     if(en_r1) begin | ||||
|         bin_re <= bout_re; | ||||
|         bin_im <= bout_im; | ||||
|     end | ||||
|     else  begin | ||||
|         bin_re <= 32'd2147483647; | ||||
|         bin_im <= 0; | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| mult_real | ||||
| mult_C | ||||
| #( | ||||
|  .A_width(data_in_width)  | ||||
| ,.B_width(data_in_width)  | ||||
| ,.C_width(coef_width)  | ||||
| ,.D_width(coef_width)  | ||||
| ,.o_width(data_in_width)  | ||||
| ) | ||||
| inst_c1         ( | ||||
|                                             .clk	(clk    	), | ||||
|                                             .rstn	(rstn   	), | ||||
|                                             .en		(en     	), | ||||
|                                             .din	(bin_re		), | ||||
|                                             .coef	(b_re_r1    ), | ||||
|                                             .dout	(bout_re    ) | ||||
|                                             .a		(bin_re		), | ||||
|                                             .b		(bin_im		), | ||||
|                                             .c		(b_re_r1    	), | ||||
|                                             .d		(b_im_r1    	), | ||||
|                                             .Re		(bout_re     	), | ||||
|                                             .Im		(bout_im     	) | ||||
| 		); | ||||
| 
 | ||||
|   | ||||
| wire	signed	[data_in_width-1:0] 	 abo_re; | ||||
| mult_real | ||||
| wire	signed	[data_in_width-1:0]	 abo_im; | ||||
| mult_C | ||||
| #( | ||||
|  .A_width(data_in_width)  | ||||
| ,.B_width(data_in_width)  | ||||
| ,.C_width(coef_width)  | ||||
| ,.D_width(coef_width)  | ||||
| ,.o_width(data_in_width)  | ||||
| ) | ||||
| inst_c2         ( | ||||
|                                             .clk	(clk    	), | ||||
|                                             .rstn	(rstn   	), | ||||
|                                             .en		(en     	), | ||||
|                                             .din  	(bin_re		), | ||||
|                                             .coef 	(a_re_r1    ), | ||||
|                                             .dout	(abo_re   	) | ||||
|                                             .a		(bin_re		), | ||||
|                                             .b		(bin_im		), | ||||
|                                             .c		(a_re_r1        ), | ||||
|                                             .d		(a_im_r1        ), | ||||
|                                             .Re		(abo_re   	), | ||||
|                                             .Im		(abo_im   	) | ||||
| 	        ); | ||||
| 
 | ||||
| reg signed	[coef_width-1   :0]   ao_re_r1     ; | ||||
| reg signed	[coef_width-1   :0]   ab_re_r1     ; | ||||
| reg signed	[coef_width-1   :0]   abb_re_r1    ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow3_re_r1        ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow4_re_r1        ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow5_re_r1        ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow6_re_r1        ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow7_re_r1        ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow3_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow4_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow5_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow6_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow7_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow8_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow9_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powa_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powb_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powc_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powd_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powe_re_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powf_re_r1; | ||||
| reg signed	[coef_width-1   :0]   bo_re_r1     ; | ||||
| reg signed	[coef_width-1   :0]   b_pow8_re_r1         ; | ||||
| reg signed	[coef_width-1   :0]   b_pow16_re_r1 ; | ||||
| reg signed	[coef_width-1   :0]   ao_im_r1     ; | ||||
| reg signed	[coef_width-1   :0]   ab_im_r1     ; | ||||
| reg signed	[coef_width-1   :0]   abb_im_r1    ; | ||||
| reg signed	[coef_width-1   :0]   ab_pow3_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow4_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow5_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow6_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow7_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow8_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_pow9_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powa_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powb_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powc_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powd_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powe_im_r1; | ||||
| reg signed	[coef_width-1   :0]   ab_powf_im_r1; | ||||
| reg signed	[coef_width-1   :0]   bo_im_r1     ; | ||||
| reg signed	[coef_width-1   :0]   b_pow16_im_r1 ; | ||||
| 
 | ||||
| always  @(posedge clk or negedge rstn)begin | ||||
|     if(!rstn)begin | ||||
|  | @ -232,60 +364,145 @@ always  @(posedge clk or negedge rstn)begin | |||
|         ab_pow5_re_r1 <= 0;    | ||||
|         ab_pow6_re_r1 <= 0;    | ||||
|         ab_pow7_re_r1 <= 0;    | ||||
|         ab_pow8_re_r1 <= 0;    | ||||
|         ab_pow9_re_r1 <= 0;    | ||||
|         ab_powa_re_r1 <= 0;    | ||||
|         ab_powb_re_r1 <= 0;    | ||||
|         ab_powc_re_r1 <= 0;    | ||||
|         ab_powd_re_r1 <= 0;    | ||||
|         ab_powe_re_r1 <= 0;    | ||||
|         ab_powf_re_r1 <= 0;    | ||||
|         bo_re_r1      <= 0;    | ||||
|         b_pow8_re_r1  <= 0;    | ||||
|         b_pow16_re_r1  <= 0;    | ||||
|         ao_im_r1      <= 0;    | ||||
|         ab_im_r1      <= 0;    | ||||
|         abb_im_r1     <= 0;    | ||||
|         ab_pow3_im_r1 <= 0;    | ||||
|         ab_pow4_im_r1 <= 0;    | ||||
|         ab_pow5_im_r1 <= 0;    | ||||
|         ab_pow6_im_r1 <= 0;    | ||||
|         ab_pow7_im_r1 <= 0;    | ||||
|         ab_pow8_im_r1 <= 0;    | ||||
|         ab_pow9_im_r1 <= 0;    | ||||
|         ab_powa_im_r1 <= 0;    | ||||
|         ab_powb_im_r1 <= 0;    | ||||
|         ab_powc_im_r1 <= 0;    | ||||
|         ab_powd_im_r1 <= 0;    | ||||
|         ab_powe_im_r1 <= 0;    | ||||
|         ab_powf_im_r1 <= 0;    | ||||
|         bo_im_r1      <= 0;    | ||||
|         b_pow16_im_r1  <= 0;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 1 && en_r1)begin | ||||
|         ao_re_r1      <= abo_re;    | ||||
|         bo_re_r1     <= bin_re;    | ||||
|         ao_im_r1      <= abo_im;    | ||||
|         bo_im_r1     <= bin_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 2 && en_r1)begin | ||||
|         ab_re_r1      <= abo_re;    | ||||
|         ab_im_r1      <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 3 && en_r1)begin | ||||
|         abb_re_r1      <= abo_re;    | ||||
|         abb_im_r1      <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 4 && en_r1)begin | ||||
|         ab_pow3_re_r1     <= abo_re;    | ||||
|         ab_pow3_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 5 && en_r1)begin | ||||
|         ab_pow4_re_r1     <= abo_re;    | ||||
|         ab_pow4_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 6 && en_r1)begin | ||||
|         ab_pow5_re_r1     <= abo_re;    | ||||
|         ab_pow5_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 7 && en_r1)begin | ||||
|         ab_pow6_re_r1     <= abo_re;    | ||||
|         ab_pow6_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 8 && en_r1)begin | ||||
|     	ab_pow7_re_r1     <= abo_re;    | ||||
|     	ab_pow7_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 9 && en_r1)begin | ||||
|     	ab_pow8_re_r1     <= abo_re;    | ||||
|     	ab_pow8_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 10 && en_r1)begin | ||||
|     	ab_pow9_re_r1     <= abo_re;    | ||||
|     	ab_pow9_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 11 && en_r1)begin | ||||
|     	ab_powa_re_r1     <= abo_re;    | ||||
|     	ab_powa_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 12 && en_r1)begin | ||||
|     	ab_powb_re_r1     <= abo_re;    | ||||
|     	ab_powb_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 13 && en_r1)begin | ||||
|     	ab_powc_re_r1     <= abo_re;    | ||||
|     	ab_powc_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 14 && en_r1)begin | ||||
|     	ab_powd_re_r1     <= abo_re;    | ||||
|     	ab_powd_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(add_cnt0 && cnt0 == 15 && en_r1)begin | ||||
|     	ab_powe_re_r1     <= abo_re;    | ||||
|     	ab_powe_im_r1     <= abo_im;    | ||||
|     end | ||||
|     else if(cnt0 == 0 && en_r1)begin | ||||
|         ab_pow7_re_r1     <= abo_re;    | ||||
|         b_pow8_re_r1     <= bin_re;    | ||||
|         ab_powf_re_r1     <= abo_re;    | ||||
|         b_pow16_re_r1     <= bin_re;    | ||||
|         ab_powf_im_r1     <= abo_im;    | ||||
|         b_pow16_im_r1     <= bin_im;    | ||||
|     end | ||||
| 
 | ||||
| //            else  begin
 | ||||
| //            end
 | ||||
| end | ||||
| 
 | ||||
| reg  [5:0]  vldi_r1; | ||||
| reg  [5:0]  vldi_r2; | ||||
| reg  [5:0]  vldi_r3; | ||||
| reg  [5:0]  vldi_r4; | ||||
| reg  [5:0]  vldi_r5; | ||||
| reg  [5:0]  vldi_r6; | ||||
| reg  [5:0]  vldi_r7; | ||||
| reg  [5:0]  vldi_r8; | ||||
| reg  [5:0]  vldi_r9; | ||||
| reg  [5:0]  vldi_r10; | ||||
| reg  [3:0]  vldi_r1; | ||||
| reg  [3:0]  vldi_r2; | ||||
| reg  [3:0]  vldi_r3; | ||||
| reg  [3:0]  vldi_r4; | ||||
| reg  [3:0]  vldi_r5; | ||||
| reg  [3:0]  vldi_r6; | ||||
| reg  [3:0]  vldi_r7; | ||||
| reg  [3:0]  vldi_r8; | ||||
| reg  [3:0]  vldi_r9; | ||||
| reg  [3:0]  vldi_r10; | ||||
| reg  [3:0]  vldi_r11; | ||||
| reg  [3:0]  vldi_r12; | ||||
| reg  [3:0]  vldi_r13; | ||||
| reg  [3:0]  vldi_r14; | ||||
| reg  [3:0]  vldi_r15; | ||||
| reg  [3:0]  vldi_r16; | ||||
| reg  [3:0]  vldi_r17; | ||||
| reg  [3:0]  vldi_r18; | ||||
| //syncer #(6, 10) sync_vldo_syncer (clk, rstn, vldi, vldi_r10);     
 | ||||
| sirv_gnrl_dffr #(6) dff_vldi_1(vldi,vldi_r1,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_2(vldi_r1, vldi_r2 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_3(vldi_r2, vldi_r3 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_4(vldi_r3, vldi_r4 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_5(vldi_r4, vldi_r5 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_6(vldi_r5, vldi_r6 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_7(vldi_r6, vldi_r7 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_8(vldi_r7, vldi_r8 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_9(vldi_r8, vldi_r9 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(6) dff_vldi_10(vldi_r9, vldi_r10,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_1(vldi,vldi_r1,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_2(vldi_r1, vldi_r2 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_3(vldi_r2, vldi_r3 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_4(vldi_r3, vldi_r4 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_5(vldi_r4, vldi_r5 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_6(vldi_r5, vldi_r6 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_7(vldi_r6, vldi_r7 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_8(vldi_r7, vldi_r8 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_9(vldi_r8, vldi_r9 ,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_10(vldi_r9, vldi_r10,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_11(vldi_r10, vldi_r11,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_12(vldi_r11, vldi_r12,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_13(vldi_r12, vldi_r13,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_14(vldi_r13, vldi_r14,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_15(vldi_r14, vldi_r15,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_16(vldi_r15, vldi_r16,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_17(vldi_r16, vldi_r17,clk,rstn);  | ||||
| sirv_gnrl_dffr #(4) dff_vldi_18(vldi_r17, vldi_r18,clk,rstn);  | ||||
| always @(posedge clk or negedge rstn) begin | ||||
|     if(!rstn) begin | ||||
|         a_re0        <= 0; | ||||
|  | @ -297,7 +514,15 @@ always @(posedge clk or negedge rstn) begin | |||
|         ab_pow5_re0  <= 0; | ||||
|         ab_pow6_re0  <= 0; | ||||
|         ab_pow7_re0  <= 0; | ||||
|         b_pow8_re0   <= 0; | ||||
|         ab_pow8_re0  <= 0; | ||||
|         ab_pow9_re0  <= 0; | ||||
|         ab_powa_re0  <= 0; | ||||
|         ab_powb_re0  <= 0; | ||||
|         ab_powc_re0  <= 0; | ||||
|         ab_powd_re0  <= 0; | ||||
|         ab_powe_re0  <= 0; | ||||
|         ab_powf_re0  <= 0; | ||||
|         b_pow16_re0   <= 0; | ||||
|         a_re1        <= 0; | ||||
|         b_re1        <= 0; | ||||
|         ab_re1       <= 0; | ||||
|  | @ -307,7 +532,15 @@ always @(posedge clk or negedge rstn) begin | |||
|         ab_pow5_re1  <= 0; | ||||
|         ab_pow6_re1  <= 0; | ||||
|         ab_pow7_re1  <= 0; | ||||
|         b_pow8_re1   <= 0; | ||||
|         ab_pow8_re1  <= 0; | ||||
|         ab_pow9_re1  <= 0; | ||||
|         ab_powa_re1  <= 0; | ||||
|         ab_powb_re1  <= 0; | ||||
|         ab_powc_re1  <= 0; | ||||
|         ab_powd_re1  <= 0; | ||||
|         ab_powe_re1  <= 0; | ||||
|         ab_powf_re1  <= 0; | ||||
|         b_pow16_re1   <= 0; | ||||
|         a_re2        <= 0; | ||||
|         b_re2        <= 0; | ||||
|         ab_re2       <= 0; | ||||
|  | @ -317,7 +550,15 @@ always @(posedge clk or negedge rstn) begin | |||
|         ab_pow5_re2  <= 0; | ||||
|         ab_pow6_re2  <= 0; | ||||
|         ab_pow7_re2  <= 0; | ||||
|         b_pow8_re2   <= 0; | ||||
|         ab_pow8_re2  <= 0; | ||||
|         ab_pow9_re2  <= 0; | ||||
|         ab_powa_re2  <= 0; | ||||
|         ab_powb_re2  <= 0; | ||||
|         ab_powc_re2  <= 0; | ||||
|         ab_powd_re2  <= 0; | ||||
|         ab_powe_re2  <= 0; | ||||
|         ab_powf_re2  <= 0; | ||||
|         b_pow16_re2   <= 0; | ||||
|         a_re3        <= 0; | ||||
|         b_re3        <= 0; | ||||
|         ab_re3       <= 0; | ||||
|  | @ -327,31 +568,91 @@ always @(posedge clk or negedge rstn) begin | |||
|         ab_pow5_re3  <= 0; | ||||
|         ab_pow6_re3  <= 0; | ||||
|         ab_pow7_re3  <= 0; | ||||
|         b_pow8_re3   <= 0; | ||||
|         a_re4        <= 0; | ||||
|         b_re4        <= 0; | ||||
|         ab_re4       <= 0; | ||||
|         abb_re4      <= 0; | ||||
|         ab_pow3_re4  <= 0; | ||||
|         ab_pow4_re4  <= 0; | ||||
|         ab_pow5_re4  <= 0; | ||||
|         ab_pow6_re4  <= 0; | ||||
|         ab_pow7_re4  <= 0; | ||||
|         b_pow8_re4   <= 0; | ||||
|         a_re5        <= 0; | ||||
|         b_re5        <= 0; | ||||
|         ab_re5       <= 0; | ||||
|         abb_re5      <= 0; | ||||
|         ab_pow3_re5  <= 0; | ||||
|         ab_pow4_re5  <= 0; | ||||
|         ab_pow5_re5  <= 0; | ||||
|         ab_pow6_re5  <= 0; | ||||
|         ab_pow7_re5  <= 0; | ||||
|         b_pow8_re5   <= 0; | ||||
|         ab_pow8_re3  <= 0; | ||||
|         ab_pow9_re3  <= 0; | ||||
|         ab_powa_re3  <= 0; | ||||
|         ab_powb_re3  <= 0; | ||||
|         ab_powc_re3  <= 0; | ||||
|         ab_powd_re3  <= 0; | ||||
|         ab_powe_re3  <= 0; | ||||
|         ab_powf_re3  <= 0; | ||||
|         b_pow16_re3   <= 0; | ||||
|         a_im0        <= 0; | ||||
|         b_im0        <= 0; | ||||
|         ab_im0       <= 0; | ||||
|         abb_im0      <= 0; | ||||
|         ab_pow3_im0  <= 0; | ||||
|         ab_pow4_im0  <= 0; | ||||
|         ab_pow5_im0  <= 0; | ||||
|         ab_pow6_im0  <= 0; | ||||
|         ab_pow7_im0  <= 0; | ||||
|         ab_pow8_im0  <= 0; | ||||
|         ab_pow9_im0  <= 0; | ||||
|         ab_powa_im0  <= 0; | ||||
|         ab_powb_im0  <= 0; | ||||
|         ab_powc_im0  <= 0; | ||||
|         ab_powd_im0  <= 0; | ||||
|         ab_powe_im0  <= 0; | ||||
|         ab_powf_im0  <= 0; | ||||
|         b_pow16_im0   <= 0; | ||||
|         a_im1        <= 0; | ||||
|         b_im1        <= 0; | ||||
|         ab_im1       <= 0; | ||||
|         abb_im1      <= 0; | ||||
|         ab_pow3_im1  <= 0; | ||||
|         ab_pow4_im1  <= 0; | ||||
|         ab_pow5_im1  <= 0; | ||||
|         ab_pow6_im1  <= 0; | ||||
|         ab_pow7_im1  <= 0; | ||||
|         ab_pow8_im1  <= 0; | ||||
|         ab_pow9_im1  <= 0; | ||||
|         ab_powa_im1  <= 0; | ||||
|         ab_powb_im1  <= 0; | ||||
|         ab_powc_im1  <= 0; | ||||
|         ab_powd_im1  <= 0; | ||||
|         ab_powe_im1  <= 0; | ||||
|         ab_powf_im1  <= 0; | ||||
|         b_pow16_im1   <= 0; | ||||
|         a_im2        <= 0; | ||||
|         b_im2        <= 0; | ||||
|         ab_im2       <= 0; | ||||
|         abb_im2      <= 0; | ||||
|         ab_pow3_im2  <= 0; | ||||
|         ab_pow4_im2  <= 0; | ||||
|         ab_pow5_im2  <= 0; | ||||
|         ab_pow6_im2  <= 0; | ||||
|         ab_pow7_im2  <= 0; | ||||
|         ab_pow8_im2  <= 0; | ||||
|         ab_pow9_im2  <= 0; | ||||
|         ab_powa_im2  <= 0; | ||||
|         ab_powb_im2  <= 0; | ||||
|         ab_powc_im2  <= 0; | ||||
|         ab_powd_im2  <= 0; | ||||
|         ab_powe_im2  <= 0; | ||||
|         ab_powf_im2  <= 0; | ||||
|         b_pow16_im2   <= 0; | ||||
|         a_im3        <= 0; | ||||
|         b_im3        <= 0; | ||||
|         ab_im3       <= 0; | ||||
|         abb_im3      <= 0; | ||||
|         ab_pow3_im3  <= 0; | ||||
|         ab_pow4_im3  <= 0; | ||||
|         ab_pow5_im3  <= 0; | ||||
|         ab_pow6_im3  <= 0; | ||||
|         ab_pow7_im3  <= 0; | ||||
|         ab_pow8_im3  <= 0; | ||||
|         ab_pow9_im3  <= 0; | ||||
|         ab_powa_im3  <= 0; | ||||
|         ab_powb_im3  <= 0; | ||||
|         ab_powc_im3  <= 0; | ||||
|         ab_powd_im3  <= 0; | ||||
|         ab_powe_im3  <= 0; | ||||
|         ab_powf_im3  <= 0; | ||||
|         b_pow16_im3   <= 0; | ||||
|    end | ||||
|     else if(|vldi_r10) begin   | ||||
|     else if(|vldi_r18) begin   | ||||
|         case(1'b1) | ||||
|             vldi_r10[0]: begin | ||||
|             vldi_r18[0]: begin | ||||
|                 a_re0        <= ao_re_r1     ; | ||||
|                 b_re0        <= bo_re_r1     ; | ||||
|                 ab_re0       <= ab_re_r1     ; | ||||
|  | @ -361,9 +662,35 @@ always @(posedge clk or negedge rstn) begin | |||
|                 ab_pow5_re0  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re0  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re0  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re0   <= b_pow8_re_r1 ; | ||||
|                 ab_pow8_re0  <= ab_pow8_re_r1; | ||||
|                 ab_pow9_re0  <= ab_pow9_re_r1; | ||||
|                 ab_powa_re0  <= ab_powa_re_r1; | ||||
|                 ab_powb_re0  <= ab_powb_re_r1; | ||||
|                 ab_powc_re0  <= ab_powc_re_r1; | ||||
|                 ab_powd_re0  <= ab_powd_re_r1; | ||||
|                 ab_powe_re0  <= ab_powe_re_r1; | ||||
|                 ab_powf_re0  <= ab_powf_re_r1; | ||||
|                 b_pow16_re0  <= b_pow16_re_r1; | ||||
|                 a_im0        <= ao_im_r1     ; | ||||
|                 b_im0        <= bo_im_r1     ; | ||||
|                 ab_im0       <= ab_im_r1     ; | ||||
|                 abb_im0      <= abb_im_r1    ; | ||||
|                 ab_pow3_im0  <= ab_pow3_im_r1; | ||||
|                 ab_pow4_im0  <= ab_pow4_im_r1; | ||||
|                 ab_pow5_im0  <= ab_pow5_im_r1; | ||||
|                 ab_pow6_im0  <= ab_pow6_im_r1; | ||||
|                 ab_pow7_im0  <= ab_pow7_im_r1; | ||||
|                 ab_pow8_im0  <= ab_pow8_im_r1; | ||||
|                 ab_pow9_im0  <= ab_pow9_im_r1; | ||||
|                 ab_powa_im0  <= ab_powa_im_r1; | ||||
|                 ab_powb_im0  <= ab_powb_im_r1; | ||||
|                 ab_powc_im0  <= ab_powc_im_r1; | ||||
|                 ab_powd_im0  <= ab_powd_im_r1; | ||||
|                 ab_powe_im0  <= ab_powe_im_r1; | ||||
|                 ab_powf_im0  <= ab_powf_im_r1; | ||||
|                 b_pow16_im0  <= b_pow16_im_r1; | ||||
|             end | ||||
|             vldi_r10[1]: begin | ||||
|             vldi_r18[1]: begin | ||||
|                 a_re1        <= ao_re_r1     ; | ||||
|                 b_re1        <= bo_re_r1     ; | ||||
|                 ab_re1       <= ab_re_r1     ; | ||||
|  | @ -373,9 +700,35 @@ always @(posedge clk or negedge rstn) begin | |||
|                 ab_pow5_re1  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re1  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re1  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re1   <= b_pow8_re_r1 ; | ||||
|                 ab_pow8_re1  <= ab_pow8_re_r1; | ||||
|                 ab_pow9_re1  <= ab_pow9_re_r1; | ||||
|                 ab_powa_re1  <= ab_powa_re_r1; | ||||
|                 ab_powb_re1  <= ab_powb_re_r1; | ||||
|                 ab_powc_re1  <= ab_powc_re_r1; | ||||
|                 ab_powd_re1  <= ab_powd_re_r1; | ||||
|                 ab_powe_re1  <= ab_powe_re_r1; | ||||
|                 ab_powf_re1  <= ab_powf_re_r1; | ||||
|                 b_pow16_re1  <= b_pow16_re_r1; | ||||
|                 a_im1        <= ao_im_r1     ; | ||||
|                 b_im1        <= bo_im_r1     ; | ||||
|                 ab_im1       <= ab_im_r1     ; | ||||
|                 abb_im1      <= abb_im_r1    ; | ||||
|                 ab_pow3_im1  <= ab_pow3_im_r1; | ||||
|                 ab_pow4_im1  <= ab_pow4_im_r1; | ||||
|                 ab_pow5_im1  <= ab_pow5_im_r1; | ||||
|                 ab_pow6_im1  <= ab_pow6_im_r1; | ||||
|                 ab_pow7_im1  <= ab_pow7_im_r1; | ||||
|                 ab_pow8_im1  <= ab_pow8_im_r1; | ||||
|                 ab_pow9_im1  <= ab_pow9_im_r1; | ||||
|                 ab_powa_im1  <= ab_powa_im_r1; | ||||
|                 ab_powb_im1  <= ab_powb_im_r1; | ||||
|                 ab_powc_im1  <= ab_powc_im_r1; | ||||
|                 ab_powd_im1  <= ab_powd_im_r1; | ||||
|                 ab_powe_im1  <= ab_powe_im_r1; | ||||
|                 ab_powf_im1  <= ab_powf_im_r1; | ||||
|                 b_pow16_im1  <= b_pow16_im_r1; | ||||
|             end | ||||
|             vldi_r10[2]: begin | ||||
|             vldi_r18[2]: begin | ||||
|                 a_re2        <= ao_re_r1     ; | ||||
|                 b_re2        <= bo_re_r1     ; | ||||
|                 ab_re2       <= ab_re_r1     ; | ||||
|  | @ -385,9 +738,35 @@ always @(posedge clk or negedge rstn) begin | |||
|                 ab_pow5_re2  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re2  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re2  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re2   <= b_pow8_re_r1 ; | ||||
|                 ab_pow8_re2  <= ab_pow8_re_r1; | ||||
|                 ab_pow9_re2  <= ab_pow9_re_r1; | ||||
|                 ab_powa_re2  <= ab_powa_re_r1; | ||||
|                 ab_powb_re2  <= ab_powb_re_r1; | ||||
|                 ab_powc_re2  <= ab_powc_re_r1; | ||||
|                 ab_powd_re2  <= ab_powd_re_r1; | ||||
|                 ab_powe_re2  <= ab_powe_re_r1; | ||||
|                 ab_powf_re2  <= ab_powf_re_r1; | ||||
|                 b_pow16_re2  <= b_pow16_re_r1; | ||||
|                 a_im2        <= ao_im_r1     ; | ||||
|                 b_im2        <= bo_im_r1     ; | ||||
|                 ab_im2       <= ab_im_r1     ; | ||||
|                 abb_im2      <= abb_im_r1    ; | ||||
|                 ab_pow3_im2  <= ab_pow3_im_r1; | ||||
|                 ab_pow4_im2  <= ab_pow4_im_r1; | ||||
|                 ab_pow5_im2  <= ab_pow5_im_r1; | ||||
|                 ab_pow6_im2  <= ab_pow6_im_r1; | ||||
|                 ab_pow7_im2  <= ab_pow7_im_r1; | ||||
|                 ab_pow8_im2  <= ab_pow8_im_r1; | ||||
|                 ab_pow9_im2  <= ab_pow9_im_r1; | ||||
|                 ab_powa_im2  <= ab_powa_im_r1; | ||||
|                 ab_powb_im2  <= ab_powb_im_r1; | ||||
|                 ab_powc_im2  <= ab_powc_im_r1; | ||||
|                 ab_powd_im2  <= ab_powd_im_r1; | ||||
|                 ab_powe_im2  <= ab_powe_im_r1; | ||||
|                 ab_powf_im2  <= ab_powf_im_r1; | ||||
|                 b_pow16_im2  <= b_pow16_im_r1; | ||||
|             end | ||||
|             vldi_r10[3]: begin | ||||
|             vldi_r18[3]: begin | ||||
|                 a_re3        <= ao_re_r1     ; | ||||
|                 b_re3        <= bo_re_r1     ; | ||||
|                 ab_re3       <= ab_re_r1     ; | ||||
|  | @ -397,31 +776,33 @@ always @(posedge clk or negedge rstn) begin | |||
|                 ab_pow5_re3  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re3  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re3  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re3   <= b_pow8_re_r1 ; | ||||
|             end | ||||
|             vldi_r10[4]: begin | ||||
|                 a_re4        <= ao_re_r1     ; | ||||
|                 b_re4        <= bo_re_r1     ; | ||||
|                 ab_re4       <= ab_re_r1     ; | ||||
|                 abb_re4      <= abb_re_r1    ; | ||||
|                 ab_pow3_re4  <= ab_pow3_re_r1; | ||||
|                 ab_pow4_re4  <= ab_pow4_re_r1; | ||||
|                 ab_pow5_re4  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re4  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re4  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re4   <= b_pow8_re_r1 ; | ||||
|             end | ||||
|             vldi_r10[5]: begin | ||||
|                 a_re5        <= ao_re_r1     ; | ||||
|                 b_re5        <= bo_re_r1     ; | ||||
|                 ab_re5       <= ab_re_r1     ; | ||||
|                 abb_re5      <= abb_re_r1    ; | ||||
|                 ab_pow3_re5  <= ab_pow3_re_r1; | ||||
|                 ab_pow4_re5  <= ab_pow4_re_r1; | ||||
|                 ab_pow5_re5  <= ab_pow5_re_r1; | ||||
|                 ab_pow6_re5  <= ab_pow6_re_r1; | ||||
|                 ab_pow7_re5  <= ab_pow7_re_r1; | ||||
|                 b_pow8_re5   <= b_pow8_re_r1 ; | ||||
|                 ab_pow8_re3  <= ab_pow8_re_r1; | ||||
|                 ab_pow9_re3  <= ab_pow9_re_r1; | ||||
|                 ab_powa_re3  <= ab_powa_re_r1; | ||||
|                 ab_powb_re3  <= ab_powb_re_r1; | ||||
|                 ab_powc_re3  <= ab_powc_re_r1; | ||||
|                 ab_powd_re3  <= ab_powd_re_r1; | ||||
|                 ab_powe_re3  <= ab_powe_re_r1; | ||||
|                 ab_powf_re3  <= ab_powf_re_r1; | ||||
|                 b_pow16_re3  <= b_pow16_re_r1; | ||||
|                 a_im3        <= ao_im_r1     ; | ||||
|                 b_im3        <= bo_im_r1     ; | ||||
|                 ab_im3       <= ab_im_r1     ; | ||||
|                 abb_im3      <= abb_im_r1    ; | ||||
|                 ab_pow3_im3  <= ab_pow3_im_r1; | ||||
|                 ab_pow4_im3  <= ab_pow4_im_r1; | ||||
|                 ab_pow5_im3  <= ab_pow5_im_r1; | ||||
|                 ab_pow6_im3  <= ab_pow6_im_r1; | ||||
|                 ab_pow7_im3  <= ab_pow7_im_r1; | ||||
|                 ab_pow8_im3  <= ab_pow8_im_r1; | ||||
|                 ab_pow9_im3  <= ab_pow9_im_r1; | ||||
|                 ab_powa_im3  <= ab_powa_im_r1; | ||||
|                 ab_powb_im3  <= ab_powb_im_r1; | ||||
|                 ab_powc_im3  <= ab_powc_im_r1; | ||||
|                 ab_powd_im3  <= ab_powd_im_r1; | ||||
|                 ab_powe_im3  <= ab_powe_im_r1; | ||||
|                 ab_powf_im3  <= ab_powf_im_r1; | ||||
|                 b_pow16_im3  <= b_pow16_im_r1; | ||||
|             end | ||||
| //            default: begin
 | ||||
| //                ao_re[0]       <= 'h0;
 | ||||
|  |  | |||
|  | @ -49,8 +49,12 @@ module  IIR_Filter_p1 #( | |||
| ,input   signed [cascade_in_width-1:0]   dout_r1_re // Re(y(t-1)) | ||||
| ,input   signed [coef_width-1    :0]   a_re | ||||
| ,input   signed [coef_width-1    :0]   b_re | ||||
| ,input   signed [cascade_in_width-1:0]   dout_r1_im // Re(y(t-1)) | ||||
| ,input   signed [coef_width-1    :0]   a_im | ||||
| ,input   signed [coef_width-1    :0]   b_im | ||||
| 
 | ||||
| ,output  signed [data_out_width-1:0]   dout_re // Re(y(t-16)) | ||||
| ,output  signed [data_out_width-1:0]   dout_im // Re(y(t-16)) | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -60,43 +64,58 @@ wire    signed  [temp_var_width-1  :0] y1_re; | |||
| wire    signed  [temp_var_width    :0] y_re; | ||||
| 
 | ||||
| wire    signed  [data_out_width-1:0]   y_re_trunc; | ||||
| wire    signed  [temp_var_width-1  :0] x1_im; | ||||
| 
 | ||||
| wire    signed  [temp_var_width-1  :0] y1_im; | ||||
| wire    signed  [temp_var_width    :0] y_im; | ||||
| 
 | ||||
| wire    signed  [data_out_width-1:0]   y_im_trunc; | ||||
| 
 | ||||
| 
 | ||||
| // x1 = a * din delay M = a*x(t-8) | ||||
| mult_real | ||||
| 
 | ||||
| mult_x | ||||
| #( | ||||
| 	 .A_width	(data_in_width	)   | ||||
| 	,.C_width	(a_width	)  | ||||
| 	,.C_width	(coef_width	    )  | ||||
| 	,.D_width	(coef_width	)  | ||||
| 	,.o_width	(temp_var_width	)  | ||||
| ) | ||||
| inst_c1 ( | ||||
| 	.clk        	(clk            ), | ||||
| 	.rstn       	(rstn           ), | ||||
| 	.en         	(en             ), | ||||
| 	.din          	(din_re         ), | ||||
| 	.coef          	(a_re[coef_width-1 : coef_width-a_width]), | ||||
| 	.dout         	(x1_re          ) | ||||
| 	.a          	(din_re         ), | ||||
| 	.c          	(a_re		), | ||||
| 	.d          	(a_im		), | ||||
| 	.Re         	(x1_re          ), | ||||
| 	.Im         	(x1_im          ) | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
| // y1 = b * dout_r1 delay M = b*y(t-9) | ||||
| // y = y1+x1 = a*x(t-8)+b*y(t-9) = y(t-8)  | ||||
| mult_real | ||||
| 
 | ||||
| mult_C | ||||
| #( | ||||
| 	 .A_width	(cascade_in_width )  | ||||
| 	,.C_width	(b_width		)  | ||||
| 	,.B_width	(cascade_in_width	)  | ||||
| 	,.C_width	(coef_width		  )  | ||||
| 	,.D_width	(coef_width		)  | ||||
| 	,.o_width	(temp_var_width	  )  | ||||
| ) | ||||
| inst_c2 ( | ||||
| inst_c3 ( | ||||
| 	.clk        	(clk        	), | ||||
| 	.rstn       	(rstn       	), | ||||
| 	.en         	(en             ), | ||||
|  	.din          	(dout_r1_re     ), | ||||
| 	.coef          	(b_re[coef_width-1 : coef_width-b_width]), | ||||
| 	.dout         	(y1_re          ) | ||||
|  	.a          	(dout_r1_re     ), | ||||
| 	.b          	(dout_r1_im     ), | ||||
| 	.c          	(b_re		), | ||||
| 	.d          	(b_im		), | ||||
| 	.Re         	(y1_re          ), | ||||
| 	.Im         	(y1_im          ) | ||||
| ); | ||||
| 
 | ||||
| assign  y_re       =   x1_re + y1_re; | ||||
| assign  y_im       =   x1_im + y1_im; | ||||
| 
 | ||||
| 
 | ||||
| // dout = round(y) delay M = round(y(t-16)) | ||||
|  | @ -105,7 +124,12 @@ trunc #( | |||
| 	,.msb	(temp_var_width-1		) | ||||
| 	,.lsb	(temp_var_width-data_out_width	) | ||||
| ) round_u1 (clk, rstn, en, y_re, y_re_trunc); | ||||
| 
 | ||||
| trunc #( | ||||
| 	 .diw	(temp_var_width+1		) | ||||
| 	,.msb	(temp_var_width-1		) | ||||
| 	,.lsb	(temp_var_width-data_out_width	) | ||||
| ) round_u2 (clk, rstn, en, y_im, y_im_trunc); | ||||
| assign  dout_re = y_re_trunc; | ||||
| assign  dout_im = y_im_trunc; | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -0,0 +1,237 @@ | |||
| module  IIR_Filter_p16 #( | ||||
|  parameter  coef_width          = 32 | ||||
| ,parameter  b_pow16_width	= 29 | ||||
| ,parameter  ab_pow_width	= 32  | ||||
| ,parameter  data_in_width       = 16  | ||||
| ,parameter  data_out_width	= 16 | ||||
| ,parameter  temp_var_width	= 29 | ||||
| ) | ||||
| // H(z) = a(1 + b*z^-1 + b^2*z^-2 + b^3*z^-3 + b^4*z^-4 + b^5*z^-5 + b^6*z^-6 + b^7*z^-7) / (1 - b^8*z^-8) | ||||
| ( | ||||
|  input	 rstn | ||||
| ,input	 clk | ||||
| ,input	 en | ||||
| ,input   signed	[data_in_width-1 :0]   dinp0	//x(8n+16) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp1 //x(8n+15) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp2 //x(8n+14) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp3 //x(8n+13) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp4 //x(8n+12) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp5 //x(8n+11) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp6 //x(8n+10) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp7 //x(8n+9) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp8 | ||||
| ,input   signed	[data_in_width-1 :0]   dinp9  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpa  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpb  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpc  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpd  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpe  | ||||
| ,input   signed	[data_in_width-1 :0]   dinpf  | ||||
| 
 | ||||
| ,input   signed	[coef_width-1    :0]   a_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_re | ||||
| ,input   signed	[coef_width-1    :0]   abb_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow3_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow4_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow5_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow6_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow7_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow8_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow9_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powa_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powb_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powc_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powd_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powe_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_powf_re | ||||
| ,input   signed	[coef_width-1    :0]   b_pow16_re | ||||
| ,input   signed	[coef_width-1    :0]   a_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_im | ||||
| ,input   signed	[coef_width-1    :0]   abb_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow3_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow4_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow5_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow6_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow7_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow8_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow9_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powa_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powb_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powc_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powd_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powe_im | ||||
| ,input   signed	[coef_width-1    :0]   ab_powf_im | ||||
| ,input   signed	[coef_width-1    :0]   b_pow16_im | ||||
| 
 | ||||
| ,output  signed	[data_out_width-1:0]   dout_re		// Re(y(8n-8)) | ||||
| ,output  signed	[data_out_width-1:0]   dout_im		// Re(y(8n-8)) | ||||
| ); | ||||
| 
 | ||||
| wire   signed	[data_in_width-1   :0]   dinp  [15:0]; | ||||
| assign dinp[15] = dinpf; | ||||
| assign dinp[14] = dinpe; | ||||
| assign dinp[13] = dinpd; | ||||
| assign dinp[12] = dinpc; | ||||
| assign dinp[11] = dinpb; | ||||
| assign dinp[10] = dinpa; | ||||
| assign dinp[9 ] = dinp9; | ||||
| assign dinp[8 ] = dinp8; | ||||
| assign dinp[7 ] = dinp7; | ||||
| assign dinp[6 ] = dinp6; | ||||
| assign dinp[5 ] = dinp5; | ||||
| assign dinp[4 ] = dinp4; | ||||
| assign dinp[3 ] = dinp3; | ||||
| assign dinp[2 ] = dinp2; | ||||
| assign dinp[1 ] = dinp1; | ||||
| assign dinp[0 ] = dinp0; | ||||
| 
 | ||||
| wire   signed	[ab_pow_width-1   :0]   ab_pow_re  [15:0]; | ||||
| wire   signed	[ab_pow_width-1   :0]   ab_pow_im  [15:0]; | ||||
| assign ab_pow_re[15] = ab_powf_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[14] = ab_powe_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[13] = ab_powd_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[12] = ab_powc_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[11] = ab_powb_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[10] = ab_powa_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[9 ] = ab_pow9_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[8 ] = ab_pow8_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[7 ] = ab_pow7_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[6 ] = ab_pow6_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[5 ] = ab_pow5_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[4 ] = ab_pow4_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[3 ] = ab_pow3_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[2 ] = abb_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[1 ] = ab_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[0 ] = a_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[15] = ab_powf_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[14] = ab_powe_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[13] = ab_powd_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[12] = ab_powc_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[11] = ab_powb_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[10] = ab_powa_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[9 ] = ab_pow9_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[8 ] = ab_pow8_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[7 ] = ab_pow7_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[6 ] = ab_pow6_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[5 ] = ab_pow5_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[4 ] = ab_pow4_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[3 ] = ab_pow3_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[2 ] = abb_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[1 ] = ab_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_im[0 ] = a_im[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_im[coef_width-ab_pow_width-1]; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| wire	signed	[temp_var_width-1  :0]   x_re [0:15]; | ||||
| 
 | ||||
| wire	signed	[temp_var_width+3  :0]   v_re; | ||||
| reg	signed	[temp_var_width+3  :0]   v1_re; | ||||
| 
 | ||||
| wire    signed	[temp_var_width+3  :0]   y_re; | ||||
| wire    signed	[temp_var_width+3  :0]   y1_re; | ||||
| 
 | ||||
| wire 	signed	[data_out_width-1:0]   y_re_trunc; | ||||
| wire	signed	[temp_var_width-1  :0]   x_im [0:15]; | ||||
| 
 | ||||
| wire	signed	[temp_var_width+3  :0]   v_im; | ||||
| reg	signed	[temp_var_width+3  :0]   v1_im; | ||||
| 
 | ||||
| wire    signed	[temp_var_width+3  :0]   y_im; | ||||
| wire    signed	[temp_var_width+3  :0]   y1_im; | ||||
| 
 | ||||
| wire 	signed	[data_out_width-1:0]   y_im_trunc; | ||||
| 
 | ||||
| // x[0] = (dinp0 * a_re) delay M 	    = a*x(8n+8) | ||||
| // x[1] = (dinp1 * ab_re) delay M  	    = a*b*x(8n+7) | ||||
| // x[2] = (dinp2 * abb_re) delay M  	= a*b^2*x(8n+6) | ||||
| // x[3] = (dinp3 * ab_pow3_re) delay M  = a*b^3*x(8n+5) | ||||
| // x[4] = (dinp4 * ab_pow4_re) delay M  = a*b^4*x(8n+4) | ||||
| // x[5] = (dinp5 * ab_pow5_re) delay M  = a*b^5*x(8n+3) | ||||
| // x[6] = (dinp6 * ab_pow6_re) delay M  = a*b^6*x(8n+2) | ||||
| // x[7] = (dinp7 * ab_pow7_re) delay M  = a*b^7*x(8n+1) | ||||
| genvar i; | ||||
| generate | ||||
|     for (i = 0; i < 16; i = i + 1) begin: mult_c_inst | ||||
|         mult_x #( | ||||
|             .A_width	(data_in_width	), | ||||
|             .C_width	(coef_width	), | ||||
|             .D_width	(coef_width	), | ||||
|             .o_width	(temp_var_width	) | ||||
|         ) inst_c ( | ||||
|             .clk    	(clk		 ), | ||||
|             .rstn   	(rstn		 ), | ||||
|             .en     	(en		     ), | ||||
|             .a      	(dinp[i]	),          | ||||
|             .c      	(ab_pow_re[i]	), | ||||
|             .d      	(ab_pow_im[i]	), | ||||
|             .Re     	(x_re[i]	),         | ||||
|             .Im     	(x_im[i]	) | ||||
|         ); | ||||
|     end | ||||
| endgenerate | ||||
| 
 | ||||
| 
 | ||||
| // v1 = sum_{i=0,1,...,7}{x[i]} delay M = sum_{i=0,1,...,7}{a*b^i*x(8n-i)} | ||||
| assign	v_re       =   x_re[0] + x_re[1] +x_re[2] +x_re[3] +x_re[4] +x_re[5] +x_re[6] +x_re[7] + x_re[8] + x_re[9] + x_re[10] + x_re[11] + x_re[12] + x_re[13] + x_re[14] + x_re[15] ; | ||||
| assign	v_im       =   x_im[0] + x_im[1] +x_im[2] +x_im[3] +x_im[4] +x_im[5] +x_im[6] +x_im[7] + x_im[8] + x_im[9] + x_im[10] + x_im[11] + x_im[12] + x_im[13] + x_im[14] + x_im[15] ; | ||||
| 
 | ||||
| always @(posedge clk or negedge rstn)  | ||||
|   	if (!rstn) | ||||
| 		 begin | ||||
|                 v1_re    <=    'h0; | ||||
|                 v1_im    <=    'h0; | ||||
|  		 end  | ||||
| 	 else if(en) | ||||
| 		 begin | ||||
|                 v1_re    <=    v_re; | ||||
|                 v1_im    <=    v_im; | ||||
| 		  end | ||||
| 	 else | ||||
| 		 begin | ||||
|                 v1_re    <=    v1_re; | ||||
|                 v1_im    <=    v1_im; | ||||
| 		  end | ||||
| 
 | ||||
| 
 | ||||
| // y1 = (b^8 * y) delay M = b^8*y(8n-8) | ||||
| // y = v1 + y1 = sum_{i=0,1,...,7}{a*b^i*x(8n-i)} + b^8*y(8n-8) = y(8n) | ||||
| mult_C | ||||
| #( | ||||
| 	 .A_width	(temp_var_width+4	)  | ||||
| 	,.B_width	(temp_var_width+4	)  | ||||
| 	,.C_width	(coef_width		    )  | ||||
| 	,.D_width	(coef_width		)  | ||||
| 	,.o_width	(temp_var_width+4 	)  | ||||
| ) | ||||
| inst_c17 ( | ||||
|          .clk		(clk    	), | ||||
|          .rstn		(rstn   	), | ||||
|          .en		(en     	), | ||||
|          .a		(y_re		), | ||||
|          .b		(y_im		), | ||||
|          .c		(b_pow16_re	), | ||||
|          .d		(b_pow16_im	), | ||||
|          .Re		(y1_re     	), | ||||
|          .Im		(y1_im     	) | ||||
| ); | ||||
| assign	y_re       =   v1_re + y1_re; | ||||
| assign	y_im       =   v1_im + y1_im; | ||||
| 
 | ||||
| // dout = round(y) delay M = round(y(8n-8)) | ||||
| trunc #( | ||||
| 	 .diw	(temp_var_width+4		) | ||||
| 	,.msb	(temp_var_width-1		) | ||||
| 	,.lsb	(temp_var_width-data_out_width	) | ||||
| ) round_u1 (clk, rstn, en, y_re, y_re_trunc); | ||||
| 
 | ||||
| trunc #( | ||||
| 	 .diw	(temp_var_width+4		) | ||||
| 	,.msb	(temp_var_width-1		) | ||||
| 	,.lsb	(temp_var_width-data_out_width	) | ||||
| ) round_u2 (clk, rstn, en, y_im, y_im_trunc); | ||||
| 
 | ||||
| assign	dout_re = y_re_trunc; | ||||
| assign	dout_im = y_im_trunc; | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
|  | @ -1,143 +0,0 @@ | |||
| module  IIR_Filter_p8 #( | ||||
|  parameter  coef_width          = 32 | ||||
| ,parameter  b_pow8_width	= 29 | ||||
| ,parameter  ab_pow_width	= 32  | ||||
| ,parameter  data_in_width       = 16  | ||||
| ,parameter  data_out_width	= 16 | ||||
| ,parameter  temp_var_width	= 29 | ||||
| ) | ||||
| // H(z) = a(1 + b*z^-1 + b^2*z^-2 + b^3*z^-3 + b^4*z^-4 + b^5*z^-5 + b^6*z^-6 + b^7*z^-7) / (1 - b^8*z^-8) | ||||
| ( | ||||
|  input	 rstn | ||||
| ,input	 clk | ||||
| ,input	 en | ||||
| ,input   signed	[data_in_width-1 :0]   dinp0	//x(8n+16) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp1 //x(8n+15) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp2 //x(8n+14) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp3 //x(8n+13) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp4 //x(8n+12) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp5 //x(8n+11) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp6 //x(8n+10) | ||||
| ,input   signed	[data_in_width-1 :0]   dinp7 //x(8n+9) | ||||
| 
 | ||||
| ,input   signed	[coef_width-1    :0]   a_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_re | ||||
| ,input   signed	[coef_width-1    :0]   abb_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow3_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow4_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow5_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow6_re | ||||
| ,input   signed	[coef_width-1    :0]   ab_pow7_re | ||||
| 
 | ||||
| ,input   signed	[coef_width-1    :0]   b_pow8_re | ||||
| ,output  signed	[data_out_width-1:0]   dout_re		// Re(y(8n-8)) | ||||
| ); | ||||
| 
 | ||||
| wire   signed	[data_in_width-1   :0]   dinp  [7:0]; | ||||
| assign dinp[7] = dinp7; | ||||
| assign dinp[6] = dinp6; | ||||
| assign dinp[5] = dinp5; | ||||
| assign dinp[4] = dinp4; | ||||
| assign dinp[3] = dinp3; | ||||
| assign dinp[2] = dinp2; | ||||
| assign dinp[1] = dinp1; | ||||
| assign dinp[0] = dinp0; | ||||
| 
 | ||||
| wire   signed	[ab_pow_width-1   :0]   ab_pow_re  [7:0]; | ||||
| assign ab_pow_re[7] = ab_pow7_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[6] = ab_pow6_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[5] = ab_pow5_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[4] = ab_pow4_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[3] = ab_pow3_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[2] = abb_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[1] = ab_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| assign ab_pow_re[0] = a_re[coef_width-1 : coef_width-ab_pow_width];//+ab_pow7_re[coef_width-ab_pow_width-1]; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| wire	signed	[temp_var_width-1  :0]   x_re [0:7]; | ||||
| 
 | ||||
| wire	signed	[temp_var_width+3  :0]   v_re; | ||||
| reg	signed	[temp_var_width+3  :0]   v1_re; | ||||
| 
 | ||||
| wire    signed	[temp_var_width+3  :0]   y_re; | ||||
| wire    signed	[temp_var_width+3  :0]   y1_re; | ||||
| 
 | ||||
| wire 	signed	[data_out_width-1:0]   y_re_trunc; | ||||
| 
 | ||||
| // x[0] = (dinp0 * a_re) delay M 	    = a*x(8n+8) | ||||
| // x[1] = (dinp1 * ab_re) delay M  	    = a*b*x(8n+7) | ||||
| // x[2] = (dinp2 * abb_re) delay M  	= a*b^2*x(8n+6) | ||||
| // x[3] = (dinp3 * ab_pow3_re) delay M  = a*b^3*x(8n+5) | ||||
| // x[4] = (dinp4 * ab_pow4_re) delay M  = a*b^4*x(8n+4) | ||||
| // x[5] = (dinp5 * ab_pow5_re) delay M  = a*b^5*x(8n+3) | ||||
| // x[6] = (dinp6 * ab_pow6_re) delay M  = a*b^6*x(8n+2) | ||||
| // x[7] = (dinp7 * ab_pow7_re) delay M  = a*b^7*x(8n+1) | ||||
| genvar i; | ||||
| generate | ||||
|     for (i = 0; i < 8; i = i + 1) begin: mult_c_inst | ||||
|         mult_real #( | ||||
|             .A_width	(data_in_width	), | ||||
|             .C_width	(ab_pow_width	), | ||||
|             .o_width	(temp_var_width	) | ||||
|         ) inst_c ( | ||||
|             .clk    	(clk		 ), | ||||
|             .rstn   	(rstn		 ), | ||||
|             .en     	(en		     ), | ||||
|             .din      	(dinp[i]	 ),          | ||||
|             .coef      	(ab_pow_re[i]), | ||||
|             .dout     	(x_re[i]	 )         | ||||
|         ); | ||||
|     end | ||||
| endgenerate | ||||
| 
 | ||||
| 
 | ||||
| // v1 = sum_{i=0,1,...,7}{x[i]} delay M = sum_{i=0,1,...,7}{a*b^i*x(8n-i)} | ||||
| assign	v_re       =   x_re[0] + x_re[1] +x_re[2] +x_re[3] +x_re[4] +x_re[5] +x_re[6] +x_re[7]; | ||||
| 
 | ||||
| always @(posedge clk or negedge rstn)  | ||||
|   	if (!rstn) | ||||
| 		 begin | ||||
|                 v1_re    <=    'h0; | ||||
|  		 end  | ||||
| 	 else if(en) | ||||
| 		 begin | ||||
|                 v1_re    <=    v_re; | ||||
| 		  end | ||||
| 	 else | ||||
| 		 begin | ||||
|                 v1_re    <=    v1_re; | ||||
| 		  end | ||||
| 
 | ||||
| 
 | ||||
| // y1 = (b^8 * y) delay M = b^8*y(8n-8) | ||||
| // y = v1 + y1 = sum_{i=0,1,...,7}{a*b^i*x(8n-i)} + b^8*y(8n-8) = y(8n) | ||||
| mult_real | ||||
| #( | ||||
| 	 .A_width	(temp_var_width+4	)  | ||||
| 	,.C_width	(b_pow8_width		)  | ||||
| 	,.o_width	(temp_var_width+4 	)  | ||||
| ) | ||||
| inst_c9 ( | ||||
|          .clk		(clk    	), | ||||
|          .rstn		(rstn   	), | ||||
|          .en		(en     	), | ||||
|          .din		(y_re		), | ||||
|          .coef		(b_pow8_re[coef_width-1 : coef_width-b_pow8_width]),//+b_pow8_re[coef_width-b_pow8_width-1]), | ||||
|          .dout		(y1_re     	) | ||||
| ); | ||||
| 
 | ||||
| assign	y_re       =   v1_re + y1_re; | ||||
| 
 | ||||
| // dout = round(y) delay M = round(y(8n-8)) | ||||
| trunc #( | ||||
| 	 .diw	(temp_var_width+4		) | ||||
| 	,.msb	(temp_var_width-1		) | ||||
| 	,.lsb	(temp_var_width-data_out_width	) | ||||
| ) round_u1 (clk, rstn, en, y_re, y_re_trunc); | ||||
| 
 | ||||
| 
 | ||||
| assign	dout_re = y_re_trunc; | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
|  | @ -34,6 +34,38 @@ module  IIR_top #( | |||
| ,parameter b7_width       = 22 | ||||
| ,parameter b7_i_width	  = 18 | ||||
| ,parameter b7_o_width	  = 18 | ||||
| ,parameter a8_width	  = 23 | ||||
| ,parameter b8_width       = 23 | ||||
| ,parameter b8_i_width	  = 18 | ||||
| ,parameter b8_o_width	  = 18 | ||||
| ,parameter a9_width	  = 24 | ||||
| ,parameter b9_width       = 24 | ||||
| ,parameter b9_i_width	  = 18 | ||||
| ,parameter b9_o_width	  = 18 | ||||
| ,parameter a10_width	  = 25 | ||||
| ,parameter b10_width      = 25 | ||||
| ,parameter b10_i_width	  = 18 | ||||
| ,parameter b10_o_width	  = 18 | ||||
| ,parameter a11_width	  = 26 | ||||
| ,parameter b11_width      = 26 | ||||
| ,parameter b11_i_width	  = 18 | ||||
| ,parameter b11_o_width	  = 18 | ||||
| ,parameter a12_width	  = 27 | ||||
| ,parameter b12_width      = 27 | ||||
| ,parameter b12_i_width	  = 18 | ||||
| ,parameter b12_o_width	  = 18 | ||||
| ,parameter a13_width	  = 28 | ||||
| ,parameter b13_width      = 28 | ||||
| ,parameter b13_i_width	  = 18 | ||||
| ,parameter b13_o_width	  = 18 | ||||
| ,parameter a14_width	  = 29 | ||||
| ,parameter b14_width      = 29 | ||||
| ,parameter b14_i_width	  = 18 | ||||
| ,parameter b14_o_width	  = 18 | ||||
| ,parameter a15_width	  = 29 | ||||
| ,parameter b15_width      = 29 | ||||
| ,parameter b15_i_width	  = 18 | ||||
| ,parameter b15_o_width	  = 18 | ||||
| ) | ||||
| ( | ||||
|  input   rstn | ||||
|  | @ -47,6 +79,14 @@ module  IIR_top #( | |||
| ,input   signed [15   :0]   IIRin_p5                  // x(8n+14)  | ||||
| ,input   signed [15   :0]   IIRin_p6                  // x(8n+15)  | ||||
| ,input   signed [15   :0]   IIRin_p7                  // x(8n+16) | ||||
| ,input   signed [15   :0]   IIRin_p8                  // x(8n+9)    | ||||
| ,input   signed [15   :0]   IIRin_p9                  // x(8n+10)  | ||||
| ,input   signed [15   :0]   IIRin_pa                  // x(8n+11)  | ||||
| ,input   signed [15   :0]   IIRin_pb                  // x(8n+12)  | ||||
| ,input   signed [15   :0]   IIRin_pc                  // x(8n+13)  | ||||
| ,input   signed [15   :0]   IIRin_pd                  // x(8n+14)  | ||||
| ,input   signed [15   :0]   IIRin_pe                  // x(8n+15)  | ||||
| ,input   signed [15   :0]   IIRin_pf                  // x(8n+16) | ||||
| ,input   signed [15   :0]   IIRin_p0_r2               // x(8n+9)  delay  2M -> x(8n- 7)    | ||||
| ,input   signed [15   :0]   IIRin_p1_r4               // x(8n+10) delay  4M -> x(8n-22)  | ||||
| ,input   signed [15   :0]   IIRin_p2_r6               // x(8n+11) delay  6M -> x(8n-37)  | ||||
|  | @ -54,6 +94,14 @@ module  IIR_top #( | |||
| ,input   signed [15   :0]   IIRin_p4_r10              // x(8n+13) delay 10M -> x(8n-67)  | ||||
| ,input   signed [15   :0]   IIRin_p5_r12              // x(8n+14) delay 12M -> x(8n-82)  | ||||
| ,input   signed [15   :0]   IIRin_p6_r14              // x(8n+15) delay 14M -> x(8n-97)  | ||||
| ,input   signed [15   :0]   IIRin_p7_r16              // x(8n+16) delay 16M -> x(8n-112) | ||||
| ,input   signed [15   :0]   IIRin_p8_r18              // x(8n+15) delay 18M -> x(8n-127) | ||||
| ,input   signed [15   :0]   IIRin_p9_r20              // x(8n+14) delay 20M -> x(8n-142) | ||||
| ,input   signed [15   :0]   IIRin_pa_r22              // x(8n+13) delay 22M -> x(8n-157) | ||||
| ,input   signed [15   :0]   IIRin_pb_r24              // x(8n+12) delay 24M -> x(8n-172) | ||||
| ,input   signed [15   :0]   IIRin_pc_r26              // x(8n+11) delay 26M -> x(8n-187) | ||||
| ,input   signed [15   :0]   IIRin_pd_r28              // x(8n+10) delay 28M -> x(8n-202) | ||||
| ,input   signed [15   :0]   IIRin_pe_r30              // x(8n+9)  delay 30M -> x(8n-217) | ||||
| ,input   signed [31   :0]   a_re | ||||
| ,input   signed [31   :0]   b_re | ||||
| ,input   signed [31   :0]   ab_re | ||||
|  | @ -63,7 +111,33 @@ module  IIR_top #( | |||
| ,input   signed [31   :0]   ab_pow5_re | ||||
| ,input   signed [31   :0]   ab_pow6_re | ||||
| ,input   signed [31   :0]   ab_pow7_re | ||||
| ,input   signed [31   :0]   b_pow8_re | ||||
| ,input   signed [31   :0]   ab_pow8_re | ||||
| ,input   signed [31   :0]   ab_pow9_re | ||||
| ,input   signed [31   :0]   ab_powa_re | ||||
| ,input   signed [31   :0]   ab_powb_re | ||||
| ,input   signed [31   :0]   ab_powc_re | ||||
| ,input   signed [31   :0]   ab_powd_re | ||||
| ,input   signed [31   :0]   ab_powe_re | ||||
| ,input   signed [31   :0]   ab_powf_re | ||||
| ,input   signed [31   :0]   b_pow16_re | ||||
| ,input   signed [31   :0]   a_im | ||||
| ,input   signed [31   :0]   b_im | ||||
| ,input   signed [31   :0]   ab_im | ||||
| ,input   signed [31   :0]   abb_im | ||||
| ,input   signed [31   :0]   ab_pow3_im | ||||
| ,input   signed [31   :0]   ab_pow4_im | ||||
| ,input   signed [31   :0]   ab_pow5_im | ||||
| ,input   signed [31   :0]   ab_pow6_im | ||||
| ,input   signed [31   :0]   ab_pow7_im | ||||
| ,input   signed [31   :0]   ab_pow8_im | ||||
| ,input   signed [31   :0]   ab_pow9_im | ||||
| ,input   signed [31   :0]   ab_powa_im | ||||
| ,input   signed [31   :0]   ab_powb_im | ||||
| ,input   signed [31   :0]   ab_powc_im | ||||
| ,input   signed [31   :0]   ab_powd_im | ||||
| ,input   signed [31   :0]   ab_powe_im | ||||
| ,input   signed [31   :0]   ab_powf_im | ||||
| ,input   signed [31   :0]   b_pow16_im | ||||
| 
 | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p0   // y(8n-8) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p1   // y(8n-23) | ||||
|  | @ -73,6 +147,14 @@ module  IIR_top #( | |||
| ,output  signed [data_out_width-1   :0]   IIRout_p5   // y(8n-83) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p6   // y(8n-98) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p7   // y(8n-113) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p8   // y(8n-128) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_p9   // y(8n-143) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pa   // y(8n-158) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pb   // y(8n-173) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pc   // y(8n-188) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pd   // y(8n-203) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pe   // y(8n-218) | ||||
| ,output  signed [data_out_width-1   :0]   IIRout_pf   // y(8n-233) | ||||
|                         ); | ||||
| 
 | ||||
| wire signed [b0_o_width- 1:0] IIRout_p0_re; | ||||
|  | @ -83,39 +165,98 @@ wire signed [b4_o_width- 1:0] IIRout_p4_re; | |||
| wire signed [b5_o_width- 1:0] IIRout_p5_re; | ||||
| wire signed [b6_o_width- 1:0] IIRout_p6_re; | ||||
| wire signed [b7_o_width- 1:0] IIRout_p7_re; | ||||
| wire signed [b8_o_width- 1:0] IIRout_p8_re; | ||||
| wire signed [b9_o_width- 1:0] IIRout_p9_re; | ||||
| wire signed [b10_o_width- 1:0] IIRout_pa_re; | ||||
| wire signed [b11_o_width- 1:0] IIRout_pb_re; | ||||
| wire signed [b12_o_width- 1:0] IIRout_pc_re; | ||||
| wire signed [b13_o_width- 1:0] IIRout_pd_re; | ||||
| wire signed [b14_o_width- 1:0] IIRout_pe_re; | ||||
| wire signed [b15_o_width- 1:0] IIRout_pf_re; | ||||
| wire signed [b0_o_width- 1:0] IIRout_p0_im; | ||||
| wire signed [b1_o_width- 1:0] IIRout_p1_im; | ||||
| wire signed [b2_o_width- 1:0] IIRout_p2_im; | ||||
| wire signed [b3_o_width- 1:0] IIRout_p3_im; | ||||
| wire signed [b4_o_width- 1:0] IIRout_p4_im; | ||||
| wire signed [b5_o_width- 1:0] IIRout_p5_im; | ||||
| wire signed [b6_o_width- 1:0] IIRout_p6_im; | ||||
| wire signed [b7_o_width- 1:0] IIRout_p7_im; | ||||
| wire signed [b8_o_width- 1:0] IIRout_p8_im; | ||||
| wire signed [b9_o_width- 1:0] IIRout_p9_im; | ||||
| wire signed [b10_o_width- 1:0] IIRout_pa_im; | ||||
| wire signed [b11_o_width- 1:0] IIRout_pb_im; | ||||
| wire signed [b12_o_width- 1:0] IIRout_pc_im; | ||||
| wire signed [b13_o_width- 1:0] IIRout_pd_im; | ||||
| wire signed [b14_o_width- 1:0] IIRout_pe_im; | ||||
| wire signed [b15_o_width- 1:0] IIRout_pf_im; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| IIR_Filter_p8 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.b_pow8_width		(b0_width		), | ||||
| 					.ab_pow_width		(a0_width		), | ||||
| 					.temp_var_width		(b0_i_width		), | ||||
| 					.data_out_width		(b0_o_width 		) | ||||
| ) inst_iir_p0 ( | ||||
|                                         .clk                    (clk            	    ), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .dinp0                  (IIRin_p7               ),      // x(8n+16) | ||||
|                                         .dinp1                  (IIRin_p6               ),      // x(8n+15) | ||||
|                                         .dinp2                  (IIRin_p5               ),      // x(8n+14) | ||||
|                                         .dinp3                  (IIRin_p4               ),      // x(8n+13) | ||||
|                                         .dinp4                  (IIRin_p3               ),      // x(8n+12) | ||||
|                                         .dinp5                  (IIRin_p2               ),      // x(8n+11) | ||||
|                                         .dinp6                  (IIRin_p1               ),      // x(8n+10) | ||||
|                                         .dinp7                  (IIRin_p0               ),      // x(8n+9) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .ab_re                  (ab_re                  ), | ||||
|                                         .abb_re                 (abb_re                 ), | ||||
|                                         .ab_pow3_re             (ab_pow3_re             ), | ||||
|                                         .ab_pow4_re             (ab_pow4_re             ), | ||||
|                                         .ab_pow5_re             (ab_pow5_re             ), | ||||
|                                         .ab_pow6_re             (ab_pow6_re             ), | ||||
|                                         .ab_pow7_re             (ab_pow7_re             ), | ||||
|                                         .b_pow8_re              (b_pow8_re              ), | ||||
|                                         .dout_re        	    (IIRout_p0_re   	    )       // Re(y(8n-8)) | ||||
| IIR_Filter_p16#( | ||||
|     .coef_width     ( coef_width     ), | ||||
|     .b_pow16_width  ( b0_width       ), | ||||
|     .ab_pow_width   ( a0_width       ), | ||||
|     .temp_var_width ( b0_i_width     ), | ||||
|     .data_out_width ( b0_o_width     ) | ||||
| )inst_iir_p0( | ||||
|     .rstn           ( rstn           ), | ||||
|     .clk            ( clk            ), | ||||
|     .en             ( en             ), | ||||
|     .dinp0          ( IIRin_pf       ), | ||||
|     .dinp1          ( IIRin_pe       ), | ||||
|     .dinp2          ( IIRin_pd       ), | ||||
|     .dinp3          ( IIRin_pc       ), | ||||
|     .dinp4          ( IIRin_pb       ), | ||||
|     .dinp5          ( IIRin_pa       ), | ||||
|     .dinp6          ( IIRin_p9       ), | ||||
|     .dinp7          ( IIRin_p8       ), | ||||
|     .dinp8          ( IIRin_p7       ), | ||||
|     .dinp9          ( IIRin_p6       ), | ||||
|     .dinpa          ( IIRin_p5       ), | ||||
|     .dinpb          ( IIRin_p4       ), | ||||
|     .dinpc          ( IIRin_p3       ), | ||||
|     .dinpd          ( IIRin_p2       ), | ||||
|     .dinpe          ( IIRin_p1       ), | ||||
|     .dinpf          ( IIRin_p0       ), | ||||
|     .a_re           ( a_re           ), | ||||
|     .ab_re          ( ab_re          ), | ||||
|     .abb_re         ( abb_re         ), | ||||
|     .ab_pow3_re     ( ab_pow3_re     ), | ||||
|     .ab_pow4_re     ( ab_pow4_re     ), | ||||
|     .ab_pow5_re     ( ab_pow5_re     ), | ||||
|     .ab_pow6_re     ( ab_pow6_re     ), | ||||
|     .ab_pow7_re     ( ab_pow7_re     ), | ||||
|     .ab_pow8_re     ( ab_pow8_re     ), | ||||
|     .ab_pow9_re     ( ab_pow9_re     ), | ||||
|     .ab_powa_re     ( ab_powa_re     ), | ||||
|     .ab_powb_re     ( ab_powb_re     ), | ||||
|     .ab_powc_re     ( ab_powc_re     ), | ||||
|     .ab_powd_re     ( ab_powd_re     ), | ||||
|     .ab_powe_re     ( ab_powe_re     ), | ||||
|     .ab_powf_re     ( ab_powf_re     ), | ||||
|     .b_pow16_re     ( b_pow16_re     ), | ||||
|     .a_im           ( a_im           ), | ||||
|     .ab_im          ( ab_im          ), | ||||
|     .abb_im         ( abb_im         ), | ||||
|     .ab_pow3_im     ( ab_pow3_im     ), | ||||
|     .ab_pow4_im     ( ab_pow4_im     ), | ||||
|     .ab_pow5_im     ( ab_pow5_im     ), | ||||
|     .ab_pow6_im     ( ab_pow6_im     ), | ||||
|     .ab_pow7_im     ( ab_pow7_im     ), | ||||
|     .ab_pow8_im     ( ab_pow8_im     ), | ||||
|     .ab_pow9_im     ( ab_pow9_im     ), | ||||
|     .ab_powa_im     ( ab_powa_im     ), | ||||
|     .ab_powb_im     ( ab_powb_im     ), | ||||
|     .ab_powc_im     ( ab_powc_im     ), | ||||
|     .ab_powd_im     ( ab_powd_im     ), | ||||
|     .ab_powe_im     ( ab_powe_im     ), | ||||
|     .ab_powf_im     ( ab_powf_im     ), | ||||
|     .b_pow16_im     ( b_pow16_im     ), | ||||
|     .dout_re        ( IIRout_p0_re   ), | ||||
|     .dout_im        ( IIRout_p0_im   ) | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a1_width		), | ||||
|  | @ -128,9 +269,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p0_r2    	),      // x(8n-7) | ||||
|                                         .dout_r1_re             (IIRout_p0_re   	),      // Re(y(8n-8)) | ||||
|                                         .dout_r1_im             (IIRout_p0_im   	),      // Re(y(8n-8)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p1_re   	)       // Re(y(8n-23)) | ||||
|                                         .dout_re        	(IIRout_p1_re   	),       // Re(y(8n-23)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p1_im   	)       // Re(y(8n-23)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -144,9 +289,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p1_r4  		),      // x(8n-22) | ||||
|                                         .dout_r1_re             (IIRout_p1_re   	),      // Re(y(8n-23)) | ||||
|                                         .dout_r1_im             (IIRout_p1_im   	),      // Re(y(8n-23)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p2_re   	)       // Re(y(8n-38)) | ||||
|                                         .dout_re        	(IIRout_p2_re   	),       // Re(y(8n-38)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p2_im   	)       // Re(y(8n-38)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -160,9 +309,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p2_r6  		),      // x(8n-37) | ||||
|                                         .dout_r1_re             (IIRout_p2_re   	),      // Re(y(8n-38)) | ||||
|                                         .dout_r1_im             (IIRout_p2_im   	),      // Re(y(8n-38)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p3_re       )       // Re(y(8n-53)) | ||||
|                                         .dout_re        	(IIRout_p3_re           ),       // Re(y(8n-53)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p3_im           )       // Re(y(8n-53)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -176,9 +329,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p3_r8  		),      // x(8n-52) | ||||
|                                         .dout_r1_re             (IIRout_p3_re   	),      // Re(y(8n-53)) | ||||
|                                         .dout_r1_im             (IIRout_p3_im   	),      // Re(y(8n-53)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p4_re   	)       // Re(y(8n-68)) | ||||
|                                         .dout_re        	(IIRout_p4_re   	),       // Re(y(8n-68)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p4_im   	)       // Re(y(8n-68)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -192,9 +349,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p4_r10		),      // x(8n-67) | ||||
|                                         .dout_r1_re             (IIRout_p4_re   	),      // Re(y(8n-68)) | ||||
|                                         .dout_r1_im             (IIRout_p4_im   	),      // Re(y(8n-68)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p5_re   	)       // Re(y(8n-83)) | ||||
|                                         .dout_re        	(IIRout_p5_re   	),       // Re(y(8n-83)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p5_im   	)       // Re(y(8n-83)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -208,9 +369,13 @@ IIR_Filter_p1 #( | |||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p5_r12 		),      // x(8n-82) | ||||
|                                         .dout_r1_re             (IIRout_p5_re   	),      // Re(y(8n-83)) | ||||
|                                         .dout_r1_im             (IIRout_p5_im   	),      // Re(y(8n-83)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p6_re   	)       // Re(y(8n-98)) | ||||
|                                         .dout_re        	(IIRout_p6_re   	),       // Re(y(8n-98)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p6_im   	)       // Re(y(8n-98)) | ||||
| ); | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
|  | @ -226,7 +391,178 @@ IIR_Filter_p1 #( | |||
|                                         .dout_r1_re             (IIRout_p6_re   	),      // Re(y(8n-98)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	    (IIRout_p7_re   	)       // Re(y(8n-113)) | ||||
|                                         .dout_re        	(IIRout_p7_re   	),       // Re(y(8n-113)) | ||||
|                                         .dout_r1_im             (IIRout_p6_im   	),      // Re(y(8n-98)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p7_im   	)       // Re(y(8n-113)) | ||||
| );   | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a8_width		), | ||||
| 					.b_width		(b8_width		), | ||||
| 					.cascade_in_width	(b8_i_width	 	), | ||||
| 					.data_out_width		(b8_o_width		) | ||||
| ) inst_iir_p8 ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p7_r16 		),      // x(8n-112) | ||||
|                                         .dout_r1_re             (IIRout_p7_re   	),      // Re(y(8n-113)) | ||||
|                                         .dout_r1_im             (IIRout_p7_im   	),      // Re(y(8n-113)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_p8_re   	),       // Re(y(8n-128)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p8_im   	)       // Re(y(8n-128)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a9_width		), | ||||
| 					.b_width		(b9_width		), | ||||
| 					.cascade_in_width	(b9_i_width	 	), | ||||
| 					.data_out_width		(b9_o_width		) | ||||
| ) inst_iir_p9 ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p8_r18 		),      // x(8n-127) | ||||
|                                         .dout_r1_re             (IIRout_p8_re   	),      // Re(y(8n-128)) | ||||
|                                         .dout_r1_im             (IIRout_p8_im   	),      // Re(y(8n-128)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_p9_re   	),       // Re(y(8n-143)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_p9_im   	)       // Re(y(8n-143)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a10_width		), | ||||
| 					.b_width		(b10_width		), | ||||
| 					.cascade_in_width	(b10_i_width	 	), | ||||
| 					.data_out_width		(b10_o_width		) | ||||
| ) inst_iir_pa ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_p9_r20 		),      // x(8n-142) | ||||
|                                         .dout_r1_re             (IIRout_p9_re   	),      // Re(y(8n-143)) | ||||
|                                         .dout_r1_im             (IIRout_p9_im   	),      // Re(y(8n-143)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pa_re   	),       // Re(y(8n-158)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pa_im   	)       // Re(y(8n-158)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a11_width		), | ||||
| 					.b_width		(b11_width		), | ||||
| 					.cascade_in_width	(b11_i_width	 	), | ||||
| 					.data_out_width		(b11_o_width		) | ||||
| ) inst_iir_pb ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_pa_r22 		),      // x(8n-157) | ||||
|                                         .dout_r1_re             (IIRout_pa_re   	),      // Re(y(8n-158)) | ||||
|                                         .dout_r1_im             (IIRout_pa_im   	),      // Re(y(8n-158)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pb_re   	),       // Re(y(8n-173)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pb_im   	)       // Re(y(8n-173)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a12_width		), | ||||
| 					.b_width		(b12_width		), | ||||
| 					.cascade_in_width	(b12_i_width	 	), | ||||
| 					.data_out_width		(b12_o_width		) | ||||
| ) inst_iir_pc ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_pb_r24 		),      // x(8n-172) | ||||
|                                         .dout_r1_re             (IIRout_pb_re   	),      // Re(y(8n-173)) | ||||
|                                         .dout_r1_im             (IIRout_pb_im   	),      // Re(y(8n-173)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pc_re   	),       // Re(y(8n-188)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pc_im   	)       // Re(y(8n-188)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a13_width		), | ||||
| 					.b_width		(b13_width		), | ||||
| 					.cascade_in_width	(b13_i_width	 	), | ||||
| 					.data_out_width		(b13_o_width		) | ||||
| ) inst_iir_pd ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_pc_r26 		),      // x(8n-187) | ||||
|                                         .dout_r1_re             (IIRout_pc_re   	),      // Re(y(8n-188)) | ||||
|                                         .dout_r1_im             (IIRout_pc_im   	),      // Re(y(8n-188)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pd_re   	),       // Re(y(8n-203)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pd_im   	)       // Re(y(8n-203)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a14_width		), | ||||
| 					.b_width		(b14_width		), | ||||
| 					.cascade_in_width	(b14_i_width	 	), | ||||
| 					.data_out_width		(b14_o_width		) | ||||
| ) inst_iir_pe ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_pd_r28 		),      // x(8n-202) | ||||
|                                         .dout_r1_re             (IIRout_pd_re   	),      // Re(y(8n-203)) | ||||
|                                         .dout_r1_im             (IIRout_pd_im   	),      // Re(y(8n-203)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pe_re   	),       // Re(y(8n-218)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pe_im   	)       // Re(y(8n-218)) | ||||
| ); | ||||
| 
 | ||||
| IIR_Filter_p1 #( | ||||
| 					.coef_width		(coef_width		), | ||||
| 					.a_width		(a15_width		), | ||||
| 					.b_width		(b15_width		), | ||||
| 					.cascade_in_width	(b15_i_width	 	), | ||||
| 					.data_out_width		(b15_o_width		) | ||||
| ) inst_iir_pf ( | ||||
|                                         .clk                    (clk            	), | ||||
|                                         .rstn                   (rstn                   ), | ||||
|                                         .en                     (en                     ), | ||||
|                                         .din_re                 (IIRin_pe_r30 		),      // x(8n-217) | ||||
|                                         .dout_r1_re             (IIRout_pe_re   	),      // Re(y(8n-218)) | ||||
|                                         .dout_r1_im             (IIRout_pe_im   	),      // Re(y(8n-218)) | ||||
|                                         .a_re                   (a_re                   ), | ||||
|                                         .b_re                   (b_re                   ), | ||||
|                                         .dout_re        	(IIRout_pf_re   	),       // Re(y(8n-233)) | ||||
|                                         .a_im                   (a_im                   ), | ||||
|                                         .b_im                   (b_im                   ), | ||||
|                                         .dout_im        	(IIRout_pf_im   	)       // Re(y(8n-233)) | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -238,6 +574,14 @@ assign IIRout_p4 = IIRout_p4_re[b4_o_width-1 : b4_o_width-data_out_width]; | |||
| assign IIRout_p5 = IIRout_p5_re[b5_o_width-1 : b5_o_width-data_out_width];      // y(8n-83) | ||||
| assign IIRout_p6 = IIRout_p6_re[b6_o_width-1 : b6_o_width-data_out_width];      // y(8n-98) | ||||
| assign IIRout_p7 = IIRout_p7_re[b7_o_width-1 : b7_o_width-data_out_width];      // y(8n-113) | ||||
| assign IIRout_p8 = IIRout_p8_re[b8_o_width-1 : b8_o_width-data_out_width];      // y(8n-128) | ||||
| assign IIRout_p9 = IIRout_p9_re[b9_o_width-1 : b9_o_width-data_out_width];      // y(8n-143) | ||||
| assign IIRout_pa = IIRout_pa_re[b10_o_width-1 : b10_o_width-data_out_width];    // y(8n-158) | ||||
| assign IIRout_pb = IIRout_pb_re[b11_o_width-1 : b11_o_width-data_out_width];    // y(8n-173) | ||||
| assign IIRout_pc = IIRout_pc_re[b12_o_width-1 : b12_o_width-data_out_width];    // y(8n-188) | ||||
| assign IIRout_pd = IIRout_pd_re[b13_o_width-1 : b13_o_width-data_out_width];    // y(8n-203) | ||||
| assign IIRout_pe = IIRout_pe_re[b14_o_width-1 : b14_o_width-data_out_width];    // y(8n-218) | ||||
| assign IIRout_pf = IIRout_pf_re[b15_o_width-1 : b15_o_width-data_out_width];    // y(8n-233) | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,6 +1,5 @@ | |||
| 
 | ||||
| module 	diff_p	 	 | ||||
| 
 | ||||
| ( | ||||
|  input                 rstn | ||||
| ,input                 clk | ||||
|  | @ -10,15 +9,19 @@ module 	diff_p | |||
| ,input   signed [15:0] din1 | ||||
| ,input   signed [15:0] din2 | ||||
| ,input   signed [15:0] din3 | ||||
| ,input   signed [15:0] din4 | ||||
| ,input   signed [15:0] din5 | ||||
| ,input   signed [15:0] din6 | ||||
| ,input   signed [15:0] din7 | ||||
| ,input   signed [15:0] din8 | ||||
| ,input   signed [15:0] din9 | ||||
| ,input   signed [15:0] dina | ||||
| ,input   signed [15:0] dinb | ||||
| ,input   signed [15:0] dinc | ||||
| ,input   signed [15:0] dind | ||||
| ,input   signed [15:0] dine | ||||
| ,input   signed [15:0] dinf | ||||
| ,output                vldo  | ||||
| ,output  signed	[15:0] dout_p0 | ||||
| ,output  signed	[15:0] dout_p1 | ||||
| ,output  signed	[15:0] dout_p2 | ||||
| ,output  signed	[15:0] dout_p3 | ||||
| ,output  signed	[15:0] dout_p4 | ||||
| ,output  signed	[15:0] dout_p5 | ||||
| ,output  signed	[15:0] dout_p6 | ||||
| ,output  signed	[15:0] dout_p7 | ||||
| ,output  signed	[15:0] diff_p0 | ||||
| ,output  signed	[15:0] diff_p1 | ||||
| ,output  signed	[15:0] diff_p2 | ||||
|  | @ -27,81 +30,19 @@ module 	diff_p | |||
| ,output  signed	[15:0] diff_p5 | ||||
| ,output  signed	[15:0] diff_p6 | ||||
| ,output  signed	[15:0] diff_p7 | ||||
| ,output  signed	[15:0] diff_p8 | ||||
| ,output  signed	[15:0] diff_p9 | ||||
| ,output  signed	[15:0] diff_pa | ||||
| ,output  signed	[15:0] diff_pb | ||||
| ,output  signed	[15:0] diff_pc | ||||
| ,output  signed	[15:0] diff_pd | ||||
| ,output  signed	[15:0] diff_pe | ||||
| ,output  signed	[15:0] diff_pf | ||||
| 
 | ||||
| 		 	);		 | ||||
| wire signed [15:0] dinf_r1; | ||||
| 
 | ||||
| wire  signed  [15:0]  din_p0_r0; | ||||
| wire  signed  [15:0]  din_p1_r0; | ||||
| wire  signed  [15:0]  din_p2_r0; | ||||
| wire  signed  [15:0]  din_p3_r0; | ||||
| wire  signed  [15:0]  din_p4_r0; | ||||
| wire  signed  [15:0]  din_p5_r0; | ||||
| wire  signed  [15:0]  din_p6_r0; | ||||
| wire  signed  [15:0]  din_p7_r0; | ||||
| wire  vldo_0; | ||||
| wire  vldo_1; | ||||
| wire  vldo_2; | ||||
| wire  vldo_3; | ||||
| wire  vldo_r0; | ||||
| assign  vldo_r0  =  vldo_0 || vldo_1 || vldo_2 || vldo_3;  | ||||
| sirv_gnrl_dffr #(1) dff_vldo_1(vldo_r0, vldo ,clk,rstn); | ||||
| s2p_2 inst1_s2p_2 ( | ||||
|         .clk    (clk), | ||||
|         .rst_n  (rstn), | ||||
|         .din    (din0), | ||||
|         .en   (vldi), | ||||
|         .dout0 (din_p0_r0), | ||||
|         .dout1 (din_p4_r0) | ||||
|         ,.vldo( vldo_0) | ||||
|     ); | ||||
| s2p_2 inst2_s2p_2 ( | ||||
|         .clk    (clk), | ||||
|         .rst_n  (rstn), | ||||
|         .din    (din1), | ||||
|         .en   (vldi), | ||||
|         .dout0 (din_p1_r0), | ||||
|         .dout1 (din_p5_r0) | ||||
|         ,.vldo( vldo_1) | ||||
|     ); | ||||
| s2p_2 inst3_s2p_2 ( | ||||
|         .clk    (clk), | ||||
|         .rst_n  (rstn), | ||||
|         .din    (din2), | ||||
|         .en   (vldi), | ||||
|         .dout0 (din_p2_r0), | ||||
|         .dout1 (din_p6_r0) | ||||
|         ,.vldo( vldo_2) | ||||
|     ); | ||||
| s2p_2 inst4_s2p_2 ( | ||||
|         .clk    (clk), | ||||
|         .rst_n  (rstn), | ||||
|         .din    (din3), | ||||
|         .en   (vldi), | ||||
|         .dout0 (din_p3_r0), | ||||
|         .dout1 (din_p7_r0) | ||||
|         ,.vldo( vldo_3) | ||||
|     ); | ||||
| 
 | ||||
| 
 | ||||
| wire  signed [15:0]		    din_p0_r1; | ||||
| wire  signed [15:0]		    din_p1_r1; | ||||
| wire  signed [15:0]		    din_p2_r1; | ||||
| wire  signed [15:0]		    din_p3_r1; | ||||
| wire  signed [15:0]		    din_p4_r1; | ||||
| wire  signed [15:0]		    din_p5_r1; | ||||
| wire  signed [15:0]		    din_p6_r1; | ||||
| wire  signed [15:0]		    din_p7_r1; | ||||
| 
 | ||||
| sirv_gnrl_dfflr #(16) din_p7_1(en,din_p7_r0, din_p7_r1 ,clk,rstn); | ||||
| 
 | ||||
| assign  dout_p0 = din_p0_r0; | ||||
| assign  dout_p1 = din_p1_r0; | ||||
| assign  dout_p2 = din_p2_r0; | ||||
| assign  dout_p3 = din_p3_r0; | ||||
| assign  dout_p4 = din_p4_r0; | ||||
| assign  dout_p5 = din_p5_r0; | ||||
| assign  dout_p6 = din_p6_r0; | ||||
| assign  dout_p7 = din_p7_r0; | ||||
| sirv_gnrl_dfflr #(16) din_pf_1(en,dinf, dinf_r1 ,clk,rstn); | ||||
| 
 | ||||
| reg signed [15:0] diff_p0_r1; | ||||
| reg signed [15:0] diff_p1_r1; | ||||
|  | @ -111,6 +52,14 @@ reg signed [15:0] diff_p4_r1; | |||
| reg signed [15:0] diff_p5_r1; | ||||
| reg signed [15:0] diff_p6_r1; | ||||
| reg signed [15:0] diff_p7_r1; | ||||
| reg signed [15:0] diff_p8_r1; | ||||
| reg signed [15:0] diff_p9_r1; | ||||
| reg signed [15:0] diff_pa_r1; | ||||
| reg signed [15:0] diff_pb_r1; | ||||
| reg signed [15:0] diff_pc_r1; | ||||
| reg signed [15:0] diff_pd_r1; | ||||
| reg signed [15:0] diff_pe_r1; | ||||
| reg signed [15:0] diff_pf_r1; | ||||
| 
 | ||||
| always  @(posedge clk or negedge rstn)begin | ||||
| if(rstn==1'b0)begin | ||||
|  | @ -122,17 +71,32 @@ if(rstn==1'b0)begin | |||
|     diff_p5_r1 <= 0; | ||||
|     diff_p6_r1 <= 0; | ||||
|     diff_p7_r1 <= 0; | ||||
| 
 | ||||
|     diff_p8_r1 <= 0; | ||||
|     diff_p9_r1 <= 0; | ||||
|     diff_pa_r1 <= 0; | ||||
|     diff_pb_r1 <= 0; | ||||
|     diff_pc_r1 <= 0; | ||||
|     diff_pd_r1 <= 0; | ||||
|     diff_pe_r1 <= 0; | ||||
|     diff_pf_r1 <= 0; | ||||
| end | ||||
| else if(en)begin | ||||
|     diff_p0_r1 <= din_p0_r0 - din_p7_r1; | ||||
|     diff_p1_r1 <= din_p1_r0 - din_p0_r0; | ||||
|     diff_p2_r1 <= din_p2_r0 - din_p1_r0; | ||||
|     diff_p3_r1 <= din_p3_r0 - din_p2_r0; | ||||
|     diff_p4_r1 <= din_p4_r0 - din_p3_r0; | ||||
|     diff_p5_r1 <= din_p5_r0 - din_p4_r0; | ||||
|     diff_p6_r1 <= din_p6_r0 - din_p5_r0; | ||||
|     diff_p7_r1 <= din_p7_r0 - din_p6_r0; | ||||
|     diff_p0_r1 <= din0 - dinf_r1; | ||||
|     diff_p1_r1 <= din1 - din0; | ||||
|     diff_p2_r1 <= din2 - din1; | ||||
|     diff_p3_r1 <= din3 - din2; | ||||
|     diff_p4_r1 <= din4 - din3; | ||||
|     diff_p5_r1 <= din5 - din4; | ||||
|     diff_p6_r1 <= din6 - din5; | ||||
|     diff_p7_r1 <= din7 - din6; | ||||
|     diff_p8_r1 <= din8 - din7; | ||||
|     diff_p9_r1 <= din9 - din8 ; | ||||
|     diff_pa_r1 <= dina - din9 ; | ||||
|     diff_pb_r1 <= dinb - dina; | ||||
|     diff_pc_r1 <= dinc - dinb; | ||||
|     diff_pd_r1 <= dind - dinc; | ||||
|     diff_pe_r1 <= dine - dind; | ||||
|     diff_pf_r1 <= dinf - dine; | ||||
| end | ||||
| else begin | ||||
|     diff_p0_r1 <= diff_p0_r1; | ||||
|  | @ -143,6 +107,14 @@ else begin | |||
|     diff_p5_r1 <= diff_p5_r1; | ||||
|     diff_p6_r1 <= diff_p6_r1; | ||||
|     diff_p7_r1 <= diff_p7_r1; | ||||
|     diff_p8_r1 <= diff_p8_r1; | ||||
|     diff_p9_r1 <= diff_p9_r1; | ||||
|     diff_pa_r1 <= diff_pa_r1; | ||||
|     diff_pb_r1 <= diff_pb_r1; | ||||
|     diff_pc_r1 <= diff_pc_r1; | ||||
|     diff_pd_r1 <= diff_pd_r1; | ||||
|     diff_pe_r1 <= diff_pe_r1; | ||||
|     diff_pf_r1 <= diff_pf_r1; | ||||
| end | ||||
| end | ||||
| 
 | ||||
|  | @ -154,6 +126,16 @@ assign diff_p4 = diff_p4_r1; | |||
| assign diff_p5 = diff_p5_r1; | ||||
| assign diff_p6 = diff_p6_r1; | ||||
| assign diff_p7 = diff_p7_r1; | ||||
| assign diff_p8 = diff_p8_r1; | ||||
| assign diff_p9 = diff_p9_r1; | ||||
| assign diff_pa = diff_pa_r1; | ||||
| assign diff_pb = diff_pb_r1; | ||||
| assign diff_pc = diff_pc_r1; | ||||
| assign diff_pd = diff_pd_r1; | ||||
| assign diff_pe = diff_pe_r1; | ||||
| assign diff_pf = diff_pf_r1; | ||||
| 
 | ||||
| sirv_gnrl_dffr #(1) vldo_1(vldi, vldo ,clk,rstn); | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,86 @@ | |||
| module mult_C #( | ||||
|  parameter    integer    A_width = 8 | ||||
| ,parameter    integer    B_width = 8 | ||||
| ,parameter    integer    C_width = 8 | ||||
| ,parameter    integer    D_width = 8 | ||||
| ,parameter    integer    o_width = 31//division | ||||
| 
 | ||||
| ) | ||||
| 
 | ||||
| ( | ||||
|             clk, | ||||
|             rstn, | ||||
|             en, | ||||
|             a, | ||||
|             b, | ||||
|             c, | ||||
|             d, | ||||
|             Re, | ||||
|             Im | ||||
| ); | ||||
| 
 | ||||
| input       rstn; | ||||
| input       clk; | ||||
| input       en; | ||||
| input       signed  [A_width-1        :0]       a; | ||||
| input       signed  [B_width-1        :0]       b; | ||||
| input       signed  [C_width-1        :0]       c; | ||||
| input       signed  [D_width-1        :0]       d; | ||||
| 
 | ||||
| output      signed  [o_width-1        :0]       Re; | ||||
| output      signed  [o_width-1        :0]       Im; | ||||
| 
 | ||||
| wire        signed  [A_width+C_width-1:0]       ac; | ||||
| wire        signed  [B_width+D_width-1:0]       bd; | ||||
| wire        signed  [A_width+D_width-1:0]       ad; | ||||
| wire        signed  [B_width+C_width-1:0]       bc; | ||||
| wire        signed  [A_width+C_width  :0]       Re_tmp; | ||||
| wire        signed  [A_width+D_width  :0]       Im_tmp; | ||||
| wire        signed  [o_width-1        :0]       Re_trunc; | ||||
| wire        signed  [o_width-1        :0]       Im_trunc; | ||||
| 
 | ||||
| wire        signed  [A_width:0]       sum_ab;    | ||||
| wire        signed  [C_width:0]       sum_cd;    | ||||
| wire        signed  [A_width+C_width+1:0]       product_of_sums; | ||||
| 
 | ||||
| assign sum_ab = a + b; | ||||
| assign sum_cd = c + d; | ||||
| 
 | ||||
| 
 | ||||
| DW02_mult       #(A_width,C_width) inst_c1(     .A              (a              ), | ||||
|                                                 .B              (c              ), | ||||
|                                                 .TC             (1'b1           ), | ||||
|                                                 .PRODUCT        (ac             ) | ||||
|                                 ); | ||||
| 
 | ||||
| DW02_mult       #(B_width,D_width) inst_c2(     .A              (b              ), | ||||
|                                                 .B              (d              ), | ||||
|                                                 .TC             (1'b1           ), | ||||
|                                                 .PRODUCT        (bd             ) | ||||
|                                 ); | ||||
| 
 | ||||
| DW02_mult       #(A_width+1,D_width+1) inst_c3( .A              (sum_ab         ), | ||||
|                                                 .B              (sum_cd         ), | ||||
|                                                 .TC             (1'b1           ), | ||||
|                                                 .PRODUCT        (product_of_sums) | ||||
|                                 ); | ||||
| 
 | ||||
| assign    Re_tmp  =  ac - bd; | ||||
| assign    Im_tmp  =  product_of_sums - ac - bd; | ||||
| 
 | ||||
| trunc #( | ||||
|          .diw   (A_width+C_width+1              ) | ||||
|         ,.msb   (A_width+C_width-2              ) | ||||
|         ,.lsb   (A_width+C_width-o_width-1      ) | ||||
| ) u_round1 (clk, rstn, en, Re_tmp, Re_trunc); | ||||
| trunc #( | ||||
|          .diw   (A_width+D_width+1              ) | ||||
|         ,.msb   (A_width+D_width-2              ) | ||||
|         ,.lsb   (A_width+C_width-o_width-1      ) | ||||
| ) u_round2 (clk, rstn, en, Im_tmp, Im_trunc); | ||||
| 
 | ||||
| // Since this is complex multiplication, the output bit width needs to be increased by one compared to the input. | ||||
| assign  Re = Re_trunc; | ||||
| assign  Im = Im_trunc; | ||||
| 
 | ||||
| endmodule | ||||
|  | @ -1,39 +0,0 @@ | |||
| 
 | ||||
| module mult_real #( | ||||
|  parameter    integer    A_width = 8 | ||||
| ,parameter    integer    C_width = 8 | ||||
| ,parameter    integer    o_width = 31//division | ||||
| 
 | ||||
| ) | ||||
| 
 | ||||
| ( | ||||
|  input       rstn | ||||
| ,input       clk | ||||
| ,input       en | ||||
| ,input       signed  [A_width-1        :0]	din | ||||
| ,input       signed  [C_width-1        :0]	coef | ||||
| ,output      signed  [o_width-1        :0]	dout | ||||
| 
 | ||||
| ); | ||||
| 
 | ||||
| wire	    signed  [A_width+C_width-1:0]	ac; | ||||
| wire        signed  [o_width-1        :0]	Re_trunc; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| DW02_mult	#(A_width,C_width) inst_c1   ( | ||||
|                         .A		    (din	), | ||||
| 						.B		    (coef	), | ||||
| 						.TC		    (1'b1	), | ||||
| 						.PRODUCT	(ac  	) | ||||
| 				); | ||||
| 
 | ||||
| trunc #( | ||||
| 	 .diw	(A_width+C_width		) | ||||
| 	,.msb	(A_width+C_width-2		) | ||||
| 	,.lsb	(A_width+C_width-o_width-1 	) | ||||
| ) u_round1 (clk, rstn, en, ac, Re_trunc); | ||||
| 
 | ||||
| assign	dout = Re_trunc; | ||||
| 
 | ||||
| endmodule | ||||
|  | @ -0,0 +1,66 @@ | |||
| module mult_x #( | ||||
|  parameter    integer    A_width = 8 | ||||
| ,parameter    integer    C_width = 8 | ||||
| ,parameter    integer    D_width = 8 | ||||
| ,parameter    integer    o_width = 31//division | ||||
| 
 | ||||
| ) | ||||
| 
 | ||||
| ( | ||||
|             clk, | ||||
|             rstn, | ||||
|             en, | ||||
|             a, | ||||
| 	    c, | ||||
| 	    d, | ||||
| 	    Re, | ||||
| 	    Im | ||||
| ); | ||||
| 
 | ||||
| input       rstn; | ||||
| input       clk; | ||||
| input       en; | ||||
| input       signed  [A_width-1        :0]	a; | ||||
| input       signed  [C_width-1        :0]	c; | ||||
| input       signed  [D_width-1        :0]	d; | ||||
| 
 | ||||
| output      signed  [o_width-1        :0]	Re; | ||||
| output      signed  [o_width-1        :0]	Im; | ||||
| 
 | ||||
| wire	    signed  [A_width+C_width-1:0]	ac; | ||||
| wire	    signed  [A_width+D_width-1:0]	ad; | ||||
| wire        signed  [o_width-1        :0]	Re_trunc; | ||||
| wire        signed  [o_width-1        :0]	Im_trunc; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| DW02_mult	#(A_width,C_width) inst_c1(	.A		(a		), | ||||
| 						.B		(c		), | ||||
| 						.TC		(1'b1		), | ||||
| 						.PRODUCT	(ac		) | ||||
| 				); | ||||
| 
 | ||||
| DW02_mult	#(A_width,D_width) inst_c3(	.A		(a		), | ||||
| 						.B		(d		), | ||||
| 						.TC		(1'b1		), | ||||
| 						.PRODUCT	(ad		) | ||||
| 				); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| trunc #( | ||||
| 	 .diw	(A_width+C_width		) | ||||
| 	,.msb	(A_width+C_width-2		) | ||||
| 	,.lsb	(A_width+C_width-o_width-1 	) | ||||
| ) u_round1 (clk, rstn, en, ac, Re_trunc); | ||||
| trunc #( | ||||
| 	 .diw	(A_width+D_width		) | ||||
| 	,.msb	(A_width+D_width-2		) | ||||
| 	,.lsb	(A_width+D_width-o_width-1	) | ||||
| ) u_round2 (clk, rstn, en, ad, Im_trunc); | ||||
| 
 | ||||
| // Since this is complex multiplication, the output bit width needs to be increased by one compared to the input. | ||||
| assign	Re = Re_trunc; | ||||
| assign	Im = Im_trunc; | ||||
| 
 | ||||
| endmodule | ||||
|  | @ -1,57 +0,0 @@ | |||
| 
 | ||||
| module 	rate_adapter	 	 | ||||
| ( | ||||
|  input                  rstn | ||||
| ,input                  clk | ||||
| ,input                  en | ||||
| ,input                  vldi | ||||
| ,input  signed [15:0]   din0 | ||||
| ,input  signed [15:0]   din1 | ||||
| ,input  signed [15:0]   din2 | ||||
| ,input  signed [15:0]   din3 | ||||
| ,input  signed [15:0]   din4 | ||||
| ,input  signed [15:0]   din5 | ||||
| ,input  signed [15:0]   din6 | ||||
| ,input  signed [15:0]   din7 | ||||
| ,output signed [15:0]   dout0 | ||||
| ,output signed [15:0]   dout1 | ||||
| ,output signed [15:0]   dout2 | ||||
| ,output signed [15:0]   dout3 | ||||
| ,output                 vldo | ||||
| 		 	);		 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| reg signed [15:0]	doutf_0; | ||||
| reg signed [15:0]	doutf_1;	 | ||||
| reg signed [15:0]	doutf_2;	 | ||||
| reg signed [15:0]	doutf_3; | ||||
| 
 | ||||
| always@(posedge clk or negedge rstn) | ||||
|     if(!rstn)  begin | ||||
|     		doutf_0  <=  0; | ||||
|     		doutf_1  <=  0;	 | ||||
|     		doutf_2  <=  0;	 | ||||
|     		doutf_3  <=  0;	 | ||||
|     end | ||||
|     else if(!en)  begin | ||||
|     		doutf_0  <=  din0; | ||||
|     		doutf_1  <=  din1;	 | ||||
|     		doutf_2  <=  din2;	 | ||||
|     		doutf_3  <=  din3;	 | ||||
|     end  | ||||
|     else  begin | ||||
|     		doutf_0  <=  din4; | ||||
|     		doutf_1  <=  din5;	 | ||||
|     		doutf_2  <=  din6;	 | ||||
|     		doutf_3  <=  din7;	 | ||||
|     end | ||||
|      | ||||
| assign    dout0  =  doutf_0;  | ||||
| assign    dout1  =  doutf_1; | ||||
| assign    dout2  =  doutf_2; | ||||
| assign    dout3  =  doutf_3; | ||||
| 
 | ||||
| //sirv_gnrl_dffr #(1) dff_vldi_or_1(vldi, vldo ,clk,rstn); | ||||
| assign    vldo = vldi; | ||||
| endmodule | ||||
|  | @ -1,84 +0,0 @@ | |||
| module s2p_2 ( | ||||
|     input  clk,              | ||||
|     input  rst_n,             | ||||
|     input  [15:0] din,  | ||||
|     input   en,           | ||||
|     output  [15:0] dout0,     | ||||
|     output  [15:0] dout1,      | ||||
|     output  vldo      | ||||
| ); | ||||
| 
 | ||||
| reg cnt; | ||||
| wire add_cnt; | ||||
| wire end_cnt; | ||||
| 
 | ||||
| always @(posedge clk or negedge rst_n)begin | ||||
|     if(!rst_n)begin | ||||
|         cnt <= 0; | ||||
|     end | ||||
|     else if(add_cnt)begin | ||||
|         if(end_cnt) | ||||
|             cnt <= 0; | ||||
|         else | ||||
|             cnt <= cnt + 1; | ||||
|     end | ||||
|     else begin | ||||
|         cnt <= 0; | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| assign add_cnt = en == 1'b1;        | ||||
| assign end_cnt = add_cnt && cnt== 2 - 1 ;   | ||||
| 
 | ||||
| wire en_r1; | ||||
| wire en_r2; | ||||
| reg   [   15: 0]         dout0_r0; | ||||
| reg   [   15: 0]         dout1_r0; | ||||
| wire            dout0_en; | ||||
| wire            dout1_en; | ||||
| wire            dout0_hold; | ||||
| wire            dout1_hold; | ||||
| 
 | ||||
| always  @(posedge clk or negedge rst_n)begin | ||||
|     if(!rst_n)begin | ||||
|         dout0_r0  <=  16'b0; | ||||
|         dout1_r0  <=  16'b0; | ||||
|     end | ||||
|     else if(dout0_en)begin | ||||
|         dout0_r0  <=  din; | ||||
|     end | ||||
|     else if(dout1_en)begin | ||||
|         dout1_r0  <=  din; | ||||
|     end | ||||
|     else if(dout0_hold)begin | ||||
|         dout0_r0  <=  dout0_r0; | ||||
|         dout1_r0  <=  16'd0; | ||||
|     end | ||||
|     else if(dout1_hold)begin | ||||
|         dout0_r0  <=  16'd0; | ||||
|         dout1_r0  <=  dout1_r0; | ||||
|     end | ||||
|     else begin | ||||
|         dout0_r0  <=  16'd0; | ||||
|         dout1_r0  <=  16'd0; | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| assign  dout0_en = add_cnt && cnt == 0; | ||||
| assign  dout1_en = add_cnt && cnt == 1; | ||||
| assign  dout0_hold = en == 0 && en_r1 == 1 && cnt == 1; | ||||
| assign  dout1_hold = en == 0 && en_r1 == 1 && cnt == 0; | ||||
| 
 | ||||
| sirv_gnrl_dffr #(1) dff_en_1(en   , en_r1 ,clk,rst_n); | ||||
| sirv_gnrl_dffr #(1) dff_en_2(en_r1, en_r2 ,clk,rst_n); | ||||
| assign  vldo  = en_r2; | ||||
| 
 | ||||
| wire   [   15: 0]         dout0_r1; | ||||
| sirv_gnrl_dfflr #(16) dff_dout0_1(1'b1,dout0_r0, dout0_r1 ,clk,rst_n); | ||||
| 
 | ||||
| assign dout0 = dout0_r1; | ||||
| assign dout1 = dout1_r0; | ||||
| 
 | ||||
| 
 | ||||
| endmodule | ||||
| 
 | ||||
|  | @ -4,31 +4,59 @@ module 	z_dsp | |||
|  input                  rstn | ||||
| ,input                  clk | ||||
| ,input                  en | ||||
| //,input                                        tc_bypass | ||||
| ,input         [ 5:0]   vldi_coef  | ||||
| //,input                                        tc_bypass    //NC | ||||
| ,input         [ 3:0]   vldi_coef  | ||||
| ,input                  vldi_data  | ||||
| //,input  [1:0]	                              intp_mode | ||||
| //,input  [1:0]	                              dac_mode_sel | ||||
| //,input  [1:0]	                              intp_mode    //NC | ||||
| //,input  [1:0]	                              dac_mode_sel //NC | ||||
| ,input  signed [15:0]   din0 | ||||
| ,input  signed [15:0]   din1 | ||||
| ,input  signed [15:0]   din2 | ||||
| ,input  signed [15:0]   din3 | ||||
| ,input  signed [15:0]   din4 | ||||
| ,input  signed [15:0]   din5 | ||||
| ,input  signed [15:0]   din6 | ||||
| ,input  signed [15:0]   din7 | ||||
| ,input  signed [15:0]   din8 | ||||
| ,input  signed [15:0]   din9 | ||||
| ,input  signed [15:0]   dina | ||||
| ,input  signed [15:0]   dinb | ||||
| ,input  signed [15:0]   dinc | ||||
| ,input  signed [15:0]   dind | ||||
| ,input  signed [15:0]   dine | ||||
| ,input  signed [15:0]   dinf | ||||
| ,input  signed [31:0]   a0_re             | ||||
| ,input  signed [31:0]   a0_im             | ||||
| ,input  signed [31:0]   b0_re             | ||||
| ,input  signed [31:0]   b0_im             | ||||
| ,input  signed [31:0]   a1_re             | ||||
| ,input  signed [31:0]   a1_im             | ||||
| ,input  signed [31:0]   b1_re             | ||||
| ,input  signed [31:0]   b1_im             | ||||
| ,input  signed [31:0]   a2_re             | ||||
| ,input  signed [31:0]   a2_im             | ||||
| ,input  signed [31:0]   b2_re             | ||||
| ,input  signed [31:0]   b2_im             | ||||
| ,input  signed [31:0]   a3_re             | ||||
| ,input  signed [31:0]   a3_im             | ||||
| ,input  signed [31:0]   b3_re             | ||||
| ,input  signed [31:0]   a4_re             | ||||
| ,input  signed [31:0]   b4_re             | ||||
| ,input  signed [31:0]   a5_re             | ||||
| ,input  signed [31:0]   b5_re             | ||||
| ,input  signed [31:0]   b3_im          | ||||
| ,output signed [15:0]   dout0 | ||||
| ,output signed [15:0]   dout1 | ||||
| ,output signed [15:0]   dout2 | ||||
| ,output signed [15:0]   dout3 | ||||
| ,output signed [15:0]   dout4 | ||||
| ,output signed [15:0]   dout5 | ||||
| ,output signed [15:0]   dout6 | ||||
| ,output signed [15:0]   dout7 | ||||
| ,output signed [15:0]   dout8 | ||||
| ,output signed [15:0]   dout9 | ||||
| ,output signed [15:0]   douta | ||||
| ,output signed [15:0]   doutb | ||||
| ,output signed [15:0]   doutc | ||||
| ,output signed [15:0]   doutd | ||||
| ,output signed [15:0]   doute | ||||
| ,output signed [15:0]   doutf | ||||
| ,output		        vldo | ||||
| 		 	);		 | ||||
| 
 | ||||
|  | @ -36,94 +64,213 @@ module 	z_dsp | |||
| wire signed	[15:0] IIR_out; | ||||
| 
 | ||||
| 
 | ||||
| wire signed [31:0] ao_re         [5:0]; | ||||
| wire signed [31:0] ab_re         [5:0]; | ||||
| wire signed [31:0] abb_re        [5:0]; | ||||
| wire signed [31:0] ab_pow3_re    [5:0]; | ||||
| wire signed [31:0] ab_pow4_re    [5:0]; | ||||
| wire signed [31:0] ab_pow5_re    [5:0]; | ||||
| wire signed [31:0] ab_pow6_re    [5:0]; | ||||
| wire signed [31:0] ab_pow7_re    [5:0]; | ||||
| wire signed [31:0] bo_re         [5:0]; | ||||
| wire signed [31:0] b_pow8_re     [5:0]; | ||||
| wire signed [31:0] ao_re         [3:0]; | ||||
| wire signed [31:0] ab_re         [3:0]; | ||||
| wire signed [31:0] abb_re        [3:0]; | ||||
| wire signed [31:0] ab_pow3_re    [3:0]; | ||||
| wire signed [31:0] ab_pow4_re    [3:0]; | ||||
| wire signed [31:0] ab_pow5_re    [3:0]; | ||||
| wire signed [31:0] ab_pow6_re    [3:0]; | ||||
| wire signed [31:0] ab_pow7_re    [3:0]; | ||||
| wire signed [31:0] ab_pow8_re    [3:0]; | ||||
| wire signed [31:0] ab_pow9_re    [3:0]; | ||||
| wire signed [31:0] ab_powa_re    [3:0]; | ||||
| wire signed [31:0] ab_powb_re    [3:0]; | ||||
| wire signed [31:0] ab_powc_re    [3:0]; | ||||
| wire signed [31:0] ab_powd_re    [3:0]; | ||||
| wire signed [31:0] ab_powe_re    [3:0]; | ||||
| wire signed [31:0] ab_powf_re    [3:0]; | ||||
| wire signed [31:0] bo_re         [3:0]; | ||||
| wire signed [31:0] b_pow16_re    [3:0]; | ||||
| wire signed [31:0] ao_im         [3:0]; | ||||
| wire signed [31:0] ab_im         [3:0]; | ||||
| wire signed [31:0] abb_im        [3:0]; | ||||
| wire signed [31:0] ab_pow3_im    [3:0]; | ||||
| wire signed [31:0] ab_pow4_im    [3:0]; | ||||
| wire signed [31:0] ab_pow5_im    [3:0]; | ||||
| wire signed [31:0] ab_pow6_im    [3:0]; | ||||
| wire signed [31:0] ab_pow7_im    [3:0]; | ||||
| wire signed [31:0] ab_pow8_im    [3:0]; | ||||
| wire signed [31:0] ab_pow9_im    [3:0]; | ||||
| wire signed [31:0] ab_powa_im    [3:0]; | ||||
| wire signed [31:0] ab_powb_im    [3:0]; | ||||
| wire signed [31:0] ab_powc_im    [3:0]; | ||||
| wire signed [31:0] ab_powd_im    [3:0]; | ||||
| wire signed [31:0] ab_powe_im    [3:0]; | ||||
| wire signed [31:0] ab_powf_im    [3:0]; | ||||
| wire signed [31:0] bo_im         [3:0]; | ||||
| wire signed [31:0] b_pow16_im    [3:0]; | ||||
| 
 | ||||
| CoefGen inst_CoefGen( | ||||
|     .clk               (clk          ),  | ||||
|     .rstn              (rstn         ), | ||||
|     .vldi              (vldi_coef    ), | ||||
|     .a0_re             (a0_re        ), | ||||
|     .b0_re             (b0_re        ), | ||||
|     .a1_re             (a1_re        ), | ||||
|     .b1_re             (b1_re        ), | ||||
|     .a2_re             (a2_re        ), | ||||
|     .b2_re             (b2_re        ), | ||||
|     .a3_re             (a3_re        ), | ||||
|     .b3_re             (b3_re        ), | ||||
|     .a4_re             (a4_re        ), | ||||
|     .b4_re             (b4_re        ), | ||||
|     .a5_re             (a5_re        ), | ||||
|     .b5_re             (b5_re        ), | ||||
|     .a_re0             (ao_re[0]     ), | ||||
|     .b_re0             (bo_re[0]     ), | ||||
|     .ab_re0            (ab_re[0]     ), | ||||
|     .abb_re0           (abb_re[0]    ), | ||||
|     .ab_pow3_re0       (ab_pow3_re[0]), | ||||
|     .ab_pow4_re0       (ab_pow4_re[0]), | ||||
|     .ab_pow5_re0       (ab_pow5_re[0]), | ||||
|     .ab_pow6_re0       (ab_pow6_re[0]), | ||||
|     .ab_pow7_re0       (ab_pow7_re[0]), | ||||
|     .b_pow8_re0        (b_pow8_re[0] ), | ||||
|     .a_re1             (ao_re[1]     ), | ||||
|     .b_re1             (bo_re[1]     ), | ||||
|     .ab_re1            (ab_re[1]     ), | ||||
|     .abb_re1           (abb_re[1]    ), | ||||
|     .ab_pow3_re1       (ab_pow3_re[1]), | ||||
|     .ab_pow4_re1       (ab_pow4_re[1]), | ||||
|     .ab_pow5_re1       (ab_pow5_re[1]), | ||||
|     .ab_pow6_re1       (ab_pow6_re[1]), | ||||
|     .ab_pow7_re1       (ab_pow7_re[1]), | ||||
|     .b_pow8_re1        (b_pow8_re[1] ), | ||||
|     .a_re2             (ao_re[2]     ), | ||||
|     .b_re2             (bo_re[2]     ), | ||||
|     .ab_re2            (ab_re[2]     ), | ||||
|     .abb_re2           (abb_re[2]    ), | ||||
|     .ab_pow3_re2       (ab_pow3_re[2]), | ||||
|     .ab_pow4_re2       (ab_pow4_re[2]), | ||||
|     .ab_pow5_re2       (ab_pow5_re[2]), | ||||
|     .ab_pow6_re2       (ab_pow6_re[2]), | ||||
|     .ab_pow7_re2       (ab_pow7_re[2]), | ||||
|     .b_pow8_re2        (b_pow8_re[2] ), | ||||
|     .a_re3             (ao_re[3]     ), | ||||
|     .b_re3             (bo_re[3]     ), | ||||
|     .ab_re3            (ab_re[3]     ), | ||||
|     .abb_re3           (abb_re[3]    ), | ||||
|     .ab_pow3_re3       (ab_pow3_re[3]), | ||||
|     .ab_pow4_re3       (ab_pow4_re[3]), | ||||
|     .ab_pow5_re3       (ab_pow5_re[3]), | ||||
|     .ab_pow6_re3       (ab_pow6_re[3]), | ||||
|     .ab_pow7_re3       (ab_pow7_re[3]), | ||||
|     .b_pow8_re3        (b_pow8_re[3] ), | ||||
|     .a_re4             (ao_re[4]     ), | ||||
|     .b_re4             (bo_re[4]     ), | ||||
|     .ab_re4            (ab_re[4]     ), | ||||
|     .abb_re4           (abb_re[4]    ), | ||||
|     .ab_pow3_re4       (ab_pow3_re[4]), | ||||
|     .ab_pow4_re4       (ab_pow4_re[4]), | ||||
|     .ab_pow5_re4       (ab_pow5_re[4]), | ||||
|     .ab_pow6_re4       (ab_pow6_re[4]), | ||||
|     .ab_pow7_re4       (ab_pow7_re[4]), | ||||
|     .b_pow8_re4        (b_pow8_re[4] ), | ||||
|     .a_re5             (ao_re[5]     ), | ||||
|     .b_re5             (bo_re[5]     ), | ||||
|     .ab_re5            (ab_re[5]     ), | ||||
|     .abb_re5           (abb_re[5]    ), | ||||
|     .ab_pow3_re5       (ab_pow3_re[5]), | ||||
|     .ab_pow4_re5       (ab_pow4_re[5]), | ||||
|     .ab_pow5_re5       (ab_pow5_re[5]), | ||||
|     .ab_pow6_re5       (ab_pow6_re[5]), | ||||
|     .ab_pow7_re5       (ab_pow7_re[5]), | ||||
|     .b_pow8_re5        (b_pow8_re[5] ) | ||||
|     ); | ||||
| CoefGen#( | ||||
|     .data_in_width       ( 32 ), | ||||
|     .coef_width          ( 32 ), | ||||
|     .frac_data_out_width ( 20 ), | ||||
|     .frac_coef_width     ( 31 ) | ||||
| )  u_CoefGen( | ||||
|     .rstn                ( rstn                ), | ||||
|     .clk                 ( clk                 ), | ||||
|     .vldi                ( vldi_coef                ), | ||||
|     .a0_re               ( a0_re               ), | ||||
|     .b0_re               ( b0_re               ), | ||||
|     .a1_re               ( a1_re               ), | ||||
|     .b1_re               ( b1_re               ), | ||||
|     .a2_re               ( a2_re               ), | ||||
|     .b2_re               ( b2_re               ), | ||||
|     .a3_re               ( a3_re               ), | ||||
|     .b3_re               ( b3_re               ), | ||||
|     .a0_im               ( a0_im               ), | ||||
|     .b0_im               ( b0_im               ), | ||||
|     .a1_im               ( a1_im               ), | ||||
|     .b1_im               ( b1_im               ), | ||||
|     .a2_im               ( a2_im               ), | ||||
|     .b2_im               ( b2_im               ), | ||||
|     .a3_im               ( a3_im               ), | ||||
|     .b3_im               ( b3_im               ), | ||||
|     .a_re0               ( ao_re[0]              ), | ||||
|     .b_re0               ( bo_re[0]              ), | ||||
|     .ab_re0              ( ab_re[0]              ), | ||||
|     .abb_re0             ( abb_re[0]             ), | ||||
|     .ab_pow3_re0         ( ab_pow3_re[0]         ), | ||||
|     .ab_pow4_re0         ( ab_pow4_re[0]         ), | ||||
|     .ab_pow5_re0         ( ab_pow5_re[0]         ), | ||||
|     .ab_pow6_re0         ( ab_pow6_re[0]         ), | ||||
|     .ab_pow7_re0         ( ab_pow7_re[0]         ), | ||||
|     .ab_pow8_re0         ( ab_pow8_re[0]         ), | ||||
|     .ab_pow9_re0         ( ab_pow9_re[0]         ), | ||||
|     .ab_powa_re0         ( ab_powa_re[0]         ), | ||||
|     .ab_powb_re0         ( ab_powb_re[0]         ), | ||||
|     .ab_powc_re0         ( ab_powc_re[0]         ), | ||||
|     .ab_powd_re0         ( ab_powd_re[0]         ), | ||||
|     .ab_powe_re0         ( ab_powe_re[0]         ), | ||||
|     .ab_powf_re0         ( ab_powf_re[0]         ), | ||||
|     .b_pow16_re0         ( b_pow16_re[0]         ), | ||||
|     .a_re1               ( ao_re[1]              ), | ||||
|     .b_re1               ( bo_re[1]              ), | ||||
|     .ab_re1              ( ab_re[1]              ), | ||||
|     .abb_re1             ( abb_re[1]             ), | ||||
|     .ab_pow3_re1         ( ab_pow3_re[1]         ), | ||||
|     .ab_pow4_re1         ( ab_pow4_re[1]         ), | ||||
|     .ab_pow5_re1         ( ab_pow5_re[1]         ), | ||||
|     .ab_pow6_re1         ( ab_pow6_re[1]         ), | ||||
|     .ab_pow7_re1         ( ab_pow7_re[1]         ), | ||||
|     .ab_pow8_re1         ( ab_pow8_re[1]         ), | ||||
|     .ab_pow9_re1         ( ab_pow9_re[1]         ), | ||||
|     .ab_powa_re1         ( ab_powa_re[1]         ), | ||||
|     .ab_powb_re1         ( ab_powb_re[1]         ), | ||||
|     .ab_powc_re1         ( ab_powc_re[1]         ), | ||||
|     .ab_powd_re1         ( ab_powd_re[1]         ), | ||||
|     .ab_powe_re1         ( ab_powe_re[1]         ), | ||||
|     .ab_powf_re1         ( ab_powf_re[1]         ), | ||||
|     .b_pow16_re1         ( b_pow16_re[1]         ), | ||||
|     .a_re2               ( ao_re[2]              ), | ||||
|     .b_re2               ( bo_re[2]              ), | ||||
|     .ab_re2              ( ab_re[2]              ), | ||||
|     .abb_re2             ( abb_re[2]             ), | ||||
|     .ab_pow3_re2         ( ab_pow3_re[2]         ), | ||||
|     .ab_pow4_re2         ( ab_pow4_re[2]         ), | ||||
|     .ab_pow5_re2         ( ab_pow5_re[2]         ), | ||||
|     .ab_pow6_re2         ( ab_pow6_re[2]         ), | ||||
|     .ab_pow7_re2         ( ab_pow7_re[2]         ), | ||||
|     .ab_pow8_re2         ( ab_pow8_re[2]         ), | ||||
|     .ab_pow9_re2         ( ab_pow9_re[2]         ), | ||||
|     .ab_powa_re2         ( ab_powa_re[2]         ), | ||||
|     .ab_powb_re2         ( ab_powb_re[2]         ), | ||||
|     .ab_powc_re2         ( ab_powc_re[2]         ), | ||||
|     .ab_powd_re2         ( ab_powd_re[2]         ), | ||||
|     .ab_powe_re2         ( ab_powe_re[2]         ), | ||||
|     .ab_powf_re2         ( ab_powf_re[2]         ), | ||||
|     .b_pow16_re2         ( b_pow16_re[2]         ), | ||||
|     .a_re3               ( ao_re[3]              ), | ||||
|     .b_re3               ( bo_re[3]              ), | ||||
|     .ab_re3              ( ab_re[3]              ), | ||||
|     .abb_re3             ( abb_re[3]             ), | ||||
|     .ab_pow3_re3         ( ab_pow3_re[3]         ), | ||||
|     .ab_pow4_re3         ( ab_pow4_re[3]         ), | ||||
|     .ab_pow5_re3         ( ab_pow5_re[3]         ), | ||||
|     .ab_pow6_re3         ( ab_pow6_re[3]         ), | ||||
|     .ab_pow7_re3         ( ab_pow7_re[3]         ), | ||||
|     .ab_pow8_re3         ( ab_pow8_re[3]         ), | ||||
|     .ab_pow9_re3         ( ab_pow9_re[3]         ), | ||||
|     .ab_powa_re3         ( ab_powa_re[3]         ), | ||||
|     .ab_powb_re3         ( ab_powb_re[3]         ), | ||||
|     .ab_powc_re3         ( ab_powc_re[3]         ), | ||||
|     .ab_powd_re3         ( ab_powd_re[3]         ), | ||||
|     .ab_powe_re3         ( ab_powe_re[3]         ), | ||||
|     .ab_powf_re3         ( ab_powf_re[3]         ), | ||||
|     .b_pow16_re3         ( b_pow16_re[3]         ), | ||||
|     .a_im0               ( ao_im[0]              ), | ||||
|     .b_im0               ( bo_im[0]              ), | ||||
|     .ab_im0              ( ab_im[0]              ), | ||||
|     .abb_im0             ( abb_im[0]             ), | ||||
|     .ab_pow3_im0         ( ab_pow3_im[0]         ), | ||||
|     .ab_pow4_im0         ( ab_pow4_im[0]         ), | ||||
|     .ab_pow5_im0         ( ab_pow5_im[0]         ), | ||||
|     .ab_pow6_im0         ( ab_pow6_im[0]         ), | ||||
|     .ab_pow7_im0         ( ab_pow7_im[0]         ), | ||||
|     .ab_pow8_im0         ( ab_pow8_im[0]         ), | ||||
|     .ab_pow9_im0         ( ab_pow9_im[0]         ), | ||||
|     .ab_powa_im0         ( ab_powa_im[0]         ), | ||||
|     .ab_powb_im0         ( ab_powb_im[0]         ), | ||||
|     .ab_powc_im0         ( ab_powc_im[0]         ), | ||||
|     .ab_powd_im0         ( ab_powd_im[0]         ), | ||||
|     .ab_powe_im0         ( ab_powe_im[0]         ), | ||||
|     .ab_powf_im0         ( ab_powf_im[0]         ), | ||||
|     .b_pow16_im0         ( b_pow16_im[0]         ), | ||||
|     .a_im1               ( ao_im[1]              ), | ||||
|     .b_im1               ( bo_im[1]              ), | ||||
|     .ab_im1              ( ab_im[1]              ), | ||||
|     .abb_im1             ( abb_im[1]             ), | ||||
|     .ab_pow3_im1         ( ab_pow3_im[1]         ), | ||||
|     .ab_pow4_im1         ( ab_pow4_im[1]         ), | ||||
|     .ab_pow5_im1         ( ab_pow5_im[1]         ), | ||||
|     .ab_pow6_im1         ( ab_pow6_im[1]         ), | ||||
|     .ab_pow7_im1         ( ab_pow7_im[1]         ), | ||||
|     .ab_pow8_im1         ( ab_pow8_im[1]         ), | ||||
|     .ab_pow9_im1         ( ab_pow9_im[1]         ), | ||||
|     .ab_powa_im1         ( ab_powa_im[1]         ), | ||||
|     .ab_powb_im1         ( ab_powb_im[1]         ), | ||||
|     .ab_powc_im1         ( ab_powc_im[1]         ), | ||||
|     .ab_powd_im1         ( ab_powd_im[1]         ), | ||||
|     .ab_powe_im1         ( ab_powe_im[1]         ), | ||||
|     .ab_powf_im1         ( ab_powf_im[1]         ), | ||||
|     .b_pow16_im1         ( b_pow16_im[1]         ), | ||||
|     .a_im2               ( ao_im[2]              ), | ||||
|     .b_im2               ( bo_im[2]              ), | ||||
|     .ab_im2              ( ab_im[2]              ), | ||||
|     .abb_im2             ( abb_im[2]             ), | ||||
|     .ab_pow3_im2         ( ab_pow3_im[2]         ), | ||||
|     .ab_pow4_im2         ( ab_pow4_im[2]         ), | ||||
|     .ab_pow5_im2         ( ab_pow5_im[2]         ), | ||||
|     .ab_pow6_im2         ( ab_pow6_im[2]         ), | ||||
|     .ab_pow7_im2         ( ab_pow7_im[2]         ), | ||||
|     .ab_pow8_im2         ( ab_pow8_im[2]         ), | ||||
|     .ab_pow9_im2         ( ab_pow9_im[2]         ), | ||||
|     .ab_powa_im2         ( ab_powa_im[2]         ), | ||||
|     .ab_powb_im2         ( ab_powb_im[2]         ), | ||||
|     .ab_powc_im2         ( ab_powc_im[2]         ), | ||||
|     .ab_powd_im2         ( ab_powd_im[2]         ), | ||||
|     .ab_powe_im2         ( ab_powe_im[2]         ), | ||||
|     .ab_powf_im2         ( ab_powf_im[2]         ), | ||||
|     .b_pow16_im2         ( b_pow16_im[2]         ), | ||||
|     .a_im3               ( ao_im[3]              ), | ||||
|     .b_im3               ( bo_im[3]              ), | ||||
|     .ab_im3              ( ab_im[3]              ), | ||||
|     .abb_im3             ( abb_im[3]             ), | ||||
|     .ab_pow3_im3         ( ab_pow3_im[3]         ), | ||||
|     .ab_pow4_im3         ( ab_pow4_im[3]         ), | ||||
|     .ab_pow5_im3         ( ab_pow5_im[3]         ), | ||||
|     .ab_pow6_im3         ( ab_pow6_im[3]         ), | ||||
|     .ab_pow7_im3         ( ab_pow7_im[3]         ), | ||||
|     .ab_pow8_im3         ( ab_pow8_im[3]         ), | ||||
|     .ab_pow9_im3         ( ab_pow9_im[3]         ), | ||||
|     .ab_powa_im3         ( ab_powa_im[3]         ), | ||||
|     .ab_powb_im3         ( ab_powb_im[3]         ), | ||||
|     .ab_powc_im3         ( ab_powc_im[3]         ), | ||||
|     .ab_powd_im3         ( ab_powd_im[3]         ), | ||||
|     .ab_powe_im3         ( ab_powe_im[3]         ), | ||||
|     .ab_powf_im3         ( ab_powf_im[3]         ), | ||||
|     .b_pow16_im3         ( b_pow16_im[3]         ) | ||||
| ); | ||||
| 
 | ||||
| wire signed	[15:0] dout_0; | ||||
| wire signed	[15:0] dout_1; | ||||
|  | @ -134,109 +281,190 @@ wire signed	[15:0] dout_5; | |||
| wire signed	[15:0] dout_6; | ||||
| wire signed	[15:0] dout_7; | ||||
| wire          	  vldo_TC; | ||||
| TailCorr_top           inst_TailCorr_top | ||||
|                ( | ||||
|                         .clk                     (clk          ), | ||||
|                         .en                      (en           ), | ||||
|                         .rstn                    (rstn         ), | ||||
|                         .vldi                    (vldi_data    ), | ||||
| //                        .dac_mode_sel          (dac_mode_sel ), | ||||
| //                        .intp_mode             (intp_mode    ), | ||||
|                        .din0                     (din0         ), | ||||
|                        .din1                     (din1         ), | ||||
|                        .din2                     (din2         ), | ||||
|                        .din3                     (din3         ), | ||||
|                        .a_re0                    (ao_re[0]     ), | ||||
|                        .b_re0                    (bo_re[0]     ), | ||||
|                        .ab_re0                   (ab_re[0]     ), | ||||
|                        .abb_re0                  (abb_re[0]    ), | ||||
|                        .ab_pow3_re0              (ab_pow3_re[0]), | ||||
|                        .ab_pow4_re0              (ab_pow4_re[0]), | ||||
|                        .ab_pow5_re0              (ab_pow5_re[0]), | ||||
|                        .ab_pow6_re0              (ab_pow6_re[0]), | ||||
|                        .ab_pow7_re0              (ab_pow7_re[0]), | ||||
|                        .b_pow8_re0               (b_pow8_re[0] ), | ||||
|                        .a_re1                    (ao_re[1]     ), | ||||
|                        .b_re1                    (bo_re[1]     ), | ||||
|                        .ab_re1                   (ab_re[1]     ), | ||||
|                        .abb_re1                  (abb_re[1]    ), | ||||
|                        .ab_pow3_re1              (ab_pow3_re[1]), | ||||
|                        .ab_pow4_re1              (ab_pow4_re[1]), | ||||
|                        .ab_pow5_re1              (ab_pow5_re[1]), | ||||
|                        .ab_pow6_re1              (ab_pow6_re[1]), | ||||
|                        .ab_pow7_re1              (ab_pow7_re[1]), | ||||
|                        .b_pow8_re1               (b_pow8_re[1] ), | ||||
|                        .a_re2                    (ao_re[2]     ), | ||||
|                        .b_re2                    (bo_re[2]     ), | ||||
|                        .ab_re2                   (ab_re[2]     ), | ||||
|                        .abb_re2                  (abb_re[2]    ), | ||||
|                        .ab_pow3_re2              (ab_pow3_re[2]), | ||||
|                        .ab_pow4_re2              (ab_pow4_re[2]), | ||||
|                        .ab_pow5_re2              (ab_pow5_re[2]), | ||||
|                        .ab_pow6_re2              (ab_pow6_re[2]), | ||||
|                        .ab_pow7_re2              (ab_pow7_re[2]), | ||||
|                        .b_pow8_re2               (b_pow8_re[2] ), | ||||
|                        .a_re3                    (ao_re[3]     ), | ||||
|                        .b_re3                    (bo_re[3]     ), | ||||
|                        .ab_re3                   (ab_re[3]     ), | ||||
|                        .abb_re3                  (abb_re[3]    ), | ||||
|                        .ab_pow3_re3              (ab_pow3_re[3]), | ||||
|                        .ab_pow4_re3              (ab_pow4_re[3]), | ||||
|                        .ab_pow5_re3              (ab_pow5_re[3]), | ||||
|                        .ab_pow6_re3              (ab_pow6_re[3]), | ||||
|                        .ab_pow7_re3              (ab_pow7_re[3]), | ||||
|                        .b_pow8_re3               (b_pow8_re[3] ), | ||||
|                        .a_re4                    (ao_re[4]     ), | ||||
|                        .b_re4                    (bo_re[4]     ), | ||||
|                        .ab_re4                   (ab_re[4]     ), | ||||
|                        .abb_re4                  (abb_re[4]    ), | ||||
|                        .ab_pow3_re4              (ab_pow3_re[4]), | ||||
|                        .ab_pow4_re4              (ab_pow4_re[4]), | ||||
|                        .ab_pow5_re4              (ab_pow5_re[4]), | ||||
|                        .ab_pow6_re4              (ab_pow6_re[4]), | ||||
|                        .ab_pow7_re4              (ab_pow7_re[4]), | ||||
|                        .b_pow8_re4               (b_pow8_re[4] ), | ||||
|                        .a_re5                    (ao_re[5]     ), | ||||
|                        .b_re5                    (bo_re[5]     ), | ||||
|                        .ab_re5                   (ab_re[5]     ), | ||||
|                        .abb_re5                  (abb_re[5]    ), | ||||
|                        .ab_pow3_re5              (ab_pow3_re[5]), | ||||
|                        .ab_pow4_re5              (ab_pow4_re[5]), | ||||
|                        .ab_pow5_re5              (ab_pow5_re[5]), | ||||
|                        .ab_pow6_re5              (ab_pow6_re[5]), | ||||
|                        .ab_pow7_re5              (ab_pow7_re[5]), | ||||
|                        .b_pow8_re5               (b_pow8_re[5] ), | ||||
|                        .dout_p0                  (dout_0       ), | ||||
|                        .dout_p1                  (dout_1       ), | ||||
|                        .dout_p2                  (dout_2       ), | ||||
|                        .dout_p3                  (dout_3       ), | ||||
|                        .dout_p4                  (dout_4       ), | ||||
|                        .dout_p5                  (dout_5       ), | ||||
|                        .dout_p6                  (dout_6       ), | ||||
|                        .dout_p7                  (dout_7       ), | ||||
|                        .vldo                     (vldo_TC      ) | ||||
| 
 | ||||
|                 ); | ||||
| 
 | ||||
| //assign		vldo = vldo_TC; | ||||
| rate_adapter inst_rate_adapter( | ||||
|             .rstn        (rstn    ),  | ||||
|             .clk         (clk     ), | ||||
|             .en          (en      ), | ||||
|             .vldi        (vldo_TC ), | ||||
|             .din0        (dout_0  ), | ||||
|             .din1        (dout_1  ), | ||||
|             .din2        (dout_2  ), | ||||
|             .din3        (dout_3  ), | ||||
|             .din4        (dout_4  ), | ||||
|             .din5        (dout_5  ), | ||||
|             .din6        (dout_6  ), | ||||
|             .din7        (dout_7  ), | ||||
|             .dout0       (dout0   ), | ||||
|             .dout1       (dout1   ), | ||||
|             .dout2       (dout2   ), | ||||
|             .dout3       (dout3   ), | ||||
|             .vldo        (vldo    ) | ||||
|             ); | ||||
| TailCorr_top    u_TailCorr_top( | ||||
|     .rstn         ( rstn         ), | ||||
|     .clk          ( clk          ), | ||||
|     .en           ( en           ), | ||||
|     .vldi         ( vldi_data         ), | ||||
|     .din0         ( din0         ), | ||||
|     .din1         ( din1         ), | ||||
|     .din2         ( din2         ), | ||||
|     .din3         ( din3         ), | ||||
|     .din4         ( din4         ), | ||||
|     .din5         ( din5         ), | ||||
|     .din6         ( din6         ), | ||||
|     .din7         ( din7         ), | ||||
|     .din8         ( din8         ), | ||||
|     .din9         ( din9         ), | ||||
|     .dina         ( dina         ), | ||||
|     .dinb         ( dinb         ), | ||||
|     .dinc         ( dinc         ), | ||||
|     .dind         ( dind         ), | ||||
|     .dine         ( dine         ), | ||||
|     .dinf         ( dinf         ), | ||||
|     .a_re0        ( ao_re[0]       ), | ||||
|     .b_re0        ( bo_re[0]       ), | ||||
|     .ab_re0       ( ab_re[0]       ), | ||||
|     .abb_re0      ( abb_re[0]      ), | ||||
|     .ab_pow3_re0  ( ab_pow3_re[0]  ), | ||||
|     .ab_pow4_re0  ( ab_pow4_re[0]  ), | ||||
|     .ab_pow5_re0  ( ab_pow5_re[0]  ), | ||||
|     .ab_pow6_re0  ( ab_pow6_re[0]  ), | ||||
|     .ab_pow7_re0  ( ab_pow7_re[0]  ), | ||||
|     .ab_pow8_re0  ( ab_pow8_re[0]  ), | ||||
|     .ab_pow9_re0  ( ab_pow9_re[0]  ), | ||||
|     .ab_powa_re0  ( ab_powa_re[0]  ), | ||||
|     .ab_powb_re0  ( ab_powb_re[0]  ), | ||||
|     .ab_powc_re0  ( ab_powc_re[0]  ), | ||||
|     .ab_powd_re0  ( ab_powd_re[0]  ), | ||||
|     .ab_powe_re0  ( ab_powe_re[0]  ), | ||||
|     .ab_powf_re0  ( ab_powf_re[0]  ), | ||||
|     .b_pow16_re0  ( b_pow16_re[0]  ), | ||||
|     .a_re1        ( ao_re[1]       ), | ||||
|     .b_re1        ( bo_re[1]       ), | ||||
|     .ab_re1       ( ab_re[1]       ), | ||||
|     .abb_re1      ( abb_re[1]      ), | ||||
|     .ab_pow3_re1  ( ab_pow3_re[1]  ), | ||||
|     .ab_pow4_re1  ( ab_pow4_re[1]  ), | ||||
|     .ab_pow5_re1  ( ab_pow5_re[1]  ), | ||||
|     .ab_pow6_re1  ( ab_pow6_re[1]  ), | ||||
|     .ab_pow7_re1  ( ab_pow7_re[1]  ), | ||||
|     .ab_pow8_re1  ( ab_pow8_re[1]  ), | ||||
|     .ab_pow9_re1  ( ab_pow9_re[1]  ), | ||||
|     .ab_powa_re1  ( ab_powa_re[1]  ), | ||||
|     .ab_powb_re1  ( ab_powb_re[1]  ), | ||||
|     .ab_powc_re1  ( ab_powc_re[1]  ), | ||||
|     .ab_powd_re1  ( ab_powd_re[1]  ), | ||||
|     .ab_powe_re1  ( ab_powe_re[1]  ), | ||||
|     .ab_powf_re1  ( ab_powf_re[1]  ), | ||||
|     .b_pow16_re1  ( b_pow16_re[1]  ), | ||||
|     .a_re2        ( ao_re[2]       ), | ||||
|     .b_re2        ( bo_re[2]       ), | ||||
|     .ab_re2       ( ab_re[2]       ), | ||||
|     .abb_re2      ( abb_re[2]      ), | ||||
|     .ab_pow3_re2  ( ab_pow3_re[2]  ), | ||||
|     .ab_pow4_re2  ( ab_pow4_re[2]  ), | ||||
|     .ab_pow5_re2  ( ab_pow5_re[2]  ), | ||||
|     .ab_pow6_re2  ( ab_pow6_re[2]  ), | ||||
|     .ab_pow7_re2  ( ab_pow7_re[2]  ), | ||||
|     .ab_pow8_re2  ( ab_pow8_re[2]  ), | ||||
|     .ab_pow9_re2  ( ab_pow9_re[2]  ), | ||||
|     .ab_powa_re2  ( ab_powa_re[2]  ), | ||||
|     .ab_powb_re2  ( ab_powb_re[2]  ), | ||||
|     .ab_powc_re2  ( ab_powc_re[2]  ), | ||||
|     .ab_powd_re2  ( ab_powd_re[2]  ), | ||||
|     .ab_powe_re2  ( ab_powe_re[2]  ), | ||||
|     .ab_powf_re2  ( ab_powf_re[2]  ), | ||||
|     .b_pow16_re2  ( b_pow16_re[2]  ), | ||||
|     .a_re3        ( ao_re[3]       ), | ||||
|     .b_re3        ( bo_re[3]       ), | ||||
|     .ab_re3       ( ab_re[3]       ), | ||||
|     .abb_re3      ( abb_re[3]      ), | ||||
|     .ab_pow3_re3  ( ab_pow3_re[3]  ), | ||||
|     .ab_pow4_re3  ( ab_pow4_re[3]  ), | ||||
|     .ab_pow5_re3  ( ab_pow5_re[3]  ), | ||||
|     .ab_pow6_re3  ( ab_pow6_re[3]  ), | ||||
|     .ab_pow7_re3  ( ab_pow7_re[3]  ), | ||||
|     .ab_pow8_re3  ( ab_pow8_re[3]  ), | ||||
|     .ab_pow9_re3  ( ab_pow9_re[3]  ), | ||||
|     .ab_powa_re3  ( ab_powa_re[3]  ), | ||||
|     .ab_powb_re3  ( ab_powb_re[3]  ), | ||||
|     .ab_powc_re3  ( ab_powc_re[3]  ), | ||||
|     .ab_powd_re3  ( ab_powd_re[3]  ), | ||||
|     .ab_powe_re3  ( ab_powe_re[3]  ), | ||||
|     .ab_powf_re3  ( ab_powf_re[3]  ), | ||||
|     .b_pow16_re3  ( b_pow16_re[3]  ), | ||||
|     .a_im0        ( ao_im[0]       ), | ||||
|     .b_im0        ( bo_im[0]       ), | ||||
|     .ab_im0       ( ab_im[0]       ), | ||||
|     .abb_im0      ( abb_im[0]      ), | ||||
|     .ab_pow3_im0  ( ab_pow3_im[0]  ), | ||||
|     .ab_pow4_im0  ( ab_pow4_im[0]  ), | ||||
|     .ab_pow5_im0  ( ab_pow5_im[0]  ), | ||||
|     .ab_pow6_im0  ( ab_pow6_im[0]  ), | ||||
|     .ab_pow7_im0  ( ab_pow7_im[0]  ), | ||||
|     .ab_pow8_im0  ( ab_pow8_im[0]  ), | ||||
|     .ab_pow9_im0  ( ab_pow9_im[0]  ), | ||||
|     .ab_powa_im0  ( ab_powa_im[0]  ), | ||||
|     .ab_powb_im0  ( ab_powb_im[0]  ), | ||||
|     .ab_powc_im0  ( ab_powc_im[0]  ), | ||||
|     .ab_powd_im0  ( ab_powd_im[0]  ), | ||||
|     .ab_powe_im0  ( ab_powe_im[0]  ), | ||||
|     .ab_powf_im0  ( ab_powf_im[0]  ), | ||||
|     .b_pow16_im0  ( b_pow16_im[0]  ), | ||||
|     .a_im1        ( ao_im[1]       ), | ||||
|     .b_im1        ( bo_im[1]       ), | ||||
|     .ab_im1       ( ab_im[1]       ), | ||||
|     .abb_im1      ( abb_im[1]      ), | ||||
|     .ab_pow3_im1  ( ab_pow3_im[1]  ), | ||||
|     .ab_pow4_im1  ( ab_pow4_im[1]  ), | ||||
|     .ab_pow5_im1  ( ab_pow5_im[1]  ), | ||||
|     .ab_pow6_im1  ( ab_pow6_im[1]  ), | ||||
|     .ab_pow7_im1  ( ab_pow7_im[1]  ), | ||||
|     .ab_pow8_im1  ( ab_pow8_im[1]  ), | ||||
|     .ab_pow9_im1  ( ab_pow9_im[1]  ), | ||||
|     .ab_powa_im1  ( ab_powa_im[1]  ), | ||||
|     .ab_powb_im1  ( ab_powb_im[1]  ), | ||||
|     .ab_powc_im1  ( ab_powc_im[1]  ), | ||||
|     .ab_powd_im1  ( ab_powd_im[1]  ), | ||||
|     .ab_powe_im1  ( ab_powe_im[1]  ), | ||||
|     .ab_powf_im1  ( ab_powf_im[1]  ), | ||||
|     .b_pow16_im1  ( b_pow16_im[1]  ), | ||||
|     .a_im2        ( ao_im[2]       ), | ||||
|     .b_im2        ( bo_im[2]       ), | ||||
|     .ab_im2       ( ab_im[2]       ), | ||||
|     .abb_im2      ( abb_im[2]      ), | ||||
|     .ab_pow3_im2  ( ab_pow3_im[2]  ), | ||||
|     .ab_pow4_im2  ( ab_pow4_im[2]  ), | ||||
|     .ab_pow5_im2  ( ab_pow5_im[2]  ), | ||||
|     .ab_pow6_im2  ( ab_pow6_im[2]  ), | ||||
|     .ab_pow7_im2  ( ab_pow7_im[2]  ), | ||||
|     .ab_pow8_im2  ( ab_pow8_im[2]  ), | ||||
|     .ab_pow9_im2  ( ab_pow9_im[2]  ), | ||||
|     .ab_powa_im2  ( ab_powa_im[2]  ), | ||||
|     .ab_powb_im2  ( ab_powb_im[2]  ), | ||||
|     .ab_powc_im2  ( ab_powc_im[2]  ), | ||||
|     .ab_powd_im2  ( ab_powd_im[2]  ), | ||||
|     .ab_powe_im2  ( ab_powe_im[2]  ), | ||||
|     .ab_powf_im2  ( ab_powf_im[2]  ), | ||||
|     .b_pow16_im2  ( b_pow16_im[2]  ), | ||||
|     .a_im3        ( ao_im[3]       ), | ||||
|     .b_im3        ( bo_im[3]       ), | ||||
|     .ab_im3       ( ab_im[3]       ), | ||||
|     .abb_im3      ( abb_im[3]      ), | ||||
|     .ab_pow3_im3  ( ab_pow3_im[3]  ), | ||||
|     .ab_pow4_im3  ( ab_pow4_im[3]  ), | ||||
|     .ab_pow5_im3  ( ab_pow5_im[3]  ), | ||||
|     .ab_pow6_im3  ( ab_pow6_im[3]  ), | ||||
|     .ab_pow7_im3  ( ab_pow7_im[3]  ), | ||||
|     .ab_pow8_im3  ( ab_pow8_im[3]  ), | ||||
|     .ab_pow9_im3  ( ab_pow9_im[3]  ), | ||||
|     .ab_powa_im3  ( ab_powa_im[3]  ), | ||||
|     .ab_powb_im3  ( ab_powb_im[3]  ), | ||||
|     .ab_powc_im3  ( ab_powc_im[3]  ), | ||||
|     .ab_powd_im3  ( ab_powd_im[3]  ), | ||||
|     .ab_powe_im3  ( ab_powe_im[3]  ), | ||||
|     .ab_powf_im3  ( ab_powf_im[3]  ), | ||||
|     .b_pow16_im3  ( b_pow16_im[3]  ), | ||||
|     .dout_p0      ( dout0      ), | ||||
|     .dout_p1      ( dout1      ), | ||||
|     .dout_p2      ( dout2      ), | ||||
|     .dout_p3      ( dout3      ), | ||||
|     .dout_p4      ( dout4      ), | ||||
|     .dout_p5      ( dout5      ), | ||||
|     .dout_p6      ( dout6      ), | ||||
|     .dout_p7      ( dout7      ), | ||||
|     .dout_p8      ( dout8      ), | ||||
|     .dout_p9      ( dout9      ), | ||||
|     .dout_pa      ( douta      ), | ||||
|     .dout_pb      ( doutb      ), | ||||
|     .dout_pc      ( doutc      ), | ||||
|     .dout_pd      ( doutd      ), | ||||
|     .dout_pe      ( doute      ), | ||||
|     .dout_pf      ( doutf      ), | ||||
|     .vldo         ( vldo_TC         ) | ||||
| ); | ||||
| 
 | ||||
| assign		vldo = vldo_TC; | ||||
| endmodule | ||||
|  |  | |||
|  | @ -9,10 +9,10 @@ max_error = zeros(100,1); | |||
| 
 | ||||
| for time = 1 | ||||
| if strcmp(data_source, 'matlab') | ||||
|     in = floor(cat(1,0,3000*ones(4*2579+4,1))); | ||||
|     for i = 0:3 | ||||
|     in = floor(cat(1,0,3000*randn(16*2500-1,1))); | ||||
|     for i = 0:15 | ||||
|         filename = strcat(file_path, "in", num2str(i), "_matlab.dat"); | ||||
|         subset = in(i+1:4:end); | ||||
|         subset = in(i+1:16:end); | ||||
|         fileID = fopen(filename, 'w'); | ||||
|         fprintf(fileID, '%d\n', subset); | ||||
|         fclose(fileID); | ||||
|  | @ -20,7 +20,7 @@ if strcmp(data_source, 'matlab') | |||
|     in = [in; zeros(6e4,1)]; | ||||
|     system('make all'); | ||||
| elseif strcmp(data_source, 'verdi') | ||||
| %     system('make all');     | ||||
|     system('make all');     | ||||
|     in = []; | ||||
|     for i = 0:3 | ||||
|         filename = strcat(file_path, "in", num2str(i), ".dat"); | ||||
|  | @ -36,14 +36,14 @@ end | |||
| 
 | ||||
| 
 | ||||
| cs_wave = []; | ||||
| for i = 0:3 | ||||
| for i = 0:15 | ||||
|     filename = strcat(file_path, "dout", num2str(i), ".dat"); | ||||
|     dout_data = importdata(filename); | ||||
|     if isempty(cs_wave) | ||||
|         N = length(dout_data); | ||||
|         cs_wave = zeros(4*N, 1); | ||||
|         cs_wave = zeros(16*N, 1); | ||||
|     end | ||||
|     cs_wave(i+1:4:end) = dout_data; | ||||
|     cs_wave(i+1:16:end) = dout_data; | ||||
| end | ||||
| 
 | ||||
| A   =  [0.025 0.015*1 0.0002*1 0]; | ||||
|  | @ -98,12 +98,12 @@ a_bin = dec2bin(a_fix,32); | |||
| 
 | ||||
| fprintf('a_fix is %d\n',a_fix); | ||||
| fprintf('b_fix is %d\n',b_fix); | ||||
| fprintf('ab_fix is %d\n',ab_fix); | ||||
| fprintf('ab2_fix is %d\n', ab2_fix); | ||||
| fprintf('ab3_fix is %d\n', ab3_fix); | ||||
| fprintf('ab4_fix is %d\n', ab4_fix); | ||||
| fprintf('ab5_fix is %d\n', ab5_fix); | ||||
| fprintf('ab6_fix is %d\n', ab6_fix); | ||||
| fprintf('ab7_fix is %d\n', ab7_fix); | ||||
| fprintf('b8_fix is %d\n',b8_fix); | ||||
| % fprintf('ab_fix is %d\n',ab_fix); | ||||
| % fprintf('ab2_fix is %d\n', ab2_fix); | ||||
| % fprintf('ab3_fix is %d\n', ab3_fix); | ||||
| % fprintf('ab4_fix is %d\n', ab4_fix); | ||||
| % fprintf('ab5_fix is %d\n', ab5_fix); | ||||
| % fprintf('ab6_fix is %d\n', ab6_fix); | ||||
| % fprintf('ab7_fix is %d\n', ab7_fix); | ||||
| % fprintf('b8_fix is %d\n',b8_fix); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,14 +1,13 @@ | |||
| ../../rtl/z_dsp/z_dsp.v | ||||
| ../../rtl/z_dsp/TailCorr_top.v | ||||
| ../../rtl/z_dsp/rate_adapter.v | ||||
| ../../rtl/z_dsp/IIR_top.v | ||||
| ../../rtl/z_dsp/IIR_Filter_p1.v | ||||
| ../../rtl/z_dsp/IIR_Filter_p8.v | ||||
| ../../rtl/z_dsp/IIR_Filter_p16.v | ||||
| ../../rtl/z_dsp/CoefGen.sv | ||||
| ../../rtl/z_dsp/diff_p.v | ||||
| ../../rtl/z_dsp/s2p_2.v | ||||
| ../../rtl/z_dsp/Trunc.v | ||||
| ../../rtl/z_dsp/mult_real.v | ||||
| ../../rtl/z_dsp/mult_x.v | ||||
| ../../rtl/z_dsp/mult_C.v | ||||
| ../../rtl/z_dsp/syncer.v | ||||
| ../../rtl/z_dsp/sirv_gnrl_dffs.v | ||||
| ../../rtl/model/DW02_mult.v | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ end | |||
| reg             rstn; | ||||
| 
 | ||||
| reg     [15:0]  din_rect; | ||||
| reg     [ 5:0]  vldi_coef; | ||||
| reg     [ 3:0]  vldi_coef; | ||||
| reg             vldi_data; | ||||
| 
 | ||||
| parameter CYCLE    = 20; | ||||
|  | @ -30,30 +30,45 @@ initial begin | |||
| end | ||||
| 
 | ||||
| 
 | ||||
| reg signed [31:0] a_re  [5:0]; | ||||
| reg signed [31:0] b_re  [5:0]; | ||||
| reg  en; | ||||
| reg signed [31:0] a_re  [3:0]; | ||||
| reg signed [31:0] b_re  [3:0]; | ||||
| reg signed [31:0] a_im  [3:0]; | ||||
| reg signed [31:0] b_im  [3:0]; | ||||
| 
 | ||||
| initial begin | ||||
|     rstn = 0; | ||||
|     vldi_data <= 0; | ||||
|     vldi_coef <= 0; | ||||
|     din_rect  =      16'd0;  | ||||
|     a_re[0]   <= 0; | ||||
|     b_re[0]   <= 0; | ||||
|     a_re[1]   <= 0; | ||||
|     b_re[1]   <= 0; | ||||
|     a_re[2]   <= 0; | ||||
|     b_re[2]   <= 0; | ||||
|     a_re[3]   <= 0; | ||||
|     b_re[3]   <= 0; | ||||
|     a_re[4]   <= 0; | ||||
|     b_re[4]   <= 0; | ||||
|     a_re[5]   <= 0; | ||||
|     b_re[5]   <= 0; | ||||
|     a_im[0]   <= 0; | ||||
|     b_im[0]   <= 0; | ||||
|     a_im[1]   <= 0; | ||||
|     b_im[1]   <= 0; | ||||
|     a_im[2]   <= 0; | ||||
|     b_im[2]   <= 0; | ||||
|     a_im[3]   <= 0; | ||||
|     b_im[3]   <= 0; | ||||
|     en <= 0; | ||||
|     repeat(3) @(posedge clk); | ||||
|         vldi_coef[0] <= 1;  | ||||
|         rstn = 1; | ||||
|         en <= 1; | ||||
|         a_re[0]     <=      55007237; | ||||
|         b_re[0]     <=      2143083068; | ||||
|     @(posedge clk); | ||||
|         vldi_coef[0] <= 0;  | ||||
|         a_re[0]     <=      0; | ||||
|         b_re[0]     <=      0; | ||||
|     repeat(8) @(posedge clk); | ||||
|     repeat(16) @(posedge clk); | ||||
|         vldi_coef[1] <= 1;  | ||||
|         rstn = 1; | ||||
|         a_re[1]     <=      32690030; | ||||
|  | @ -62,7 +77,7 @@ initial begin | |||
|         vldi_coef[1] <= 0;  | ||||
|         a_re[1]     <=      0; | ||||
|         b_re[1]     <=      0; | ||||
|     repeat(8) @(posedge clk); | ||||
|     repeat(16) @(posedge clk); | ||||
|         vldi_coef[2] <= 1;  | ||||
|         rstn = 1; | ||||
|         a_re[2]     <=      429516; | ||||
|  | @ -113,35 +128,38 @@ always@(posedge clk or negedge rstn) | |||
|                         din_rect        <=      16'd0; | ||||
|                     end | ||||
| 
 | ||||
| reg  signed  [15:0]  random_in [0:3]; | ||||
| reg  signed  [15:0]  random_in [0:15]; | ||||
| 
 | ||||
| always @(posedge clk or negedge rstn) begin | ||||
|     if (!rstn) begin | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             random_in[i] <= 16'd0; | ||||
|         end | ||||
|     end | ||||
|     else if (vldi_data) begin | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             random_in[i] <= $urandom % 30000; | ||||
|         end | ||||
|     end | ||||
|     else begin | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             random_in[i] <= 16'd0; | ||||
|         end | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| integer file[3:0]; | ||||
| reg [15:0] data[3:0]; | ||||
| integer status[3:0]; | ||||
| reg [15:0] reg_array[3:0]; | ||||
|    | ||||
| integer file[15:0]; | ||||
| reg [15:0] data[15:0]; | ||||
| integer status[15:0]; | ||||
| reg [15:0] reg_array[15:0]; | ||||
| string filenames[15:0];   | ||||
| initial begin | ||||
|     if(source_mode == 3) begin | ||||
|         string filenames[0:3] = {"in0_matlab.dat", "in1_matlab.dat", "in2_matlab.dat", "in3_matlab.dat"};     | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
| //        string filenames[0:3] = {"in0_matlab.dat", "in1_matlab.dat", "in2_matlab.dat", "in3_matlab.dat"};     | ||||
| 	for (int i = 0; i < 16; i++) begin | ||||
| 		$sformat(filenames[i], "in%0d_matlab.dat", i); | ||||
| 	end | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             file[i] = $fopen(filenames[i], "r"); | ||||
|             if (file[i] == 0) begin | ||||
|                 $display("Failed to open file: %s", filenames[i]); | ||||
|  | @ -151,13 +169,13 @@ initial begin | |||
|     end | ||||
| end | ||||
| 
 | ||||
|     always @(posedge clk or negedge rstn) begin | ||||
| always @(posedge clk or negedge rstn) begin | ||||
|     if (!rstn) begin | ||||
|             for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|                 reg_array[i] <= 16'd0; | ||||
|         end             | ||||
|     end else  if(vldi_data && source_mode == 3) begin | ||||
|             for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             status[i] = $fscanf(file[i], "%d\n", data[i]); | ||||
|             if (status[i] == 1  ) begin | ||||
|                 reg_array[i] <= data[i]; | ||||
|  | @ -168,24 +186,24 @@ end | |||
|             end                | ||||
|         end | ||||
|     end | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| reg signed [15:0] iir_in[3:0]; | ||||
| reg signed [15:0] iir_in[15:0]; | ||||
| 
 | ||||
| always @(*) | ||||
|         case(source_mode) | ||||
|                2'b01 :   begin  | ||||
|                                  for (int i = 0; i < 4; i = i + 1) begin | ||||
|                                  for (int i = 0; i < 16; i = i + 1) begin | ||||
|                                          iir_in[i] = din_rect; | ||||
|                                  end             | ||||
|                           end | ||||
|                2'b10 :   begin  | ||||
|                                  for (int i = 0; i < 4; i = i + 1) begin | ||||
|                                  for (int i = 0; i < 16; i = i + 1) begin | ||||
|                                          iir_in[i] = random_in[i]; | ||||
|                                  end             | ||||
|                           end | ||||
|                2'b11 :   begin  | ||||
|                                  for (int i = 0; i < 4; i = i + 1) begin | ||||
|                                  for (int i = 0; i < 16; i = i + 1) begin | ||||
|                                          iir_in[i] = reg_array[i]; | ||||
|                                  end             | ||||
|                           end | ||||
|  | @ -202,76 +220,103 @@ wire    vldo; | |||
| 
 | ||||
| assign    tc_bypass  =  1'b0; | ||||
| 
 | ||||
| reg  en; | ||||
| always  @(posedge clk or negedge rstn)begin | ||||
|     if(rstn==1'b0)begin | ||||
|         en <= 1; | ||||
|     end | ||||
|     else begin | ||||
|         en <= ~en; | ||||
|     end | ||||
| end | ||||
| wire signed [15:0] dout_p[7:0]; | ||||
| //always  @(posedge clk or negedge rstn)begin | ||||
| //    if(rstn==1'b0)begin | ||||
| //        en <= 1; | ||||
| //    end | ||||
| //    else begin | ||||
| //        en <= ~en; | ||||
| //    end | ||||
| //end | ||||
| wire signed [15:0] dout_p[15:0]; | ||||
| 
 | ||||
| z_dsp inst_z_dsp( | ||||
|             .rstn       (rstn  ),  | ||||
|             .clk       (clk  ), | ||||
|             .en       (en  ), | ||||
| //            .tc_bypass       (tc_bypass  ), | ||||
|             .vldi_coef        (vldi_coef   ), | ||||
|             .vldi_data        (vldi_data_r1   ),  | ||||
| //            .intp_mode       (intp_mode  ), | ||||
| //            .dac_mode_sel       (dac_mode_sel  ), | ||||
|             .din0       (iir_in[0]  ), | ||||
|             .din1       (iir_in[1]  ), | ||||
|             .din2       (iir_in[2]  ),  | ||||
|             .din3       (iir_in[3]  ), | ||||
|             .a0_re      (a_re[0]    ), | ||||
|             .b0_re      (b_re[0]    ), | ||||
|             .a1_re      (a_re[1]    ), | ||||
|             .b1_re      (b_re[1]    ), | ||||
|             .a2_re      (a_re[2]    ), | ||||
|             .b2_re      (b_re[2]    ), | ||||
|             .a3_re      (a_re[3]    ), | ||||
|             .b3_re      (b_re[3]    ), | ||||
|             .a4_re      (a_re[4]    ), | ||||
|             .b4_re      (b_re[4]    ), | ||||
|             .a5_re      (a_re[5]    ), | ||||
|             .b5_re      (b_re[5]    ), | ||||
|             .dout0      (dout_p[0]  ), | ||||
|             .dout1      (dout_p[1]  ), | ||||
|             .dout2      (dout_p[2]  ), | ||||
|             .dout3      (dout_p[3]  ), | ||||
| z_dsp u_z_dsp( | ||||
|     .rstn       ( rstn       ), | ||||
|     .clk        ( clk        ), | ||||
|     .en         ( en         ), | ||||
|     .vldi_coef  ( vldi_coef  ), | ||||
|     .vldi_data  ( vldi_data && vldi_data_r1  ), | ||||
|     .din0       ( iir_in[0]  ), | ||||
|     .din1       ( iir_in[1]  ), | ||||
|     .din2       ( iir_in[2]  ), | ||||
|     .din3       ( iir_in[3]  ), | ||||
|     .din4       ( iir_in[4]  ), | ||||
|     .din5       ( iir_in[5]  ), | ||||
|     .din6       ( iir_in[6]  ), | ||||
|     .din7       ( iir_in[7]  ), | ||||
|     .din8       ( iir_in[8]  ), | ||||
|     .din9       ( iir_in[9]  ), | ||||
|     .dina       ( iir_in[10] ), | ||||
|     .dinb       ( iir_in[11] ), | ||||
|     .dinc       ( iir_in[12] ), | ||||
|     .dind       ( iir_in[13] ), | ||||
|     .dine       ( iir_in[14] ), | ||||
|     .dinf       ( iir_in[15] ), | ||||
|     .a0_re      ( a_re[0]    ), | ||||
|     .b0_re      ( b_re[0]    ), | ||||
|     .a1_re      ( a_re[1]    ), | ||||
|     .b1_re      ( b_re[1]    ), | ||||
|     .a2_re      ( a_re[2]    ), | ||||
|     .b2_re      ( b_re[2]    ), | ||||
|     .a3_re      ( a_re[3]    ), | ||||
|     .b3_re      ( b_re[3]    ), | ||||
|     .a0_im      ( a_im[0]    ), | ||||
|     .b0_im      ( b_im[0]    ), | ||||
|     .a1_im      ( a_im[1]    ), | ||||
|     .b1_im      ( b_im[1]    ), | ||||
|     .a2_im      ( a_im[2]    ), | ||||
|     .b2_im      ( b_im[2]    ), | ||||
|     .a3_im      ( a_im[3]    ), | ||||
|     .b3_im      ( b_im[3]    ), | ||||
|     .dout0      ( dout_p[0]  ), | ||||
|     .dout1      ( dout_p[1]  ), | ||||
|     .dout2      ( dout_p[2]  ), | ||||
|     .dout3      ( dout_p[3]  ), | ||||
|     .dout4      ( dout_p[4]  ), | ||||
|     .dout5      ( dout_p[5]  ), | ||||
|     .dout6      ( dout_p[6]  ), | ||||
|     .dout7      ( dout_p[7]  ), | ||||
|     .dout8      ( dout_p[8]  ), | ||||
|     .dout9      ( dout_p[9]  ), | ||||
|     .douta      ( dout_p[10] ), | ||||
|     .doutb      ( dout_p[11] ), | ||||
|     .doutc      ( dout_p[12] ), | ||||
|     .doutd      ( dout_p[13] ), | ||||
|     .doute      ( dout_p[14] ), | ||||
|     .doutf      ( dout_p[15] ), | ||||
|     .vldo       ( vldo       ) | ||||
|             ); | ||||
| 
 | ||||
| 
 | ||||
| integer signed In_fid[0:3]; | ||||
| integer signed dout_fid[0:7]; | ||||
| string filenames_in[0:3] = {"in0.dat", "in1.dat", "in2.dat", "in3.dat"}; | ||||
| string filenames_dout[0:7] = {"dout0.dat", "dout1.dat", "dout2.dat", "dout3.dat", "dout4.dat", "dout5.dat", "dout6.dat", "dout7.dat"}; | ||||
| ); | ||||
| 
 | ||||
| //integer signed In_fid[0:3]; | ||||
| integer signed dout_fid[0:15]; | ||||
| //string filenames_in[0:3] = {"in0.dat", "in1.dat", "in2.dat", "in3.dat"}; | ||||
| string filenames_dout[0:15] = { | ||||
| 	"dout0.dat", "dout1.dat", "dout2.dat", "dout3.dat", | ||||
| 	"dout4.dat", "dout5.dat", "dout6.dat", "dout7.dat", | ||||
| 	"dout8.dat", "dout9.dat", "dout10.dat", "dout11.dat", | ||||
| 	"dout12.dat", "dout13.dat", "dout14.dat", "dout15.dat" | ||||
| }; | ||||
| initial begin | ||||
|     #0; | ||||
|     for (int i = 0; i < 4; i = i + 1) begin | ||||
|         In_fid[i] = $fopen(filenames_in[i]); | ||||
|     end | ||||
|     for (int i = 0; i < 4; i = i + 1) begin | ||||
| //    for (int i = 0; i < 4; i = i + 1) begin | ||||
| //        In_fid[i] = $fopen(filenames_in[i]); | ||||
| //    end | ||||
|     for (int i = 0; i < 16; i = i + 1) begin | ||||
|         dout_fid[i] = $fopen(filenames_dout[i]); | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| always @(posedge clk) begin | ||||
|     if (vldi_data_r1) begin | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
|             $fwrite(In_fid[i], "%d\n", $signed(iir_in[i])); | ||||
|         end | ||||
|     end | ||||
| end | ||||
| //always @(posedge clk) begin | ||||
| //    if (vldi_data_r1) begin | ||||
| //        for (int i = 0; i < 4; i = i + 1) begin | ||||
| //            $fwrite(In_fid[i], "%d\n", $signed(iir_in[i])); | ||||
| //        end | ||||
| //    end | ||||
| //end | ||||
| 
 | ||||
| always @(posedge clk) begin | ||||
|     if (vldo) begin | ||||
|         for (int i = 0; i < 4; i = i + 1) begin | ||||
|         for (int i = 0; i < 16; i = i + 1) begin | ||||
|             $fwrite(dout_fid[i], "%d\n", $signed(dout_p[i])); | ||||
|         end | ||||
|     end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue