mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 17:15:33 +00:00
Added $ff and $_FF_ cell types
This commit is contained in:
parent
4a981a3bd8
commit
8ebba8a35f
12 changed files with 118 additions and 19 deletions
|
@ -130,6 +130,7 @@ struct CellTypes
|
|||
IdString CTRL_IN = "\\CTRL_IN", CTRL_OUT = "\\CTRL_OUT";
|
||||
|
||||
setup_type("$sr", {SET, CLR}, {Q});
|
||||
setup_type("$ff", {D}, {Q});
|
||||
setup_type("$dff", {CLK, D}, {Q});
|
||||
setup_type("$dffe", {CLK, EN, D}, {Q});
|
||||
setup_type("$dffsr", {CLK, SET, CLR, D}, {Q});
|
||||
|
@ -184,6 +185,8 @@ struct CellTypes
|
|||
for (auto c2 : list_np)
|
||||
setup_type(stringf("$_SR_%c%c_", c1, c2), {S, R}, {Q});
|
||||
|
||||
setup_type("$_FF_", {D}, {Q});
|
||||
|
||||
for (auto c1 : list_np)
|
||||
setup_type(stringf("$_DFF_%c_", c1), {C, D}, {Q});
|
||||
|
||||
|
|
|
@ -866,6 +866,13 @@ namespace {
|
|||
return;
|
||||
}
|
||||
|
||||
if (cell->type == "$ff") {
|
||||
port("\\D", param("\\WIDTH"));
|
||||
port("\\Q", param("\\WIDTH"));
|
||||
check_expected();
|
||||
return;
|
||||
}
|
||||
|
||||
if (cell->type == "$dff") {
|
||||
param_bool("\\CLK_POLARITY");
|
||||
port("\\CLK", 1);
|
||||
|
@ -1069,6 +1076,7 @@ namespace {
|
|||
if (cell->type == "$_SR_PN_") { check_gate("SRQ"); return; }
|
||||
if (cell->type == "$_SR_PP_") { check_gate("SRQ"); return; }
|
||||
|
||||
if (cell->type == "$_FF_") { check_gate("DQ"); return; }
|
||||
if (cell->type == "$_DFF_N_") { check_gate("DQC"); return; }
|
||||
if (cell->type == "$_DFF_P_") { check_gate("DQC"); return; }
|
||||
|
||||
|
@ -1830,6 +1838,15 @@ RTLIL::Cell* RTLIL::Module::addSr(RTLIL::IdString name, RTLIL::SigSpec sig_set,
|
|||
return cell;
|
||||
}
|
||||
|
||||
RTLIL::Cell* RTLIL::Module::addFf(RTLIL::IdString name, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q)
|
||||
{
|
||||
RTLIL::Cell *cell = addCell(name, "$ff");
|
||||
cell->parameters["\\WIDTH"] = sig_q.size();
|
||||
cell->setPort("\\D", sig_d);
|
||||
cell->setPort("\\Q", sig_q);
|
||||
return cell;
|
||||
}
|
||||
|
||||
RTLIL::Cell* RTLIL::Module::addDff(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity)
|
||||
{
|
||||
RTLIL::Cell *cell = addCell(name, "$dff");
|
||||
|
@ -1912,6 +1929,14 @@ RTLIL::Cell* RTLIL::Module::addDlatchsr(RTLIL::IdString name, RTLIL::SigSpec sig
|
|||
return cell;
|
||||
}
|
||||
|
||||
RTLIL::Cell* RTLIL::Module::addFfGate(RTLIL::IdString name, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q)
|
||||
{
|
||||
RTLIL::Cell *cell = addCell(name, "$_FF_");
|
||||
cell->setPort("\\D", sig_d);
|
||||
cell->setPort("\\Q", sig_q);
|
||||
return cell;
|
||||
}
|
||||
|
||||
RTLIL::Cell* RTLIL::Module::addDffGate(RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity)
|
||||
{
|
||||
RTLIL::Cell *cell = addCell(name, stringf("$_DFF_%c_", clk_polarity ? 'P' : 'N'));
|
||||
|
|
|
@ -1008,6 +1008,7 @@ public:
|
|||
RTLIL::Cell* addEquiv (RTLIL::IdString name, RTLIL::SigSpec sig_a, RTLIL::SigSpec sig_b, RTLIL::SigSpec sig_y);
|
||||
|
||||
RTLIL::Cell* addSr (RTLIL::IdString name, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr, RTLIL::SigSpec sig_q, bool set_polarity = true, bool clr_polarity = true);
|
||||
RTLIL::Cell* addFf (RTLIL::IdString name, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q);
|
||||
RTLIL::Cell* addDff (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity = true);
|
||||
RTLIL::Cell* addDffe (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity = true, bool en_polarity = true);
|
||||
RTLIL::Cell* addDffsr (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr,
|
||||
|
@ -1032,6 +1033,7 @@ public:
|
|||
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* addFfGate (RTLIL::IdString name, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q);
|
||||
RTLIL::Cell* addDffGate (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity = true);
|
||||
RTLIL::Cell* addDffeGate (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_en, RTLIL::SigSpec sig_d, RTLIL::SigSpec sig_q, bool clk_polarity = true, bool en_polarity = true);
|
||||
RTLIL::Cell* addDffsrGate (RTLIL::IdString name, RTLIL::SigSpec sig_clk, RTLIL::SigSpec sig_set, RTLIL::SigSpec sig_clr,
|
||||
|
|
|
@ -1293,7 +1293,7 @@ struct SatGen
|
|||
return true;
|
||||
}
|
||||
|
||||
if (timestep > 0 && (cell->type == "$dff" || cell->type == "$_DFF_N_" || cell->type == "$_DFF_P_"))
|
||||
if (timestep > 0 && cell->type.in("$ff", "$dff", "$_FF_", "$_DFF_N_", "$_DFF_P_"))
|
||||
{
|
||||
if (timestep == 1)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue