mirror of https://github.com/YosysHQ/yosys.git
Add abc9_required to DSP48E1.{A,B,C,D,PCIN}
This commit is contained in:
parent
475d983676
commit
28f814ee59
|
@ -2290,21 +2290,30 @@ module DSP48E1 (
|
||||||
output reg MULTSIGNOUT,
|
output reg MULTSIGNOUT,
|
||||||
output OVERFLOW,
|
output OVERFLOW,
|
||||||
`ifdef YOSYS
|
`ifdef YOSYS
|
||||||
(* abc9_arrival = \DSP48E1.P_arrival () *)
|
(* abc9_arrival = \P.abc9_arrival () *)
|
||||||
`endif
|
`endif
|
||||||
output reg signed [47:0] P,
|
output reg signed [47:0] P,
|
||||||
output reg PATTERNBDETECT,
|
output reg PATTERNBDETECT,
|
||||||
output reg PATTERNDETECT,
|
output reg PATTERNDETECT,
|
||||||
`ifdef YOSYS
|
`ifdef YOSYS
|
||||||
(* abc9_arrival = \DSP48E1.PCOUT_arrival () *)
|
(* abc9_arrival = \PCOUT.abc9_arrival () *)
|
||||||
`endif
|
`endif
|
||||||
output [47:0] PCOUT,
|
output [47:0] PCOUT,
|
||||||
output UNDERFLOW,
|
output UNDERFLOW,
|
||||||
|
`ifdef YOSYS
|
||||||
|
(* abc9_required = \A.abc9_required () *)
|
||||||
|
`endif
|
||||||
input signed [29:0] A,
|
input signed [29:0] A,
|
||||||
input [29:0] ACIN,
|
input [29:0] ACIN,
|
||||||
input [3:0] ALUMODE,
|
input [3:0] ALUMODE,
|
||||||
|
`ifdef YOSYS
|
||||||
|
(* abc9_required = \B.abc9_required () *)
|
||||||
|
`endif
|
||||||
input signed [17:0] B,
|
input signed [17:0] B,
|
||||||
input [17:0] BCIN,
|
input [17:0] BCIN,
|
||||||
|
`ifdef YOSYS
|
||||||
|
(* abc9_required = \C.abc9_required () *)
|
||||||
|
`endif
|
||||||
input [47:0] C,
|
input [47:0] C,
|
||||||
input CARRYCASCIN,
|
input CARRYCASCIN,
|
||||||
input CARRYIN,
|
input CARRYIN,
|
||||||
|
@ -2323,10 +2332,16 @@ module DSP48E1 (
|
||||||
input CEM,
|
input CEM,
|
||||||
input CEP,
|
input CEP,
|
||||||
(* clkbuf_sink *) input CLK,
|
(* clkbuf_sink *) input CLK,
|
||||||
|
`ifdef YOSYS
|
||||||
|
(* abc9_required = \D.abc9_required () *)
|
||||||
|
`endif
|
||||||
input [24:0] D,
|
input [24:0] D,
|
||||||
input [4:0] INMODE,
|
input [4:0] INMODE,
|
||||||
input MULTSIGNIN,
|
input MULTSIGNIN,
|
||||||
input [6:0] OPMODE,
|
input [6:0] OPMODE,
|
||||||
|
`ifdef YOSYS
|
||||||
|
(* abc9_required = \PCIN.abc9_required () *)
|
||||||
|
`endif
|
||||||
input [47:0] PCIN,
|
input [47:0] PCIN,
|
||||||
input RSTA,
|
input RSTA,
|
||||||
input RSTALLCARRYIN,
|
input RSTALLCARRYIN,
|
||||||
|
@ -2371,69 +2386,133 @@ module DSP48E1 (
|
||||||
parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
|
parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
|
||||||
|
|
||||||
`ifdef YOSYS
|
`ifdef YOSYS
|
||||||
function integer \DSP48E1.P_arrival ;
|
function integer \A.abc9_required ;
|
||||||
begin
|
begin
|
||||||
\DSP48E1.P_arrival = 0;
|
\A.abc9_required = 0;
|
||||||
if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
if (AREG != 0) \A.abc9_required = 254;
|
||||||
if (PREG != 0) \DSP48E1.P_arrival = 329;
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
||||||
// Worst-case from CREG and MREG
|
if (MREG != 0) \A.abc9_required = 1416;
|
||||||
else if (CREG != 0) \DSP48E1.P_arrival = 1687;
|
else if (PREG != 0) \A.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 3030 : 2739) ;
|
||||||
else if (MREG != 0) \DSP48E1.P_arrival = 1671;
|
|
||||||
// Worst-case from AREG and BREG
|
|
||||||
else if (AREG != 0) \DSP48E1.P_arrival = 2952;
|
|
||||||
else if (BREG != 0) \DSP48E1.P_arrival = 2813;
|
|
||||||
end
|
end
|
||||||
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
||||||
if (PREG != 0) \DSP48E1.P_arrival = 329;
|
// Worst-case from ADREG and MREG
|
||||||
// Worst-case from CREG and MREG
|
if (MREG != 0) \A.abc9_required = 2400;
|
||||||
else if (CREG != 0) \DSP48E1.P_arrival = 1687;
|
else if (ADREG != 0) \A.abc9_required = 1283;
|
||||||
else if (MREG != 0) \DSP48E1.P_arrival = 1671;
|
else if (PREG != 0) \A.abc9_required = 3723;
|
||||||
// Worst-case from AREG, ADREG, BREG, DREG
|
else if (PREG != 0) \A.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 4014 : 3723) ;
|
||||||
else if (AREG != 0) \DSP48E1.P_arrival = 3935;
|
|
||||||
else if (DREG != 0) \DSP48E1.P_arrival = 3908;
|
|
||||||
else if (ADREG != 0) \DSP48E1.P_arrival = 2958;
|
|
||||||
else if (BREG != 0) \DSP48E1.P_arrival = 2813;
|
|
||||||
end
|
end
|
||||||
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
||||||
if (PREG != 0) \DSP48E1.P_arrival = 329;
|
if (PREG != 0) \A.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1730 : 1441) ;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
function integer \B.abc9_required ;
|
||||||
|
begin
|
||||||
|
\B.abc9_required = 0;
|
||||||
|
if (BREG != 0) \B.abc9_required = 324;
|
||||||
|
else if (MREG != 0) \B.abc9_required = 1285;
|
||||||
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
||||||
|
if (PREG != 0) \B.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 2898 : 2608) ;
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
||||||
|
if (PREG != 0) \B.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 2898 : 2608) ;
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
||||||
|
if (PREG != 0) \B.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1718 : 1428) ;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
function integer \C.abc9_required ;
|
||||||
|
begin
|
||||||
|
\C.abc9_required = 0;
|
||||||
|
if (CREG != 0) \C.abc9_required = 168;
|
||||||
|
else if (PREG != 0) \C.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1534 : 1244) ;
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
function integer \D.abc9_required ;
|
||||||
|
begin
|
||||||
|
\D.abc9_required = 0;
|
||||||
|
if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
||||||
|
if (DREG != 0) \D.abc9_required = 248;
|
||||||
|
else if (ADREG != 0) \D.abc9_required = 1195;
|
||||||
|
else if (MREG != 0) \D.abc9_required = 2310;
|
||||||
|
else if (PREG != 0) \D.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 3925 : 3635) ;
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
function integer \PCIN.abc9_required ;
|
||||||
|
begin
|
||||||
|
\PCIN.abc9_required = 0;
|
||||||
|
if (PREG != 0) \PCIN.abc9_required = (USE_PATTERN_DETECT != "NO_PATDET" ? 1315 : 1025) ;
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
function integer \P.abc9_arrival ;
|
||||||
|
begin
|
||||||
|
\P.abc9_arrival = 0;
|
||||||
|
if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
||||||
|
if (PREG != 0) \P.abc9_arrival = 329;
|
||||||
|
// Worst-case from CREG and MREG
|
||||||
|
else if (CREG != 0) \P.abc9_arrival = 1687;
|
||||||
|
else if (MREG != 0) \P.abc9_arrival = 1671;
|
||||||
|
// Worst-case from AREG and BREG
|
||||||
|
else if (AREG != 0) \P.abc9_arrival = 2952;
|
||||||
|
else if (BREG != 0) \P.abc9_arrival = 2813;
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
||||||
|
if (PREG != 0) \P.abc9_arrival = 329;
|
||||||
|
// Worst-case from CREG and MREG
|
||||||
|
else if (CREG != 0) \P.abc9_arrival = 1687;
|
||||||
|
else if (MREG != 0) \P.abc9_arrival = 1671;
|
||||||
|
// Worst-case from AREG, ADREG, BREG, DREG
|
||||||
|
else if (AREG != 0) \P.abc9_arrival = 3935;
|
||||||
|
else if (DREG != 0) \P.abc9_arrival = 3908;
|
||||||
|
else if (ADREG != 0) \P.abc9_arrival = 2958;
|
||||||
|
else if (BREG != 0) \P.abc9_arrival = 2813;
|
||||||
|
end
|
||||||
|
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
||||||
|
if (PREG != 0) \P.abc9_arrival = 329;
|
||||||
// Worst-case from AREG, BREG, CREG
|
// Worst-case from AREG, BREG, CREG
|
||||||
else if (CREG != 0) \DSP48E1.P_arrival = 1687;
|
else if (CREG != 0) \P.abc9_arrival = 1687;
|
||||||
else if (AREG != 0) \DSP48E1.P_arrival = 1632;
|
else if (AREG != 0) \P.abc9_arrival = 1632;
|
||||||
else if (BREG != 0) \DSP48E1.P_arrival = 1616;
|
else if (BREG != 0) \P.abc9_arrival = 1616;
|
||||||
end
|
end
|
||||||
//else
|
//else
|
||||||
// $error("Invalid DSP48E1 configuration");
|
// $error("Invalid DSP48E1 configuration");
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
function integer \DSP48E1.PCOUT_arrival ;
|
function integer \PCOUT.abc9_arrival ;
|
||||||
begin
|
begin
|
||||||
\DSP48E1.PCOUT_arrival = 0;
|
\PCOUT.abc9_arrival = 0;
|
||||||
if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
|
||||||
if (PREG != 0) \DSP48E1.PCOUT_arrival = 435;
|
if (PREG != 0) \PCOUT.abc9_arrival = 435;
|
||||||
// Worst-case from CREG and MREG
|
// Worst-case from CREG and MREG
|
||||||
else if (CREG != 0) \DSP48E1.PCOUT_arrival = 1835;
|
else if (CREG != 0) \PCOUT.abc9_arrival = 1835;
|
||||||
else if (MREG != 0) \DSP48E1.PCOUT_arrival = 1819;
|
else if (MREG != 0) \PCOUT.abc9_arrival = 1819;
|
||||||
// Worst-case from AREG and BREG
|
// Worst-case from AREG and BREG
|
||||||
else if (AREG != 0) \DSP48E1.PCOUT_arrival = 3098;
|
else if (AREG != 0) \PCOUT.abc9_arrival = 3098;
|
||||||
else if (BREG != 0) \DSP48E1.PCOUT_arrival = 2960;
|
else if (BREG != 0) \PCOUT.abc9_arrival = 2960;
|
||||||
end
|
end
|
||||||
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
|
||||||
if (PREG != 0) \DSP48E1.PCOUT_arrival = 435;
|
if (PREG != 0) \PCOUT.abc9_arrival = 435;
|
||||||
// Worst-case from CREG and MREG
|
// Worst-case from CREG and MREG
|
||||||
else if (CREG != 0) \DSP48E1.PCOUT_arrival = 1835;
|
else if (CREG != 0) \PCOUT.abc9_arrival = 1835;
|
||||||
else if (MREG != 0) \DSP48E1.PCOUT_arrival = 1819;
|
else if (MREG != 0) \PCOUT.abc9_arrival = 1819;
|
||||||
// Worst-case from AREG, ADREG, BREG, DREG
|
// Worst-case from AREG, ADREG, BREG, DREG
|
||||||
else if (AREG != 0) \DSP48E1.PCOUT_arrival = 4083;
|
else if (AREG != 0) \PCOUT.abc9_arrival = 4083;
|
||||||
else if (DREG != 0) \DSP48E1.PCOUT_arrival = 4056;
|
else if (DREG != 0) \PCOUT.abc9_arrival = 4056;
|
||||||
else if (BREG != 0) \DSP48E1.PCOUT_arrival = 2960;
|
else if (BREG != 0) \PCOUT.abc9_arrival = 2960;
|
||||||
else if (ADREG != 0) \DSP48E1.PCOUT_arrival = 2859;
|
else if (ADREG != 0) \PCOUT.abc9_arrival = 2859;
|
||||||
end
|
end
|
||||||
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
|
||||||
if (PREG != 0) \DSP48E1.PCOUT_arrival = 435;
|
if (PREG != 0) \PCOUT.abc9_arrival = 435;
|
||||||
// Worst-case from AREG, BREG, CREG
|
// Worst-case from AREG, BREG, CREG
|
||||||
else if (CREG != 0) \DSP48E1.PCOUT_arrival = 1835;
|
else if (CREG != 0) \PCOUT.abc9_arrival = 1835;
|
||||||
else if (AREG != 0) \DSP48E1.PCOUT_arrival = 1780;
|
else if (AREG != 0) \PCOUT.abc9_arrival = 1780;
|
||||||
else if (BREG != 0) \DSP48E1.PCOUT_arrival = 1765;
|
else if (BREG != 0) \PCOUT.abc9_arrival = 1765;
|
||||||
end
|
end
|
||||||
//else
|
//else
|
||||||
// $error("Invalid DSP48E1 configuration");
|
// $error("Invalid DSP48E1 configuration");
|
||||||
|
|
Loading…
Reference in New Issue