aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-05-26 10:47:35 +0200
committerClifford Wolf <clifford@clifford.at>2018-05-26 10:47:35 +0200
commit5e48758b30caf8ecc91c3c416326a093b47a2e2d (patch)
tree63109a9e53193f1b7ad47056be391fab1aa50c3b /common
parent75ae343e1f2ff1747726385854ae6be56be7a830 (diff)
downloadnextpnr-5e48758b30caf8ecc91c3c416326a093b47a2e2d.tar.gz
nextpnr-5e48758b30caf8ecc91c3c416326a093b47a2e2d.tar.bz2
nextpnr-5e48758b30caf8ecc91c3c416326a093b47a2e2d.zip
Directory structure
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'common')
-rw-r--r--common/design.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/common/design.h b/common/design.h
new file mode 100644
index 00000000..421937eb
--- /dev/null
+++ b/common/design.h
@@ -0,0 +1,95 @@
+/*
+ * nextpnr -- Next Generation PnR
+ *
+ * Copyright (C) 2018 Clifford Wolf <clifford@clifford.at>
+ *
+ * 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 DESIGN_H
+#define DESIGN_H
+
+#include <stdint.h>
+#include <vector>
+#include <string>
+#include <unordered_set>
+#include <unordered_map>
+
+// replace with proper IdString later
+typedef std::string IdString;
+
+// replace with haslib later
+template<typename T> using pool = std::unordered_set<T>;
+template<typename T, typename U> using dict = std::unordered_map<T, U>;
+using std::vector;
+
+#include "chip.h"
+
+struct CellInfo;
+
+struct PortRef
+{
+ CellInfo *cell;
+ IdString port;
+};
+
+struct NetInfo
+{
+ IdString name;
+ PortRef driver;
+ vector<PortRef> users;
+ dict<IdString, std::string> attrs;
+
+ // wire -> (uphill_wire, delay)
+ dict<WireId, std::pair<WireId, float>> wires;
+};
+
+enum PortType
+{
+ PORT_IN = 0,
+ PORT_OUT = 1,
+ PORT_INOUT = 2
+};
+
+struct PortInfo
+{
+ IdString name;
+ NetInfo *net;
+ PortType type;
+};
+
+struct CellInfo
+{
+ IdString name, type;
+ dict<IdString, PortInfo> ports;
+ dict<IdString, std::string> attrs, params;
+
+ BelId bel;
+ // cell_port -> bel_pin
+ dict<IdString, IdString> pins;
+};
+
+struct Design
+{
+ struct Chip chip;
+
+ Design(ChipArgs args) : chip(args) {
+ // ...
+ }
+
+ dict<IdString, NetInfo*> nets;
+ dict<IdString, CellInfo*> cells;
+};
+
+#endif