Sylva Input Format
App Graph
The input to Sylva is a SDF graph. The SDF graph is a directed graph where each node represents a task and each edge represents a data dependency between tasks. The SDF graph is represented in the form of a JSON file. The following json snippet is an example of AppGraph that represent the sobel application.
{
"nodes": [
{
"id": "load",
"func": "func_load",
"outputPorts": [
{
"id": "load_output",
"rate": 1,
"tokenSize": 16
}
]
},
{
"id": "copy",
"func": "func_copy",
"inputPorts": [
{
"id": "copy_input",
"rate": 1,
"tokenSize": 16
}
],
"outputPorts": [
{
"id": "copy_output_0",
"rate": 1,
"tokenSize": 16
},
{
"id": "copy_output_1",
"rate": 1,
"tokenSize": 16
}
]
},
{
"id": "gx",
"func": "func_gx",
"inputPorts": [
{
"id": "gx_input",
"rate": 1,
"tokenSize": 16
}
],
"outputPorts": [
{
"id": "gx_output",
"rate": 1,
"tokenSize": 16
}
]
},
{
"id": "gy",
"func": "func_gy",
"inputPorts": [
{
"id": "gy_input",
"rate": 1,
"tokenSize": 16
}
],
"outputPorts": [
{
"id": "gy_output",
"rate": 1,
"tokenSize": 16
}
]
},
{
"id": "combine",
"func": "func_combine",
"inputPorts": [
{
"id": "combine_input_0",
"rate": 1,
"tokenSize": 16
},
{
"id": "combine_input_1",
"rate": 1,
"tokenSize": 16
}
],
"outputPorts": [
{
"id": "combine_output",
"rate": 1,
"tokenSize": 16
}
]
},
{
"id": "store",
"func": "func_store",
"inputPorts": [
{
"id": "store_input",
"rate": 1,
"tokenSize": 16
}
]
}
],
"edges": [
{
"id": "edge_load_copy",
"sourceNode": "load",
"targetNode": "copy",
"sourcePort": "load_output",
"targetPort": "copy_input",
"tokenSize": 16
},
{
"id": "edge_copy_gx",
"sourceNode": "copy",
"targetNode": "gx",
"sourcePort": "copy_output_0",
"targetPort": "gx_input",
"tokenSize": 16
},
{
"id": "edge_copy_gy",
"sourceNode": "copy",
"targetNode": "gy",
"sourcePort": "copy_output_1",
"targetPort": "gy_input",
"tokenSize": 16
},
{
"id": "edge_gx_combine",
"sourceNode": "gx",
"targetNode": "combine",
"sourcePort": "gx_output",
"targetPort": "combine_input_0",
"tokenSize": 16
},
{
"id": "edge_gy_combine",
"sourceNode": "gy",
"targetNode": "combine",
"sourcePort": "gy_output",
"targetPort": "combine_input_1",
"tokenSize": 16
},
{
"id": "edge_combine_store",
"sourceNode": "combine",
"targetNode": "store",
"sourcePort": "combine_output",
"targetPort": "store_input",
"tokenSize": 16
}
]
}
Alimp Lirary
The Alimp library is a collection of functions that can implement the functionality of the nodes in the SDF graph. Each function in the Alimp library is represented as a JSON object. The following json snippet is an example of Alimp library that represent the sobel application.
{
"entries": [
{
"func": "func_load",
"instances": [
{
"width": 2,
"height": 2,
"latency": 16,
"energy": 1,
"outputAddrTimePatterns": [
{},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 2
},
{
"key": 3,
"value": 3
},
{
"key": 4,
"value": 4
},
{
"key": 5,
"value": 5
},
{
"key": 6,
"value": 6
},
{
"key": 7,
"value": 7
},
{
"key": 8,
"value": 8
},
{
"key": 9,
"value": 9
},
{
"key": 10,
"value": 10
},
{
"key": 11,
"value": 11
},
{
"key": 12,
"value": 12
},
{
"key": 13,
"value": 13
},
{
"key": 14,
"value": 14
},
{
"key": 15,
"value": 15
}
]
},
{
"width": 4,
"height": 4,
"latency": 4,
"energy": 2,
"outputAddrTimePatterns": [
{},
{
"key": 1
},
{
"key": 2
},
{
"key": 3
},
{
"key": 4,
"value": 1
},
{
"key": 5,
"value": 1
},
{
"key": 6,
"value": 1
},
{
"key": 7,
"value": 1
},
{
"key": 8,
"value": 2
},
{
"key": 9,
"value": 2
},
{
"key": 10,
"value": 2
},
{
"key": 11,
"value": 2
},
{
"key": 12,
"value": 3
},
{
"key": 13,
"value": 3
},
{
"key": 14,
"value": 3
},
{
"key": 15,
"value": 3
}
]
}
]
},
{
"func": "func_copy",
"instances": [
{
"width": 1,
"height": 1,
"latency": 17,
"energy": 1,
"inputAddrTimePatterns": [
{},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 2
},
{
"key": 3,
"value": 3
},
{
"key": 4,
"value": 4
},
{
"key": 5,
"value": 5
},
{
"key": 6,
"value": 6
},
{
"key": 7,
"value": 7
},
{
"key": 8,
"value": 8
},
{
"key": 9,
"value": 9
},
{
"key": 10,
"value": 10
},
{
"key": 11,
"value": 11
},
{
"key": 12,
"value": 12
},
{
"key": 13,
"value": 13
},
{
"key": 14,
"value": 14
},
{
"key": 15,
"value": 15
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 2
},
{
"key": 2,
"value": 3
},
{
"key": 3,
"value": 4
},
{
"key": 4,
"value": 5
},
{
"key": 5,
"value": 6
},
{
"key": 6,
"value": 7
},
{
"key": 7,
"value": 8
},
{
"key": 8,
"value": 9
},
{
"key": 9,
"value": 10
},
{
"key": 10,
"value": 11
},
{
"key": 11,
"value": 12
},
{
"key": 12,
"value": 13
},
{
"key": 13,
"value": 14
},
{
"key": 14,
"value": 15
},
{
"key": 15,
"value": 16
},
{
"key": 16,
"value": 1
},
{
"key": 17,
"value": 2
},
{
"key": 18,
"value": 3
},
{
"key": 19,
"value": 4
},
{
"key": 20,
"value": 5
},
{
"key": 21,
"value": 6
},
{
"key": 22,
"value": 7
},
{
"key": 23,
"value": 8
},
{
"key": 24,
"value": 9
},
{
"key": 25,
"value": 10
},
{
"key": 26,
"value": 11
},
{
"key": 27,
"value": 12
},
{
"key": 28,
"value": 13
},
{
"key": 29,
"value": 14
},
{
"key": 30,
"value": 15
},
{
"key": 31,
"value": 16
}
]
},
{
"width": 2,
"height": 1,
"latency": 9,
"energy": 2,
"inputAddrTimePatterns": [
{},
{
"key": 1
},
{
"key": 2,
"value": 1
},
{
"key": 3,
"value": 1
},
{
"key": 4,
"value": 2
},
{
"key": 5,
"value": 2
},
{
"key": 6,
"value": 3
},
{
"key": 7,
"value": 3
},
{
"key": 8,
"value": 4
},
{
"key": 9,
"value": 4
},
{
"key": 10,
"value": 5
},
{
"key": 11,
"value": 5
},
{
"key": 12,
"value": 6
},
{
"key": 13,
"value": 6
},
{
"key": 14,
"value": 7
},
{
"key": 15,
"value": 7
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 2
},
{
"key": 3,
"value": 2
},
{
"key": 4,
"value": 3
},
{
"key": 5,
"value": 3
},
{
"key": 6,
"value": 4
},
{
"key": 7,
"value": 4
},
{
"key": 8,
"value": 5
},
{
"key": 9,
"value": 5
},
{
"key": 10,
"value": 6
},
{
"key": 11,
"value": 6
},
{
"key": 12,
"value": 7
},
{
"key": 13,
"value": 7
},
{
"key": 14,
"value": 8
},
{
"key": 15,
"value": 8
},
{
"key": 16,
"value": 9
},
{
"key": 17,
"value": 9
},
{
"key": 18,
"value": 10
},
{
"key": 19,
"value": 10
},
{
"key": 20,
"value": 11
},
{
"key": 21,
"value": 11
},
{
"key": 22,
"value": 12
},
{
"key": 23,
"value": 12
},
{
"key": 24,
"value": 13
},
{
"key": 25,
"value": 13
},
{
"key": 26,
"value": 14
},
{
"key": 27,
"value": 14
},
{
"key": 28,
"value": 15
},
{
"key": 29,
"value": 15
},
{
"key": 30,
"value": 16
},
{
"key": 31,
"value": 16
}
]
},
{
"width": 4,
"height": 1,
"latency": 5,
"energy": 4,
"inputAddrTimePatterns": [
{},
{
"key": 1
},
{
"key": 2
},
{
"key": 3
},
{
"key": 4,
"value": 1
},
{
"key": 5,
"value": 1
},
{
"key": 6,
"value": 1
},
{
"key": 7,
"value": 1
},
{
"key": 8,
"value": 2
},
{
"key": 9,
"value": 2
},
{
"key": 10,
"value": 2
},
{
"key": 11,
"value": 2
},
{
"key": 12,
"value": 3
},
{
"key": 13,
"value": 3
},
{
"key": 14,
"value": 3
},
{
"key": 15,
"value": 3
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 1
},
{
"key": 3,
"value": 1
},
{
"key": 4,
"value": 2
},
{
"key": 5,
"value": 2
},
{
"key": 6,
"value": 2
},
{
"key": 7,
"value": 2
},
{
"key": 8,
"value": 3
},
{
"key": 9,
"value": 3
},
{
"key": 10,
"value": 3
},
{
"key": 11,
"value": 3
},
{
"key": 12,
"value": 4
},
{
"key": 13,
"value": 4
},
{
"key": 14,
"value": 4
},
{
"key": 15,
"value": 4
},
{
"key": 16,
"value": 5
},
{
"key": 17,
"value": 5
},
{
"key": 18,
"value": 5
},
{
"key": 19,
"value": 5
},
{
"key": 20,
"value": 6
},
{
"key": 21,
"value": 6
},
{
"key": 22,
"value": 6
},
{
"key": 23,
"value": 6
},
{
"key": 24,
"value": 7
},
{
"key": 25,
"value": 7
},
{
"key": 26,
"value": 7
},
{
"key": 27,
"value": 7
},
{
"key": 28,
"value": 8
},
{
"key": 29,
"value": 8
},
{
"key": 30,
"value": 8
},
{
"key": 31,
"value": 8
}
]
}
]
},
{
"func": "func_gx",
"instances": [
{
"width": 4,
"height": 4,
"latency": 17,
"energy": 10,
"inputAddrTimePatterns": [
{},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 2
},
{
"key": 3,
"value": 3
},
{
"key": 4,
"value": 4
},
{
"key": 5,
"value": 5
},
{
"key": 6,
"value": 6
},
{
"key": 7,
"value": 7
},
{
"key": 8,
"value": 8
},
{
"key": 9,
"value": 9
},
{
"key": 10,
"value": 10
},
{
"key": 11,
"value": 11
},
{
"key": 12,
"value": 12
},
{
"key": 13,
"value": 13
},
{
"key": 14,
"value": 14
},
{
"key": 15,
"value": 15
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 2
},
{
"key": 2,
"value": 3
},
{
"key": 3,
"value": 4
},
{
"key": 4,
"value": 5
},
{
"key": 5,
"value": 6
},
{
"key": 6,
"value": 7
},
{
"key": 7,
"value": 8
},
{
"key": 8,
"value": 9
},
{
"key": 9,
"value": 10
},
{
"key": 10,
"value": 11
},
{
"key": 11,
"value": 12
},
{
"key": 12,
"value": 13
},
{
"key": 13,
"value": 14
},
{
"key": 14,
"value": 15
},
{
"key": 15,
"value": 16
}
]
}
]
},
{
"func": "func_gy",
"instances": [
{
"width": 4,
"height": 4,
"latency": 17,
"energy": 10,
"inputAddrTimePatterns": [
{},
{
"key": 1,
"value": 1
},
{
"key": 2,
"value": 2
},
{
"key": 3,
"value": 3
},
{
"key": 4,
"value": 4
},
{
"key": 5,
"value": 5
},
{
"key": 6,
"value": 6
},
{
"key": 7,
"value": 7
},
{
"key": 8,
"value": 8
},
{
"key": 9,
"value": 9
},
{
"key": 10,
"value": 10
},
{
"key": 11,
"value": 11
},
{
"key": 12,
"value": 12
},
{
"key": 13,
"value": 13
},
{
"key": 14,
"value": 14
},
{
"key": 15,
"value": 15
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 2
},
{
"key": 2,
"value": 3
},
{
"key": 3,
"value": 4
},
{
"key": 4,
"value": 5
},
{
"key": 5,
"value": 6
},
{
"key": 6,
"value": 7
},
{
"key": 7,
"value": 8
},
{
"key": 8,
"value": 9
},
{
"key": 9,
"value": 10
},
{
"key": 10,
"value": 11
},
{
"key": 11,
"value": 12
},
{
"key": 12,
"value": 13
},
{
"key": 13,
"value": 14
},
{
"key": 14,
"value": 15
},
{
"key": 15,
"value": 16
}
]
}
]
},
{
"func": "func_combine",
"instances": [
{
"width": 2,
"height": 2,
"latency": 17,
"energy": 2,
"inputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 2
},
{
"key": 2,
"value": 3
},
{
"key": 3,
"value": 4
},
{
"key": 4,
"value": 5
},
{
"key": 5,
"value": 6
},
{
"key": 6,
"value": 7
},
{
"key": 7,
"value": 8
},
{
"key": 8,
"value": 9
},
{
"key": 9,
"value": 10
},
{
"key": 10,
"value": 11
},
{
"key": 11,
"value": 12
},
{
"key": 12,
"value": 13
},
{
"key": 13,
"value": 14
},
{
"key": 14,
"value": 15
},
{
"key": 15,
"value": 16
},
{
"key": 16
},
{
"key": 17,
"value": 1
},
{
"key": 18,
"value": 2
},
{
"key": 19,
"value": 3
},
{
"key": 20,
"value": 4
},
{
"key": 21,
"value": 5
},
{
"key": 22,
"value": 6
},
{
"key": 23,
"value": 7
},
{
"key": 24,
"value": 8
},
{
"key": 25,
"value": 9
},
{
"key": 26,
"value": 10
},
{
"key": 27,
"value": 11
},
{
"key": 28,
"value": 12
},
{
"key": 29,
"value": 13
},
{
"key": 30,
"value": 14
},
{
"key": 31,
"value": 15
}
],
"outputAddrTimePatterns": [
{
"value": 1
},
{
"key": 1,
"value": 2
},
{
"key": 2,
"value": 3
},
{
"key": 3,
"value": 4
},
{
"key": 4,
"value": 5
},
{
"key": 5,
"value": 6
},
{
"key": 6,
"value": 7
},
{
"key": 7,
"value": 8
},
{
"key": 8,
"value": 9
},
{
"key": 9,
"value": 10
},
{
"key": 10,
"value": 11
},
{
"key": 11,
"value": 12
},
{
"key": 12,
"value": 13
},
{
"key": 13,
"value": 14
},
{
"key": 14,
"value": 15
},
{
"key": 15,
"value": 16
}
]
}
]
},
{
"func": "func_store",
"instances": [
{
"width": 4,
"height": 2,
"latency": 5,
"energy": 1,
"inputAddrTimePatterns": [
{},
{
"key": 1
},
{
"key": 2
},
{
"key": 3
},
{
"key": 4,
"value": 1
},
{
"key": 5,
"value": 1
},
{
"key": 6,
"value": 1
},
{
"key": 7,
"value": 1
},
{
"key": 8,
"value": 2
},
{
"key": 9,
"value": 2
},
{
"key": 10,
"value": 2
},
{
"key": 11,
"value": 2
},
{
"key": 12,
"value": 3
},
{
"key": 13,
"value": 3
},
{
"key": 14,
"value": 3
},
{
"key": 15,
"value": 3
}
]
}
]
}
]
}
Hyper Parameters
The hyper parameters are the parameters that are used to tune the DSE tools. The hyper parameters are represented in the form of a JSON file. See the following example. The hyper parameter file is evolving and the parameters may change in the future.
{
"bindWArea": 1,
"bindWEnergy": 1,
"bindWLatency": 1,
"bindRelaxationFactor": 1.1,
"placeRelaxationFactor": 1.0,
"placeReservedRoutingSize": 1
}
Global Constraints
The global constraints are the constraints that are used to limit the search space of the DSE tools. The global constraints are represented in the form of a JSON file. See the following example.
{
"maxWidth": 100,
"maxHeight": 100,
"maxLatency": 100,
"maxPeriod": 70,
"maxEnergy": 100
}