programmable microfluidics bill thies computer science and artificial intelligence laboratory...
TRANSCRIPT
![Page 1: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/1.jpg)
Programmable Microfluidics
Bill Thies
Computer Science and Artificial Intelligence Laboratory
Massachusetts Institute of Technology
UC Berkeley – October 25, 2007
![Page 2: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/2.jpg)
Acknowledgements
Prof. Todd Thorsen
J.P. Urbanski
David Craig
MIT HatsopoulosMicrofluids Laboratory
Prof. Jeremy Gunawardena
Natalie Andrew
Prof. Mark Johnson
David Potter
Colorado Center for Reproductive Medicine
Prof. Saman Amarasinghe
Nada Amin
MIT Computer Science and Artificial Intelligence Laboratory
Harvard Medical School
![Page 3: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/3.jpg)
Microfluidic Chips• Idea: a whole biology lab on a single chip
– Input/output– Sensors: pH, glucose,
temperature, etc.– Actuators: mixing, PCR,
electrophoresis, cell lysis, etc.
• Benefits:– Small sample volumes– High throughput– Geometrical manipulation
• Applications:– Biochemistry - Cell biology– Biological computing
[Farfel/Stefanovic][Grover/Mathies]
[Gehani/Reif][Livstone/Landweber][van Noort] [McCaskill]
[Somei/Kaneda/Fujii/Murata]
1 mm 10x real-time
![Page 4: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/4.jpg)
Moore’s Law of Microfluidics:Valve Density Doubles Every 4 Months
Source: Fluidigm Corporation (http://www.fluidigm.com/images/mlaw_lg.jpg)
![Page 5: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/5.jpg)
Moore’s Law of Microfluidics:Valve Density Doubles Every 4 Months
Source: Fluidigm Corporation (http://www.fluidigm.com/didIFC.htm)
![Page 6: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/6.jpg)
Current Practice:Expose Gate-Level Details to Users
• Manually map experiment to the valves of the device– Using Labview or custom C interface– Given a new device, start over and do mapping again
![Page 7: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/7.jpg)
Our Approach:“Write Once, Run Anywhere”
• Example: Gradient generation
• Hidden from programmer:– Location of fluids– Details of mixing, I/O– Logic of valve control– Timing of chip operations 450 Valve Operations
Fluid yellow = input (0);
Fluid blue = input(1);for (int i=0; i<=4; i++) { mix(yellow, 1-i/4, blue, i/4);}
![Page 8: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/8.jpg)
450 Valve Operations
• Example: Gradient generation
• Hidden from programmer:– Location of fluids– Details of mixing, I/O– Logic of valve control– Timing of chip operations
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
Fluid yellow = input (0);
Fluid blue = input(1);for (int i=0; i<=4; i++) { mix(yellow, 1-i/4, blue, i/4);}
Our Approach:“Write Once, Run Anywhere”
![Page 9: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/9.jpg)
Fluidic Abstraction Layers
Fluidic Instruction Set Architecture (ISA) - primitives for I/O, storage, transport, mixing
Protocol Description Language - readable code with high-level mixing ops
Fluidic Hardware Primitives - valves, multiplexers, mixers, latches
chip 1 chip 2 chip 3
C
x86
Pentium III,Pentium IV
Silicon Analog
transistors, registers, …
![Page 10: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/10.jpg)
Fluidic Abstraction Layers
Fluidic Instruction Set Architecture (ISA) - primitives for I/O, storage, transport, mixing
Protocol Description Language - readable code with high-level mixing ops
chip 1 chip 2 chip 3
Fluidic Hardware Primitives - valves, multiplexers, mixers, latches
• Benefits:– Division of labor– Portability– Scalability– Expressivity
![Page 11: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/11.jpg)
Fluidic Abstraction Layers
Fluidic Instruction Set Architecture (ISA) - primitives for I/O, storage, transport, mixing
Protocol Description Language - readable code with high-level mixing ops
chip 1 chip 2 chip 3
Fluidic Hardware Primitives - valves, multiplexers, mixers, latches
• Benefits:– Division of labor– Portability– Scalability– Expressivity
![Page 12: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/12.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
0. Start with mask of channels
![Page 13: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/13.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
1. Deposit pattern on silicon wafer
![Page 14: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/14.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
2. Pour PDMS over mold - polydimexylsiloxane: “soft lithography”
Thick layer (poured)
Thin layer (spin-coated)
![Page 15: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/15.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
3. Bake at 80° C (primary cure), then release PDMS from mold
![Page 16: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/16.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
4a. Punch hole in control channel4b. Attach flow layer to glass slide
![Page 17: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/17.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
5. Align flow layer over control layer
![Page 18: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/18.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
6. Bake at 80° C (secondary cure)
![Page 19: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/19.jpg)
Primitive 1: A Valve (Quake et al.)
Control Layer
Flow Layer
pressure
actuator
7. When pressure is high, controlchannel pinches flow channel toform a valve
![Page 20: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/20.jpg)
Primitive 2: A Multiplexer (Thorsen et al.)
Bit 2 Bit 1 Bit 00 1 0 1 0 1
Input
Output 0
Output 7
Output 6
Output 5
Output 4
Output 3
Output 2
Output 1
flow layercontrol layer
![Page 21: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/21.jpg)
Primitive 2: A Multiplexer (Thorsen et al.)
Bit 2 Bit 1 Bit 00 1 0 1 0 1
Input
Output 0
Output 7
Output 6
Output 5
Output 4
Output 3
Output 2
Output 1
Example: select 3 = 011
flow layercontrol layer
![Page 22: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/22.jpg)
Primitive 2: A Multiplexer (Thorsen et al.)
Bit 2 Bit 1 Bit 00 1 0 1 0 1
Input
Output 0
Output 7
Output 6
Output 5
Output 4
Output 3
Output 2
Output 1
Example: select 3 = 011
flow layercontrol layer
![Page 23: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/23.jpg)
Primitive 2: A Multiplexer (Thorsen et al.)
Bit 2 Bit 1 Bit 00 1 0 1 0 1
Input
Output 0
Output 7
Output 6
Output 5
Output 4
Output 3
Output 2
Output 1
Example: select 3 = 011
flow layercontrol layer
![Page 24: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/24.jpg)
Primitive 3: A Mixer (Quake et al.)
1. Load sample on top
![Page 25: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/25.jpg)
Primitive 3: A Mixer (Quake et al.)
1. Load sample on top
2. Load sample on bottom
![Page 26: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/26.jpg)
Primitive 3: A Mixer (Quake et al.)
1. Load sample on top
2. Load sample on bottom
3. Peristaltic pumping
Rotary Mixing
![Page 27: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/27.jpg)
Primitive 4: A Latch (Our contribution)
• Purpose: align sample with specific location on device– Examples: end of storage cell, end of mixer, middle of sensor
• Latches are implemented as a partially closed valve– Background flow passes freely– Aqueous samples are caught
Sample Latch
![Page 28: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/28.jpg)
Primitive 5: Cell Trap• Several methods for confining cells in microfluidic chips
– U-shaped weirs - C-shaped rings / microseives
– Holographic optical traps - Dialectrophoresis
• In our chips: U-Shaped Microseives in PDMS Chambers
Source: Wang, Kim, Marquez, and Thorsen, Lab on a Chip 2007
![Page 29: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/29.jpg)
Primitive 6: Imaging and Detection• As PDMS chips are translucent,
contents can be imaged directly– Fluorescence, color, opacity, etc.
• Feedback can be used todrive the experiment
![Page 30: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/30.jpg)
Fluidic Abstraction Layers
Fluidic Instruction Set Architecture (ISA) - primitives for I/O, storage, transport, mixing
Protocol Description Language - readable code with high-level mixing ops
Fluidic Hardware Primitives - valves, multiplexers, mixers, latches
chip 1 chip 2 chip 3
![Page 31: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/31.jpg)
Toward “General Purpose” Microfluidic Chips
Inpu
ts
Out
puts
FluidicStorage(RAM)
In
Out
MixingChambers
Inpu
ts
Out
puts
FluidicStorage(RAM)
In
Out
MixingChambers
Sensorsand
Actuators
Inpu
ts
Out
puts
FluidicStorage(RAM)
In
Out
MixingChambers
Inpu
ts
Out
puts
FluidicStorage(RAM)
In
Out
MixingChambers
Sensorsand
Actuators
![Page 32: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/32.jpg)
Abstraction 1: Digital Architecture• Recent techniques can control independent samples
– Droplet-based samples– Continuous-flow samples– Microfluidic latches
• In abstract machine, allsamples have unit volume– Input/output a sample– Store a sample– Operate on a sample
• Challenge for a digital architecture: fluid loss– No chip is perfect – will lose some volume over time– Causes: imprecise valves, adhesion to channels, evaporation, ...– How to maintain digital abstraction?
[Fair et al.]
[Our contribution]
[Our contribution]
Inputs
Outp
uts
FluidicStorage(RAM)
In
Out
MixingChambers
Inputs
Outp
uts
FluidicStorage(RAM)
In
Out
MixingChambers
Sensorsand
Actuators
Inputs
Outp
uts
FluidicStorage(RAM)
In
Out
MixingChambers
Inputs
Outp
uts
FluidicStorage(RAM)
In
Out
MixingChambers
Sensorsand
Actuators
![Page 33: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/33.jpg)
Maintaining a Digital Abstraction
Instruction SetArchitecture (ISA)
High-LevelLanguage
Hardware
Electronics Microfluidics
Replenish charge(GAIN)
Loss of charge
RandomizedGates [Palem]
Soft errorHandling?
Replenish fluids? - Maybe (e.g., with water) - But may affect chemistry
Loss of fluids
? ? ?
? ? ?
Expose loss in ISA - Compiler deals with it
Expose loss in language- User deals with it
![Page 34: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/34.jpg)
Abstraction 2: Mix Instruction• Microfluidic chips have various mixing technologies
– Electrokinetic mixing– Droplet mixing– Rotary mixing
• Common attributes:– Ability to mix two samples in equal proportions, store result
• Fluidic ISA: mix (int src1, int src2, int dst)
– Ex: mix(1, 2, 3)
– To allow for lossy transport, only 1 unit of mixture retained
[Quake et al.]
[Fair et al.]
[Levitan et al.]
Storage Cells1234
Mixer
![Page 35: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/35.jpg)
Gradient Generation in Fluidic ISA
![Page 36: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/36.jpg)
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
Gradient Generation in Fluidic ISA
input(0, 0);input(1, 1);input(0, 2);mix(1, 2, 3);input(0, 2);mix(2, 3, 1);input(1, 3);input(0, 4);mix(3, 4, 2);input(1, 3);input(0, 4);mix(3, 4, 5);input(1, 4);mix(4, 5, 3);mix(0, 4);
Direct Control- 450 valve actuations- only works on 1 chip
Fluidic ISA- 15 instructions- portable across chips
abstraction
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
setValve(0, HIGH); setValve(1, HIGH);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, LOW);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, LOW); setValve(11, HIGH);setValve(12, LOW); setValve(13, HIGH);setValve(14, LOW); setValve(15, HIGH);setValve(16, LOW); setValve(17, LOW);setValve(18, LOW); setValve(19, LOW);wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);
wait(2000);setValve(14, HIGH); setValve(2, LOW);wait(1000);setValve(4, HIGH); setValve(12, LOW);setValve(16, HIGH); setValve(18, HIGH);setValve(19, LOW);wait(2000);setValve(0, LOW); setValve(1, LOW);setValve(2, LOW); setValve(3, HIGH);setValve(4, LOW); setValve(5, HIGH);setValve(6, HIGH); setValve(7, LOW);setValve(8, LOW); setValve(9, HIGH);setValve(10, HIGH); setValve(11, LOW);setValve(12, LOW); setValve(13, LOW);setValve(14, LOW); setValve(15, HIGH);setValve(16, HIGH); setValve(17, LOW);setValve(18, HIGH); setValve(19, LOW);
![Page 37: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/37.jpg)
Implementation: Oil-Driven Chip
Inputs Storage Cells Background Phase Wash Phase Mixing
Chip 1 2 8 Oil — Rotary
![Page 38: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/38.jpg)
Implementation: Oil-Driven Chip
Inputs Storage Cells Background Phase Wash Phase Mixing
Chip 1 2 8 Oil — Rotary
mix (S1, S2, D) {
1. Load S1
2. Load S2
3. Rotary mixing
4. Store into D
}
50x real-time
![Page 39: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/39.jpg)
Implementation 2: Air-Driven Chip
Inputs Storage Cells Background Phase Wash Phase Mixing
Chip 1 2 8 Oil — Rotary
Chip 2 4 32 Air Water In channels
![Page 40: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/40.jpg)
Implementation 2: Air-Driven Chip
mix (S1, S2, D) {
1. Load S1
2. Load S2
3. Mix / Store into D
4. Wash S1
5. Wash S2
}
Inputs Storage Cells Background Phase Wash Phase Mixing
Chip 1 2 8 Oil — Rotary
Chip 2 4 32 Air Water In channels
50x real-time
![Page 41: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/41.jpg)
Fluidic Abstraction Layers
Fluidic Instruction Set Architecture (ISA) - primitives for I/O, storage, transport, mixing
Protocol Description Language - readable code with high-level mixing ops
Fluidic Hardware Primitives - valves, multiplexers, mixers, latches
chip 1 chip 2 chip 3
![Page 42: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/42.jpg)
Fluid[] out = new Fluid[8];Fluid yellow, blue, green;out[0] = input(0);yellow = input(0);blue = input(1);green = mix(yellow, blue);yellow = input(0);out[1] = mix(yellow, green);yellow = input(0);blue = input(1);out[2] = mix(yellow, blue);yellow = input(0);blue = input(1);green = mix(yellow, blue);blue = input(1);out[3] = mix(blue, green);out[4] = input(1);
Abstraction 1: Managing Fluid Storage
• Programmer uses location-independent Fluid variables– Runtime system assigns & tracks location of each Fluid– Comparable to automatic memory management (e.g., Java)
FluidicISA
1. StorageManagement
input(0, 0);input(1, 1);input(0, 2);mix(1, 2, 3);input(0, 2);mix(2, 3, 1);input(1, 3);input(0, 4);mix(3, 4, 2);input(1, 3);input(0, 4);mix(3, 4, 5);input(1, 4);mix(4, 5, 3);mix(0, 4);
![Page 43: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/43.jpg)
Fluid[] out = new Fluid[8];Fluid yellow, blue, green;out[0] = input(0);yellow = input(0);blue = input(1);green = mix(yellow, blue);yellow = input(0);out[1] = mix(yellow, green);yellow = input(0);blue = input(1);out[2] = mix(yellow, blue);yellow = input(0);blue = input(1);green = mix(yellow, blue);blue = input(1);out[3] = mix(blue, green);out[4] = input(1);
![Page 44: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/44.jpg)
Fluid[] out = new Fluid[8];Fluid yellow = input(0);Fluid blue = input(1);Fluid green = mix(yellow, blue);
out[0] = yellow;out[1] = mix(yellow, green);out[2] = green;out[3] = mix(blue, green);out[4] = blue;
Fluid[] out = new Fluid[8];Fluid yellow, blue, green;out[0] = input(0);yellow = input(0);blue = input(1);green = mix(yellow, blue);yellow = input(0);out[1] = mix(yellow, green);yellow = input(0);blue = input(1);out[2] = mix(yellow, blue);yellow = input(0);blue = input(1);green = mix(yellow, blue);blue = input(1);out[3] = mix(blue, green);out[4] = input(1);
Abstraction 2: Fluid Re-Generation
2. Fluid Re-Generation
• Programmer may use a Fluid variable multiple times– Each time, a physical Fluid is consumed on-chip– Runtime system re-generates Fluids from computation history
![Page 45: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/45.jpg)
Custom Re-Generation• Some species cannot be regenerated by repeating history
– e.g., if selective mutagenesis has evolved unique sequence
• Users can extend Fluid class, specify how to regenerate– e.g., run PCR to amplify sequence of interest
class DNASample extends Fluid {
// Return array of fluids that are equivalent to this fluid Fluid[] regenerate() { Fluid amplified = performPCR(this, cycles, primer1, primer2, …); Fluid[] diluted = dilute(amplified, Math.pow(2, cycles)); return diluted; }
// Return minimum quantity of this fluid needed to generate others int minQuantity() { return 1; }}
![Page 46: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/46.jpg)
Unique Fluids Prohibit Re-Generation• Some Fluids may be unique, with no way to amplify
– E.g., products of cell lysis
• Users can express this constraint using a UniqueFluid:
• Can compiler verify that unique fluids used only once?– Unique (linear) types is a rich research area in prog. languages
[Wadler] [Hogg] [Baker] [Minsky] [Boyland] [Fahndrich & DeLine] – But solutions often require annotations & do not handle arrays– Practical approach: verify in simple cases, warn about others
Opportunity for programming language research
class UniqueFluid extends Fluid { Fluid[] regenerate() { throw new EmptyFluidException(); }}
UniqueFluid f = lysisProduct();UniqueFluid[] diluted = dilute(f);for (int i=0; i<diluted.length; i++) { analyze(diluted[i]);}
![Page 47: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/47.jpg)
Fluid[] out = new Fluid[8];Fluid yellow = input(0);Fluid blue = input(1);Fluid green = mix(yellow, blue);
out[0] = yellow;out[1] = mix(yellow, green);out[2] = green;out[3] = mix(blue, green);out[4] = blue;
2. Fluid Re-Generation
![Page 48: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/48.jpg)
Fluid[] out = new Fluid[8];Fluid yellow = input(0);Fluid blue = input(1);Fluid green = mix(yellow, blue);
out[0] = yellow;out[1] = mix(yellow, green);out[2] = green;out[3] = mix(blue, green);out[4] = blue;
2. Fluid Re-Generation
![Page 49: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/49.jpg)
Abstraction 3: Arbitrary Mixing
• Allows mixing fluids in any proportion, not just 50/50– Fluid mix (Fluid F1, float p1, Fluid f2, float F2)
Returns Fluid that is p1 parts F1 and p2 parts F2
– Runtime system translates to 50/50 mixes in Fluidic ISA
– Note: some mixtures only reachable within error tolerance
Fluid[] out = new Fluid[8];Fluid yellow = input (0);Fluid blue = input (1);
out[0] = yellow;out[1] = mix(yellow, 3/4, blue, 1/4);out[2] = mix(yellow, 1/2, blue, 1/2);out[3] = mix(yellow, 1/4, blue, 3/4);out[4] = blue;
3. Arbitrary Mixing
Fluid[] out = new Fluid[8];Fluid yellow = input(0);Fluid blue = input(1);Fluid green = mix(yellow, blue);
out[0] = yellow;out[1] = mix(yellow, green);out[2] = green;out[3] = mix(blue, green);out[4] = blue;
2. Fluid Re-Generation
![Page 50: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/50.jpg)
Abstraction 3: Arbitrary Mixing
• Allows mixing fluids in any proportion, not just 50/50– Fluid mix (Fluid F1, float p1, Fluid f2, float F2)
Returns Fluid that is p1 parts F1 and p2 parts F2
– Runtime system translates to 50/50 mixes in Fluidic ISA
– Note: some mixtures only reachable within error tolerance
Fluid[] out = new Fluid[8];Fluid yellow = input (0);Fluid blue = input (1);
out[0] = yellow;out[1] = mix(yellow, 3/4, blue, 1/4);out[2] = mix(yellow, 1/2, blue, 1/2);out[3] = mix(yellow, 1/4, blue, 3/4);out[4] = blue;
3. Arbitrary Mixing
Fluid[] out = new Fluid[8];Fluid yellow = input(0);Fluid blue = input(1);Fluid green = mix(yellow, blue);
out[0] = yellow;out[1] = mix(yellow, green);out[2] = green;out[3] = mix(blue, green);out[4] = blue;
2. Fluid Re-Generation
![Page 51: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/51.jpg)
Abstraction 3: Arbitrary Mixing
Fluid[] out = new Fluid[8];Fluid yellow = input (0);Fluid blue = input (1);
for (int i=0; i<=4; i++) { out[i] = mix(yellow, 1-i/4, blue, i/4);}
• Allows mixing fluids in any proportion, not just 50/50– Fluid mix (Fluid F1, float p1, Fluid f2, float F2)
Returns Fluid that is p1 parts F1 and p2 parts F2
– Runtime system translates to 50/50 mixes in Fluidic ISA
– Note: some mixtures only reachable within error tolerance
4. Parameterized Mixing
Fluid[] out = new Fluid[8];Fluid yellow = input (0);Fluid blue = input (1);
out[0] = yellow;out[1] = mix(yellow, 3/4, blue, 1/4);out[2] = mix(yellow, 1/2, blue, 1/2);out[3] = mix(yellow, 1/4, blue, 3/4);out[4] = blue;
3. Arbitrary Mixing
![Page 52: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/52.jpg)
Abstraction 4: Cell Traps• Unlike fluids, cells adhere to
a specific location on chip– To interact with cells, need
to move Fluids to their location
• CellTrap abstraction establishes a fixed chamber on chip– Fundamental capability: fill with a given fluid (incl. cell culture)
![Page 53: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/53.jpg)
Abstraction 4: Cell Traps• Unlike fluids, cells adhere to
a specific location on chip– To interact with cells, need
to move Fluids to their location
• CellTrap abstraction establishes a fixed chamber on chip– Fundamental capability: fill with a given fluid (incl. cell culture)class CellTrap {
// establish a new, empty location on chipCellTrap();
// replace contents of cell trap with new fluid; return old contentsUniqueFluid drainAndRefill(Fluid newContents);
// regenerate contents of cell trap; return drained fluid as neededFluid drainAndRegenerate();
}
![Page 54: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/54.jpg)
Abstraction 4: Cell Traps
CellTrap celltrap = new CellTrap(); // setup cell culturefor (int i=0; i<N; i++) celltrap.drainAndRefill(cellCulture);
celltrap.drainAndRefill(distilledWater); // analyze cell metabolitesFluid metabolites = drainAndRegenerate();analyzeWithIndicators(metabolites);
celltrap.drainAndRefill(antibodyStain); // stain cells for imaging
Must schedule all uses of metabolites before staining
– Otherwise, runtime error– Like unique variables, difficult to verify safety in general case– But thanks to language, compiler can give useful warnings
![Page 55: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/55.jpg)
Abstraction 5: Timing Constraints• Precise timing is critical for many biology protocols
– Minimum delay: cell growth, enzyme digest, denaturing, etc.– Maximum delay: avoid precipitation, photobleaching, etc.– Exact delay: regular measurements, synchronized steps, etc.
• Simple API for indicating timing constraints:– fluid.useBetween(N, M) – celltrap.useBetween(N, M)
Schedule next use of a Fluid (or drain of a CellTrap) between N and M seconds from time of the call
Also becomes part of Fluid’s regeneration history
• Note: may require parallel execution– Fluid f1 = mix(…); f1.useBetween(10, 10); – Fluid f2 = mix(…); f2.useBetween(10, 10);– Fluid f3 = mix(f1, f2);
f1 f2
f3
1010
![Page 56: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/56.jpg)
Scheduling the Execution• Scheduling problem has two parts:
1. Given dependence graph, find a good schedule
2. Extract dependence graph from the program
![Page 57: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/57.jpg)
1. Finding a Schedule
Abstract scheduling problem:– Given task graph G = (V, E) with [min, max] latency per edge– Find shortest schedule (V Z) respecting latency on each edge
Case 1: Unbounded parallelism• Can express as system of linear difference constraints• Solve optimally in polynomial time
Case 2: Limited parallelism• Adds constraint: only k vertices can be scheduled at once• Can be shown to be NP-hard (reduce from PARTITION)• Rely on greedy heuristics for now
![Page 58: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/58.jpg)
2. Extracting Dependence Graph• Static analysis difficult due to aliasing, etc.
– Requires extracting precise producer-consumer relationships
• Opportunity:Perform scheduling at runtime, using lazy evaluation– Microfluidic operations are slow computer can run ahead– Build dependence graph of all operations up to decision point
• Hazard: constraints that span decision points– Dynamic analysis cannot look into upcoming control flow– We currently prohibit such constraints – leave as open problem
![Page 59: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/59.jpg)
BioStream Protocol Language• Implements the abstractions
– Full support for storage management, fluid re-generation, arbitrary mixing
– Partial support for cells, timing
• Implemented as a Java library– Allows flexible integration with general-purpose Java code
• Targets microfluidic chips or auto-generated simulator
Fluidic ISA
BioStream Library
Architecture Description - Double camera(Fluid f);
Microfluidic chip Microfluidic simulator
Simulator Generator
User Code
Fluid yellow = input (0);Fluid blue = input (1);Fluid[] out = new Fluid[8];
for (int i=0; i<=4; i++) out[i] = mix(yellow, 1-i/4,
blue, i/4);
![Page 60: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/60.jpg)
Applications in Progress
1. What are the best indicators for oocyte viability?- With Mark Johnson’s and
Todd Thorsen’s groups- During in-vitro fertilization,
monitor cell metabolites and select healthiest embryo for implantation
2. How do mammalian signal transduction pathways respond to complex inputs?- With Jeremy Gunawardena’s
and Todd Thorsen’s groups- Isolate cells and stimulate with
square wave, sine wave, etc.
![Page 61: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/61.jpg)
Generating Complex Signals
Target Signal
Time
[EG
F]
CellTrap cells = new CellTrap();… // setup cell culturewhile (true) { float target = targetSignal(getTime()); Fluid f = mix(EGF, target, WATER, 1-target); cells.drainAndFill(f); cells.useAfter(10*SEC);}
Video courtesy David Craig
![Page 62: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/62.jpg)
Additional Applications• Killer apps: react to feedback, redirect the experiment
– Recursive-descent search– Fixed-pH reaction– Directed evolution– Long, complex protocols
• Application to biological computation– Many emerging technologies:
DNA computing, cellular signaling, biomolecular automata, …– But not yet able to assemble, sustain, and adapt themselves– Microfluidics provides a scaffold to explore underlying biology
ProgramIntelligence
Biology Experiment
![Page 63: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/63.jpg)
Compiler Optimizations
![Page 64: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/64.jpg)
Algorithms for Efficient Mixing• Mixing is fundamental operation of microfluidics
– Prepare samples for analysis– Dilute concentrated substances– Control reagant volumes–
• How to synthesize complex mixture using simple steps?– Many systems support only 50/50 mixers– Should minimize number of mixes, reagent usage– Note: some mixtures only reachable within error tolerance
• N
Analogous to ALU operations on microprocessors
Interesting scheduling and optimization problem
![Page 65: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/65.jpg)
Why Not Binary Search?0 13/8
1/41/2
1/23/8 5 inputs, 4 mixes
![Page 66: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/66.jpg)
Why Not Binary Search?0 13/8
3/41/2
3/8
4 inputs, 3 mixes
1/41/2
1/23/8 5 inputs, 4 mixes
![Page 67: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/67.jpg)
Min-Mix Algorithm• Simple algorithm yields minimal number of mixes
– For any number of reagents, to any reachable concentration– Also minimizes reagent usage on certain chips
![Page 68: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/68.jpg)
1. The mixing process can be represented by a tree.
Min-Mix Algorithm: Key Insights
BA
B
A
5/8 A, 3/8 B
![Page 69: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/69.jpg)
1. The mixing process can be represented by a tree.
2. The contribution of an input sample to the overall mixture is 2-d, where d is the depth of the sample in the tree
Min-Mix Algorithm: Key Insights
BA
B
A
5/8 A, 3/8 B
d
3
2
1
2-d
1/8
1/4
1/2
![Page 70: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/70.jpg)
1. The mixing process can be represented by a tree.
2. The contribution of an input sample to the overall mixture is 2-d, where d is the depth of the sample in the tree
3. In the optimal mixing tree, a reagent appears at depths corresponding to the binary representation of its overall concentration.
Min-Mix Algorithm: Key Insights
BA
B
A
5/8 A, 3/8 B
d
3
2
1
2-d
1/8
1/4
1/2
3 = 011
0
1
1
5 = 101
1
0
1
![Page 71: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/71.jpg)
Min-Mix Algorithm• Example: mix 5/16 A, 7/16 B, 4/16 C
• To mix k fluids with precision 1/n:– Min-mix algorithm: O(k log n) mixes– Binary search: O(k n) mixes
4
3
2
1
B CA
B
A B
A
A
B
B
B
C
1/16
1/8
1/4
1/2
2-dd
A=5 B=7 C=4 =0101 =0111 =0100
[Natural Computing 2007]
![Page 72: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/72.jpg)
Work In Progress
![Page 73: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/73.jpg)
CAD Tools for Microfluidic Chips• Microfluidic design tools are in their infancy
– Most groups use Adobe Illustrator or AutoCAD– Limited automation; every line drawn by hand
• Due to fast fabrication, redesign is very frequent– Student can do multiple design cycles per week
![Page 74: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/74.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 75: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/75.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 76: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/76.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 77: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/77.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 78: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/78.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 79: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/79.jpg)
First Step: Automatic Routing• First target: automate the routing of control channels
– Connecting valves to pneumatic ports is very tedious– Simple constraints govern the channel placement
• AutoCAD pluginautomates this task– Developed
With Nada Amin
![Page 80: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/80.jpg)
Related Work• Aquacore – builds on our work, ISA + architecture [Amin et al.]
• Automatic generation / scheduling of biology protocols– Robot scientist: generates/tests genetic hypotheses [King et al.]– EDNAC computer for automatically solving 3-SAT [Johnson]– Compile SAT to microfluidic chips [Landweber et al.] [van Noort] – Mapping sequence graphs to grid-based chips [Su/Chakrabarty]
• Custom microfluidic chips for biological computation– DNA computing [Grover & Mathies] [van Noort et al.] [McCaskill] [Livstone,
Weiss, & Landweber] [Gehani & Reif] [Farfel & Stefanovic]– Self-assembly [Somei, Kaneda, Fujii, & Murata] [Whitesides et al.]
• General-purpose microfluidic chips– Using electrowetting, with flexible mixing [Fair et al.] – Using dialectrophoresis, with retargettable GUI [Gascoyne et al.]– Using Braille displays as programmable actuators [Gu et al.]
![Page 81: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/81.jpg)
Conclusions• Abstraction layers for
programmable microfluidics– General-purpose chips– Fluidic ISA– BioStream language– Mixing algorithms
• Vision for microfluidics:everyone uses standard chip
• Vision for software:a defacto language for experimental science– Download a colleague’s code, run it on your chip
– Compose modules and libraries to enable complex experiments that are impossible to perform today
http://cag.csail.mit.edu/biostream
![Page 82: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/82.jpg)
Extra Slides
![Page 83: Programmable Microfluidics Bill Thies Computer Science and Artificial Intelligence Laboratory Massachusetts Institute of Technology UC Berkeley – October](https://reader036.vdocument.in/reader036/viewer/2022062321/56649da15503460f94a8d0fa/html5/thumbnails/83.jpg)
How Can Computer Scientists Contribute?
• Applying the ideas from our field to a new domain– Sometimes requires deep adaptations (e.g., digital gain)
• Our contributions:– First soft-lithography digital architecture with sample alignment– First demonstration of portability: same code, multiple chips– New high-level programming abstractions for microfluidics– First O(lg n) mixing algorithm for unit volumes (vs O(n))
• Open problems:– Adapt unique (linear) types for microfluidics– Sound scheduling under timing constraints– Dynamic optimization of slow co-processors (lazy vectorization?)– Mixing algorithms for different ISA’s (e.g., lossless mixing)– Generate a CAD layout from a problem description