mirror of https://github.com/YosysHQ/yosys.git
Added mod->addGate() methods for new gate types
This commit is contained in:
parent
a92a68ce52
commit
b37d70dfd7
129
kernel/rtlil.cc
129
kernel/rtlil.cc
|
@ -1239,10 +1239,10 @@ RTLIL::Cell *RTLIL::Module::addCell(RTLIL::IdString name, const RTLIL::Cell *oth
|
|||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y, bool is_signed) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->parameters["\\A_SIGNED"] = is_signed; \
|
||||
cell->parameters["\\A_WIDTH"] = sig_a.size(); \
|
||||
cell->parameters["\\Y_WIDTH"] = sig_y.size(); \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
cell->parameters["\\A_WIDTH"] = sig_a.size(); \
|
||||
cell->parameters["\\Y_WIDTH"] = sig_y.size(); \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, bool is_signed) { \
|
||||
|
@ -1267,12 +1267,12 @@ DEF_METHOD(LogicNot, 1, "$logic_not")
|
|||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->parameters["\\A_SIGNED"] = is_signed; \
|
||||
cell->parameters["\\B_SIGNED"] = is_signed; \
|
||||
cell->parameters["\\A_WIDTH"] = sig_a.size(); \
|
||||
cell->parameters["\\B_WIDTH"] = sig_b.size(); \
|
||||
cell->parameters["\\Y_WIDTH"] = sig_y.size(); \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\B", sig_b); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
cell->parameters["\\A_WIDTH"] = sig_a.size(); \
|
||||
cell->parameters["\\B_WIDTH"] = sig_b.size(); \
|
||||
cell->parameters["\\Y_WIDTH"] = sig_y.size(); \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\B", sig_b); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, bool is_signed) { \
|
||||
|
@ -1309,72 +1309,95 @@ DEF_METHOD(LogicOr, 1, "$logic_or")
|
|||
|
||||
#define DEF_METHOD(_func, _type, _pmux) \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->parameters["\\WIDTH"] = sig_a.size(); \
|
||||
cell->parameters["\\WIDTH"] = sig_b.size(); \
|
||||
if (_pmux) cell->parameters["\\S_WIDTH"] = sig_s.size(); \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\B", sig_b); \
|
||||
cell->setPort("\\S", sig_s); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
return cell; \
|
||||
cell->setPort("\\A", sig_a); \
|
||||
cell->setPort("\\B", sig_b); \
|
||||
cell->setPort("\\S", sig_s); \
|
||||
cell->setPort("\\Y", sig_y); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s) { \
|
||||
RTLIL::SigSpec sig_y = addWire(NEW_ID, sig_a.size()); \
|
||||
add ## _func(name, sig_a, sig_b, sig_s, sig_y); \
|
||||
return sig_y; \
|
||||
add ## _func(name, sig_a, sig_b, sig_s, sig_y); \
|
||||
return sig_y; \
|
||||
}
|
||||
DEF_METHOD(Mux, "$mux", 0)
|
||||
DEF_METHOD(Pmux, "$pmux", 1)
|
||||
#undef DEF_METHOD
|
||||
|
||||
#define DEF_METHOD_2(_func, _type, _P1, _P2) \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
return cell; \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1) { \
|
||||
RTLIL::SigSpec sig2 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2); \
|
||||
return sig2; \
|
||||
RTLIL::SigBit RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigBit sig1) { \
|
||||
RTLIL::SigBit sig2 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2); \
|
||||
return sig2; \
|
||||
}
|
||||
#define DEF_METHOD_3(_func, _type, _P1, _P2, _P3) \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2, RTLIL::SigSpec sig3) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
cell->setPort("\\" #_P3, sig3); \
|
||||
return cell; \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2, RTLIL::SigBit sig3) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
cell->setPort("\\" #_P3, sig3); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2) { \
|
||||
RTLIL::SigSpec sig3 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2, sig3); \
|
||||
return sig3; \
|
||||
RTLIL::SigBit RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2) { \
|
||||
RTLIL::SigBit sig3 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2, sig3); \
|
||||
return sig3; \
|
||||
}
|
||||
#define DEF_METHOD_4(_func, _type, _P1, _P2, _P3, _P4) \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2, RTLIL::SigSpec sig3, RTLIL::SigSpec sig4) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
cell->setPort("\\" #_P3, sig3); \
|
||||
cell->setPort("\\" #_P4, sig4); \
|
||||
return cell; \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2, RTLIL::SigBit sig3, RTLIL::SigBit sig4) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
cell->setPort("\\" #_P3, sig3); \
|
||||
cell->setPort("\\" #_P4, sig4); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigSpec RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigSpec sig1, RTLIL::SigSpec sig2, RTLIL::SigSpec sig3) { \
|
||||
RTLIL::SigSpec sig4 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2, sig3, sig4); \
|
||||
return sig4; \
|
||||
RTLIL::SigBit RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2, RTLIL::SigBit sig3) { \
|
||||
RTLIL::SigBit sig4 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2, sig3, sig4); \
|
||||
return sig4; \
|
||||
}
|
||||
DEF_METHOD_2(NotGate, "$_NOT_", A, Y)
|
||||
DEF_METHOD_3(AndGate, "$_AND_", A, B, Y)
|
||||
DEF_METHOD_3(OrGate, "$_OR_", A, B, Y)
|
||||
DEF_METHOD_3(XorGate, "$_XOR_", A, B, Y)
|
||||
DEF_METHOD_4(MuxGate, "$_MUX_", A, B, S, Y)
|
||||
#define DEF_METHOD_5(_func, _type, _P1, _P2, _P3, _P4, _P5) \
|
||||
RTLIL::Cell* RTLIL::Module::add ## _func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2, RTLIL::SigBit sig3, RTLIL::SigBit sig4, RTLIL::SigBit sig5) { \
|
||||
RTLIL::Cell *cell = addCell(name, _type); \
|
||||
cell->setPort("\\" #_P1, sig1); \
|
||||
cell->setPort("\\" #_P2, sig2); \
|
||||
cell->setPort("\\" #_P3, sig3); \
|
||||
cell->setPort("\\" #_P4, sig4); \
|
||||
cell->setPort("\\" #_P5, sig5); \
|
||||
return cell; \
|
||||
} \
|
||||
RTLIL::SigBit RTLIL::Module::_func(RTLIL::IdString name, RTLIL::SigBit sig1, RTLIL::SigBit sig2, RTLIL::SigBit sig3, RTLIL::SigBit sig4) { \
|
||||
RTLIL::SigBit sig5 = addWire(NEW_ID); \
|
||||
add ## _func(name, sig1, sig2, sig3, sig4, sig5); \
|
||||
return sig5; \
|
||||
}
|
||||
DEF_METHOD_2(NotGate, "$_NOT_", A, Y)
|
||||
DEF_METHOD_3(AndGate, "$_AND_", A, B, Y)
|
||||
DEF_METHOD_3(NandGate, "$_NAND_", A, B, Y)
|
||||
DEF_METHOD_3(OrGate, "$_OR_", A, B, Y)
|
||||
DEF_METHOD_3(NorGate, "$_NOR_", A, B, Y)
|
||||
DEF_METHOD_3(XorGate, "$_XOR_", A, B, Y)
|
||||
DEF_METHOD_3(XnorGate, "$_XNOR_", A, B, Y)
|
||||
DEF_METHOD_4(MuxGate, "$_MUX_", A, B, S, Y)
|
||||
DEF_METHOD_4(Aoi3Gate, "$_AOI3_", A, B, C, Y)
|
||||
DEF_METHOD_4(Oai3Gate, "$_OAI3_", A, B, C, Y)
|
||||
DEF_METHOD_5(Aoi4Gate, "$_AOI4_", A, B, C, D, Y)
|
||||
DEF_METHOD_5(Oai4Gate, "$_OAI4_", A, B, C, D, Y)
|
||||
#undef DEF_METHOD_2
|
||||
#undef DEF_METHOD_3
|
||||
#undef DEF_METHOD_4
|
||||
#undef DEF_METHOD_5
|
||||
|
||||
RTLIL::Cell* RTLIL::Module::addPow(RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y, bool a_signed, bool b_signed)
|
||||
{
|
||||
|
|
|
@ -697,11 +697,18 @@ public:
|
|||
RTLIL::Cell* addDlatchsr (RTLIL::IdString name, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr,
|
||||
RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool en_polarity = true, bool set_polarity = true, bool clr_polarity = true);
|
||||
|
||||
RTLIL::Cell* addNotGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_y);
|
||||
RTLIL::Cell* addAndGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y);
|
||||
RTLIL::Cell* addOrGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y);
|
||||
RTLIL::Cell* addXorGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y);
|
||||
RTLIL::Cell* addMuxGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s, RTLIL::SigSpec sig_y);
|
||||
RTLIL::Cell* addNotGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addAndGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addNandGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addOrGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addNorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addXorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addXnorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addMuxGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_s, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addAoi3Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addOai3Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addAoi4Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d, RTLIL::SigBit sig_y);
|
||||
RTLIL::Cell* addOai4Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d, RTLIL::SigBit sig_y);
|
||||
|
||||
RTLIL::Cell* addDffGate (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity = true);
|
||||
RTLIL::Cell* addDffsrGate (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr,
|
||||
|
@ -760,11 +767,18 @@ public:
|
|||
RTLIL::SigSpec Mux (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s);
|
||||
RTLIL::SigSpec Pmux (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s);
|
||||
|
||||
RTLIL::SigSpec NotGate (RTLIL::IdString name, RTLIL::SigSpec sig_a);
|
||||
RTLIL::SigSpec AndGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b);
|
||||
RTLIL::SigSpec OrGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b);
|
||||
RTLIL::SigSpec XorGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b);
|
||||
RTLIL::SigSpec MuxGate (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_s);
|
||||
RTLIL::SigBit NotGate (RTLIL::IdString name, RTLIL::SigBit sig_a);
|
||||
RTLIL::SigBit AndGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit NandGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit OrGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit NorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit XorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit XnorGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b);
|
||||
RTLIL::SigBit MuxGate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_s);
|
||||
RTLIL::SigBit Aoi3Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c);
|
||||
RTLIL::SigBit Oai3Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c);
|
||||
RTLIL::SigBit Aoi4Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d);
|
||||
RTLIL::SigBit Oai4Gate (RTLIL::IdString name, RTLIL::SigBit sig_a, RTLIL::SigBit sig_b, RTLIL::SigBit sig_c, RTLIL::SigBit sig_d);
|
||||
};
|
||||
|
||||
struct RTLIL::Wire
|
||||
|
|
Loading…
Reference in New Issue