Ejemplo n.º 1
0
def convert_from_keras_model(model, backend, output_dir='my-hls-test', project_name='myproject',
    fpga_part='xcku115-flvb2104-2-i', clock_period=5, hls_config={}):

    config = create_config(output_dir=output_dir,
        project_name=project_name, backend=backend.name, fpga_part=fpga_part, clock_period=clock_period)
    config['KerasModel'] = model

    model_config = hls_config.get('Model', None)
    if model_config is not None:
        if not all(k in model_config for k in ('Precision', 'ReuseFactor')):
            raise Exception('Precision and ReuseFactor must be provided in the hls_config')
    else:
        model_config = {}
        model_config['Precision'] = backend.get_pstring(16,6)
        model_config['ReuseFactor'] = '1'
    config['HLSConfig']['Model'] = model_config

    if 'LayerName' in hls_config:
        config['HLSConfig']['LayerName'] = hls_config['LayerName']

    if 'LayerType' in hls_config:
        config['HLSConfig']['LayerType'] = hls_config['LayerType']

    if 'Optimizers' in hls_config:
        config['HLSConfig']['Optimizers'] = hls_config['Optimizers']

    return keras_to_hls(config)
Ejemplo n.º 2
0
def convert_from_keras_model(model,
                             output_dir='my-hls-test',
                             project_name='myproject',
                             input_data_tb=None,
                             output_data_tb=None,
                             backend='Vivado',
                             hls_config={},
                             **kwargs):
    """Convert to hls4ml model based on the provided configuration.
    Args:
        model: Keras model to convert
        output_dir (str, optional): Output directory of the generated HLS
            project. Defaults to 'my-hls-test'.
        project_name (str, optional): Name of the HLS project.
            Defaults to 'myproject'.
        input_data_tb (str, optional): String representing the path of input data in .npy or .dat format that will be
            used during csim and cosim.
        output_data_tb (str, optional): String representing the path of output data in .npy or .dat format that will be
            used during csim and cosim.
        backend (str, optional): Name of the backend to use, e.g., 'Vivado'
            or 'Quartus'.
        board (str, optional): One of target boards specified in `supported_board.json` file. If set to `None` a default
            device of a backend will be used. See documentation of the backend used.
        part (str, optional): The FPGA part. If set to `None` a default part of a backend will be used.
            See documentation of the backend used. Note that if `board` is specified, the part associated to that board
            will overwrite any part passed as a parameter.
        clock_period (int, optional): Clock period of the design.
            Defaults to 5.
        io_type (str, optional): Type of implementation used. One of
            'io_parallel' or 'io_serial'. Defaults to 'io_parallel'.
        hls_config (dict, optional): The HLS config.
        kwargs** (dict, optional): Additional parameters that will be used to create the config of the specified backend
    Raises:
        Exception: If precision and reuse factor are not present in 'hls_config'
    Returns:
        ModelGraph: hls4ml model.
    """

    config = create_config(output_dir=output_dir,
                           project_name=project_name,
                           backend=backend,
                           **kwargs)

    config['KerasModel'] = model
    config['InputData'] = input_data_tb
    config['OutputPredictions'] = output_data_tb
    config['HLSConfig'] = {}

    model_config = hls_config.get('Model', None)
    config['HLSConfig']['Model'] = _check_model_config(model_config)

    _check_hls_config(config, hls_config)

    return keras_to_hls(config)
Ejemplo n.º 3
0
def convert_from_onnx_model(model,
                            output_dir='my-hls-test',
                            project_name='myproject',
                            input_data_tb=None,
                            output_data_tb=None,
                            backend='Vivado',
                            board=None,
                            part=None,
                            clock_period=5,
                            io_type='io_parallel',
                            hls_config={},
                            **kwargs):
    """
    
    Convert an ONNX model to a hls model.
    
    Parameters
    ----------
    model : ONNX model object.
        Model to be converted to hls model object.
    output_dir (str, optional): Output directory of the generated HLS
        project. Defaults to 'my-hls-test'.
    project_name (str, optional): Name of the HLS project.
        Defaults to 'myproject'.
    input_data_tb (str, optional): String representing the path of input data in .npy or .dat format that will be
        used during csim and cosim.
    output_data_tb (str, optional): String representing the path of output data in .npy or .dat format that will be
        used during csim and cosim.
    backend (str, optional): Name of the backend to use, e.g., 'Vivado'
        or 'Quartus'.
    board (str, optional): One of target boards specified in `supported_board.json` file. If set to `None` a default
        device of a backend will be used. See documentation of the backend used.
    part (str, optional): The FPGA part. If set to `None` a default part of a backend will be used.
        See documentation of the backend used. Note that if `board` is specified, the part associated to that board
        will overwrite any part passed as a parameter.
    clock_period (int, optional): Clock period of the design.
        Defaults to 5.
    io_type (str, optional): Type of implementation used. One of
        'io_parallel' or 'io_serial'. Defaults to 'io_parallel'.
    hls_config (dict, optional): The HLS config.
    kwargs** (dict, optional): Additional parameters that will be used to create the config of the specified backend
        
    Returns
    -------
    hls_model : hls4ml model object.
        
    See Also
    --------
    hls4ml.convert_from_keras_model, hls4ml.convert_from_pytorch_model
    
    Examples
    --------
    >>> import hls4ml
    >>> config = hls4ml.utils.config_from_onnx_model(model, granularity='model')
    >>> hls_model = hls4ml.converters.convert_from_onnx_model(model, hls_config=config)
    """

    config = create_config(output_dir=output_dir,
                           project_name=project_name,
                           board=board,
                           part=part,
                           clock_period=clock_period,
                           io_type=io_type,
                           backend=backend,
                           **kwargs)

    config['OnnxModel'] = model
    config['InputData'] = input_data_tb
    config['OutputPredictions'] = output_data_tb
    config['HLSConfig'] = {}

    model_config = hls_config.get('Model', None)
    config['HLSConfig']['Model'] = _check_model_config(model_config)

    _check_hls_config(config, hls_config)

    return onnx_to_hls(config)