В России всего 2000 проектировщиков чипов. Что с этим делать?

767d17362b659a4eec256280458c9b87.jpg

Согласно статье Ивана Покровского «Возможности и проблемы отечественной микроэлектроники», в России всего две тысячи разработчиков микросхем. Для сравнения: в каждой крупной международной электронной компании есть несколько команд, работающих над чипом или над IP, в каждой по паре сотен разработчиков (хотя бывает и меньше ста, и больше тысячи).

Две тысячи человек — это мало для любого сценария развитии России:

1. Как для сценария, в котором санкции будут сняты и российские компании будут беспроблемно работать с TSMC и западными партнерами для разработки маркетируемых на мировом рынке чипов.

2. Так и для сценария, в котором российские разработчики будут строить экосистему проектирования в условиях изоляции, ориентироваться на производство микроконтроллеров и встроенных микросхем на зеленоградском Микроне, а также на сотрудничество в разработке semiconductor IP с китайскими производителями.

В других стран бывшего СССР ситуация еще хуже.

Что же делать? Для ответа на этот вопрос мы привлекли Машу Горчичко — выпускницу МИФИ, которая защитила диссертацию в Университете Вандербильда в Теннесси. Маша работала инженером в Российских космических системах, а сейчас работает в Кремниевой Долине, разработчиком в компании Applied Materials — одного из лидеров в оборудовании для производства микросхем.

Представим Машу, которая будет пояснять и иллюстрировать наши тезисы на видео. От себя прибавлю, что МИФИ — крутой вуз, в нем внутри есть ядерный реактор, а на входе стоит автоматчик:

Также, если вы посмотрите на Машин linkedin, вы можете увидеть, что она получила сертификат окончания школы по управлению спутниками, а также спроектировала I2C контроллер на верилоге для ПЛИС в Роскосмосе.

Да, но вернемся к 2000 российcким инженерам. Собственно что делать, понятно: нужно привлекать в отрасль больше молодежи, начиная со школьников. Чтобы к моменту поступления в вуз они уже представляли возможность развития своей карьеры в проектировании микросхем, на втором курсе писали бы на SystemVerilog на уровне регистровых передач, на третьем осваивали бы технологии верификации, на четвертом — физическое проектирование, на пятом — продвинутую микроархитектуру.

Альтернативы такому подходу нет. Если начинать привозить разработчиков из Калифорнии, Тайваня, Великобритании, Индии и других таких мест, то возникнет вот какая проблема: большинство разработчиков — люди узкоспециализированные, и если набрать винегрет инженеров и ученых на разные темы, которых объединяет лишь желание получить много денег от россиян, то они через пару лет разъедутся обратно и каши за это время не сварят.

2d1357166e969a6d580591c2aa09851d.png

При этом привлечение и обучение молодежи — это комплексная задача, и в этой заметке мы затронем только самое начало ее решения: увеличение воронки входа.

Фундаментальная проблема заключается в том, что перед проектированием процессоров и прототипированием их на ПЛИС студенту приходится хорошо повозиться с упражнениями по скурпулезной перестановке битов между тактами, а для таких упражнений не у всех есть мотивация. Но эти упражнения можно сделать более интересными, если превратить их в игру с графикой:

Прежде чем продолжить с ПЛИС — что такое проектирование цифровых микросхем вообще? 50 лет назад инженеры рисовали вручную на бумаге дорожки и транзисторы, 40 лет назад возили мышкой по экрану, расставляя логические элементы, но 30 лет назад произошла революция так называемого логического синтеза. После нее мейнстримом стало проектирование цифровой части микросхем с помощью кода. Но не кода программы для запуска ее на процессоре, а коде на языке описания аппаратуры (Verilog или VHDL), который можно превратить в сам процессор:

f7fb3e68170751cf58ebd2a6bb42e43f.png

Теперь что же такое ПЛИС. Это своего рода кубики лего для проектировщика. Микросхема, которая состоит из ячеек с изменяемой логической функцией. Причем изменяемой не на фабрике, а у вас на столе. Записываете одну последовательность бит в память конфигурации — ячейка стала логическим элементом И, записываете другую — она стала D-триггером:

Теперь как выглядит один из примеров графики на ПЛИС:

