Skip to content

Commit de803b7

Browse files
author
Enrico Lupi
committed
ADD feature check for merge mode and layers order
1 parent dd4f220 commit de803b7

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

hls4ml/backends/vitis/passes/feature_check.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,41 @@ def transform(self, model, node):
4949
f'WARNING: "ResourceUnrolled" strategy in "{node.name}" ({node.class_name}) may have unexpected II in'
5050
'Vitis backend.\nVerify that the final design satisfies the latency/II constraints.'
5151
)
52+
53+
54+
class ValidateBidirectionalMergeMode(OptimizerPass):
55+
_unrolled_layer_cls = ['Bidirectional']
56+
57+
def match(self, node):
58+
is_bidirectional_rnn_layer = (
59+
len([layer_cls for layer_cls in self._unrolled_layer_cls if layer_cls in node.class_name]) > 0
60+
)
61+
is_merge_mode_not_concat = node.get_attr('merge_mode', 'concat') != 'concat'
62+
63+
return is_bidirectional_rnn_layer and is_merge_mode_not_concat
64+
65+
def transform(self, model, node):
66+
merge_mode = node.get_attr('merge_mode', 'concat')
67+
print(
68+
f'WARNING: "{merge_mode}" merge mode in "{node.name}" ({node.class_name}) is not supported in Vitis backend. '
69+
'Switching to "concat" merge mode.'
70+
)
71+
node.set_attr('merge_mode', 'concat')
72+
73+
74+
class ValidateBidirectionalLayerOrder(OptimizerPass):
75+
_unrolled_layer_cls = ['Bidirectional']
76+
77+
def match(self, node):
78+
is_bidirectional_rnn_layer = (
79+
len([layer_cls for layer_cls in self._unrolled_layer_cls if layer_cls in node.class_name]) > 0
80+
)
81+
is_layer_order_swapped = node.get_attr('swapped_order', False)
82+
83+
return is_bidirectional_rnn_layer and is_layer_order_swapped
84+
85+
def transform(self, model, node):
86+
print(
87+
f'WARNING: The selected order for forward and backward layers in "{node.name}" ({node.class_name}) is not '
88+
'supported in Vitis backend. Switching to forward layer first, backward layer last.'
89+
)

hls4ml/backends/vitis/vitis_backend.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ def _register_flows(self):
1717
'vitis:validate_conv_implementation',
1818
'vitis:validate_resource_strategy',
1919
'vitis:validate_resource_unrolled_strategy',
20+
'vitis:validate_bidirectional_merge_mode',
21+
'vitis:validate_bidirectional_layer_order',
2022
]
2123
validation_flow = register_flow('validation', validation_passes, requires=['vivado:init_layers'], backend=self.name)
2224

0 commit comments

Comments
 (0)