Усложнение v2. 1
Отправила я, значит, ту первую версию генетического кода на тестирование в лабораторию... и она ожидаемо не заработала на реальной живой клетке. Биология оказалась намного капризнее обычного кремниевого процессора.
Пришлось мне экстренно включать мегамозг, лезть в базы данных белков и жестко усложнять логику программы для более надежной реализации алгоритма.
В чём принципиальное отличие новой архитектуры? Я полностью перевернула полярность сигнала. Теперь ноль (0) — это фоновый свет по умолчанию. Клетка горит постоянно, транскрипция фигачит на максималках через конститутивные (всегда активные) промоторы. А вот единица (1) — это когда мы принудительно гасим свет.
Для этого я заюзала хардкорный аппаратный инвертор на базе системы CRISPRi. В те участки ДНК, которые должны выдавать единицу, вшиваются специальные посадочные площадки (операторы-мишени). Когда срабатывает химический триггер, клетка начинает продуцировать «мёртвый» белок dCas9 и направляющие гидовые РНК (sgRNA). Этот белок dCas9 садится на ДНК как глухой физический засов. Био-головка считывания (РНК-полимераза) на полной скорости врезается в этот засов, транскрипция блокируется, и свет резко падает до нуля! Для нулей мы используем пустые участки-заполнители (Spacer DNA), где полимераза летит со свистом, не выключая иллюминацию.
Чтобы всё это физически собрать и запихать в бактерию, мне пришлось составить детальную схему сборки плазмиды. Сшивать все эти 120 блоков данных будем методом Golden Gate Cloning с помощью хитрых ферментов-рестриктаз, которые склеивают биты строго по цепочке, как вагоны поезда.
Ниже привожу полный, исправленный и синтаксически выверенный текст программы на Verilog для компилятора Cello. Я пофиксила все баги с границами модулей, так что код теперь монолитен. Кому интересен чистый био-код без купюр — велкам под кат, можете посмотреть, как выглядит реальное ИТ-будущее.
Стефания
https://stephaniia-bubnova.web.app/
### Схема сборки плазмиды (Plasmid Assembly Blueprint)
Для физической сборки этой генетической цепи используется метод **Golden Gate Cloning** (с использованием рестриктаз типа IIS, например, *BsaI* или *BsmBI*). Это позволяет сшить все битовые кассеты последовательно за одну реакцию без швов.
```text
[Вектор-скелет: pUC19 / AmpR (Устойчивость к ампициллину)]
;
;;;; [Входной логический блок: Промоторы pBad + pAsr + pAlkT]
; ;
; ;;;; [Синтез репрессоров / dCas9 + гидовые РНК (sgRNA 1-3)]
;
;;;; [Блок данных: Массив Битов (Физическая ДНК-лента)]
; ;
; ;;;; СЕГМЕНТ HELLO: [pTac];[Spacer];[GFP] ; [pTac];[TargetLocus1];[GFP] ... x40
; ;;;; СЕГМЕНТ WORLD: [pTac];[Spacer];[GFP] ; [pTac];[TargetLocus2];[GFP] ... x40
; ;;;; СЕГМЕНТ STEPH: [pTac];[Spacer];[GFP] ; [pTac];[TargetLocus3];[GFP] ... x40
;
;;;; [Терминатор транскрипции: rrnB T1 (Точка останова считывания)]
Порядок молекулярной сборки:
1. Синтез олигонуклеотидов: Каждый индивидуальный бит (bio_bit_zero и bio_bit_one) заказывается как отдельный синтетический фрагмент ДНК с уникальными 4-нуклеотидными оверлапами (липкими концами) по краям для правильного порядка склеивания.
2. Лигирование цепи: Все 120 битовых блоков смешиваются в одной пробирке с ДНК-лигазой T4 и рестриктазой. Ферменты циклически режут и сшивают фрагменты, собирая длинную линейную кодирующую последовательность в строгом соответствии с Verilog-картой.
3. Трансформация: Готовая циклическая плазмида внедряется в компетентные клетки штамма E. coli DH5-alpha с помощью теплового шока (42°C, 45 секунд) для последующего масштабирования и проведения тестов.
// Cello Genetic Circuit Framework v2.1 - Custom DNA Logic
// Developer: Stephaniia
// Target Vector: E. coli Expression System
// Architecture: Physical Bit-Array Inversion Registry
module CELL_PHYSICAL_STORAGE_FULL (
input wire sugar,
input wire acid,
input wire alkali,
output wire light_out
);
wire not_sugar;
wire not_acid;
wire not_alkali;
assign not_sugar = ~sugar;
assign not_acid = ~acid;
assign not_alkali = ~alkali;
wire read_hello;
wire read_world;
wire read_steph;
assign read_hello = sugar && not_acid && not_alkali;
assign read_world = acid && not_sugar && not_alkali;
assign read_steph = alkali && not_sugar && not_acid;
// FILE 1: "HELLO"
// Character 'H' (01001000)
bio_bit_zero HELLO_B00 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B01 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B02 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B03 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B04 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B05 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B06 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B07 (.enable_stream(read_hello), .gfp_expression(light_out));
// Character 'E' (01000101)
bio_bit_zero HELLO_B08 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B09 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B10 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B11 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B12 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B13 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B14 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B15 (.repressor_signal(read_hello), .gfp_expression(light_out));
// Character 'L' (01001100)
bio_bit_zero HELLO_B16 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B17 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B18 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B19 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B20 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B21 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B22 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B23 (.enable_stream(read_hello), .gfp_expression(light_out));
// Character 'L' (01001100)
bio_bit_zero HELLO_B24 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B25 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B26 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B27 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B28 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B29 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B30 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B31 (.enable_stream(read_hello), .gfp_expression(light_out));
// Character 'O' (01001111)
bio_bit_zero HELLO_B32 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B33 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B34 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_zero HELLO_B35 (.enable_stream(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B36 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B37 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B38 (.repressor_signal(read_hello), .gfp_expression(light_out));
bio_bit_one HELLO_B39 (.repressor_signal(read_hello), .gfp_expression(light_out));
// FILE 2: "WORLD"
bio_bit_zero WORLD_B00 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B01 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B02 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B03 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B04 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B05 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B06 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B07 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B08 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B09 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B10 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B11 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B12 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B13 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B14 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B15 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B16 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B17 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B18 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B19 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B20 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B21 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B22 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B23 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B24 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B25 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B26 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B27 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B28 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B29 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B30 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B31 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B32 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B33 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B34 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B35 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B36 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_one WORLD_B37 (.repressor_signal(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B38 (.enable_stream(read_world), .gfp_expression(light_out));
bio_bit_zero WORLD_B39 (.enable_stream(read_world), .gfp_expression(light_out));
// FILE 3: "STEPH"
bio_bit_zero STEPH_B00 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B01 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B02 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B03 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B04 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B05 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B06 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B07 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B08 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B09 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B10 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B11 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B12 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B13 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B14 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B15 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B16 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B17 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B18 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B19 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B20 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B21 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B22 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B23 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B24 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B25 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B26 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B27 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B28 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B29 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B30 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B31 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B32 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B33 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B34 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B35 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_one STEPH_B36 (.repressor_signal(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B37 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B38 (.enable_stream(read_steph), .gfp_expression(light_out));
bio_bit_zero STEPH_B39 (.enable_stream(read_steph), .gfp_expression(light_out));
endmodule
// Molecular primitive for Bit 0 (Constitutive Expression)
module bio_bit_zero (
input wire enable_stream,
output wire gfp_expression
);
// Active by default if the data track is selected by the chemical trigger
assign gfp_expression = enable_stream ? 1'b1 : 1'b0;
endmodule
// Molecular primitive for Bit 1 (Repressible Interruption Locus)
module bio_bit_one (
input wire repressor_signal,
output wire gfp_expression
);
// Transcription is physically blocked by the repressor protein, dropping light to 0
assign gfp_expression = ~repressor_signal;
endmodule
Свидетельство о публикации №126080604865