mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-18 06:39:03 +00:00
ql_dsp: Add outer loop
This commit is contained in:
parent
fde681623c
commit
f157a868a3
|
@ -70,6 +70,8 @@ bool promote(Module *m, Cell *cell) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool did_something;
|
||||
|
||||
#include "ql_dsp_pm.h"
|
||||
|
||||
struct QlDspPass : Pass {
|
||||
|
@ -85,19 +87,24 @@ struct QlDspPass : Pass {
|
|||
extra_args(args, argidx, d);
|
||||
|
||||
for (auto module : d->selected_modules()) {
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_pack_regs();
|
||||
}
|
||||
did_something = true;
|
||||
|
||||
while (did_something)
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_cascade();
|
||||
}
|
||||
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_pack_regs();
|
||||
// TODO: could be optimized by more reuse of the pmgen object
|
||||
did_something = false;
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_pack_regs();
|
||||
}
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_cascade();
|
||||
}
|
||||
{
|
||||
ql_dsp_pm pm(module, module->selected_cells());
|
||||
pm.run_ql_dsp_pack_regs();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ code argD clock_inferred clock reset
|
|||
log("%s: inferring Z path register from flip-flop %s\n", log_id(dsp), log_id(dff));
|
||||
dsp->connections_[\output_select_i][2] = RTLIL::S1;
|
||||
dsp->setPort(\z_o, dffQ);
|
||||
did_something = true;
|
||||
}
|
||||
}
|
||||
endcode
|
||||
|
@ -52,6 +53,7 @@ code argQ clock_inferred clock reset
|
|||
log("%s: inferring B path register from flip-flop %s\n", log_id(dsp), log_id(dff));
|
||||
dsp->parameters[\B_REG] = true;
|
||||
dsp->setPort(\b_i, dffD);
|
||||
did_something = true;
|
||||
}
|
||||
}
|
||||
endcode
|
||||
|
@ -70,6 +72,7 @@ code argQ clock_inferred clock reset
|
|||
log("%s: inferring A path register from flip-flop %s\n", log_id(dsp), log_id(dff));
|
||||
dsp->parameters[\A_REG] = true;
|
||||
dsp->setPort(\a_i, dffD);
|
||||
did_something = true;
|
||||
}
|
||||
}
|
||||
endcode
|
||||
|
@ -236,9 +239,6 @@ match add
|
|||
filter port(add, \B).extract(0, width) == port(dsp2, \z_o).extract(0, width)
|
||||
endmatch
|
||||
|
||||
code
|
||||
endcode
|
||||
|
||||
code
|
||||
const int z_width = 50;
|
||||
|
||||
|
@ -265,7 +265,9 @@ code
|
|||
dsp2->setParam(\SHIFT_REG, Const(0, 6));
|
||||
dsp2->setParam(\SATURATE, Const(0, 1));
|
||||
dsp2->setParam(\ZCIN_REG, Const(1, 1));
|
||||
|
||||
dsp2->setPort(\z_o, {port(dsp2, \z_o).extract_end(port(add, \Y).size()), port(add, \Y)});
|
||||
module->remove(add);
|
||||
|
||||
did_something = true;
|
||||
autoremove(add);
|
||||
accept;
|
||||
endcode
|
||||
|
|
Loading…
Reference in a new issue