1
1
import logging
2
2
import math
3
+ import re
3
4
from typing import Dict
4
5
5
6
from autobridge .HLSParser .vivado_hls .TopRTLParser import TopRTLParser
@@ -52,7 +53,7 @@ def getSRLFIFOArea(self, skip_balance_part: bool) -> Dict[str, int]:
52
53
'URAM' : 0 ,
53
54
'FF' : 0 ,
54
55
'LUT' : 0
55
- }
56
+ }
56
57
57
58
if not skip_balance_part :
58
59
fifo_depth += self .added_depth_for_rebalance
@@ -102,6 +103,7 @@ def __init__(self, type:str, name : str):
102
103
self .name = name
103
104
self .id = self .type + self .name
104
105
self .area = {} # str_name -> count
106
+ self .pblock = ''
105
107
106
108
def __hash__ (self ):
107
109
return hash (self .id )
@@ -114,10 +116,10 @@ def getEdgeNames(self):
114
116
115
117
def getEdges (self ):
116
118
return self .in_edges + self .out_edges
117
-
119
+
118
120
def getInEdges (self ):
119
121
return self .in_edges
120
-
122
+
121
123
def getOutEdges (self ):
122
124
return self .out_edges
123
125
@@ -136,13 +138,24 @@ def getVertexAndInboundFIFOArea(self) -> Dict[str, int]:
136
138
return {
137
139
item : sum (e .getArea ()[item ] for e in self .in_edges ) + val for item , val in self .area .items ()
138
140
}
139
-
141
+
140
142
def assign_pblock (self , pblock : str ) -> None :
143
+ # FIXME: temp fix for tapa
144
+ if pblock == 'COARSE_X1Y0' :
145
+ pblock = 'CLOCKREGION_X4Y0:CLOCKREGION_X7Y3'
146
+ elif pblock == 'COARSE_X0Y0' :
147
+ pblock = 'CLOCKREGION_X0Y0:CLOCKREGION_X3Y3'
148
+
149
+ match = re .search (r'^CLOCKREGION_X(\d+)Y(\d+)[ ]*:[ ]*CLOCKREGION_X(\d+)Y(\d+)$' , pblock )
150
+ assert match , f'incorrect pblock { pblock } '
141
151
self .pblock = pblock
142
152
143
153
def get_pblock (self ) -> str :
144
154
return self .pblock
145
155
156
+ def is_assigned_to_pblock (self ) -> bool :
157
+ return self .pblock != ''
158
+
146
159
147
160
class DataflowGraph :
148
161
def __init__ (self , hls_prj_manager : HLSProjectManager , top_rtl_parser : TopRTLParser ):
@@ -159,7 +172,7 @@ def __init__(self, hls_prj_manager : HLSProjectManager, top_rtl_parser : TopRTLP
159
172
self .__initEdges (e_node )
160
173
161
174
self .__linkEdgeAndVertex ()
162
-
175
+
163
176
self .__checker ()
164
177
165
178
self .v_type_2_int = {} # map each vertex type to an integer
@@ -168,7 +181,7 @@ def __init__(self, hls_prj_manager : HLSProjectManager, top_rtl_parser : TopRTLP
168
181
self .int_2_v_name = {}
169
182
self .__initVTypeToInt ()
170
183
self .__initVInstToInt ()
171
-
184
+
172
185
# assign an integer to v type
173
186
def __initVTypeToInt (self ):
174
187
id = 1
@@ -224,7 +237,7 @@ def __initVertices(self, v_node):
224
237
225
238
# get area
226
239
v .area = self .hls_prj_manager .getAreaFromModuleType (v .type )
227
-
240
+
228
241
v .in_edge_names = self .top_rtl_parser .getInFIFOsOfModuleInst (v .name )
229
242
v .out_edge_names = self .top_rtl_parser .getOutFIFOsOfModuleInst (v .name )
230
243
0 commit comments