[tlgen] Fabric multi-clock support
Add the ability for fabric to support multiple clocks and resets.
There is currently no defined relationship between clocks, so
anything that is different is treated as asynchronous. This can be
improved in the future.
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/util/tlgen/elaborate.py b/util/tlgen/elaborate.py
index 31e0f2d..4ac1290 100644
--- a/util/tlgen/elaborate.py
+++ b/util/tlgen/elaborate.py
@@ -29,11 +29,6 @@
## Build address map
## Each socket_1n should have address map
- ## Gather clocks and resets
- xbar.clocks = {xbar.clock
- } | {clk
- for node in xbar.nodes for clk in node.clocks}
-
return True
@@ -66,12 +61,16 @@
# (New Node) Create ASYNC_FIFO node
new_node = Node(name="asf_" + str(len(xbar.nodes)),
node_type=NodeType.ASYNC_FIFO,
- clock=xbar.clock)
+ clock=xbar.clock,reset=xbar.reset)
+ # if node is HOST, host clock synchronizes into xbar domain
+ # if node is DEVICE, xbar synchronizes into device clock domain
if node.node_type == NodeType.HOST:
new_node.clocks.insert(0, node.clocks[0])
+ new_node.resets.insert(0, node.resets[0])
else:
new_node.clocks.append(node.clocks[0])
+ new_node.resets.append(node.resets[0])
xbar.insert_node(new_node, node)
@@ -82,7 +81,7 @@
# (New node) Create SOCKET_M1 node
new_node = Node(name="sm1_" + str(len(xbar.nodes)),
node_type=NodeType.SOCKET_M1,
- clock=xbar.clock)
+ clock=xbar.clock,reset=xbar.reset)
new_node.hdepth = 2
new_node.hpass = 2**len(node.us) - 1
new_node.ddepth = 2
@@ -95,7 +94,7 @@
# (New node) Create SOCKET_1N node
new_node = Node(name="s1n_" + str(len(xbar.nodes)),
node_type=NodeType.SOCKET_1N,
- clock=xbar.clock)
+ clock=xbar.clock,reset=xbar.reset)
new_node.hdepth = 2
new_node.hpass = 1
new_node.ddepth = 2