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_yreg
|
// Module Name: sparc_exu_div_yreg
|
// Description: The 4 32 bit y registers. It can be written to
|
// Description: The 4 32 bit y registers. It can be written to
|
// twice each cycle because by definition the writes must come
|
// twice each cycle because by definition the writes must come
|
Line 64... |
Line 69... |
//////////////////////////////////
|
//////////////////////////////////
|
// output the LSB of all 4 regs
|
// output the LSB of all 4 regs
|
assign div_ecl_yreg_0[3:0] = {yreg_thr3[0],yreg_thr2[0],yreg_thr1[0],yreg_thr0[0]};
|
assign div_ecl_yreg_0[3:0] = {yreg_thr3[0],yreg_thr2[0],yreg_thr1[0],yreg_thr0[0]};
|
assign div_ecl_yreg_0_l[3:0] = ~div_ecl_yreg_0[3:0];
|
assign div_ecl_yreg_0_l[3:0] = ~div_ecl_yreg_0[3:0];
|
|
|
|
`ifdef FPGA_SYN_1THREAD
|
|
|
|
assign yreg_mdq_y_e[31:0] = yreg_thr0[31:0];
|
|
|
|
`else
|
|
|
|
|
|
|
// mux between the 4 yregs
|
// mux between the 4 yregs
|
mux4ds #(32) mux_yreg_out(.dout(yreg_mdq_y_e[31:0]), .sel0(ecl_div_thr_e[0]),
|
mux4ds #(32) mux_yreg_out(.dout(yreg_mdq_y_e[31:0]), .sel0(ecl_div_thr_e[0]),
|
.sel1(ecl_div_thr_e[1]), .sel2(ecl_div_thr_e[2]),
|
.sel1(ecl_div_thr_e[1]), .sel2(ecl_div_thr_e[2]),
|
.sel3(ecl_div_thr_e[3]), .in0(yreg_thr0[31:0]),
|
.sel3(ecl_div_thr_e[3]), .in0(yreg_thr0[31:0]),
|
.in1(yreg_thr1[31:0]), .in2(yreg_thr2[31:0]),
|
.in1(yreg_thr1[31:0]), .in2(yreg_thr2[31:0]),
|
.in3(yreg_thr3[31:0]));
|
.in3(yreg_thr3[31:0]));
|
|
`endif
|
|
|
//////////////////////////////////////
|
//////////////////////////////////////
|
// Storage of yreg
|
// Storage of yreg
|
//////////////////////////////////////
|
//////////////////////////////////////
|
// pass along yreg w to w2 (for control signal timing)
|
// pass along yreg w to w2 (for control signal timing)
|
dff #(32) yreg_dff_w2w2(.din(byp_div_yreg_data_w[31:0]), .clk(clk), .q(yreg_data_w1[31:0]),
|
dff_s #(32) yreg_dff_w2w2(.din(byp_div_yreg_data_w[31:0]), .clk(clk), .q(yreg_data_w1[31:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
|
|
// mux between yreg_w, yreg_g, old value
|
// mux between yreg_w, yreg_g, old value
|
mux4ds #(32) mux_yregin0(.dout(next_yreg_thr0[31:0]),
|
mux4ds #(32) mux_yregin0(.dout(next_yreg_thr0[31:0]),
|
.sel0(ecl_div_yreg_wen_w[0]),
|
.sel0(ecl_div_yreg_wen_w[0]),
|
Line 96... |
Line 101... |
.sel3(ecl_div_yreg_shift_g[0]),
|
.sel3(ecl_div_yreg_shift_g[0]),
|
.in0(yreg_data_w1[31:0]),
|
.in0(yreg_data_w1[31:0]),
|
.in1(mul_div_yreg_data_g[31:0]),
|
.in1(mul_div_yreg_data_g[31:0]),
|
.in2(yreg_thr0[31:0]),
|
.in2(yreg_thr0[31:0]),
|
.in3({ecl_div_yreg_data_31_g, yreg_thr0[31:1]}));
|
.in3({ecl_div_yreg_data_31_g, yreg_thr0[31:1]}));
|
|
`ifdef FPGA_SYN_1THREAD
|
|
assign next_yreg_thr1[31:0] = yreg_data_w1[31:0];
|
|
assign next_yreg_thr2[31:0] = yreg_data_w1[31:0];
|
|
assign next_yreg_thr3[31:0] = yreg_data_w1[31:0];
|
|
|
|
`else
|
|
|
|
|
|
|
|
|
|
|
mux4ds #(32) mux_yregin1(.dout(next_yreg_thr1[31:0]),
|
mux4ds #(32) mux_yregin1(.dout(next_yreg_thr1[31:0]),
|
.sel0(ecl_div_yreg_wen_w[1]),
|
.sel0(ecl_div_yreg_wen_w[1]),
|
.sel1(ecl_div_yreg_wen_g[1]),
|
.sel1(ecl_div_yreg_wen_g[1]),
|
.sel2(ecl_div_yreg_wen_l[1]),
|
.sel2(ecl_div_yreg_wen_l[1]),
|
Line 130... |
Line 135... |
.sel3(ecl_div_yreg_shift_g[3]),
|
.sel3(ecl_div_yreg_shift_g[3]),
|
.in0(yreg_data_w1[31:0]),
|
.in0(yreg_data_w1[31:0]),
|
.in1(mul_div_yreg_data_g[31:0]),
|
.in1(mul_div_yreg_data_g[31:0]),
|
.in2(yreg_thr3[31:0]),
|
.in2(yreg_thr3[31:0]),
|
.in3({ecl_div_yreg_data_31_g, yreg_thr3[31:1]}));
|
.in3({ecl_div_yreg_data_31_g, yreg_thr3[31:1]}));
|
// !`ifdef FPGA_SYN_1THREAD
|
`endif // !`ifdef FPGA_SYN_1THREAD
|
|
|
// store new value
|
// store new value
|
dff #(32) dff_yreg_thr0(.din(next_yreg_thr0[31:0]), .clk(clk), .q(yreg_thr0[31:0]),
|
dff_s #(32) dff_yreg_thr0(.din(next_yreg_thr0[31:0]), .clk(clk), .q(yreg_thr0[31:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
dff #(32) dff_yreg_thr1(.din(next_yreg_thr1[31:0]), .clk(clk), .q(yreg_thr1[31:0]),
|
dff_s #(32) dff_yreg_thr1(.din(next_yreg_thr1[31:0]), .clk(clk), .q(yreg_thr1[31:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
dff #(32) dff_yreg_thr2(.din(next_yreg_thr2[31:0]), .clk(clk), .q(yreg_thr2[31:0]),
|
dff_s #(32) dff_yreg_thr2(.din(next_yreg_thr2[31:0]), .clk(clk), .q(yreg_thr2[31:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
dff #(32) dff_yreg_thr3(.din(next_yreg_thr3[31:0]), .clk(clk), .q(yreg_thr3[31:0]),
|
dff_s #(32) dff_yreg_thr3(.din(next_yreg_thr3[31:0]), .clk(clk), .q(yreg_thr3[31:0]),
|
.se(se), .si(), .so());
|
.se(se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
|
|
endmodule // sparc_exu_div_yreg
|
endmodule // sparc_exu_div_yreg
|
|
|
No newline at end of file
|
No newline at end of file
|