mirror of https://github.com/YosysHQ/yosys.git
Merge remote-tracking branch 'origin/master' into xaig_dff
This commit is contained in:
commit
bbc0e06af3
|
@ -3554,6 +3554,12 @@ bool RTLIL::SigSpec::operator ==(const RTLIL::SigSpec &other) const
|
||||||
if (width_ != other.width_)
|
if (width_ != other.width_)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Without this, SigSpec() == SigSpec(State::S0, 0) will fail
|
||||||
|
// since the RHS will contain one SigChunk of width 0 causing
|
||||||
|
// the size check below to fail
|
||||||
|
if (width_ == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
pack();
|
pack();
|
||||||
other.pack();
|
other.pack();
|
||||||
|
|
||||||
|
|
|
@ -609,8 +609,11 @@ struct RTLIL::Const
|
||||||
std::string decode_string() const;
|
std::string decode_string() const;
|
||||||
|
|
||||||
inline int size() const { return bits.size(); }
|
inline int size() const { return bits.size(); }
|
||||||
|
inline bool empty() const { return bits.empty(); }
|
||||||
inline RTLIL::State &operator[](int index) { return bits.at(index); }
|
inline RTLIL::State &operator[](int index) { return bits.at(index); }
|
||||||
inline const RTLIL::State &operator[](int index) const { return bits.at(index); }
|
inline const RTLIL::State &operator[](int index) const { return bits.at(index); }
|
||||||
|
inline decltype(bits)::iterator begin() { return bits.begin(); }
|
||||||
|
inline decltype(bits)::iterator end() { return bits.end(); }
|
||||||
|
|
||||||
bool is_fully_zero() const;
|
bool is_fully_zero() const;
|
||||||
bool is_fully_ones() const;
|
bool is_fully_ones() const;
|
||||||
|
|
|
@ -277,7 +277,9 @@ match postAdd
|
||||||
index <SigBit> port(postAdd, AB)[0] === sigP[0]
|
index <SigBit> port(postAdd, AB)[0] === sigP[0]
|
||||||
filter GetSize(port(postAdd, AB)) >= GetSize(sigP)
|
filter GetSize(port(postAdd, AB)) >= GetSize(sigP)
|
||||||
filter port(postAdd, AB).extract(0, GetSize(sigP)) == sigP
|
filter port(postAdd, AB).extract(0, GetSize(sigP)) == sigP
|
||||||
filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(sigP[GetSize(sigP)-1], GetSize(port(postAdd, AB))-GetSize(sigP))
|
// Check that remainder of AB is a sign-extension
|
||||||
|
define <bool> AB_SIGNED (param(postAdd, AB == \A ? \A_SIGNED : \B_SIGNED).as_bool())
|
||||||
|
filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(AB_SIGNED ? sigP[GetSize(sigP)-1] : State::S0, GetSize(port(postAdd, AB))-GetSize(sigP))
|
||||||
set postAddAB AB
|
set postAddAB AB
|
||||||
optional
|
optional
|
||||||
endmatch
|
endmatch
|
||||||
|
|
|
@ -242,7 +242,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip
|
||||||
bool cleanup, vector<int> lut_costs, bool /*dff_mode*/, std::string /*clk_str*/,
|
bool cleanup, vector<int> lut_costs, bool /*dff_mode*/, std::string /*clk_str*/,
|
||||||
bool /*keepff*/, std::string delay_target, std::string /*lutin_shared*/, bool fast_mode,
|
bool /*keepff*/, std::string delay_target, std::string /*lutin_shared*/, bool fast_mode,
|
||||||
bool show_tempdir, std::string box_file, std::string lut_file,
|
bool show_tempdir, std::string box_file, std::string lut_file,
|
||||||
std::string wire_delay, const dict<int,IdString> &box_lookup
|
std::string wire_delay, const dict<int,IdString> &box_lookup, bool nomfs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
map_autoidx = autoidx++;
|
map_autoidx = autoidx++;
|
||||||
|
@ -307,6 +307,10 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip
|
||||||
for (size_t pos = abc9_script.find("{W}"); pos != std::string::npos; pos = abc9_script.find("{W}", pos))
|
for (size_t pos = abc9_script.find("{W}"); pos != std::string::npos; pos = abc9_script.find("{W}", pos))
|
||||||
abc9_script = abc9_script.substr(0, pos) + wire_delay + abc9_script.substr(pos+3);
|
abc9_script = abc9_script.substr(0, pos) + wire_delay + abc9_script.substr(pos+3);
|
||||||
|
|
||||||
|
if (nomfs)
|
||||||
|
for (size_t pos = abc9_script.find("&mfs"); pos != std::string::npos; pos = abc9_script.find("&mfs", pos))
|
||||||
|
abc9_script = abc9_script.erase(pos, strlen("&mfs"));
|
||||||
|
|
||||||
abc9_script += stringf("; &write %s/output.aig", tempdir_name.c_str());
|
abc9_script += stringf("; &write %s/output.aig", tempdir_name.c_str());
|
||||||
abc9_script = add_echos_to_abc9_cmd(abc9_script);
|
abc9_script = add_echos_to_abc9_cmd(abc9_script);
|
||||||
|
|
||||||
|
@ -868,6 +872,7 @@ struct Abc9Pass : public Pass {
|
||||||
std::string delay_target, lutin_shared = "-S 1", wire_delay;
|
std::string delay_target, lutin_shared = "-S 1", wire_delay;
|
||||||
bool fast_mode = false, /*dff_mode = false,*/ keepff = false, cleanup = true;
|
bool fast_mode = false, /*dff_mode = false,*/ keepff = false, cleanup = true;
|
||||||
bool show_tempdir = false;
|
bool show_tempdir = false;
|
||||||
|
bool nomfs = false;
|
||||||
vector<int> lut_costs;
|
vector<int> lut_costs;
|
||||||
markgroups = false;
|
markgroups = false;
|
||||||
|
|
||||||
|
@ -990,6 +995,10 @@ struct Abc9Pass : public Pass {
|
||||||
wire_delay = "-W " + args[++argidx];
|
wire_delay = "-W " + args[++argidx];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (arg == "-nomfs") {
|
||||||
|
nomfs = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
extra_args(args, argidx, design);
|
extra_args(args, argidx, design);
|
||||||
|
@ -1241,7 +1250,8 @@ struct Abc9Pass : public Pass {
|
||||||
sel.selected_members[module->name] = std::move(it.second);
|
sel.selected_members[module->name] = std::move(it.second);
|
||||||
abc9_module(design, module, script_file, exe_file, cleanup, lut_costs, false, "$",
|
abc9_module(design, module, script_file, exe_file, cleanup, lut_costs, false, "$",
|
||||||
keepff, delay_target, lutin_shared, fast_mode, show_tempdir,
|
keepff, delay_target, lutin_shared, fast_mode, show_tempdir,
|
||||||
box_file, lut_file, wire_delay, box_lookup);
|
box_file, lut_file, wire_delay, box_lookup, nomfs);
|
||||||
|
assign_map.set(mod);
|
||||||
}
|
}
|
||||||
design->selection_stack.pop_back();
|
design->selection_stack.pop_back();
|
||||||
design->selected_active_module.clear();
|
design->selected_active_module.clear();
|
||||||
|
|
|
@ -137,7 +137,7 @@ XC6V_CELLS = [
|
||||||
Cell('SYSMON'),
|
Cell('SYSMON'),
|
||||||
|
|
||||||
# Arithmetic functions.
|
# Arithmetic functions.
|
||||||
Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
|
#Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
|
||||||
|
|
||||||
# Clock components.
|
# Clock components.
|
||||||
# Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
|
# Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
|
||||||
|
@ -264,7 +264,7 @@ XC7_CELLS = [
|
||||||
Cell('XADC'),
|
Cell('XADC'),
|
||||||
|
|
||||||
# Arithmetic functions.
|
# Arithmetic functions.
|
||||||
Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
|
#Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
|
||||||
|
|
||||||
# Clock components.
|
# Clock components.
|
||||||
# Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
|
# Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
|
||||||
|
|
|
@ -481,10 +481,14 @@ struct SynthXilinxPass : public ScriptPass
|
||||||
"will use timing for 'xc7' instead.\n", family.c_str());
|
"will use timing for 'xc7' instead.\n", family.c_str());
|
||||||
run("techmap -map +/xilinx/abc9_map.v -max_iter 1");
|
run("techmap -map +/xilinx/abc9_map.v -max_iter 1");
|
||||||
run("read_verilog -icells -lib +/xilinx/abc9_model.v");
|
run("read_verilog -icells -lib +/xilinx/abc9_model.v");
|
||||||
|
std::string abc9_opts = " -box +/xilinx/abc_xc7.box";
|
||||||
|
abc9_opts += stringf(" -W %d", XC7_WIRE_DELAY);
|
||||||
|
abc9_opts += " -nomfs";
|
||||||
if (nowidelut)
|
if (nowidelut)
|
||||||
run("abc9 -lut +/xilinx/abc9_xc7_nowide.lut -box +/xilinx/abc9_xc7.box -W " + std::to_string(XC7_WIRE_DELAY));
|
abc9_opts += " -lut +/xilinx/abc_xc7_nowide.lut";
|
||||||
else
|
else
|
||||||
run("abc9 -lut +/xilinx/abc9_xc7.lut -box +/xilinx/abc9_xc7.box -W " + std::to_string(XC7_WIRE_DELAY));
|
abc9_opts += " -lut +/xilinx/abc_xc7.lut";
|
||||||
|
run("abc9" + abc9_opts);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (nowidelut)
|
if (nowidelut)
|
||||||
|
|
|
@ -647,94 +647,6 @@ module SYSMON (...);
|
||||||
input [6:0] DADDR;
|
input [6:0] DADDR;
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module DSP48E1 (...);
|
|
||||||
parameter integer ACASCREG = 1;
|
|
||||||
parameter integer ADREG = 1;
|
|
||||||
parameter integer ALUMODEREG = 1;
|
|
||||||
parameter integer AREG = 1;
|
|
||||||
parameter AUTORESET_PATDET = "NO_RESET";
|
|
||||||
parameter A_INPUT = "DIRECT";
|
|
||||||
parameter integer BCASCREG = 1;
|
|
||||||
parameter integer BREG = 1;
|
|
||||||
parameter B_INPUT = "DIRECT";
|
|
||||||
parameter integer CARRYINREG = 1;
|
|
||||||
parameter integer CARRYINSELREG = 1;
|
|
||||||
parameter integer CREG = 1;
|
|
||||||
parameter integer DREG = 1;
|
|
||||||
parameter integer INMODEREG = 1;
|
|
||||||
parameter integer MREG = 1;
|
|
||||||
parameter integer OPMODEREG = 1;
|
|
||||||
parameter integer PREG = 1;
|
|
||||||
parameter SEL_MASK = "MASK";
|
|
||||||
parameter SEL_PATTERN = "PATTERN";
|
|
||||||
parameter USE_DPORT = "FALSE";
|
|
||||||
parameter USE_MULT = "MULTIPLY";
|
|
||||||
parameter USE_PATTERN_DETECT = "NO_PATDET";
|
|
||||||
parameter USE_SIMD = "ONE48";
|
|
||||||
parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
|
|
||||||
parameter [47:0] PATTERN = 48'h000000000000;
|
|
||||||
parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
|
|
||||||
parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
|
|
||||||
parameter [0:0] IS_CLK_INVERTED = 1'b0;
|
|
||||||
parameter [4:0] IS_INMODE_INVERTED = 5'b0;
|
|
||||||
parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
|
|
||||||
output [29:0] ACOUT;
|
|
||||||
output [17:0] BCOUT;
|
|
||||||
output CARRYCASCOUT;
|
|
||||||
output [3:0] CARRYOUT;
|
|
||||||
output MULTSIGNOUT;
|
|
||||||
output OVERFLOW;
|
|
||||||
output [47:0] P;
|
|
||||||
output PATTERNBDETECT;
|
|
||||||
output PATTERNDETECT;
|
|
||||||
output [47:0] PCOUT;
|
|
||||||
output UNDERFLOW;
|
|
||||||
input [29:0] A;
|
|
||||||
input [29:0] ACIN;
|
|
||||||
(* invertible_pin = "IS_ALUMODE_INVERTED" *)
|
|
||||||
input [3:0] ALUMODE;
|
|
||||||
input [17:0] B;
|
|
||||||
input [17:0] BCIN;
|
|
||||||
input [47:0] C;
|
|
||||||
input CARRYCASCIN;
|
|
||||||
(* invertible_pin = "IS_CARRYIN_INVERTED" *)
|
|
||||||
input CARRYIN;
|
|
||||||
input [2:0] CARRYINSEL;
|
|
||||||
input CEA1;
|
|
||||||
input CEA2;
|
|
||||||
input CEAD;
|
|
||||||
input CEALUMODE;
|
|
||||||
input CEB1;
|
|
||||||
input CEB2;
|
|
||||||
input CEC;
|
|
||||||
input CECARRYIN;
|
|
||||||
input CECTRL;
|
|
||||||
input CED;
|
|
||||||
input CEINMODE;
|
|
||||||
input CEM;
|
|
||||||
input CEP;
|
|
||||||
(* clkbuf_sink *)
|
|
||||||
(* invertible_pin = "IS_CLK_INVERTED" *)
|
|
||||||
input CLK;
|
|
||||||
input [24:0] D;
|
|
||||||
(* invertible_pin = "IS_INMODE_INVERTED" *)
|
|
||||||
input [4:0] INMODE;
|
|
||||||
input MULTSIGNIN;
|
|
||||||
(* invertible_pin = "IS_OPMODE_INVERTED" *)
|
|
||||||
input [6:0] OPMODE;
|
|
||||||
input [47:0] PCIN;
|
|
||||||
input RSTA;
|
|
||||||
input RSTALLCARRYIN;
|
|
||||||
input RSTALUMODE;
|
|
||||||
input RSTB;
|
|
||||||
input RSTC;
|
|
||||||
input RSTCTRL;
|
|
||||||
input RSTD;
|
|
||||||
input RSTINMODE;
|
|
||||||
input RSTM;
|
|
||||||
input RSTP;
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
module BUFGCE (...);
|
module BUFGCE (...);
|
||||||
parameter CE_TYPE = "SYNC";
|
parameter CE_TYPE = "SYNC";
|
||||||
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
||||||
|
|
|
@ -3376,94 +3376,6 @@ module XADC (...);
|
||||||
input [6:0] DADDR;
|
input [6:0] DADDR;
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module DSP48E1 (...);
|
|
||||||
parameter integer ACASCREG = 1;
|
|
||||||
parameter integer ADREG = 1;
|
|
||||||
parameter integer ALUMODEREG = 1;
|
|
||||||
parameter integer AREG = 1;
|
|
||||||
parameter AUTORESET_PATDET = "NO_RESET";
|
|
||||||
parameter A_INPUT = "DIRECT";
|
|
||||||
parameter integer BCASCREG = 1;
|
|
||||||
parameter integer BREG = 1;
|
|
||||||
parameter B_INPUT = "DIRECT";
|
|
||||||
parameter integer CARRYINREG = 1;
|
|
||||||
parameter integer CARRYINSELREG = 1;
|
|
||||||
parameter integer CREG = 1;
|
|
||||||
parameter integer DREG = 1;
|
|
||||||
parameter integer INMODEREG = 1;
|
|
||||||
parameter integer MREG = 1;
|
|
||||||
parameter integer OPMODEREG = 1;
|
|
||||||
parameter integer PREG = 1;
|
|
||||||
parameter SEL_MASK = "MASK";
|
|
||||||
parameter SEL_PATTERN = "PATTERN";
|
|
||||||
parameter USE_DPORT = "FALSE";
|
|
||||||
parameter USE_MULT = "MULTIPLY";
|
|
||||||
parameter USE_PATTERN_DETECT = "NO_PATDET";
|
|
||||||
parameter USE_SIMD = "ONE48";
|
|
||||||
parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
|
|
||||||
parameter [47:0] PATTERN = 48'h000000000000;
|
|
||||||
parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
|
|
||||||
parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
|
|
||||||
parameter [0:0] IS_CLK_INVERTED = 1'b0;
|
|
||||||
parameter [4:0] IS_INMODE_INVERTED = 5'b0;
|
|
||||||
parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
|
|
||||||
output [29:0] ACOUT;
|
|
||||||
output [17:0] BCOUT;
|
|
||||||
output CARRYCASCOUT;
|
|
||||||
output [3:0] CARRYOUT;
|
|
||||||
output MULTSIGNOUT;
|
|
||||||
output OVERFLOW;
|
|
||||||
output [47:0] P;
|
|
||||||
output PATTERNBDETECT;
|
|
||||||
output PATTERNDETECT;
|
|
||||||
output [47:0] PCOUT;
|
|
||||||
output UNDERFLOW;
|
|
||||||
input [29:0] A;
|
|
||||||
input [29:0] ACIN;
|
|
||||||
(* invertible_pin = "IS_ALUMODE_INVERTED" *)
|
|
||||||
input [3:0] ALUMODE;
|
|
||||||
input [17:0] B;
|
|
||||||
input [17:0] BCIN;
|
|
||||||
input [47:0] C;
|
|
||||||
input CARRYCASCIN;
|
|
||||||
(* invertible_pin = "IS_CARRYIN_INVERTED" *)
|
|
||||||
input CARRYIN;
|
|
||||||
input [2:0] CARRYINSEL;
|
|
||||||
input CEA1;
|
|
||||||
input CEA2;
|
|
||||||
input CEAD;
|
|
||||||
input CEALUMODE;
|
|
||||||
input CEB1;
|
|
||||||
input CEB2;
|
|
||||||
input CEC;
|
|
||||||
input CECARRYIN;
|
|
||||||
input CECTRL;
|
|
||||||
input CED;
|
|
||||||
input CEINMODE;
|
|
||||||
input CEM;
|
|
||||||
input CEP;
|
|
||||||
(* clkbuf_sink *)
|
|
||||||
(* invertible_pin = "IS_CLK_INVERTED" *)
|
|
||||||
input CLK;
|
|
||||||
input [24:0] D;
|
|
||||||
(* invertible_pin = "IS_INMODE_INVERTED" *)
|
|
||||||
input [4:0] INMODE;
|
|
||||||
input MULTSIGNIN;
|
|
||||||
(* invertible_pin = "IS_OPMODE_INVERTED" *)
|
|
||||||
input [6:0] OPMODE;
|
|
||||||
input [47:0] PCIN;
|
|
||||||
input RSTA;
|
|
||||||
input RSTALLCARRYIN;
|
|
||||||
input RSTALUMODE;
|
|
||||||
input RSTB;
|
|
||||||
input RSTC;
|
|
||||||
input RSTCTRL;
|
|
||||||
input RSTD;
|
|
||||||
input RSTINMODE;
|
|
||||||
input RSTM;
|
|
||||||
input RSTP;
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
module BUFGCE (...);
|
module BUFGCE (...);
|
||||||
parameter CE_TYPE = "SYNC";
|
parameter CE_TYPE = "SYNC";
|
||||||
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
||||||
|
|
Loading…
Reference in New Issue