Но это динамический пример, в котором изображение движется. Начинать лучше со статического примера, в котором школьник просто пишет на верилоге комбинационный код (то есть код без элементов состояния), который вычисляет цвет в зависимости от координат на экране. Координаты x и y, как и сигналы для генерации развертки, выходят из уже написанного модуля vga в пакете упражнений. Если к нему добавить например вот такой код, то на экране появится парабола с цветовым переходом:

    wire [Y_WIDTH * 2 - 1:0] x_2 = x * x;

    always_comb
    begin
        red   = '0;
        green = '0;
        blue  = '0;
        if (display_on & x_2 [9 +: Y_WIDTH] < y)
        begin
            red   = x [X_WIDTH - 2 -: 4];
            green = y [Y_WIDTH - 2 -: 4];
            blue  = '1;
        end
    end

bd70d10d32b6306038c680878503fafe.jpg

Этот код превращается не в программу (последовательность команд процессора, как в Ардуино), а в граф из логических ячеек, по которому конфигурируют ПЛИС:

6ae067c81d6b624e0ed0923090577d14.jpg

Пример же, который показывает Маша на видео, требует дополнительных элементов последовательностной логики, а именно счетчиков, которые меняет свое значение со временем, на основе тактового сигнала с частотой 50 MHz. Этот код выглядит так (см. по ссылке Pattern 2):

Сначала, на каждом положительном фронте (переходе из 0 в 1) тактового сигнала мы увеличиваем значение 23-битного счетчика cnt:

    logic [22:0] cnt;

    always_ff @ (posedge clk)
        if (rst)
            cnt <= '0;
        else
            cnt <= cnt + 1'd1;

Счетчик — это по сути комбинация из сумматора и D-триггеров, которая работает так:

Затем на основе счетчика мы генерируем сигнал enable, пульс, который возникает на 1 такт шесть раз в секунду: 50 MHz / 2 в степени 23 = 6 Герц:

wire enable = (cnt == '0);

Теперь мы заводим два 8-битных счетчика, dx и dy, которые будут увеличиваться в зависимости от того, нажимаем ли мы или не нажимаем две кнопки.

Кнопки используют негативную логику. Если кнопка не нажата, то с нее приходит 1, а если нажата — 0. Так как мы используем еще и сигнал enable, сгенерированный от счетчика cnt, наших два новых счетчика будут увеличиваться максимум на 6 за секунду:

    logic [7:0] dx, dy;

    always_ff @ (posedge clk)
        if (rst)  // сигнал сброса
        begin
            dx <= 4'b0;
            dy <= 4'b0;
        end
        else if (enable)  // это условие срабатывает 6 раз в секунду 
        begin
            dx <= dx + key [2]; // Если кнопка 2 не нажата, увеличиваем dx на 1
            dy <= dy + key [1]; // Если кнопка 1 не нажата, увеличиваем dy на 1
        end

Теперь прибавляем эти счетчики к координатам при вычислении цветов и получаем движущийся узор:

    wire [3:0] xc = x [X_WIDTH - 2 -: 4];
    wire [3:0] yc = y [Y_WIDTH - 2 -: 4];

    always_comb
    begin
      red   = '0;
      green = '0;
      blue  = '0;

      if (display_on)
      begin
        red   = xc + xc + yc + dx;
        green = xc - yc - dy;
        blue  = { 4 { ~ key [0] } };
      end
    end

dfdf20d297918fabdd44ba4c8ebf7821.jpg

В ПЛИС, который показан на видео, Intel FPGA / Altera Max II — всего 240 реконфигурируемых логических ячеек. Это очень мало, по сравнению с количеством ячеек ПЛИС на типичных студенческих платах (десятки тысяч) и особенно ПЛИС которые используются для прототипирования промышленных процессоров (миллионы). Например в AMD Xilinx Virtex UltraScale+ VU19P FPGA — 9 миллионов ячеек. Но даже UltraScale+ ПЛИС меркнет по сравнению с фиксированными микросхемами ASIC, в которых могут быть миллиарды транзисторов, что соответствует сотням миллионов cтандартных ячеек ASIC (ASIC standard cell), что соответствует десяткам миллионов ячеек ПЛИС. Именно такие микросхемы стоят в смартфонах и автопилотах автомобилей.

Но для самого начального обучения малое количество ячеек — это лучше, чем большое, так как оно позволяет вырастить интуицию, какие конструкции в верилоге «тяжелые», а какие «легкие» (или «дорогие» / «дешевые» в смысле ресурсов). Например генерация одной параболы (схема первого примера) в ПЛИС влазит, а вот генерация двух — нет. Потому что для параболы требуется операция умножения, а она «тяжелая».

С другой стороны, пример с движущимся квадратным «ковром» занимает всего треть ПЛИС-а, потому что операции сложений, которые в нем используются — «легкие». Правда в примере с ковром много ячеек уходит на биты состояния (D-триггеры) для счетчиков.

0d686172cbcea3068b2a7e6000c85575.png

Можно устроить соревнование среди школьников, кто сделает самый красивый узор (или самую интересную игру типа пин-понг) используя ограниченное количество ячеек ПЛИС (или несколько соединенных плат). Вся информация где купить платы есть в README.md репозитория проекта Пайка, ПЛИС и Линукс (Исходники, презентации, задания и примеры для летнего лагеря по пайке, микросхемам ПЛИС и синтезу цифровых схем из кода на верилоге под Линуксом).

355d305403abc954143f170fe67fac92.jpg

Хотя пакет работает и под Linux, и под Windows, мы рекомендуем учить школьников под Linux. По банальной причине: все разработчики микросхем, даже в хардверных отделениях Microsoft и Apple, делают синтез и моделирование под Линуксом. Просто потому что разработчики используют программы Synopsys Design Compiler и Cadence Genus + Innovus, и у этих продуктов нет версий ни под Windows, ни под Макинтошем, только под Linux.

Я проверил, что Intel FPGA Quartus с пакетом fpga-soldering-camp работает под несколькими российскими дистрибутивами Linux, включая:

Все их можно применять на летних лагерях школьников.

Работа с Intel FPGA Quartus под Simply Linux, который загружается с внешнего SSD диска

Работа с Intel FPGA Quartus под Simply Linux, который загружается с внешнего SSD диска

Мы уже опробовали летние школы с ПЛИС на Летней Школе Юных Программистов в Новосибирске и на школе в МИЭТ в Зеленограде. Правда и в одном и в другом случае были тщательно отобранные школьники.

b510318dc7fecabcda34ccda007f8d7d.jpg

Что же школьник может делать после такой школы? Они может выбрать путь стать проектировщиком микросхем и пойти учиться в МИЭТ, МИЭМ, МИРЭА или ИТМО, или решить стать прикладным математиком в области алгоритмов автоматизации проектирования и пойти на ВМК МГУ. Или использовать эти знания для специализации в проектировании систем (system design) из процессоров, GPU, ПЛИС, специализированных чипов и софтвера. Хорошая следущая ступенька — это Школа Синтеза Цифровых Схем, которая только в прошлую субботу выдала дипломы 92 участникам. В альбоме участники 11 площадок Школы: ИНБРЭС, Иннополис, ИТМО, МИРЭА, МИЭМ, МИЭТ, НГТУ, Самара, СибГУТИ, УрФУ, ЯДРО:

faeabf88c452cc5f7e61b90662259ffa.png

Те из них кто прошел или пройдет экзамен, описанный в заметке на Хабре «Хотите проектировать устройство, которое использует миллиард человек — решайте микроархитектурные задачки» — получит рекомендации в ведущие электронные компании.

Как сиквел для Школы Синтеза через неделю в МИЭТ будет хакатон по процессорам:

Да, но что же дальше для школьного этапа и летних школ? Во-первых, чисто чтобы начать движуху, мы с моим приятелем Сергеем Рыжковым, основателем интернет-провайдера RiNet — готовы выделить начальные 100 тысяч рублей для поддержки такого рода летних школ. Эти платки по 240 логических ячеек вместе с коннекторами стоят всего около 2000 рублей на школьника, так что этого уже должно хватить для скажем школы в Новосибирске, если они захотят местными силами этим заняться, и еще 3–4 школ.

Во-вторых, если есть интерес у преподавателей кружков, летних школ и центров для школьников, мы с Машей можем записать более подробные видео с инструкциями. Что вы думаете?

a1ffe3a8fe743ac48191e99fed64534e.jpg

© Habrahabr.ru