diff --git a/hls4ml/backends/vivado/vivado_backend.py b/hls4ml/backends/vivado/vivado_backend.py index 6afab94098..1d4c96d982 100644 --- a/hls4ml/backends/vivado/vivado_backend.py +++ b/hls4ml/backends/vivado/vivado_backend.py @@ -212,9 +212,9 @@ def build( return parse_vivado_report(model.config.get_output_dir()) def _validate_conv_strategy(self, layer): - if layer.model.config.model_strategy.lower() != 'resource': - print(f'WARNING: Cannot use "Latency" model strategy for {layer.name} layer. Switching to "Resource" strategy.') - layer.model.config.model_strategy = 'Resource' + if layer.model.config.pipeline_style.lower() != 'dataflow': + print(f'WARNING: Layer {layer.name} requires "dataflow" pipeline style. Switching to "dataflow" pipeline style.') + layer.model.config.pipeline_style = 'dataflow' @layer_optimizer(Layer) def init_base_layer(self, layer): diff --git a/hls4ml/model/graph.py b/hls4ml/model/graph.py index 7482b471b0..6f101536eb 100644 --- a/hls4ml/model/graph.py +++ b/hls4ml/model/graph.py @@ -49,6 +49,8 @@ def __init__(self, config): self.trace_output = self.get_config_value('TraceOutput', False) + self.pipeline_style = 'pipeline' + self._parse_hls_config() self._validate_hls_config() @@ -212,6 +214,7 @@ def _parse_hls_config(self): self.model_conv_implementation = model_cfg.get('ConvImplementation', 'LineBuffer') self.model_strategy = model_cfg.get('Strategy', 'Latency') self.model_compression = bool(model_cfg.get('Compression', 0)) + self.pipeline_style = model_cfg.get('PipelineStyle', 'pipeline') layer_type_cfg = hls_config.get('LayerType') if layer_type_cfg is not None: @@ -274,45 +277,48 @@ def _parse_hls_config(self): self.layer_name_compression[layer_name.lower()] = bool(compression) def _validate_hls_config(self): - use_resource = False - if self.model_strategy.lower() == 'latency' and self.model_compression: - print('WARNING: Compression enabled while model strategy set to "Latency".') - use_resource = True + use_dataflow = False + if self.pipeline_style.lower() == 'pipeline' and self.model_compression: + print('WARNING: Compression enabled while pipeline style set to "pipeline".') + use_dataflow = True for layer_type, strategy in self.layer_type_strategy.items(): - if strategy.lower() == 'resource' and self.model_strategy.lower() == 'latency': + if strategy.lower() == 'resource' and self.pipeline_style.lower() == 'pipeline': print( - 'WARNING: Strategy for layer type {} set to "Resource", while model strategy set to "Latency".'.format( + 'WARNING: Strategy for layer type {} set to "Resource", while pipeline style set to "pipeline".'.format( layer_type ) ) - use_resource = True + use_dataflow = True for layer_name, strategy in self.layer_name_strategy.items(): - if strategy.lower() == 'resource' and self.model_strategy.lower() == 'latency': + if strategy.lower() == 'resource' and self.pipeline_style.lower() == 'pipeline': print( - 'WARNING: Strategy for layer {} set to "Resource", while model strategy set to "Latency".'.format( + 'WARNING: Strategy for layer {} set to "Resource", while pipeline style set to "pipeline".'.format( layer_name ) ) - use_resource = True + use_dataflow = True for layer_type, compression in self.layer_type_compression.items(): - if compression and self.model_strategy.lower() == 'latency': + if compression and self.pipeline_style.lower() == 'pipeline': print( - 'WARNING: Compression enabled for layer type {}, while model strategy set to "Latency".'.format( + 'WARNING: Compression enabled for layer type {}, while pipeline style set to "pipeline".'.format( layer_type ) ) - use_resource = True + use_dataflow = True for layer_name, compression in self.layer_name_compression.items(): - if compression and self.model_strategy.lower() == 'latency': - print(f'WARNING: Compression enabled for layer {layer_name}, while model strategy set to "Latency".') - use_resource = True + if compression and self.pipeline_style.lower() == 'pipeline': + print(f'WARNING: Compression enabled for layer {layer_name}, while pipeline style set to "pipeline".') + use_dataflow = True + + if self.model_strategy.lower() == 'resource': + use_dataflow = True - if use_resource: - print('WARNING: Changing model strategy to "Resource"') - self.model_strategy = 'Resource' + if use_dataflow: + print('WARNING: Changing pipeline style to "dataflow".') + self.pipeline_style = 'dataflow' class ModelGraph: diff --git a/hls4ml/writer/vivado_writer.py b/hls4ml/writer/vivado_writer.py index 93fa80cee0..7d22b0b64a 100644 --- a/hls4ml/writer/vivado_writer.py +++ b/hls4ml/writer/vivado_writer.py @@ -171,7 +171,7 @@ def write_project_cpp(self, model): newline += indent + '#pragma HLS INTERFACE ap_vld port={},{} \n'.format( ','.join(all_inputs), ','.join(all_outputs) ) - if model.config.model_strategy.lower() == 'resource': + if model.config.pipeline_style.lower() == 'dataflow': newline += indent + '#pragma HLS DATAFLOW \n' else: newline += indent + '#pragma HLS PIPELINE \n'