Architecture Description
Main Concepts
Resources
Resources are the basic building blocks for implement vector processing. Typical resources include register files, SRAMs, IOs, and DPUs. Each resource can occupy a number of slots. The interconnection interface attached on each resource is standardized. They can be either word level or bulk level. Word level interface is used for intra-cell communication, while bulk level interface is used for inter-cell communication.
A slot is the basic "place-holder" for a resource. It can be either occupied or unoccupied. Each slot contains a instruction decoder, a function implementation space, a word-level input port, a word-level output port, a bulk-level input port and a bulk-level output port.
A resource can occupy one or more continuous slots. The number of slots occupied by a resource is called the resource size. The resource size is determined by several factors, including the number of input/output ports, the complexity of the function logic, etc.
Controllers
A controller is the building block that manages the resources in a cell. It issues instructions into the slots of the resources. The controller can have many flavors, varying its instruction memory size, maximum slot number, RACCU register width, etc.
Cells
Each cell consists of a controller and one or more resources. The controller manages the resources in the cell. The resources can be either homogeneous or heterogeneous. Only bulk-level interface is visible between cells.
Fabric
The fabric is the collection of cells. The cells are connected together using bulk-level interface. The fabric can be either homogeneous or heterogeneous. The cells in a fabric is arranged in a 2-D mesh style.
JSON Schema
Validation
You can validate a architecture description json file using this schema on Json Schema Validator.
The architecture description file uses json format and validated by the following json schema:
{
"type": "object",
"properties": {
"platform": { "type": "string" },
"resources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"size": { "type": "integer" },
"word_input_port": { "type": "integer" },
"word_output_port": { "type": "integer" },
"bulk_input_port": { "type": "integer" },
"bulk_output_port": { "type": "integer" }
},
"required": [
"name",
"size",
"word_input_port",
"word_output_port",
"bulk_input_port",
"bulk_output_port"
]
},
"uniqueItems": true
},
"controllers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"size": { "type": "integer" },
"iram_size": { "type": "integer" },
"reg_bitwidth": { "type": "integer" }
},
"required": ["name", "size", "iram_size", "reg_bitwidth"]
},
"uniqueItems": true
},
"cells": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"controller": { "type": "string" },
"resource_list": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "controller", "resource_list"]
},
"uniqueItems": true
},
"fabric": {
"type": "object",
"properties": {
"width": { "type": "integer" },
"height": { "type": "integer" },
"cell_list": {
"type": "array",
"items": {
"type": "object",
"properties": {
"coordinates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"row": { "type": "integer" },
"col": { "type": "integer" }
},
"required": ["row", "col"]
},
"uniqueItems": true
},
"cell": { "type": "string" }
},
"required": ["coordinates", "cell"]
},
"uniqueItems": true
}
}
}
},
"required": ["platform", "resources", "controllers", "cells", "fabric"]
}