aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Pambor <tp@osasysteme.de>2022-03-27 22:15:12 +0200
committerTim Pambor <tp@osasysteme.de>2022-03-27 22:15:12 +0200
commit12b38bab6d630e14381870f51ccfd52c5a10b337 (patch)
treefd7ba785aefb252934b15c57c61aad8d8114094b
parent3ed53153ca3b38f5d488604607b50627c0b5639a (diff)
downloadnextpnr-12b38bab6d630e14381870f51ccfd52c5a10b337.tar.gz
nextpnr-12b38bab6d630e14381870f51ccfd52c5a10b337.tar.bz2
nextpnr-12b38bab6d630e14381870f51ccfd52c5a10b337.zip
gowin: Add bels for oscillator
-rw-r--r--gowin/arch.cc38
-rw-r--r--gowin/constids.inc8
2 files changed, 46 insertions, 0 deletions
diff --git a/gowin/arch.cc b/gowin/arch.cc
index dc40b179..2c1e50b7 100644
--- a/gowin/arch.cc
+++ b/gowin/arch.cc
@@ -1009,6 +1009,44 @@ Arch::Arch(ArchArgs args) : args(args)
snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
addBelInput(belname, id_GSRI, id(buf));
break;
+ case ID_OSC:
+ snprintf(buf, 32, "R%dC%d_OSC", row + 1, col + 1);
+ belname = id(buf);
+ addBel(belname, id_OSC, Loc(col, row, 0), false);
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCOUT)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelOutput(belname, id_OSCOUT, id(buf));
+ break;
+ case ID_OSCH:
+ snprintf(buf, 32, "R%dC%d_OSCH", row + 1, col + 1);
+ belname = id(buf);
+ addBel(belname, id_OSCH, Loc(col, row, 0), false);
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCOUT)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelOutput(belname, id_OSCOUT, id(buf));
+ break;
+ case ID_OSCF:
+ snprintf(buf, 32, "R%dC%d_OSCF", row + 1, col + 1);
+ belname = id(buf);
+ addBel(belname, id_OSCF, Loc(col, row, 0), false);
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCOUT)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelOutput(belname, id_OSCOUT, id(buf));
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCEN)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelInput(belname, id_OSCEN, id(buf));
+ break;
+ case ID_OSCZ:
+ snprintf(buf, 32, "R%dC%d_OSCZ", row + 1, col + 1);
+ belname = id(buf);
+ addBel(belname, id_OSCZ, Loc(col, row, 0), false);
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCOUT)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelOutput(belname, id_OSCOUT, id(buf));
+ portname = IdString(pairLookup(bel->ports.get(), bel->num_ports, ID_OSCEN)->src_id);
+ snprintf(buf, 32, "R%dC%d_%s", row + 1, col + 1, portname.c_str(this));
+ addBelInput(belname, id_OSCEN, id(buf));
+ break;
// fall through the ++
case ID_LUT7:
z++;
diff --git a/gowin/constids.inc b/gowin/constids.inc
index 8159cc10..d2a6b171 100644
--- a/gowin/constids.inc
+++ b/gowin/constids.inc
@@ -758,6 +758,12 @@ X(GSR)
X(GSR0)
X(GSRI)
+// Oscillators
+X(OSC)
+X(OSCZ)
+X(OSCH)
+X(OSCF)
+
// primitive attributes
X(INIT)
X(FF_USED)
@@ -791,6 +797,8 @@ X(COUT)
X(OF)
X(V)
X(G)
+X(OSCOUT)
+X(OSCEN)
// timing
X(X0)