mirror of https://github.com/YosysHQ/yosys.git
Merge branch 'master' of github.com:cliffordwolf/yosys
This commit is contained in:
commit
12c10892e6
2
Makefile
2
Makefile
|
@ -99,7 +99,7 @@ OBJS = kernel/version_$(GIT_REV).o
|
|||
# is just a symlink to your actual ABC working directory, as 'make mrproper'
|
||||
# will remove the 'abc' directory and you do not want to accidentally
|
||||
# delete your work on ABC..
|
||||
ABCREV = cd6984ee82d4
|
||||
ABCREV = 0fc1803a77c0
|
||||
ABCPULL = 1
|
||||
ABCURL ?= https://bitbucket.org/alanmi/abc
|
||||
ABCMKARGS = CC="$(CXX)" CXX="$(CXX)" ABC_USE_LIBSTDCXX=1
|
||||
|
|
|
@ -678,6 +678,23 @@ bool dump_cell_expr(std::ostream &f, std::string indent, RTLIL::Cell *cell)
|
|||
#undef HANDLE_UNIOP
|
||||
#undef HANDLE_BINOP
|
||||
|
||||
if (cell->type == "$shiftx")
|
||||
{
|
||||
f << stringf("%s" "assign ", indent.c_str());
|
||||
dump_sigspec(f, cell->getPort("\\Y"));
|
||||
f << stringf(" = ");
|
||||
dump_sigspec(f, cell->getPort("\\A"));
|
||||
f << stringf("[");
|
||||
if (cell->getParam("\\B_SIGNED").as_bool())
|
||||
f << stringf("$signed(");
|
||||
dump_sigspec(f, cell->getPort("\\B"));
|
||||
if (cell->getParam("\\B_SIGNED").as_bool())
|
||||
f << stringf(")");
|
||||
f << stringf(" +: %d", cell->getParam("\\Y_WIDTH").as_int());
|
||||
f << stringf("];\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (cell->type == "$mux")
|
||||
{
|
||||
f << stringf("%s" "assign ", indent.c_str());
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
example.edif: example.ys example.v osu035_stdcells.lib
|
||||
example.edif: example.ys example.v example.constr osu035_stdcells.lib
|
||||
yosys -l example.yslog -q example.ys
|
||||
|
||||
osu035_stdcells.lib:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
set_driving_cell INVX1
|
||||
set_load 0.015
|
|
@ -4,7 +4,7 @@ read_liberty -lib osu035_stdcells.lib
|
|||
synth -top top
|
||||
|
||||
dfflibmap -liberty osu035_stdcells.lib
|
||||
abc -liberty osu035_stdcells.lib
|
||||
abc -D 10000 -constr example.constr -liberty osu035_stdcells.lib
|
||||
opt_clean
|
||||
|
||||
stat -liberty osu035_stdcells.lib
|
||||
|
|
|
@ -405,9 +405,13 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
|||
current_always_clocked = false;
|
||||
|
||||
if (type == AST_ALWAYS)
|
||||
for (auto child : children)
|
||||
for (auto child : children) {
|
||||
if (child->type == AST_POSEDGE || child->type == AST_NEGEDGE)
|
||||
current_always_clocked = true;
|
||||
if (child->type == AST_EDGE && GetSize(child->children) == 1 &&
|
||||
child->children[0]->type == AST_IDENTIFIER && child->children[0]->str == "\\$global_clock")
|
||||
current_always_clocked = true;
|
||||
}
|
||||
}
|
||||
|
||||
int backup_width_hint = width_hint;
|
||||
|
@ -1824,21 +1828,6 @@ skip_dynamic_range_lvalue_expansion:;
|
|||
goto apply_newNode;
|
||||
}
|
||||
|
||||
if (str == "\\$rose" || str == "\\$fell")
|
||||
{
|
||||
if (GetSize(children) != 1)
|
||||
log_error("System function %s got %d arguments, expected 1 at %s:%d.\n",
|
||||
RTLIL::unescape_id(str).c_str(), int(children.size()), filename.c_str(), linenum);
|
||||
|
||||
if (!current_always_clocked)
|
||||
log_error("System function %s is only allowed in clocked blocks at %s:%d.\n",
|
||||
RTLIL::unescape_id(str).c_str(), filename.c_str(), linenum);
|
||||
|
||||
newNode = new AstNode(AST_EQ, children.at(0)->clone(), clone());
|
||||
newNode->children.at(1)->str = "\\$past";
|
||||
goto apply_newNode;
|
||||
}
|
||||
|
||||
// $anyconst and $anyseq are mapped in AstNode::genRTLIL()
|
||||
if (str == "\\$anyconst" || str == "\\$anyseq") {
|
||||
recursion_counter--;
|
||||
|
|
|
@ -111,6 +111,7 @@ bool recover_init;
|
|||
|
||||
bool clk_polarity, en_polarity;
|
||||
RTLIL::SigSpec clk_sig, en_sig;
|
||||
dict<int, std::string> pi_map, po_map;
|
||||
|
||||
int map_signal(RTLIL::SigBit bit, gate_type_t gate_type = G(NONE), int in1 = -1, int in2 = -1, int in3 = -1, int in4 = -1)
|
||||
{
|
||||
|
@ -601,6 +602,14 @@ struct abc_output_filter
|
|||
|
||||
void next_line(const std::string &line)
|
||||
{
|
||||
int pi, po;
|
||||
if (sscanf(line.c_str(), "Start-point = pi%d. End-point = po%d.", &pi, &po) == 2) {
|
||||
log("ABC: Start-point = pi%d (%s). End-point = po%d (%s).\n",
|
||||
pi, pi_map.count(pi) ? pi_map.at(pi).c_str() : "???",
|
||||
po, po_map.count(po) ? po_map.at(po).c_str() : "???");
|
||||
return;
|
||||
}
|
||||
|
||||
for (char ch : line)
|
||||
next_char(ch);
|
||||
}
|
||||
|
@ -616,6 +625,8 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin
|
|||
|
||||
signal_map.clear();
|
||||
signal_list.clear();
|
||||
pi_map.clear();
|
||||
po_map.clear();
|
||||
recover_init = false;
|
||||
|
||||
if (clk_str != "$")
|
||||
|
@ -768,7 +779,7 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin
|
|||
if (!si.is_port || si.type != G(NONE))
|
||||
continue;
|
||||
fprintf(f, " n%d", si.id);
|
||||
count_input++;
|
||||
pi_map[count_input++] = log_signal(si.bit);
|
||||
}
|
||||
if (count_input == 0)
|
||||
fprintf(f, " dummy_input\n");
|
||||
|
@ -780,7 +791,7 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin
|
|||
if (!si.is_port || si.type == G(NONE))
|
||||
continue;
|
||||
fprintf(f, " n%d", si.id);
|
||||
count_output++;
|
||||
po_map[count_output++] = log_signal(si.bit);
|
||||
}
|
||||
fprintf(f, "\n");
|
||||
|
||||
|
@ -1392,6 +1403,8 @@ struct AbcPass : public Pass {
|
|||
signal_list.clear();
|
||||
signal_map.clear();
|
||||
signal_init.clear();
|
||||
pi_map.clear();
|
||||
po_map.clear();
|
||||
|
||||
#ifdef ABCEXTERNAL
|
||||
std::string exe_file = ABCEXTERNAL;
|
||||
|
@ -1819,6 +1832,8 @@ struct AbcPass : public Pass {
|
|||
signal_list.clear();
|
||||
signal_map.clear();
|
||||
signal_init.clear();
|
||||
pi_map.clear();
|
||||
po_map.clear();
|
||||
|
||||
log_pop();
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ module \$lut (A, Y);
|
|||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
output Y;
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
|
||||
|
|
|
@ -62,7 +62,7 @@ module \$lut (A, Y);
|
|||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
output Y;
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
|
||||
|
|
|
@ -61,7 +61,7 @@ module \$lut (A, Y);
|
|||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
output Y;
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
|
||||
|
|
|
@ -60,7 +60,7 @@ module \$lut (A, Y);
|
|||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
output Y;
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
|
||||
|
|
|
@ -62,7 +62,7 @@ module \$lut (A, Y);
|
|||
parameter WIDTH = 0;
|
||||
parameter LUT = 0;
|
||||
input [WIDTH-1:0] A;
|
||||
output Y;
|
||||
output Y;
|
||||
generate
|
||||
if (WIDTH == 1) begin
|
||||
assign Y = ~A[0]; // Not need to spend 1 logic cell for such an easy function
|
||||
|
|
Loading…
Reference in New Issue