TailCorr/rtl/z_dsp/CoefGen.sv

824 lines
28 KiB
Systemverilog
Raw Normal View History

module CoefGen #(
parameter data_in_width = 32
,parameter coef_width = 32
,parameter frac_data_out_width = 20//X for in,5
,parameter frac_coef_width = 31//division
)
(
input rstn
,input clk
2025-04-18 15:16:50 +08:00
,input [3:0] vldi
,input signed [31:0] a0_re
,input signed [31:0] b0_re
,input signed [31:0] a1_re
,input signed [31:0] b1_re
,input signed [31:0] a2_re
,input signed [31:0] b2_re
,input signed [31:0] a3_re
,input signed [31:0] b3_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
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] a_re0
,output reg signed [31:0] b_re0
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] ab_re0
,output reg signed [31:0] abb_re0
,output reg signed [31:0] ab_pow3_re0
,output reg signed [31:0] ab_pow4_re0
,output reg signed [31:0] ab_pow5_re0
,output reg signed [31:0] ab_pow6_re0
,output reg signed [31:0] ab_pow7_re0
2025-04-18 15:16:50 +08:00
,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
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] a_re1
,output reg signed [31:0] b_re1
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] ab_re1
,output reg signed [31:0] abb_re1
,output reg signed [31:0] ab_pow3_re1
,output reg signed [31:0] ab_pow4_re1
,output reg signed [31:0] ab_pow5_re1
,output reg signed [31:0] ab_pow6_re1
,output reg signed [31:0] ab_pow7_re1
2025-04-18 15:16:50 +08:00
,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
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] a_re2
,output reg signed [31:0] b_re2
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] ab_re2
,output reg signed [31:0] abb_re2
,output reg signed [31:0] ab_pow3_re2
,output reg signed [31:0] ab_pow4_re2
,output reg signed [31:0] ab_pow5_re2
,output reg signed [31:0] ab_pow6_re2
,output reg signed [31:0] ab_pow7_re2
2025-04-18 15:16:50 +08:00
,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
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] a_re3
,output reg signed [31:0] b_re3
2025-03-11 17:34:49 +08:00
,output reg signed [31:0] ab_re3
,output reg signed [31:0] abb_re3
,output reg signed [31:0] ab_pow3_re3
,output reg signed [31:0] ab_pow4_re3
,output reg signed [31:0] ab_pow5_re3
,output reg signed [31:0] ab_pow6_re3
,output reg signed [31:0] ab_pow7_re3
2025-04-18 15:16:50 +08:00
,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
);
reg vldi_or_r1;
wire vldi_or = | vldi;
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;
2025-04-18 15:16:50 +08:00
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
a_re_r1 <= 'h0;
b_re_r1 <= 'h0;
end
else if(|vldi) begin
case(1'b1)
vldi[0]: begin
2025-03-11 17:34:49 +08:00
a_re_r1 <= a0_re;
2025-04-18 15:16:50 +08:00
b_re_r1 <= b0_re;
a_im_r1 <= a0_im;
b_im_r1 <= b0_im;
end
vldi[1]: begin
2025-03-11 17:34:49 +08:00
a_re_r1 <= a1_re;
b_re_r1 <= b1_re;
2025-04-18 15:16:50 +08:00
a_im_r1 <= a1_im;
b_im_r1 <= b1_im;
end
vldi[2]: begin
2025-03-11 17:34:49 +08:00
a_re_r1 <= a2_re;
b_re_r1 <= b2_re;
2025-04-18 15:16:50 +08:00
a_im_r1 <= a2_im;
b_im_r1 <= b2_im;
end
vldi[3]: begin
2025-03-11 17:34:49 +08:00
a_re_r1 <= a3_re;
b_re_r1 <= b3_re;
2025-04-18 15:16:50 +08:00
a_im_r1 <= a3_im;
b_im_r1 <= b3_im;
end
// default: begin
// a_re_r1 <= a_re[0];
// b_re_r1 <= b_re[0];
// end
endcase
end
end
reg en;
reg en_r1;
sirv_gnrl_dffr #(1) dff_en_1(en, en_r1 ,clk,rstn);
2025-04-18 15:16:50 +08:00
reg [4:0] cnt0;
wire add_cnt0;
wire end_cnt0;
always @(posedge clk or negedge rstn)begin
if(!rstn)begin
cnt0 <= 0;
end
else if(add_cnt0)begin
if(end_cnt0)
cnt0 <= 0;
else
cnt0 <= cnt0 + 1;
end
end
assign add_cnt0 = en;
2025-04-18 15:16:50 +08:00
assign end_cnt0 = add_cnt0 && cnt0== 16-1;
wire en_l;
wire en_h;
always @(posedge clk or negedge rstn)begin
if(rstn==1'b0)begin
en <= 0;
end
else if(en_h)begin
en <= 1;
end
else if(en_l)begin
en <= 0;
end
end
assign en_h = vldi_or == 1 && vldi_or_r1 == 0 && cnt0 == 0;
assign en_l = end_cnt0;
reg signed [data_in_width-1:0] bin_re;
wire signed [data_in_width-1:0] bout_re;
2025-04-18 15:16:50 +08:00
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;
2025-04-18 15:16:50 +08:00
bin_im <= bout_im;
end
else begin
bin_re <= 32'd2147483647;
2025-04-18 15:16:50 +08:00
bin_im <= 0;
end
end
2025-04-18 15:16:50 +08:00
mult_C
#(
.A_width(data_in_width)
2025-04-18 15:16:50 +08:00
,.B_width(data_in_width)
,.C_width(coef_width)
2025-04-18 15:16:50 +08:00
,.D_width(coef_width)
,.o_width(data_in_width)
)
inst_c1 (
.clk (clk ),
.rstn (rstn ),
.en (en ),
2025-04-18 15:16:50 +08:00
.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;
2025-04-18 15:16:50 +08:00
wire signed [data_in_width-1:0] abo_im;
mult_C
#(
.A_width(data_in_width)
2025-04-18 15:16:50 +08:00
,.B_width(data_in_width)
,.C_width(coef_width)
2025-04-18 15:16:50 +08:00
,.D_width(coef_width)
,.o_width(data_in_width)
)
inst_c2 (
.clk (clk ),
.rstn (rstn ),
.en (en ),
2025-04-18 15:16:50 +08:00
.a (bin_re ),
.b (bin_im ),
.c (a_re_r1 ),
.d (a_im_r1 ),
.Re (abo_re ),
.Im (abo_im )
);
2025-04-18 15:16:50 +08:00
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_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_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
ao_re_r1 <= 0;
ab_re_r1 <= 0;
abb_re_r1 <= 0;
ab_pow3_re_r1 <= 0;
ab_pow4_re_r1 <= 0;
ab_pow5_re_r1 <= 0;
ab_pow6_re_r1 <= 0;
ab_pow7_re_r1 <= 0;
2025-04-18 15:16:50 +08:00
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;
2025-04-18 15:16:50 +08:00
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;
2025-04-18 15:16:50 +08:00
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;
2025-04-18 15:16:50 +08:00
ab_im_r1 <= abo_im;
end
else if(add_cnt0 && cnt0 == 3 && en_r1)begin
abb_re_r1 <= abo_re;
2025-04-18 15:16:50 +08:00
abb_im_r1 <= abo_im;
end
else if(add_cnt0 && cnt0 == 4 && en_r1)begin
ab_pow3_re_r1 <= abo_re;
2025-04-18 15:16:50 +08:00
ab_pow3_im_r1 <= abo_im;
end
else if(add_cnt0 && cnt0 == 5 && en_r1)begin
ab_pow4_re_r1 <= abo_re;
2025-04-18 15:16:50 +08:00
ab_pow4_im_r1 <= abo_im;
end
else if(add_cnt0 && cnt0 == 6 && en_r1)begin
ab_pow5_re_r1 <= abo_re;
2025-04-18 15:16:50 +08:00
ab_pow5_im_r1 <= abo_im;
end
else if(add_cnt0 && cnt0 == 7 && en_r1)begin
ab_pow6_re_r1 <= abo_re;
2025-04-18 15:16:50 +08:00
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
2025-04-18 15:16:50 +08:00
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
2025-04-18 15:16:50 +08:00
// else begin
// end
end
2025-04-18 15:16:50 +08:00
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);
2025-04-18 15:16:50 +08:00
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
2025-03-11 17:34:49 +08:00
a_re0 <= 0;
b_re0 <= 0;
2025-03-11 17:34:49 +08:00
ab_re0 <= 0;
abb_re0 <= 0;
ab_pow3_re0 <= 0;
ab_pow4_re0 <= 0;
ab_pow5_re0 <= 0;
ab_pow6_re0 <= 0;
ab_pow7_re0 <= 0;
2025-04-18 15:16:50 +08:00
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;
2025-03-11 17:34:49 +08:00
a_re1 <= 0;
b_re1 <= 0;
2025-03-11 17:34:49 +08:00
ab_re1 <= 0;
abb_re1 <= 0;
ab_pow3_re1 <= 0;
ab_pow4_re1 <= 0;
ab_pow5_re1 <= 0;
ab_pow6_re1 <= 0;
ab_pow7_re1 <= 0;
2025-04-18 15:16:50 +08:00
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;
2025-03-11 17:34:49 +08:00
a_re2 <= 0;
b_re2 <= 0;
2025-03-11 17:34:49 +08:00
ab_re2 <= 0;
abb_re2 <= 0;
ab_pow3_re2 <= 0;
ab_pow4_re2 <= 0;
ab_pow5_re2 <= 0;
ab_pow6_re2 <= 0;
ab_pow7_re2 <= 0;
2025-04-18 15:16:50 +08:00
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;
2025-03-11 17:34:49 +08:00
a_re3 <= 0;
b_re3 <= 0;
2025-03-11 17:34:49 +08:00
ab_re3 <= 0;
abb_re3 <= 0;
ab_pow3_re3 <= 0;
ab_pow4_re3 <= 0;
ab_pow5_re3 <= 0;
ab_pow6_re3 <= 0;
ab_pow7_re3 <= 0;
2025-04-18 15:16:50 +08:00
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_r18) begin
case(1'b1)
2025-04-18 15:16:50 +08:00
vldi_r18[0]: begin
2025-03-11 17:34:49 +08:00
a_re0 <= ao_re_r1 ;
b_re0 <= bo_re_r1 ;
2025-03-11 17:34:49 +08:00
ab_re0 <= ab_re_r1 ;
abb_re0 <= abb_re_r1 ;
ab_pow3_re0 <= ab_pow3_re_r1;
ab_pow4_re0 <= ab_pow4_re_r1;
ab_pow5_re0 <= ab_pow5_re_r1;
ab_pow6_re0 <= ab_pow6_re_r1;
ab_pow7_re0 <= ab_pow7_re_r1;
2025-04-18 15:16:50 +08:00
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
2025-04-18 15:16:50 +08:00
vldi_r18[1]: begin
2025-03-11 17:34:49 +08:00
a_re1 <= ao_re_r1 ;
b_re1 <= bo_re_r1 ;
2025-03-11 17:34:49 +08:00
ab_re1 <= ab_re_r1 ;
abb_re1 <= abb_re_r1 ;
ab_pow3_re1 <= ab_pow3_re_r1;
ab_pow4_re1 <= ab_pow4_re_r1;
ab_pow5_re1 <= ab_pow5_re_r1;
ab_pow6_re1 <= ab_pow6_re_r1;
ab_pow7_re1 <= ab_pow7_re_r1;
2025-04-18 15:16:50 +08:00
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
2025-04-18 15:16:50 +08:00
vldi_r18[2]: begin
2025-03-11 17:34:49 +08:00
a_re2 <= ao_re_r1 ;
b_re2 <= bo_re_r1 ;
2025-03-11 17:34:49 +08:00
ab_re2 <= ab_re_r1 ;
abb_re2 <= abb_re_r1 ;
ab_pow3_re2 <= ab_pow3_re_r1;
ab_pow4_re2 <= ab_pow4_re_r1;
ab_pow5_re2 <= ab_pow5_re_r1;
ab_pow6_re2 <= ab_pow6_re_r1;
ab_pow7_re2 <= ab_pow7_re_r1;
2025-04-18 15:16:50 +08:00
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
2025-04-18 15:16:50 +08:00
vldi_r18[3]: begin
2025-03-11 17:34:49 +08:00
a_re3 <= ao_re_r1 ;
b_re3 <= bo_re_r1 ;
2025-03-11 17:34:49 +08:00
ab_re3 <= ab_re_r1 ;
abb_re3 <= abb_re_r1 ;
ab_pow3_re3 <= ab_pow3_re_r1;
ab_pow4_re3 <= ab_pow4_re_r1;
ab_pow5_re3 <= ab_pow5_re_r1;
ab_pow6_re3 <= ab_pow6_re_r1;
ab_pow7_re3 <= ab_pow7_re_r1;
2025-04-18 15:16:50 +08:00
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;
// ab_re[0] <= 'h0;
// abb_re[0] <= 'h0;
// ab_pow3_re[0] <= 'h0;
// ab_pow4_re[0] <= 'h0;
// ab_pow5_re[0] <= 'h0;
// ab_pow6_re[0] <= 'h0;
// ab_pow7_re[0] <= 'h0;
// b_pow8_re[0] <= 'h0;
// end
endcase
end
end
endmodule