blob: 9e39f7bf9c9a946ac63cea6c2a8f1b6038b24f97 [file] [log] [blame] [edit]
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T1 Processor File: fpu_in_ctl.v
// Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
//
// The above named program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License version 2 as published by the Free Software Foundation.
//
// The above named program is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this work; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
//
// ========== Copyright Header End ============================================
///////////////////////////////////////////////////////////////////////////////
//
// FPU input control logic.
//
///////////////////////////////////////////////////////////////////////////////
module fpu_in_ctl (
pcx_fpio_data_rdy_px2,
pcx_fpio_data_px2,
fp_op_in,
fp_op_in_7in,
a1stg_step,
m1stg_step,
d1stg_step,
add_pipe_active,
mul_pipe_active,
div_pipe_active,
sehold,
arst_l,
grst_l,
rclk,
fp_data_rdy,
fadd_clken_l,
fmul_clken_l,
fdiv_clken_l,
inq_we,
inq_wraddr,
inq_read_en,
inq_rdaddr,
inq_bp,
inq_bp_inv,
inq_fwrd,
inq_fwrd_inv,
inq_add,
inq_mul,
inq_div,
se,
si,
so
);
input pcx_fpio_data_rdy_px2; // FPU request ready from PCX
input [123:118] pcx_fpio_data_px2; // FPU request data from PCX
input [3:2] fp_op_in; // request opcode
input fp_op_in_7in; // request opcode
input a1stg_step; // add pipe load
input m1stg_step; // multiply pipe load
input d1stg_step; // divide pipe load
input add_pipe_active; // add pipe is executing a valid instr
input mul_pipe_active; // mul pipe is executing a valid instr
input div_pipe_active; // div pipe is executing a valid instr
input sehold; // hold sram output MUX (for inq_data[155:0] in fpu_in_dp) for macrotest
input arst_l; // global asynchronous reset- asserted low
input grst_l; // global synchronous reset- asserted low
input rclk; // global clock
output fp_data_rdy;
output fadd_clken_l; // add pipe clk enable - asserted low
output fmul_clken_l; // multiply pipe clk enable - asserted low
output fdiv_clken_l; // divide pipe clk enable - asserted low
output inq_we; // input Q write enable
output [3:0] inq_wraddr; // input Q write address
output inq_read_en; // input Q read enable
output [3:0] inq_rdaddr; // input Q read address
output inq_bp; // bypass the input Q SRAM
output inq_bp_inv; // don't bypass the input Q SRAM
output inq_fwrd; // input Q is empty
output inq_fwrd_inv; // input Q is not empty
output inq_add; // add pipe request
output inq_mul; // multiply pipe request
output inq_div; // divide pipe request
input se; // scan_enable
input si; // scan in
output so; // scan out
wire reset;
wire fp_data_rdy;
wire fp_vld_in;
wire [4:0] fp_type_in;
wire fadd_clken_l;
wire fmul_clken_l;
wire fdiv_clken_l;
wire fp_op_in_7;
wire fp_op_in_7_inv;
wire inq_we;
wire inq_read_en;
wire [3:0] inq_wrptr_plus1;
wire inq_wrptr_step;
wire [3:0] inq_wrptr;
wire [3:0] inq_div_wrptr_plus1;
wire inq_div_wrptr_step;
wire [3:0] inq_div_wrptr;
wire [3:0] inq_wraddr;
wire [3:0] inq_wraddr_del;
wire inq_re;
wire [3:0] inq_rdptr_plus1;
wire [3:0] inq_rdptr_in;
wire [3:0] inq_rdptr;
wire inq_div_re;
wire [3:0] inq_div_rdptr_plus1;
wire [3:0] inq_div_rdptr_in;
wire [3:0] inq_div_rdptr;
wire inq_div_rd_in;
wire inq_div_rd;
wire [3:0] inq_rdaddr;
wire [3:0] inq_rdaddr_del;
wire inq_bp;
wire inq_bp_inv;
wire inq_empty;
wire inq_div_empty;
wire inq_fwrd;
wire inq_fwrd_inv;
wire fp_add_in;
wire fp_mul_in;
wire fp_div_in;
wire [7:0] inq_rdptr_dec_in;
wire [7:0] inq_rdptr_dec;
wire [7:0] inq_div_rdptr_dec_in;
wire [7:0] inq_div_rdptr_dec;
wire [15:0] inq_rdaddr_del_dec_in;
wire [15:0] inq_rdaddr_del_dec;
wire inq_pipe0_we;
wire inq_pipe1_we;
wire inq_pipe2_we;
wire inq_pipe3_we;
wire inq_pipe4_we;
wire inq_pipe5_we;
wire inq_pipe6_we;
wire inq_pipe7_we;
wire inq_pipe8_we;
wire inq_pipe9_we;
wire inq_pipe10_we;
wire inq_pipe11_we;
wire inq_pipe12_we;
wire inq_pipe13_we;
wire inq_pipe14_we;
wire inq_pipe15_we;
wire [2:0] inq_pipe0;
wire [2:0] inq_pipe1;
wire [2:0] inq_pipe2;
wire [2:0] inq_pipe3;
wire [2:0] inq_pipe4;
wire [2:0] inq_pipe5;
wire [2:0] inq_pipe6;
wire [2:0] inq_pipe7;
wire [2:0] inq_pipe8;
wire [2:0] inq_pipe9;
wire [2:0] inq_pipe10;
wire [2:0] inq_pipe11;
wire [2:0] inq_pipe12;
wire [2:0] inq_pipe13;
wire [2:0] inq_pipe14;
wire [2:0] inq_pipe15;
wire [2:0] inq_pipe;
wire inq_div;
wire inq_diva;
wire inq_diva_dly;
wire d1stg_step_dly;
wire inq_mul;
wire inq_mula;
wire inq_add;
wire inq_adda;
wire valid_packet;
wire valid_packet_dly;
wire tag_sel;
wire sehold_inv;
dffrl_async #(1) dffrl_in_ctl (
.din (grst_l),
.clk (rclk),
.rst_l(arst_l),
.q (in_ctl_rst_l),
.se (se),
.si (),
.so ()
);
assign reset= (!in_ctl_rst_l);
///////////////////////////////////////////////////////////////////////////////
//
// Capture request and input control information.
//
///////////////////////////////////////////////////////////////////////////////
dffr_s #(1) i_fp_data_rdy (
.din (pcx_fpio_data_rdy_px2),
.rst (reset),
.clk (rclk),
.q (fp_data_rdy),
.se (se),
.si (),
.so ()
);
dff_s #(1) i_fp_vld_in (
.din (pcx_fpio_data_px2[123]),
.clk (rclk),
.q (fp_vld_in),
.se (se),
.si (),
.so ()
);
dff_s #(5) i_fp_type_in (
.din (pcx_fpio_data_px2[122:118]),
.clk (rclk),
.q (fp_type_in[4:0]),
.se (se),
.si (),
.so ()
);
///////////////////////////////////////////////////////////////////////////////
//
// Select lines- extract the two operands.
//
///////////////////////////////////////////////////////////////////////////////
assign fp_op_in_7= fp_op_in_7in;
assign fp_op_in_7_inv= (!fp_op_in_7);
///////////////////////////////////////////////////////////////////////////////
//
// Input queue control logic
// - write enables
// - write pointers
// - read enables
// - read pointers
// - write address
// - read address
//
///////////////////////////////////////////////////////////////////////////////
assign inq_we= fp_data_rdy && fp_vld_in
&& (((fp_type_in[4:0]==5'h0a) && fp_op_in_7)
|| ((fp_type_in[4:0]==5'h0b) && fp_op_in_7_inv));
assign inq_wrptr_plus1[3:0]= inq_wrptr[3:0] + 4'h1;
assign inq_wrptr_step= inq_we && (!fp_div_in);
dffre_s #(4) i_inq_wrptr (
.din (inq_wrptr_plus1[3:0]),
.en (inq_wrptr_step),
.rst (reset),
.clk (rclk),
.q (inq_wrptr[3:0]),
.se (se),
.si (),
.so ()
);
assign inq_div_wrptr_plus1[3:0]= inq_div_wrptr[3:0] + 4'h1;
assign inq_div_wrptr_step= inq_we && fp_div_in;
dffre_s #(4) i_inq_div_wrptr (
.din (inq_div_wrptr_plus1[3:0]),
.en (inq_div_wrptr_step),
.rst (reset),
.clk (rclk),
.q (inq_div_wrptr[3:0]),
.se (se),
.si (),
.so ()
);
assign inq_wraddr[3:0]= {fp_div_in,
(({3{fp_div_in}}
& inq_div_wrptr[2:0])
| ({3{(!fp_div_in)}}
& inq_wrptr[2:0]))};
dff_s #(4) i_inq_wraddr_del (
.din (inq_wraddr[3:0]),
.clk (rclk),
.q (inq_wraddr_del[3:0]),
.se (se),
.si (),
.so ()
);
assign inq_read_en = ~inq_empty | ~inq_div_empty;
assign inq_re= (inq_adda && a1stg_step)
|| (inq_mula && m1stg_step);
assign inq_rdptr_plus1[3:0]= inq_rdptr[3:0] + 4'h1;
assign inq_rdptr_in[3:0]= ({4{(inq_re && (!reset))}}
& inq_rdptr_plus1[3:0])
| ({4{((!inq_re) && (!reset))}}
& inq_rdptr[3:0]);
dff_s #(4) i_inq_rdptr (
.din (inq_rdptr_in[3:0]),
.clk (rclk),
.q (inq_rdptr[3:0]),
.se (se),
.si (),
.so ()
);
assign inq_div_re= (inq_diva && d1stg_step);
assign inq_div_rdptr_plus1[3:0]= inq_div_rdptr[3:0] + 4'h1;
assign inq_div_rdptr_in[3:0]= ({4{(inq_div_re && (!reset))}}
& inq_div_rdptr_plus1[3:0])
| ({4{((!inq_div_re) && (!reset))}}
& inq_div_rdptr[3:0]);
dff_s #(4) i_inq_div_rdptr (
.din (inq_div_rdptr_in[3:0]),
.clk (rclk),
.q (inq_div_rdptr[3:0]),
.se (se),
.si (),
.so ()
);
assign inq_div_rd_in= (!inq_div_empty) && d1stg_step && (!inq_diva);
dff_s #(1) i_inq_div_rd (
.din (inq_div_rd_in),
.clk (rclk),
.q (inq_div_rd),
.se (se),
.si (),
.so ()
);
assign inq_rdaddr[3:0]= {inq_div_rd_in,
(({3{inq_div_rd_in}}
& (inq_div_rdptr[2:0] & {3{(!reset)}}))
| ({3{(!inq_div_rd_in)}}
& inq_rdptr_in[2:0]))};
dff_s #(4) i_inq_rdaddr_del (
.din (inq_rdaddr[3:0]),
.clk (rclk),
.q (inq_rdaddr_del[3:0]),
.se (se),
.si (),
.so ()
);
///////////////////////////////////////////////////////////////////////////////
//
// Input queue empty and bypass signals.
//
///////////////////////////////////////////////////////////////////////////////
// Power management update
assign valid_packet = fp_data_rdy && fp_vld_in &&
((fp_type_in[4:0]==5'h0a) || (fp_type_in[4:0]==5'h0b));
dffre_s #(1) i_valid_packet_dly (
.din (valid_packet),
.en (1'b1),
.rst (reset),
.clk (rclk),
.q (valid_packet_dly),
.se (se),
.si (),
.so ()
);
// Never bypass/forward invalid packets to the execution pipes
// assign inq_bp= (inq_wraddr_del[3:0]==inq_rdaddr_del[3:0]);
// 11/11/03: macrotest (AND with sehold_inv)
assign sehold_inv = ~sehold;
assign inq_bp= (inq_wraddr_del[3:0]==inq_rdaddr_del[3:0]) && valid_packet_dly && sehold_inv;
assign inq_bp_inv= (!inq_bp);
assign inq_empty= (inq_wrptr[3:0]==inq_rdptr[3:0]);
assign inq_div_empty= (inq_div_wrptr[3:0]==inq_div_rdptr[3:0]);
// Power management update
// Never bypass/forward invalid packets to the execution pipes
// assign inq_fwrd= (inq_empty && (!inq_div_rd))
// || (inq_div_empty && fp_div_in && fp_data_rdy && fp_vld_in
// && d1stg_step);
// 11/11/03: macrotest change (AND with sehold_inv)
assign inq_fwrd= ((inq_empty && (!inq_div_rd))
|| (inq_div_empty && fp_div_in
&& d1stg_step)) && valid_packet && sehold_inv;
assign inq_fwrd_inv= (!inq_fwrd);
///////////////////////////////////////////////////////////////////////////////
//
// FPU pipe selection flags.
//
///////////////////////////////////////////////////////////////////////////////
assign fp_add_in= fp_data_rdy && fp_vld_in && (fp_type_in[4:1]==4'h5)
&& ((fp_op_in_7 && (!fp_type_in[0]))
|| (fp_op_in_7_inv && (!fp_op_in[3]) && fp_type_in[0]));
assign fp_mul_in= fp_data_rdy && fp_vld_in && (fp_type_in[4:0]==5'h0b)
&& fp_op_in_7_inv && (fp_op_in[3:2]==2'b10);
assign fp_div_in= fp_data_rdy && fp_vld_in && (fp_type_in[4:0]==5'h0b)
&& fp_op_in_7_inv && (fp_op_in[3:2]==2'b11);
assign inq_rdptr_dec_in[7:0]= ({8{reset}}
& 8'h01)
| ({8{(inq_re && (!reset))}}
& {inq_rdptr_dec[6:0], inq_rdptr_dec[7]})
| ({8{((!inq_re) && (!reset))}}
& inq_rdptr_dec[7:0]);
dff_s #(8) i_inq_rdptr_dec (
.din (inq_rdptr_dec_in[7:0]),
.clk (rclk),
.q (inq_rdptr_dec[7:0]),
.se (se),
.si (),
.so ()
);
assign inq_div_rdptr_dec_in[7:0]= ({8{reset}}
& 8'h01)
| ({8{(inq_div_re && (!reset))}}
& {inq_div_rdptr_dec[6:0], inq_div_rdptr_dec[7]})
| ({8{((!inq_div_re) && (!reset))}}
& inq_div_rdptr_dec[7:0]);
dff_s #(8) i_inq_div_rdptr_dec (
.din (inq_div_rdptr_dec_in[7:0]),
.clk (rclk),
.q (inq_div_rdptr_dec[7:0]),
.se (se),
.si (),
.so ()
);
assign inq_rdaddr_del_dec_in[15:0]= ({16{((!inq_div_empty) && d1stg_step
&& (!inq_diva))}}
& {(inq_div_rdptr_dec[7:1] & {7{(!reset)}}),
(inq_div_rdptr_dec[0] || reset), 8'b0})
| ({16{(!((!inq_div_empty) && d1stg_step && (!inq_diva)))}}
& {8'b0, inq_rdptr_dec_in[7:0]});
dff_s #16 i_inq_rdaddr_del_dec (
.din (inq_rdaddr_del_dec_in[15:0]),
.clk (rclk),
.q (inq_rdaddr_del_dec[15:0]),
.se (se),
.si (),
.so ()
);
assign inq_pipe0_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h0);
assign inq_pipe1_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h1);
assign inq_pipe2_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h2);
assign inq_pipe3_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h3);
assign inq_pipe4_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h4);
assign inq_pipe5_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h5);
assign inq_pipe6_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h6);
assign inq_pipe7_we= inq_we && (!fp_div_in) && (inq_wrptr[2:0]==3'h7);
assign inq_pipe8_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h0);
assign inq_pipe9_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h1);
assign inq_pipe10_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h2);
assign inq_pipe11_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h3);
assign inq_pipe12_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h4);
assign inq_pipe13_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h5);
assign inq_pipe14_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h6);
assign inq_pipe15_we= inq_we && fp_div_in && (inq_div_wrptr[2:0]==3'h7);
dffre_s #(3) i_inq_pipe0 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe0_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe0[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe1 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe1_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe1[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe2 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe2_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe2[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe3 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe3_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe3[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe4 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe4_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe4[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe5 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe5_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe5[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe6 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe6_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe6[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe7 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe7_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe7[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe8 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe8_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe8[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe9 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe9_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe9[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe10 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe10_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe10[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe11 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe11_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe11[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe12 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe12_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe12[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe13 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe13_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe13[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe14 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe14_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe14[2:0]),
.se (se),
.si (),
.so ()
);
dffre_s #(3) i_inq_pipe15 (
.din ({fp_div_in, fp_mul_in, fp_add_in}),
.en (inq_pipe15_we),
.rst (reset),
.clk (rclk),
.q (inq_pipe15[2:0]),
.se (se),
.si (),
.so ()
);
// Power management update
// 3-bit fifo pipe tags (div,mul,add) are not cleared after use.
// Now that inq_fwrd is qualified by valid_packet, inq_fwrd can't be
// used for inq_pipe[2:0] selection.
assign tag_sel = (inq_empty && (!inq_div_rd))
|| (inq_div_empty && fp_div_in && fp_data_rdy && fp_vld_in
&& d1stg_step);
assign inq_pipe[2:0]= ({3{tag_sel}}
// Austin update
// performance change: allow div to bypass FIFO (2 cyc latency reduction)
& {(inq_div_empty && fp_div_in && fp_data_rdy && fp_vld_in
&& d1stg_step
&& d1stg_step_dly && (!inq_diva_dly)),
fp_mul_in,
fp_add_in})
| ({3{(!tag_sel)}}
& (({3{inq_rdaddr_del_dec[0]}}
& inq_pipe0[2:0])
| ({3{inq_rdaddr_del_dec[1]}}
& inq_pipe1[2:0])
| ({3{inq_rdaddr_del_dec[2]}}
& inq_pipe2[2:0])
| ({3{inq_rdaddr_del_dec[3]}}
& inq_pipe3[2:0])
| ({3{inq_rdaddr_del_dec[4]}}
& inq_pipe4[2:0])
| ({3{inq_rdaddr_del_dec[5]}}
& inq_pipe5[2:0])
| ({3{inq_rdaddr_del_dec[6]}}
& inq_pipe6[2:0])
| ({3{inq_rdaddr_del_dec[7]}}
& inq_pipe7[2:0])
| ({3{inq_rdaddr_del_dec[8]}}
& inq_pipe8[2:0])
| ({3{inq_rdaddr_del_dec[9]}}
& inq_pipe9[2:0])
| ({3{inq_rdaddr_del_dec[10]}}
& inq_pipe10[2:0])
| ({3{inq_rdaddr_del_dec[11]}}
& inq_pipe11[2:0])
| ({3{inq_rdaddr_del_dec[12]}}
& inq_pipe12[2:0])
| ({3{inq_rdaddr_del_dec[13]}}
& inq_pipe13[2:0])
| ({3{inq_rdaddr_del_dec[14]}}
& inq_pipe14[2:0])
| ({3{inq_rdaddr_del_dec[15]}}
& inq_pipe15[2:0])));
assign inq_div= inq_pipe[2];
assign inq_diva= inq_pipe[2];
assign inq_mul= inq_pipe[1];
assign inq_mula= inq_pipe[1];
assign inq_add= inq_pipe[0];
assign inq_adda= inq_pipe[0];
// Power management update
// Gate the clocks on a per pipe basis (add, mul, div independently)
// when a given pipe is not in use
dffre_s #(1) i_inq_adda_dly (
.din (inq_adda),
.en (1'b1),
.rst (reset),
.clk (rclk),
.q (inq_adda_dly),
.se (se),
.si (),
.so ()
);
dffre_s #(1) i_inq_mula_dly (
.din (inq_mula),
.en (1'b1),
.rst (reset),
.clk (rclk),
.q (inq_mula_dly),
.se (se),
.si (),
.so ()
);
dffre_s #(1) i_inq_diva_dly (
.din (inq_diva),
.en (1'b1),
.rst (reset),
.clk (rclk),
.q (inq_diva_dly),
.se (se),
.si (),
.so ()
);
dffre_s #(1) i_d1stg_step_dly (
.din (d1stg_step),
.en (1'b1),
.rst (reset),
.clk (rclk),
.q (d1stg_step_dly),
.se (se),
.si (),
.so ()
);
assign fadd_clken_l = !(add_pipe_active || inq_adda || inq_adda_dly || reset);
assign fmul_clken_l = !(mul_pipe_active || inq_mula || inq_mula_dly || reset);
assign fdiv_clken_l = !(div_pipe_active || inq_diva || inq_diva_dly || reset);
endmodule