aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-06-20 11:44:28 +0200
committerDavid Shah <davey1576@gmail.com>2018-06-20 11:44:28 +0200
commit1436ae21a2d9a214f7585deb2f038ff87ce4862c (patch)
tree910e696f210ea31a7f15e70455c08d895c7e7887
parent5d1b87b0a4e138726d751590728cdcc2f12f6192 (diff)
downloadnextpnr-1436ae21a2d9a214f7585deb2f038ff87ce4862c.tar.gz
nextpnr-1436ae21a2d9a214f7585deb2f038ff87ce4862c.tar.bz2
nextpnr-1436ae21a2d9a214f7585deb2f038ff87ce4862c.zip
Adding stubs for delay annotation and cell timing lookup
Signed-off-by: David Shah <davey1576@gmail.com>
-rw-r--r--common/nextpnr.h10
-rw-r--r--common/timing.cc29
-rw-r--r--common/timing.h28
-rw-r--r--dummy/arch.cc18
-rw-r--r--dummy/arch.h7
-rw-r--r--frontend/json/jsonparse.cc2
-rw-r--r--ice40/arch.cc21
-rw-r--r--ice40/arch.h10
8 files changed, 119 insertions, 6 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h
index c59b401e..5ccbf057 100644
--- a/common/nextpnr.h
+++ b/common/nextpnr.h
@@ -17,13 +17,13 @@
*
*/
+#include <algorithm>
#include <assert.h>
#include <stdint.h>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
-#include <algorithm>
#ifndef NEXTPNR_H
#define NEXTPNR_H
@@ -196,12 +196,12 @@ struct CellInfo;
enum PlaceStrength
{
- STRENGTH_NONE = 0,
- STRENGTH_WEAK = 1,
+ STRENGTH_NONE = 0,
+ STRENGTH_WEAK = 1,
STRENGTH_STRONG = 2,
- STRENGTH_FIXED = 3,
+ STRENGTH_FIXED = 3,
STRENGTH_LOCKED = 4,
- STRENGTH_USER = 5
+ STRENGTH_USER = 5
};
struct PortRef
diff --git a/common/timing.cc b/common/timing.cc
new file mode 100644
index 00000000..352ca94a
--- /dev/null
+++ b/common/timing.cc
@@ -0,0 +1,29 @@
+/*
+ * nextpnr -- Next Generation Place and Route
+ *
+ * Copyright (C) 2018 David Shah <david@symbioticeda.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include "timing.h"
+#include "log.h"
+#include <unordered_map>
+#include <utility>
+#include <algorithm>
+
+void assign_budget(Context *ctx, float default_clock = 12e6)
+{
+
+}
diff --git a/common/timing.h b/common/timing.h
new file mode 100644
index 00000000..da0cdd9c
--- /dev/null
+++ b/common/timing.h
@@ -0,0 +1,28 @@
+/*
+ * nextpnr -- Next Generation Place and Route
+ *
+ * Copyright (C) 2018 David Shah <david@symbioticeda.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#ifndef TIMING_H
+#define TIMING_H
+
+#include "nextpnr.h"
+
+// Assign "budget" values for all user ports in the design
+void assign_budget(Context *ctx, float default_clock = 12e6);
+
+#endif TIMING_H
diff --git a/dummy/arch.cc b/dummy/arch.cc
index fb54c74f..64841374 100644
--- a/dummy/arch.cc
+++ b/dummy/arch.cc
@@ -176,4 +176,22 @@ std::vector<GraphicElement> Arch::getPipGraphics(PipId pip) const
return ret;
}
+// ---------------------------------------------------------------
+
+delay_t Arch::getCellDelay(const CellInfo *cell, IdString fromPort,
+ IdString toPort) const
+{
+ return 0;
+}
+
+IdString Arch::getPortClock(const CellInfo *cell, IdString port) const
+{
+ return IdString();
+}
+
+bool Arch::isClockPort(const CellInfo *cell, IdString port) const
+{
+ return false;
+}
+
NEXTPNR_NAMESPACE_END
diff --git a/dummy/arch.h b/dummy/arch.h
index 02bec23a..61a09e00 100644
--- a/dummy/arch.h
+++ b/dummy/arch.h
@@ -32,7 +32,9 @@ struct DelayInfo
delay_t delay = 0;
delay_t raiseDelay() const { return delay; }
+
delay_t fallDelay() const { return delay; }
+
delay_t avgDelay() const { return delay; }
DelayInfo operator+(const DelayInfo &other) const
@@ -131,6 +133,11 @@ struct Arch : BaseCtx
std::unordered_set<BelId> belGraphicsReload;
std::unordered_set<WireId> wireGraphicsReload;
std::unordered_set<PipId> pipGraphicsReload;
+
+ delay_t getCellDelay(const CellInfo *cell, IdString fromPort,
+ IdString toPort) const;
+ IdString getPortClock(const CellInfo *cell, IdString port) const;
+ bool isClockPort(const CellInfo *cell, IdString port) const;
};
NEXTPNR_NAMESPACE_END
diff --git a/frontend/json/jsonparse.cc b/frontend/json/jsonparse.cc
index afd126fd..8f0ecc35 100644
--- a/frontend/json/jsonparse.cc
+++ b/frontend/json/jsonparse.cc
@@ -26,8 +26,8 @@
#include <fstream>
#include <iostream>
#include <log.h>
-#include <string>
#include <map>
+#include <string>
#include "nextpnr.h"
NEXTPNR_NAMESPACE_BEGIN
diff --git a/ice40/arch.cc b/ice40/arch.cc
index ba372410..380f3386 100644
--- a/ice40/arch.cc
+++ b/ice40/arch.cc
@@ -416,4 +416,25 @@ std::vector<GraphicElement> Arch::getPipGraphics(PipId pip) const
return ret;
}
+// -----------------------------------------------------------------------
+
+delay_t Arch::getCellDelay(const CellInfo *cell, IdString fromPort,
+ IdString toPort) const
+{
+ // TODO
+ return 0;
+}
+
+IdString Arch::getPortClock(const CellInfo *cell, IdString port) const
+{
+ // TODO
+ return IdString();
+}
+
+bool Arch::isClockPort(const CellInfo *cell, IdString port) const
+{
+ // TODO
+ return false;
+}
+
NEXTPNR_NAMESPACE_END
diff --git a/ice40/arch.h b/ice40/arch.h
index c1256a41..172541c0 100644
--- a/ice40/arch.h
+++ b/ice40/arch.h
@@ -755,6 +755,16 @@ struct Arch : BaseCtx
std::unordered_set<BelId> belGraphicsReload;
std::unordered_set<WireId> wireGraphicsReload;
std::unordered_set<PipId> pipGraphicsReload;
+
+ // -------------------------------------------------
+
+ // Get the delay through a cell from one port to another
+ delay_t getCellDelay(const CellInfo *cell, IdString fromPort,
+ IdString toPort) const;
+ // Get the associated clock to a port, or empty if the port is combinational
+ IdString getPortClock(const CellInfo *cell, IdString port) const;
+ // Return true if a port is a clock
+ bool isClockPort(const CellInfo *cell, IdString port) const;
};
NEXTPNR_NAMESPACE_END