logo

Manifold

design everything the way you design software: with an elegant formal language, reusable modules, and automated testing.

General Language

Manifold is very powerful and very general. We currently support digital hardware design and microfluidics design but the language itself could be generalized to many other fields of design.

Reusable Modules

Solve hard problems once and encapsulate your solution in a module. Share modules between projects, teams, and organizations.

Well-Engineered Abstractions

Build complex systems confidently and easily using well engineered abstractions. Complex implementation details are encapsulated and hidden away when they are not relevant.

Automated Testing and Formal Verification

Develop systems quickly and confidently with automated testing. Easily hook into tools that allow for formal verification of designs.

High-Level Langugae Features

Use powerful features typically only found in high-level programming languages such as first class functions, inferred types, and "dynamic width" arrays

Constraint Solving

It is possible to pass a design into a constraint solver, to automatically calculate the optimal parameters for a design rather then specifying them manually.

* = import Manifold.core * = import Manifold.digital Type TrafficLight = ( Boolean green = false, Boolean yellow = false, Boolean red = false ) GREEN_SECONDS = 10 YELLOW_SECONDS = 3 TOTAL_SECONDS = 2 * (GREEN_SECONDS + YELLOW_SECONDS) seconds = Manifold.Digital.count(hz: 1, mod: TOTAL_SECONDS) Manifold.Digital.if( (seconds < GREEN_SECONDS, Void -> Void { north_light = south_light = (green: true) east_light = west_light = (red: true) }), (seconds < GREEN_SECONDS + YELLOW_SECONDS, Void -> Void { north_light = south_light = (yellow: true) east_light = west_light = (red: true) }), (seconds < 2 * GREEN_SECONDS + YELLOW_SECONDS, Void -> Void { north_light = south_light = (red: true) east_light = west_light = (green: true) }), (true, Void -> Void { north_light = south_light = (red: true) east_light = west_light = (yellow: true) }) ) Manifold.Digital.led[0..3] = TrafficLight north_light Manifold.Digital.led[6..9] = TrafficLight west_light Manifold.Digital.led[3..6] = TrafficLight south_light Manifold.Digital.led[9..12] = TrafficLight east_light

Keep Reading