mirror of https://github.com/YosysHQ/yosys.git
Call 'wreduce' after mul2dsp to avoid unextend()
This commit is contained in:
parent
93363c94a2
commit
53ea5daa42
|
@ -1,6 +1,5 @@
|
||||||
pattern xilinx_dsp_pack
|
pattern xilinx_dsp_pack
|
||||||
|
|
||||||
udata <std::function<SigSpec(const SigSpec&)>> unextend
|
|
||||||
state <SigBit> clock
|
state <SigBit> clock
|
||||||
state <SigSpec> sigA sigB sigC sigD sigM sigP
|
state <SigSpec> sigA sigB sigC sigD sigM sigP
|
||||||
state <IdString> postAddAB postAddMuxAB
|
state <IdString> postAddAB postAddMuxAB
|
||||||
|
@ -25,7 +24,7 @@ match dsp
|
||||||
endmatch
|
endmatch
|
||||||
|
|
||||||
code sigA sigB sigC sigD sigM clock
|
code sigA sigB sigC sigD sigM clock
|
||||||
unextend = [](const SigSpec &sig) {
|
auto unextend = [](const SigSpec &sig) {
|
||||||
int i;
|
int i;
|
||||||
for (i = GetSize(sig)-1; i > 0; i--)
|
for (i = GetSize(sig)-1; i > 0; i--)
|
||||||
if (sig[i] != sig[i-1])
|
if (sig[i] != sig[i-1])
|
||||||
|
@ -272,9 +271,9 @@ match postAdd
|
||||||
filter !ffMcemux || nusers(port(postAdd, AB)) == 3
|
filter !ffMcemux || nusers(port(postAdd, AB)) == 3
|
||||||
|
|
||||||
index <SigBit> port(postAdd, AB)[0] === sigP[0]
|
index <SigBit> port(postAdd, AB)[0] === sigP[0]
|
||||||
filter GetSize(unextend(port(postAdd, AB))) <= GetSize(sigP)
|
filter GetSize(port(postAdd, AB)) <= GetSize(sigP)
|
||||||
filter unextend(port(postAdd, AB)) == sigP.extract(0, GetSize(unextend(port(postAdd, AB))))
|
filter port(postAdd, AB) == sigP.extract(0, GetSize(port(postAdd, AB)))
|
||||||
filter nusers(sigP.extract_end(GetSize(unextend(port(postAdd, AB))))) <= 1
|
filter nusers(sigP.extract_end(GetSize(port(postAdd, AB)))) <= 1
|
||||||
set postAddAB AB
|
set postAddAB AB
|
||||||
optional
|
optional
|
||||||
endmatch
|
endmatch
|
||||||
|
|
|
@ -346,6 +346,7 @@ struct SynthXilinxPass : public ScriptPass
|
||||||
"-D DSP_A_MINWIDTH=2 -D DSP_B_MINWIDTH=2 " // Blocks Nx1 multipliers
|
"-D DSP_A_MINWIDTH=2 -D DSP_B_MINWIDTH=2 " // Blocks Nx1 multipliers
|
||||||
"-D DSP_Y_MINWIDTH=9 " // UG901 suggests small multiplies are those 4x4 and smaller
|
"-D DSP_Y_MINWIDTH=9 " // UG901 suggests small multiplies are those 4x4 and smaller
|
||||||
"-D DSP_SIGNEDONLY=1 -D DSP_NAME=$__MUL25X18");
|
"-D DSP_SIGNEDONLY=1 -D DSP_NAME=$__MUL25X18");
|
||||||
|
run("wreduce t:$add");
|
||||||
run("xilinx_dsp");
|
run("xilinx_dsp");
|
||||||
run("chtype -set $mul t:$__soft_mul");
|
run("chtype -set $mul t:$__soft_mul");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue