design everything the way you design software: with an elegant formal language, reusable modules, and automated testing.
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.
Solve hard problems once and encapsulate your solution in a module. Share modules between projects, teams, and organizations.
Build complex systems confidently and easily using well engineered abstractions. Complex implementation details are encapsulated and hidden away when they are not relevant.
Develop systems quickly and confidently with automated testing. Easily hook into tools that allow for formal verification of designs.
Use powerful features typically only found in high-level programming languages such as first class functions, inferred types, and "dynamic width" arrays
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