Line 16... |
Line 16... |
// You should have received a copy of the GNU General Public
|
// You should have received a copy of the GNU General Public
|
// License along with this work; if not, write to the Free Software
|
// License along with this work; if not, write to the Free Software
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
//
|
//
|
// ========== Copyright Header End ============================================
|
// ========== Copyright Header End ============================================
|
|
`ifdef SIMPLY_RISC_TWEAKS
|
|
`define SIMPLY_RISC_SCANIN .si(0)
|
|
`else
|
|
`define SIMPLY_RISC_SCANIN .si()
|
|
`endif
|
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
/*
|
/*
|
// Module Name: sparc_exu_div
|
// Module Name: sparc_exu_div
|
*/
|
*/
|
module sparc_exu_div (/*AUTOARG*/
|
module sparc_exu_div (/*AUTOARG*/
|
Line 218... |
Line 223... |
.sel1(ecl_div_sel_adder),
|
.sel1(ecl_div_sel_adder),
|
.sel2(ecl_div_ld_inputs));
|
.sel2(ecl_div_ld_inputs));
|
assign div_ecl_d_62 = d[62];
|
assign div_ecl_d_62 = d[62];
|
|
|
// FF for d
|
// FF for d
|
dff #(128) d_dff(.din(dnext[127:0]), .clk(clk), .q(d[127:0]), .se(se), .si(), .so());
|
dff_s #(128) d_dff(.din(dnext[127:0]), .clk(clk), .q(d[127:0]), .se(se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
////////////////////////////
|
////////////////////////////
|
// Logic for X (divisor)
|
// Logic for X (divisor)
|
////////////////////////////
|
////////////////////////////
|
// if signed div and 32 bits sign extend to upper 32 bits
|
// if signed div and 32 bits sign extend to upper 32 bits
|
Line 237... |
Line 242... |
.sel0(ecl_div_keepx),
|
.sel0(ecl_div_keepx),
|
.sel1(ecl_div_ld_inputs),
|
.sel1(ecl_div_ld_inputs),
|
.sel2(ecl_div_almostlast_cycle));
|
.sel2(ecl_div_almostlast_cycle));
|
|
|
// FF for x
|
// FF for x
|
dff #(64) x_dff(.din(xnext[63:0]), .clk(clk), .q(x[63:0]), .se(se), .si(), .so());
|
dff_s #(64) x_dff(.din(xnext[63:0]), .clk(clk), .q(x[63:0]), .se(se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
|
|
///////////////////////////
|
///////////////////////////
|
// Logic for inputs to adder
|
// Logic for inputs to adder
|
//////////////////////////
|
//////////////////////////
|
Line 310... |
Line 315... |
.in1(mul32_input_data_e[127:0]),
|
.in1(mul32_input_data_e[127:0]),
|
.in2(mul_data_out[127:0]),
|
.in2(mul_data_out[127:0]),
|
.sel0(ecl_div_mul_get_new_data),
|
.sel0(ecl_div_mul_get_new_data),
|
.sel1(ecl_div_mul_get_32bit_data),
|
.sel1(ecl_div_mul_get_32bit_data),
|
.sel2(ecl_div_mul_keep_data));
|
.sel2(ecl_div_mul_keep_data));
|
dff #(128) mul_data_dff(.din(next_mul_data[127:0]), .clk(clk), .q(mul_data_out[127:0]),
|
dff_s #(128) mul_data_dff(.din(next_mul_data[127:0]), .clk(clk), .q(mul_data_out[127:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
assign exu_mul_rs1_data = mul_data_out[63:0];
|
assign exu_mul_rs1_data = mul_data_out[63:0];
|
assign exu_mul_rs2_data = mul_data_out[127:64];
|
assign exu_mul_rs2_data = mul_data_out[127:64];
|
|
|
///////////////////////////////////
|
///////////////////////////////////
|
// Store output from mul
|
// Store output from mul
|
//////////////////////////////////
|
//////////////////////////////////
|
dp_mux2es #(64) mul_result_mux(.dout(mul_result_next[63:0]), .in0(mul_result[63:0]),
|
dp_mux2es #(64) mul_result_mux(.dout(mul_result_next[63:0]), .in0(mul_result[63:0]),
|
.in1(mul_exu_data_g[63:0]),
|
.in1(mul_exu_data_g[63:0]),
|
.sel(ecl_div_mul_wen));
|
.sel(ecl_div_mul_wen));
|
dff #(64) mul_result_dff(.din(mul_result_next[63:0]), .clk(clk), .q(mul_result[63:0]),
|
dff_s #(64) mul_result_dff(.din(mul_result_next[63:0]), .clk(clk), .q(mul_result[63:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
|
|
endmodule // sparc_exu_div
|
endmodule // sparc_exu_div
|
|
|
No newline at end of file
|
No newline at end of file
|