
Кто такой RTL-инженер, или кто складывает нули и единицы
Над созданием микросхем, которые являются мозгом электронных устройств, работают десятки, а порой и тысячи специалистов. В предыдущих статьях мы уже разбирались, как топологи превращают логическую схему в физическую топологию микросхемы, а верификаторы проверяют, соответствует ли ее работа заданным требованиям.
Что идет до? Еще одна важная роль в процессе разработки микросхемы — RTL-инженер. Он проектирует логику работы будущего чипа, которая описывает передачу данных между регистрами и их обработку — как раз то, что топологи перекладывают на физический уровень, а верификаторы проверяют.
О том, что такое регистры, и какое место RTL-инженер занимает в процессе создания микросхем, расскажет Евгений Больнов, старший инженер по разработке СнК в YADRO. Евгений — специалист с более чем десятилетним опытом в описании логических цепей. Разберемся, какие знания нужны для входа в профессию, где их получить и как развивать карьеру в этом направлении.
- как RTL-инженер превращает требования к микросхеме в логические вентили;
- что происходит с RTL-кодом после написания — от моделирования и синтеза до физической реализации;
- какие знания и инструменты нужны для старта в RTL-разработке, а что можно освоить уже в процессе работы;
- как устроен карьерный путь RTL-инженера — от стажера до архитектора или технического руководителя.
«Логика» работы микросхемы и роль RTL в ней
Прежде чем переходить к обязанностям RTL-инженера, заглянем внутрь микросхемы. Это поможет понять, что именно проектирует такой специалист.
Строительными блоками современных цифровых микросхем служат логические схемы. В их основе — комбинационная, она же комбинаторная, логика, с которой многие впервые знакомятся еще в школе на уроках информатики: элементы И (AND), ИЛИ (OR), НЕ (NOT) и их комбинации.
По отдельности эти элементы умеют выполнять только простые операции. Но, объединяя их между собой, инженеры создают более сложные блоки: например, сумматоры, которые складывают двоичные числа, компараторы, которые определяют, какое из двух чисел больше или меньше, мультиплексоры, которые выбирают, какие именно данные должны попасть на обработку. Из таких компонентов постепенно и строятся целые процессоры.
Зачем это нужно? Любая программа — от калькулятора до компьютерной игры — это последовательность простых операций (сложения, вычитания, инверсии и других) над нулями и единицами. Чтобы выполнить программу, процессор должен складывать и сравнивать данные, передавать их между своими блоками и выполнять инструкции в нужном порядке. Все это становится возможным благодаря логическим схемам, из которых он состоит.
Результаты операций сохраняются в регистрах — небольших, но очень быстрых элементах памяти внутри процессора. Они хранят данные до тех пор, пока те не понадобятся следующему этапу вычислений.
Как раз движение данных между регистрами и определяет уровень абстракции, который называется Register-Transfer Level (RTL), уровень регистровых передач.
На этом уровне инженер описывает, какие данные, когда и куда должны передаваться, а также какие логические операции выполняются между этими передачами. Иными словами, задача RTL-инженера — описать поведение будущей цифровой микросхемы.
Единой договоренности о названии этой роли в индустрии нет. В вакансиях можно встретить «RTL-инженер», «RTL-дизайнер», «инженер-программист RTL» или «RTL-разработчик». Во всех случаях речь идет о специалисте, который с помощью языков описания аппаратуры задает логику работы цифровых схем.
В отличие от разработчика ПО, RTL-инженер пишет код, который описывает цифровую схему, а не исполняется процессором. Результат работы RTL-разработчика инженер-тополог преобразует в топологию будущего кристалла, из которой затем на фабрике изготавливают микросхему. Из-за этого цена ошибки в этом процессе высока: исправить код новым релизом нельзя, потребуется перепроектировать чип и заново запустить его в производство. А это дополнительные месяцы разработки и миллионы, потраченные на повторное производство.
Роль RTL-инженера в процессе проектирования микросхемы
Какое место занимает RTL-дизайн в процессе разработки микросхемы? Когда архитектор определил требования и составил спецификацию (описал «черный ящик»), к работе приступает RTL-инженер. Его задача — перевести написанную спецификацию на язык цифровой логики.

Для этого RTL-инженер пишет код на языках описания аппаратуры (HDL, Hardware Descriptions Languages), например Verilog, VHDL или SystemVerilog. Эти языки отличаются от знакомых многим языков программирования (ЯП) типа JavaScript или Python тем, что они служат для описания микросхем, а не для написания исполняемых процессором программ. Можно сказать, что результат их компиляции и есть сам процессор. При этом RTL-код, как и код классических ЯП, пишут в IDE — интегрированных средах разработки. Примеры таких инструментов — это Xilinx Vivado, Intel Quartus или Synopsys Design Compiler.
На HDL описывают, как должна вести себя будущая цифровая схема: какие сигналы она принимает на вход, какие операции выполняет и какой результат выдает на выходе. В итоге появляется текстовый файл с описанием того, как должна работать микросхема.
Далее начинается этап моделирования, и к работе подключаются инженеры по верификации. Они проверяют блок на граничных случаях, случайных комбинациях входных данных и нестандартных сценариях работы в рамках спецификации. Если обнаружена ошибка, RTL-инженер дорабатывает проект и цикл повторяется.
Здесь RTL-описание преобразуется в сеть реальных логических элементов — вентилей, триггеров и других компонентов, из которых впоследствии будет изготовлена микросхема. Делается это с помощью САПР — специальных систем автоматизированного проектирования. По английски такие системы называют EDA tools. Кстати, IDE, которые мы упоминали выше, это тоже САПР.
Примеры распространенных в индустрии САПР для логического синтеза — это Synopsys Design Compiler, Xilinx Synthesis Technology. На этом этапе в САПР задают библиотеку стандартных ячеек — набор логических элементов, которые предоставляет фабрика-изготовитель. Именно из них впоследствии будет запекаться микросхема.
Библиотека стандартных ячеек обычно включает те самые элементы, которые мы упомянули выше:
- логические компоненты (инверторы, элементы И, ИЛИ, НЕ),
- запоминающие компоненты (триггеры),
- их комбинации.

Дальше САПР проводят логический синтез в два этапа. На первом этапе САПР оптимизирует схему, уменьшая количество используемых логических элементов без изменения ее функциональности. На втором — преобразует текстовое описание в ту самую логическую схему. Для этого RTL-инженер задает файл ограничений (constraints) с требованиями к временны́м характеристикам схемы — прежде всего ее, тактовую частоту на которой она должна работать.
На выходе логического синтеза получается схема соединения логических вентилей (gates) и проводников. Такую схему называют нетлист (gate-level netlist). Он реализует тот же функционал, что и исходное описание на языке описания аппаратуры, только в оптимизированном виде на логических ячейках.
Процесс создания и синтеза RTL-кода в картинках
Поведенческое описание простого однобитного сумматора:

Поведенческая схема в общем виде:

Преобразуем эту схему в generic-ячейки:

Меняем generic-ячейки на фабричные — в данном случае это sky130:

В текстовом виде нетлист будет выглядеть так:

Работа не заканчивается на нетлисте. Инженер анализирует результаты логического синтеза, помогает устранять найденные проблемы и при необходимости оптимизирует схему, чтобы она работала быстрее, занимала меньше места или потребляла меньше энергии.
Дальше нетлист передается топологу для физического синтеза. При необходимости к работе подключается DFT-команда, которая интегрирует в схему логику, необходимую для тестирования микросхемы после производства.
Еще одна задача RTL-инженера — подготовить документацию, которой будут пользоваться специалисты из смежных команд: верификаторы, системные программисты и другие разработчики. В ней описывают регистры, интерфейсы, состояния, тайминги и ограничения аппаратного блока. Благодаря этому остальные участники проекта понимают, как взаимодействовать с ним и чего ожидать от его работы. Такие документы могут быть весьма объемными: в зависимости от сложности блока их подготовка занимает не меньше времени, чем написание части RTL-кода.
Помимо этого, документируют и само RTL-описание, которое предназначено для других RTL-инженеров. В нем объясняют архитектуру блока, принятые инженерные решения, параметры конфигурации и особенности реализации. Это особенно важно, если над проектом работает несколько разработчиков, код планируется переиспользовать в других проектах или передавать сторонним компаниям.
Какие знания и навыки нужны RTL-инженеру для работы
Есть знания, без которых в профессию будет сложно войти, и те, которые можно постепенно освоить уже в работе. В первую группу входят основы цифровой логики, языки описания аппаратуры и понимание принципов работы цифровых устройств. Более специализированные инструменты и технологии — например, конкретные САПР или особенности отдельных архитектур — вполне можно осваивать уже в процессе.
1. Владение языком описания аппаратуры
Каждый RTL-инженер должен знать языки описания аппаратуры и уметь с ними работать. Это требование вы найдете в вакансиях любого уровня: от стажерских до senior-позиций.
HDL позволяют описать устройство будущей микросхемы: какие аппаратные блоки в ней будут, как они соединены и как должны работать. Результат своей работы на языках описания аппаратуры можно видеть вживую: например, поставить отладочную плату ПЛИС на рабочий стол, описать логическую схему и наблюдать, как она работает в микросхеме. Начать можно с классического мигания светодиодом, добавить ввод через переключатели, а после взять более интересные и наглядные интерфейсы, например VGA или HDMI.
2. Владение скриптовым языком программирования
Язык Tcl понадобится RTL-инженеру для работы с САПР: настраивать инструменты, запускать синтез и проверки, а также задавать параметры проекта без него не получится. А также нужен Shell для работы с Linux и автоматизации рутинных задач: запуска скриптов и инструментов, обработки файлов, сборки проектов и настройки окружения разработки.
3. Знание цифровой логики
RTL-инженер должен понимать цифровую логику на уровне регистровых передач и уметь применять эти знания при проектировании схем. Это означает понимать, как работают комбинационная и последовательностная логика, как данные изменяются от такта к такту, как симулятор интерпретирует HDL-описание и так далее.
4. Понимание паттернов организации схем, микросхемотехники, архитектуры компьютера
Кроме того, нужно знать паттерны организации различных схем. Существует набор стандартных решений, который позволяет не изобретать велосипед. В него входят, например, способы организации кросс-доменной передачи или FIFO.
RTL-инженеру не обязательно знать устройство каждого компонента до последнего транзистора, но важно понимать, где его блок находится в системе и с чем ему придется взаимодействовать.
Как устроены вычислительные блоки, регистры, кэш, память, шины и интерфейсы, как данные проходят через систему. А конкретную архитектуру — например, RISC-V или ARM — нужно знать глубже, если работа связана с ее разработкой. Это важно, потому что RTL-инженер проектирует не изолированный логический блок: его решение должно вписываться в архитектуру всего устройства и корректно взаимодействовать с другими блоками.
5. Владение Linux
Большинство САПР для работы с RTL-кодом адаптированы под Linux-среду. Писать и отлаживать HDL удобнее всего в рамках этой операционной системы. Также Linux позволяет работать с командной строкой, скриптами, файлами и вычислительными ресурсами, на которых выполняются длительные задачи синтеза и моделирования.
6. Английский на уровне чтения технической документации
Большая часть информации, которая понадобится для работы, существует только на английском языке. Часть переписки тоже понадобится вести на нем. Без возможности читать и понимать специфическую терминологию на английском будет сложно. Даже онлайн-переводчики, которые работают на основе машинного перевода, не всегда точны в «инженерном» языке.
7. Знание САПР и другого программного обеспечения
Для создания, контроля версий, тестирования и отладки RTL-кода инженеры используют различные инструменты:
- IDE, которые предоставляют графический интерфейс для редактирования, компиляции и проверки RTL-кода. Например, Xilinx Vivado, Intel Quartus или Synopsys Design Compiler.
- Линтеры для выявления потенциальных проблем в RTL-коде, в том числе Vivado Synthesis или Verible.
- Системы контроля версий для отслеживания и управления изменениями кода, такие как Git или SVN.
- Симуляторы, которые позволяют моделировать и проверять поведение и функциональность RTL-кода до начала синтеза. Например, Xilinx ISE Simulator, ModelSim или Questa.
- Средства верификации, которые позволяют проверить правильность, полноту и качество RTL-кода на соответствие спецификациям и ограничениям. Например, Xilinx Vivado Formal Verification, Intel Formal Verification или Synopsys Formality.
- Средства синтеза для преобразования RTL-кода в нетлист. К примеру. Synopsys Design Compiler, Xilinx Synthesis Technology, Cadence Genus Synthesis Solution, Intel FPGA Synthesis, Synplify или Yosys.
Не пугайтесь обширности списка: уметь работать сразу со всеми инструментами не нужно. Логика их работы похожа, и, научившись работать с одним, перейти на другой несложно. От начинающих специалистов знаний проприетарных САПР обычно не требуют: это дорогостоящие инструменты. А вот в вакансиях для тех, у кого уже есть опыт коммерческой работы, такие требования будут с высокой вероятностью.
Как стать RTL-инженером
Работодатели, принимающие на работу инженера-проектировщика RTL, чаще всего предпочитают, чтобы будущий сотрудник имел соответствующую степень. Например, бакалавра или магистра в области компьютерной инженерии, электротехники, компьютерных наук, проектирования, инженерии, науки, электронной техники, архитектуры, вычислительной техники, информационных систем.
Возможностей для образовательного трека в RTL-дизайн достаточно много.
Для старшеклассников. Начать путь к специальности можно уже в школе. В этом поможет вышеупомянутый «Курс схемотехники для начинающих», где разбирают основы цифровой логики, устройство базовых компонентов микросхем и принципы их работы.
Благодаря курсу вы получите фундамент, необходимый для дальнейшего изучения RTL-разработки, который также пригодится при поступлении в технический вуз и освоении профильных дисциплин там.
Для абитуриентов колледжей и вузов. Базу можно освоить в колледже на специальности
Примеры подходящих специальностей:
- 09.03.01. Информатика и вычислительная техника
- 11.03.03. Конструирование и технология электронных средств
- 11.03.04. Электроника и наноэлектроника
- 27.03.04. Управление в технических системах
Набор учебных дисциплин и уклон обучения зависит от профиля, на который вы поступите. Так что стоит дополнительно проверить, есть ли на нем те курсы по цифровой схемотехнике и процессорным архитектурам, в которых вы заинтересованы. Например, МИЭТ готовит студентов на профиле «Аппаратно-программное обеспечение информационно-управляющих систем», где как раз учат создавать электронную аппаратуру любой сложности.
Помимо обучения в вузе, получить практический опыт можно и на специализированных образовательных проектах. Один из них — Школу синтеза цифровых схем. Новый сезон стартует каждый сентябрь. Участники изучают основы RTL-разработки, синтеза и проектирования цифровых устройств, а также работают над практическими задачами под руководством опытных инженеров.
Еще одна возможность попробовать свои силы — хакатон SoC Design Challenge. Он позволяет применить полученные знания на практике, поработать над реальными инженерными задачами и познакомиться с процессом разработки современных систем на кристалле.
Для выпускников бакалавриата. С высшим техническим образованием свой путь можно продолжить в магистратуре. Например, у YADRO есть партнерская образовательная программа с НИУ МИЭТ. В нее входит не только RTL-проектирование, но верификация цифрового дизайна и топологическое проектирование. Это нужно, потому что часто RTL-инженер — многостаночник, и сам проводит верификацию или берет на себя еще какой-то блок работ в процессе создания микросхемы.

Некоторые вузы предлагают также программы повышения квалификации. Например, в СПбГЭТУ «ЛЭТИ» есть такие курсы и тренинги в разделе «Системы на кристалле». Здесь можно познакомиться с автоматизированным проектированием цифровых устройств на языке Verilog или созданием устройств на базе FPGA.
Стажировки. На последних курсах бакалавриата или в магистратуре можно устроиться на стажировку в компанию. Обычно от стажеров ждут, что они смогут работать от 20 часов в неделю. При успешном прохождении стажировки компании нередко предлагают junior-позицию в штате.
Например, YADRO каждый год проводит летнюю стажировку Импульс, позиции для начинающих RTL-инженеров там тоже есть. Пример задач, над которыми работают стажеры, — это разработка микроархитектурной спецификации или реализации IP-блока, моделирование или отладка подсистемы из проекта системы на кристалле.
Попасть в профессию «горизонтально» будет непросто. Для полноценного понимания логики работы микросхем нужна хорошая техническая база: знания из разных областей постепенно дополняют друг друга и складываются в целостное представление о том, как устроены цифровые устройства. Такую базу проще всего получить в высшем учебном заведении.
При этом попробовать себя в RTL-разработке можно и самостоятельно. Например, писать RTL-код в качестве хобби — среди моих коллег есть и такие инженеры.
Карьерный путь RTL-инженера
Рост RTL-инженера обычно проходит через несколько уровней: по мере накопления опыта и экспертизы усложняются задачи и растет степень самостоятельности. Стажеры, например, учатся запускать тулы, анализируют базовые правила и исправляют типовые нарушения. Более сложные и комплексные проблемы они решают уже с помощью старших коллег, которые могут самостоятельно разрабатывать и настраивать такие правила.
Стажеры и junior-инженеры самостоятельно выполняют не очень сложные задачи. Обычно они не ставят их себе сами: сформулированное задание передает старший специалист, а молодые — реализуют решение. Это может быть какой-то функциональный узел, например AXI Bridge или блок регистра, — стажеру поручают написать для него временные ограничения или провести отладку.
Начинающий специалист набирается опыта и решает широкий класс задач, глубже знакомится со своей предметной областью. Со временем он уже может не только решать задачи, которые ему ставят, а формулировать их самостоятельно и, предлагать варианты решения. Он вырастает в middle-инженера.
Middle, в свою очередь, участвует в проектировании или возглавляет разработку уже какого-то законченного функционального блока. Уметь писать RTL-код такому специалисту недостаточно. Ему нужно уметь адаптировать блоки или подсистемы, к примеру, PCIe-интерфейсы или DDR-контроллеры, к выбранному технологическому процессу, чтобы схему можно было реализовать на конкретной фабрике.
Senior — это инженер с большим опытом, который отвечает не только за реализацию отдельных блоков, но и за технические решения более высокого уровня. Он участвует в разработке архитектуры микросхемы, предлагает способы решения сложных инженерных задач и оценивает последствия своих решений для смежных команд.
На этом уровне важно глубокое понимание не только своей области, но и всего процесса разработки. Старший специалист должен учитывать, насколько предложенное решение повлияет на работу верификаторов, системных программистов, инженеров по физическому проектированию и других специалистов, а также оценивать затраты времени и ресурсов на его внедрение.
А дальше — два классических пути.
Технический трек предполагает дальнейшее углубление экспертизы. Можно стать архитектором, который определяет устройство будущих микросхем и отвечает за ключевые технические решения. Некоторые специалисты со временем становятся признанными экспертами в узких областях — например, в архитектуре микропроцессоров, подсистем памяти или высокоскоростных интерфейсов. Есть и те, кто участвует в разработке международных стандартов, таких как DDR, PCIe или USB.
Менеджерский трек подойдет тем, кому интересно не только решать инженерные задачи, но и развивать команду. Первым шагом обычно становится роль тимлида, которая сочетает техническую работу и управление людьми. Затем можно развиваться в сторону управления продуктом или проектами, занимать руководящие позиции и отвечать уже не за отдельные инженерные решения, а за развитие и продукта, и команды.
Что дальше?
Если поискать вакансии RTL-инженера, в поисковую выдачу попадут страницы компаний, устройствами которых вы наверняка пользуетесь. Такие специалисты нужны всем, кто разрабатывает собственное «железо» под конкретные задачи.
Кроме пользовательской электроники, которая у всех на виду, есть еще целый пласт невидимых обычному пользователю устройств — серверов, систем хранения данных, базовых станций операторского класса, космических спутников. И для всех них нужны микросхемы. Да, многие используют уже готовые решения, которые покупают у других компаний. Но эти готовые решения тоже кто-то должен сначала создать.
И, возможно, этот кто-то — вы.



