-
Notifications
You must be signed in to change notification settings - Fork 0
/
intro.tex
29 lines (25 loc) · 3.22 KB
/
intro.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
\section{Introduction}
The field of microfluidic device engineering currently suffers from a lack of accessible tools for circuit design and analysis.
Engineers currently need to develop systems of equations that represent their circuits by hand \cite{Thorsen02science}.
One must then manually solve these equations to determine the system's viability. This is often limiting because computation time for simulating each component is significant using techniques such as finite element analysis, which limits the scalability of designs. Since there are often complex components involved in a microfluidic circuit, better computer aided design tools are required to simulate and verify the systemic behavior of connected components to allow rapid prototyping of designs.
With Manifold, engineers can describe their complete microfluidic systems in a functional programming style.
Manifold converts this system code into inputs for third-party solver tools, which can then perform an analysis of the system described in the code.
The Manifold framework was first introduced by Berzish et. al in \cite{Berzish16cascon}.
This work follows up on the recent features that have been added to the toolchain.
The Manifold toolchain begins with a high-level hardware description language.
The engineer writes code in the Manifold frontend language to describe the desired system.
The frontend language is domain-agnostic and does not make any domain-related assumptions.
When describing a system in the frontend language, an engineer may choose to omit certain parameters of their design to have them inferred by Manifold later on in the toolchain.
The Manifold frontend compiler processes the frontend code to create an intermediate schematic.
Like the frontend language, the schematic format is generic by design, expressing all systems in terms of nodes, ports, connections, constraints, and attributes.
When needed, domain-specific parameters can be specified in the frontend language and will be written into the schematic as object attributes.
All domain-specific processing occurs in a Manifold backend compiler, which takes a schematic as input and produces domain-specific output.
Two backend compilers currently exist for Manifold: a digital circuit backend that generates VHDL code, and a microfluidics backend that generates SMT2 and Modelica code.
All of our recent work has been on the microfluidics backend.
The goal of the microfluidics backend is to generate code for multiple third-party solver tools.
Code generation in the SMT2 format and integration with the dReal satisfiability solver \cite{Gao13dReal} have long been supported features.
Code generation in Modelica for use by the MapleSim simulator is a recently-added feature.
Manifold's goal is to automate much of the design process, in particular reducing the need for manual mathematical modeling and guess-and-check work.
Instead of writing out systems equations by hand, Manifold allows engineers to write high-level system descriptions using the frontend language.
The Manifold microfluidics toolchain automatically generates relevant system equations and allows engineers to easily leverage third-party analysis tools.
The aim is to allow engineers to verify their designs quickly so that they may iterate more efficiently.