Skip to content

Commit

Permalink
refactor: remove empty folders, start docs improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
glencoe committed Aug 15, 2023
1 parent 6858537 commit 28a9a2d
Show file tree
Hide file tree
Showing 34 changed files with 47 additions and 60 deletions.
39 changes: 13 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,19 @@ npm install --save-dev @commitlint/{config-conventional,cli}
sudo apt install ghdl
```

### Project Structure

All packages and modules fall into one of three main categories and can thus be found in the corresponding package

- `elasticai.creator.nn`: contains trainable modules that can be translated to vhdl to build a hardware accelerator
- `elasticai.creator.base_modules`: contains shared functionality and data structures, that we use to create our neural network software modules
- `elasticai.creator.vhdl`: contains shared code that we use to represent and generate vhdl files

#### Note
I think actually we have four categories: A) generate vhdl, B) define pytorch/mlframework modules, C) generate files and fill templates, D) combine the three to create translatable modules

Below we go into more detail on each of these packages


### Conventional Commit Rules

Expand All @@ -129,32 +142,6 @@ We use conventional commits (see [here](https://www.conventionalcommits.org/en/v
| perf | |


### Adding new translation targets

New translation targets should be located in their own folder, e.g. vhdl for translating from any language to vhdl.
Workflow for adding a new translation:
1. Obtain a structure, such as a list in a sequential case, which will describe the connection between every component.
2. Identify and label relevant structures, in the base cases it can be simply separate layers.
3. Map each structure to its function which will convert it.
4. Do such conversions.
5. Recreate connections based on 1.

Each sub-step should be separable and it helps for testing if common functions are wrapped around an adapter.


### Syntax Checking

[GHDL](https://ghdl.github.io/ghdl/) supports a [syntax checking](https://umarcor.github.io/ghdl/using/InvokingGHDL.html#check-syntax-s) which checks the syntax of a vhdl file without generating code.
The command is as follows:
```bash
ghdl -s path/to/vhdl/file
```
For checking all vhdl files together in our project we can just run:
```bash
ghdl -s elasticai/creator/**/*.vhd
```


### Tests

Our implementation is tested with unit and integration.
Expand Down
4 changes: 2 additions & 2 deletions elasticai/creator/nn/conv1d/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.designs.rom import Rom
from elasticai.creator.vhdl.savable import Path

Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/conv1d/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPConv1d as FPConv1dDesign
Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/hard_sigmoid/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.design.design import Design, Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/hard_sigmoid/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPHardSigmoid as FPHardSigmoidDesign
Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/hard_tanh/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.design.design import Design, Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/hard_tanh/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPHardTanh as FPHardTanhDesign
Expand Down
4 changes: 2 additions & 2 deletions elasticai/creator/nn/identity/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/identity/layer.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from elasticai.creator.base_modules.identity import Identity
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import BufferedIdentity as IdentityDesign
Expand Down
4 changes: 2 additions & 2 deletions elasticai/creator/nn/linear/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.designs.rom import Rom
from elasticai.creator.vhdl.savable import Path

Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/linear/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPLinear as FPLinearDesign
Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/precomputed/fp_precomputed_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.designs.precomputed_scalar_function import (
PrecomputedScalarFunction,
)
Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/relu/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.design.design import Design, Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/relu/layer.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from elasticai.creator.base_modules.relu import ReLU
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPReLU as FPReLUDesign
Expand Down
4 changes: 2 additions & 2 deletions elasticai/creator/nn/sequential/design.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/nn/sequential/layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import torch

from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import Sequential as _SequentialDesign
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from elasticai.creator.vhdl.code_generation.vhdl_ports import (
template_string_for_port_definition,
)
from elasticai.creator.vhdl.design_base import std_signals as _signals
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design import std_signals as _signals
from elasticai.creator.vhdl.design.ports import Port


def create_port(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
)

"""
We want to programmatically use designs that are either hand-written or based on hand-written templates
these designs need to adhere to a well defined protocol. As a hardware designer you specify your protocol
We want to programmatically use shared_designs that are either hand-written or based on hand-written templates
these shared_designs need to adhere to a well defined protocol. As a hardware designer you specify your protocol
and the expected version of the elasticai.creator in a file called `design_meta.toml` that lives in the
same folder as your `layer.py` that defines how the hdl code for the hardware design and the behaviour of
the corresponding neural network layer in software.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from collections.abc import Sequence

from elasticai.creator.vhdl.design_base.signal import Signal
from elasticai.creator.vhdl.design.signal import Signal


def _sorted_dict(items: dict[str, str]) -> dict[str, str]:
Expand Down
4 changes: 2 additions & 2 deletions elasticai/creator/vhdl/code_generation/vhdl_ports.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from collections.abc import Callable, Sequence
from itertools import chain

from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design_base.signal import Signal
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.design.signal import Signal


def signal_string(name: str, direction: str, width: int | str) -> str:
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod

from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.savable import Path, Savable


Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections.abc import Iterator
from itertools import chain

from elasticai.creator.vhdl.design_base.signal import Signal
from elasticai.creator.vhdl.design.signal import Signal


class Port:
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from elasticai.creator.vhdl.design_base.signal import Signal
from elasticai.creator.vhdl.design.signal import Signal


def x(width: int) -> Signal:
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.savable import Path


Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/vhdl/translatable.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod

from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design.design import Design


class Translatable(ABC):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

from elasticai.creator.nn.sequential.design import Sequential
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.design.design import Design
from elasticai.creator.vhdl.design.ports import Port
from elasticai.creator.vhdl.savable import Path


Expand Down

0 comments on commit 28a9a2d

Please sign in to comment.