Remove topo sort no-loop assertion, with test

This commit is contained in:
Eddie Hung 2019-04-24 21:06:53 -07:00
parent f96d82a5f1
commit eec314e262
4 changed files with 76 additions and 14 deletions

View File

@ -294,20 +294,7 @@ struct XAigerWriter
for (auto user_cell : it.second)
toposort.edge(driver_cell, user_cell);
#ifndef NDEBUG
toposort.analyze_loops = true;
#endif
toposort.sort();
#ifndef NDEBUG
for (auto &it : toposort.loops) {
log(" loop");
for (auto cell : it)
log(" %s", log_id(cell));
log("\n");
}
#endif
log_assert(!toposort.found_loops);
for (auto cell_name : toposort.sorted) {
RTLIL::Cell *cell = module->cell(cell_name);
RTLIL::Module* box_module = module->design->module(cell->type);

View File

@ -0,0 +1,2 @@
MUXF8 1 0 3 1
1 1 1

View File

@ -142,3 +142,76 @@ assign b = ~a;
(* keep *) reg d;
always @* d <= &c;
endmodule
module abc9_test021(clk, rst, s_eth_hdr_valid, s_eth_hdr_ready, s_eth_dest_mac, s_eth_src_mac, s_eth_type, s_eth_payload_axis_tdata, s_eth_payload_axis_tkeep, s_eth_payload_axis_tvalid, s_eth_payload_axis_tready, s_eth_payload_axis_tlast, s_eth_payload_axis_tid, s_eth_payload_axis_tdest, s_eth_payload_axis_tuser, m_eth_hdr_valid, m_eth_hdr_ready, m_eth_dest_mac, m_eth_src_mac, m_eth_type, m_eth_payload_axis_tdata, m_eth_payload_axis_tkeep, m_eth_payload_axis_tvalid, m_eth_payload_axis_tready, m_eth_payload_axis_tlast, m_eth_payload_axis_tid, m_eth_payload_axis_tdest, m_eth_payload_axis_tuser);
input clk;
output [47:0] m_eth_dest_mac;
input m_eth_hdr_ready;
output m_eth_hdr_valid;
output [7:0] m_eth_payload_axis_tdata;
output [7:0] m_eth_payload_axis_tdest;
output [7:0] m_eth_payload_axis_tid;
output m_eth_payload_axis_tkeep;
output m_eth_payload_axis_tlast;
input m_eth_payload_axis_tready;
output m_eth_payload_axis_tuser;
output m_eth_payload_axis_tvalid;
output [47:0] m_eth_src_mac;
output [15:0] m_eth_type;
input rst;
input [191:0] s_eth_dest_mac;
output [3:0] s_eth_hdr_ready;
input [3:0] s_eth_hdr_valid;
input [31:0] s_eth_payload_axis_tdata;
input [31:0] s_eth_payload_axis_tdest;
input [31:0] s_eth_payload_axis_tid;
input [3:0] s_eth_payload_axis_tkeep;
input [3:0] s_eth_payload_axis_tlast;
output [3:0] s_eth_payload_axis_tready;
input [3:0] s_eth_payload_axis_tuser;
input [3:0] s_eth_payload_axis_tvalid;
input [191:0] s_eth_src_mac;
input [63:0] s_eth_type;
(* keep *)
wire [0:0] grant, request;
wire a;
not u0 (
a,
grant[0]
);
and u1 (
request[0],
s_eth_hdr_valid[0],
a
);
(* keep *)
MUXF8 u2 (
.I0(1'bx),
.I1(1'bx),
.O(o),
.S(1'bx)
);
arbiter arb_inst (
.acknowledge(acknowledge),
.clk(clk),
.grant(grant),
.grant_encoded(grant_encoded),
.grant_valid(grant_valid),
.request(request),
.rst(rst)
);
endmodule
module arbiter (clk, rst, request, acknowledge, grant, grant_valid, grant_encoded);
input [3:0] acknowledge;
input clk;
output [3:0] grant;
output [1:0] grant_encoded;
output grant_valid;
input [3:0] request;
input rst;
endmodule
(* abc_box_id=1 *)
module MUXF8(input I0, I1, S, output O);
endmodule

View File

@ -19,4 +19,4 @@ fi
cp ../simple/*.v .
DOLLAR='?'
exec ${MAKE:-make} -f ../tools/autotest.mk $seed *.v EXTRA_FLAGS="-p 'hierarchy; synth -run coarse; techmap; opt -full; abc9 -lut 4; stat; check -assert; select -assert-none t:${DOLLAR}_NOT_ t:${DOLLAR}_AND_ %%'"
exec ${MAKE:-make} -f ../tools/autotest.mk $seed *.v EXTRA_FLAGS="-p 'hierarchy; synth -run coarse; opt -full; techmap; abc9 -lut 4 -box ../abc.box; stat; check -assert; select -assert-none t:${DOLLAR}_NOT_ t:${DOLLAR}_AND_ %%'"