mirror of https://github.com/YosysHQ/yosys.git
Merge remote-tracking branch 'origin/master' into xc7dsp
This commit is contained in:
commit
3fb839e255
|
@ -41,6 +41,8 @@ Yosys 0.9 .. Yosys 0.9-dev
|
||||||
- Removed "shregmap -tech xilinx" (superseded by "xilinx_srl")
|
- Removed "shregmap -tech xilinx" (superseded by "xilinx_srl")
|
||||||
- Added "_TECHMAP_WIREINIT_*_" attribute and "_TECHMAP_REMOVEINIT_*_" wire for "techmap" pass
|
- Added "_TECHMAP_WIREINIT_*_" attribute and "_TECHMAP_REMOVEINIT_*_" wire for "techmap" pass
|
||||||
- Added "-match-init" option to "dff2dffs" pass
|
- Added "-match-init" option to "dff2dffs" pass
|
||||||
|
- Added "techmap_autopurge" support to techmap
|
||||||
|
- Added "add -mod <modname[s]>"
|
||||||
- Added +/mul2dsp.v for decomposing wide multipliers to custom-sized ones
|
- Added +/mul2dsp.v for decomposing wide multipliers to custom-sized ones
|
||||||
- Added "ice40_dsp" for Lattice iCE40 DSP packing
|
- Added "ice40_dsp" for Lattice iCE40 DSP packing
|
||||||
- Added "xilinx_dsp" for Xilinx DSP packing
|
- Added "xilinx_dsp" for Xilinx DSP packing
|
||||||
|
|
|
@ -158,6 +158,11 @@ std::string AST::type2str(AstNodeType type)
|
||||||
X(AST_POSEDGE)
|
X(AST_POSEDGE)
|
||||||
X(AST_NEGEDGE)
|
X(AST_NEGEDGE)
|
||||||
X(AST_EDGE)
|
X(AST_EDGE)
|
||||||
|
X(AST_INTERFACE)
|
||||||
|
X(AST_INTERFACEPORT)
|
||||||
|
X(AST_INTERFACEPORTTYPE)
|
||||||
|
X(AST_MODPORT)
|
||||||
|
X(AST_MODPORTMEMBER)
|
||||||
X(AST_PACKAGE)
|
X(AST_PACKAGE)
|
||||||
#undef X
|
#undef X
|
||||||
default:
|
default:
|
||||||
|
@ -1291,6 +1296,8 @@ void AST::explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule
|
||||||
// from AST. The interface members are copied into the AST module with the prefix of the interface.
|
// from AST. The interface members are copied into the AST module with the prefix of the interface.
|
||||||
void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module*> local_interfaces)
|
void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module*> local_interfaces)
|
||||||
{
|
{
|
||||||
|
loadconfig();
|
||||||
|
|
||||||
bool is_top = false;
|
bool is_top = false;
|
||||||
AstNode *new_ast = ast->clone();
|
AstNode *new_ast = ast->clone();
|
||||||
for (auto &intf : local_interfaces) {
|
for (auto &intf : local_interfaces) {
|
||||||
|
@ -1474,24 +1481,7 @@ std::string AstModule::derive_common(RTLIL::Design *design, dict<RTLIL::IdString
|
||||||
stripped_name = stripped_name.substr(9);
|
stripped_name = stripped_name.substr(9);
|
||||||
|
|
||||||
log_header(design, "Executing AST frontend in derive mode using pre-parsed AST for module `%s'.\n", stripped_name.c_str());
|
log_header(design, "Executing AST frontend in derive mode using pre-parsed AST for module `%s'.\n", stripped_name.c_str());
|
||||||
|
loadconfig();
|
||||||
current_ast = NULL;
|
|
||||||
flag_dump_ast1 = false;
|
|
||||||
flag_dump_ast2 = false;
|
|
||||||
flag_dump_vlog1 = false;
|
|
||||||
flag_dump_vlog2 = false;
|
|
||||||
flag_nolatches = nolatches;
|
|
||||||
flag_nomeminit = nomeminit;
|
|
||||||
flag_nomem2reg = nomem2reg;
|
|
||||||
flag_mem2reg = mem2reg;
|
|
||||||
flag_noblackbox = noblackbox;
|
|
||||||
flag_lib = lib;
|
|
||||||
flag_nowb = nowb;
|
|
||||||
flag_noopt = noopt;
|
|
||||||
flag_icells = icells;
|
|
||||||
flag_pwires = pwires;
|
|
||||||
flag_autowire = autowire;
|
|
||||||
use_internal_line_num();
|
|
||||||
|
|
||||||
std::string para_info;
|
std::string para_info;
|
||||||
AstNode *new_ast = ast->clone();
|
AstNode *new_ast = ast->clone();
|
||||||
|
@ -1572,6 +1562,27 @@ RTLIL::Module *AstModule::clone() const
|
||||||
return new_mod;
|
return new_mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AstModule::loadconfig() const
|
||||||
|
{
|
||||||
|
current_ast = NULL;
|
||||||
|
flag_dump_ast1 = false;
|
||||||
|
flag_dump_ast2 = false;
|
||||||
|
flag_dump_vlog1 = false;
|
||||||
|
flag_dump_vlog2 = false;
|
||||||
|
flag_nolatches = nolatches;
|
||||||
|
flag_nomeminit = nomeminit;
|
||||||
|
flag_nomem2reg = nomem2reg;
|
||||||
|
flag_mem2reg = mem2reg;
|
||||||
|
flag_noblackbox = noblackbox;
|
||||||
|
flag_lib = lib;
|
||||||
|
flag_nowb = nowb;
|
||||||
|
flag_noopt = noopt;
|
||||||
|
flag_icells = icells;
|
||||||
|
flag_pwires = pwires;
|
||||||
|
flag_autowire = autowire;
|
||||||
|
use_internal_line_num();
|
||||||
|
}
|
||||||
|
|
||||||
// internal dummy line number callbacks
|
// internal dummy line number callbacks
|
||||||
namespace {
|
namespace {
|
||||||
int internal_line_num;
|
int internal_line_num;
|
||||||
|
|
|
@ -299,6 +299,7 @@ namespace AST
|
||||||
std::string derive_common(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Const> parameters, AstNode **new_ast_out, bool mayfail);
|
std::string derive_common(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Const> parameters, AstNode **new_ast_out, bool mayfail);
|
||||||
void reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module *> local_interfaces) YS_OVERRIDE;
|
void reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module *> local_interfaces) YS_OVERRIDE;
|
||||||
RTLIL::Module *clone() const YS_OVERRIDE;
|
RTLIL::Module *clone() const YS_OVERRIDE;
|
||||||
|
void loadconfig() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// this must be set by the language frontend before parsing the sources
|
// this must be set by the language frontend before parsing the sources
|
||||||
|
|
|
@ -105,6 +105,11 @@ struct AddPass : public Pass {
|
||||||
log("Like 'add -input', but also connect the signal between instances of the\n");
|
log("Like 'add -input', but also connect the signal between instances of the\n");
|
||||||
log("selected modules.\n");
|
log("selected modules.\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log("\n");
|
||||||
|
log(" add -mod <name[s]>\n");
|
||||||
|
log("\n");
|
||||||
|
log("Add module[s] with the specified name[s].\n");
|
||||||
|
log("\n");
|
||||||
}
|
}
|
||||||
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
||||||
{
|
{
|
||||||
|
@ -113,6 +118,7 @@ struct AddPass : public Pass {
|
||||||
bool arg_flag_input = false;
|
bool arg_flag_input = false;
|
||||||
bool arg_flag_output = false;
|
bool arg_flag_output = false;
|
||||||
bool arg_flag_global = false;
|
bool arg_flag_global = false;
|
||||||
|
bool mod_mode = false;
|
||||||
int arg_width = 0;
|
int arg_width = 0;
|
||||||
|
|
||||||
size_t argidx;
|
size_t argidx;
|
||||||
|
@ -133,8 +139,20 @@ struct AddPass : public Pass {
|
||||||
arg_width = atoi(args[++argidx].c_str());
|
arg_width = atoi(args[++argidx].c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (arg == "-mod") {
|
||||||
|
mod_mode = true;
|
||||||
|
argidx++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mod_mode) {
|
||||||
|
for (; argidx < args.size(); argidx++)
|
||||||
|
design->addModule(RTLIL::escape_id(args[argidx]));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
extra_args(args, argidx, design);
|
extra_args(args, argidx, design);
|
||||||
|
|
||||||
for (auto &mod : design->modules_)
|
for (auto &mod : design->modules_)
|
||||||
|
|
Loading…
Reference in New Issue