mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-06 17:44:09 +00:00
coolrunner2: Add extraction for TFFs
This commit is contained in:
parent
dd5fab69c1
commit
8fe9cdf364
|
@ -4,4 +4,5 @@ OBJS += techlibs/coolrunner2/coolrunner2_sop.o
|
||||||
|
|
||||||
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/cells_latch.v))
|
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/cells_latch.v))
|
||||||
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/cells_sim.v))
|
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/cells_sim.v))
|
||||||
|
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/tff_extract.v))
|
||||||
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/xc2_dff.lib))
|
$(eval $(call add_share_file,share/coolrunner2,techlibs/coolrunner2/xc2_dff.lib))
|
||||||
|
|
|
@ -149,6 +149,16 @@ struct SynthCoolrunner2Pass : public ScriptPass
|
||||||
run("dfflibmap -prepare -liberty +/coolrunner2/xc2_dff.lib");
|
run("dfflibmap -prepare -liberty +/coolrunner2/xc2_dff.lib");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (check_label("map_tff"))
|
||||||
|
{
|
||||||
|
// This is quite hacky. By telling abc that it can only use AND and XOR gates, abc will try and use XOR
|
||||||
|
// gates "whenever possible." This will hopefully cause toggle flip-flop structures to turn into an XOR
|
||||||
|
// connected to a D flip-flop. We then match on these and convert them into XC2 TFF cells.
|
||||||
|
run("abc -g AND,XOR");
|
||||||
|
run("clean");
|
||||||
|
run("extract -map +/coolrunner2/tff_extract.v");
|
||||||
|
}
|
||||||
|
|
||||||
if (check_label("map_pla"))
|
if (check_label("map_pla"))
|
||||||
{
|
{
|
||||||
run("abc -sop -I 40 -P 56");
|
run("abc -sop -I 40 -P 56");
|
||||||
|
@ -160,6 +170,8 @@ struct SynthCoolrunner2Pass : public ScriptPass
|
||||||
run("dfflibmap -liberty +/coolrunner2/xc2_dff.lib");
|
run("dfflibmap -liberty +/coolrunner2/xc2_dff.lib");
|
||||||
run("dffinit -ff FDCP Q INIT");
|
run("dffinit -ff FDCP Q INIT");
|
||||||
run("dffinit -ff FDCP_N Q INIT");
|
run("dffinit -ff FDCP_N Q INIT");
|
||||||
|
run("dffinit -ff FTCP Q INIT");
|
||||||
|
run("dffinit -ff FTCP_N Q INIT");
|
||||||
run("dffinit -ff LDCP Q INIT");
|
run("dffinit -ff LDCP Q INIT");
|
||||||
run("dffinit -ff LDCP_N Q INIT");
|
run("dffinit -ff LDCP_N Q INIT");
|
||||||
run("coolrunner2_sop");
|
run("coolrunner2_sop");
|
||||||
|
|
41
techlibs/coolrunner2/tff_extract.v
Normal file
41
techlibs/coolrunner2/tff_extract.v
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
module FTCP (C, PRE, CLR, T, Q);
|
||||||
|
input C, PRE, CLR, T;
|
||||||
|
output wire Q;
|
||||||
|
|
||||||
|
wire xorout;
|
||||||
|
|
||||||
|
$_XOR_ xorgate (
|
||||||
|
.A(T),
|
||||||
|
.B(Q),
|
||||||
|
.Y(xorout),
|
||||||
|
);
|
||||||
|
|
||||||
|
$_DFFSR_PPP_ dff (
|
||||||
|
.C(C),
|
||||||
|
.D(xorout),
|
||||||
|
.Q(Q),
|
||||||
|
.S(PRE),
|
||||||
|
.R(CLR),
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module FTCP_N (C, PRE, CLR, T, Q);
|
||||||
|
input C, PRE, CLR, T;
|
||||||
|
output wire Q;
|
||||||
|
|
||||||
|
wire xorout;
|
||||||
|
|
||||||
|
$_XOR_ xorgate (
|
||||||
|
.A(T),
|
||||||
|
.B(Q),
|
||||||
|
.Y(xorout),
|
||||||
|
);
|
||||||
|
|
||||||
|
$_DFFSR_NPP_ dff (
|
||||||
|
.C(C),
|
||||||
|
.D(xorout),
|
||||||
|
.Q(Q),
|
||||||
|
.S(PRE),
|
||||||
|
.R(CLR),
|
||||||
|
);
|
||||||
|
endmodule
|
Loading…
Reference in a new issue