Оптимизация кода Vhdl для низкопроизводительных Fpga-проектов

Проектирование систем FPGA с низким энергопотреблением стало не подлежащим обсуждению требованием в современном цифровом дизайне, особенно для портативных, работающих от батарей и термически ограниченных приложений. Поскольку программируемые на полевых условиях массивы ворот (FPGA) все чаще развертываются в периферийных вычислениях, устройствах IoT и беспроводной инфраструктуре, способность уменьшать потребление энергии без ущерба для производительности дает решающее конкурентное преимущество. VHDL (VHSIC Hardware Description Language) остается краеугольным языком для разработки FPGA. Однако многие дизайнеры уделяют основное внимание функциональности и закрытию времени, упуская из виду значительную экономию энергии, которую могут разблокировать дисциплинированные методы кодирования VHDL. Эта статья обеспечивает углубленное изучение методов оптимизации кода VHDL, специально предназначенных для реализации FPGA с низким энергопотреблением. Понимая физику рассеивания мощности, принимая эффективные стили кодирования, используя инструменты синтеза и проверяя мощность на ранних этапах цикла проектирования, инженеры могут систематически создавать проекты FPGA, которые работают с минимальными затратами энергии.

Основы энергопотребления в FPGA

Для оптимизации VHDL-кода для малой мощности конструктор должен сначала ухватить два основных компонента энергопотребления FPGA: динамическую мощность и статическую мощность. Динамическая мощность доминирует во время активной работы и регулируется хорошо известным уравнением \(P {dynamic} = \alpha \cdot C \cdot V^2 \cdot f\), где \(\alpha\) является коэффициентом активности переключения (среднее число переходов сигнала на тактовый цикл), \(C\) - емкостной нагрузкой, заряжаемой/разряжаемой, \(V\) - напряжением питания, а \(f\) - тактовой частотой. Статическая мощность, также известная как мощность утечки, - это мощность, потребляемая даже при неактивном выходе FPGA из подпороговой герметизации транзистора и утечке затвора. В продвинутых технологических узлах статическая мощность может составлять значительную долю общего рассеивания.

Архитектуры FPGA вносят дополнительный вклад в источники потребления, которые отличаются от ASIC. Программируемое межсоединение является основным потребителем мощности из-за длинных маршрутов маршрутизации и многих проходных транзисторов. Сами логические блоки, будь то LUT или ALM, также рассеивают мощность на основе настроенной функции. Часовые сети, которые распределяют сигнал высокой мощности по всему чипу, могут потреблять 20-30% общей динамической мощности, если не управлять тщательно. Следовательно, стратегии оптимизации VHDL должны учитывать не только логическую функцию, но и выбор синтеза и размещение, которые влияют на эти архитектурные компоненты.

Методы кодирования VHDL для снижения энергопотребления

1.Время прогулок

Часовое галстукование является одним из наиболее эффективных методов снижения динамической мощности. При отключении тактового сигнала к неактивным модулям активность переключения в этих блоках падает до нуля, устраняя мощность, потраченную впустую на ненужную зарядку и разрядку последовательных элементов. В VHDL галстук часов может быть реализован путем ANDing глобальных часов с включенным сигналом, но требуется осторожность, чтобы избежать сбоев. Более безопасным методом является использование выделенных часов FPGA, позволяющих пин-код на флип-флоп (обычно CE pin), который не закрывает само дерево часов, но предотвращает переключение флипа, когда это не требуется. Для больших блоков рекомендуется зарегистрированный тактовый ворот с использованием выделенного библиотечного элемента. Следующий фрагмент VHDL показывает локальный флэш-час:

Этот шаблон использует встроенную функцию flip-flop, сохраняя распределение часового дерева и избегая опасности закрытых часов. Для забитых часов на уровне блока, инстанцируйте ячейку часового боя поставщика (например, BUFGCE на устройствах Xilinx) для выключения секций часового дерева в периоды простоя.

2. Минимизация коммутационной активности

Переключение активности (\(\alpha\)) непосредственно умножает динамическую мощность. VHDL-код может вводить ненужные переключатели через плохие протоколы связи, избыточные назначения сигналов или неэффективное кодирование состояния.

3. Эффективное государственное кодирование для конечных государственных машин

Выбор кодирования состояния непосредственно влияет на активность переключения, область и время. Для проектов с низкой мощностью однократное кодирование (каждый бит состояния соответствует одному состоянию) сводит к минимуму количество переходов между активными состояниями, потому что при переходе из состояния А в состояние В переключается только два бита: текущий бит становится низким, а следующий - высоким. Однако однократное кодирование увеличивает количество используемых шлепанцев, что может повысить статическую мощность. Для машин состояния со многими состояниями (например, 16 или более) двоичное кодирование может фактически производить меньшую общую мощность, потому что меньше флипов являются активными. Лучший подход - имитировать ожидаемые переходы состояния и оценивать эффективную переключающую активность для обеих схем кодирования. На практике однократное кодирование часто предпочтительнее для машин малого и среднего состояния, где производительность имеет решающее значение, в то время как двоичное или серое кодирование подходит для более крупных машин с последовательными переходами.

4. Пипелинирование и сокращение распространения сбоев

Сбои — это короткие непреднамеренные переходы сигналов, которые распространяются через комбинационную логику, вызывая дополнительное рассеивание мощности в цепях нисходящего потока. Глубокие комбинационные пути особенно подвержены сбоям, потому что различные задержки входного сигнала заставляют логику временно выводить неправильное значение перед оседанием. Пипелининговые вставки регистрируются в этих длинных путях, разбивая их на более короткие стадии. Каждая стадия имеет время оседать перед следующим кромкой часов, резко уменьшая распространение сбоев. Ретиминг, метод синтеза, который автоматически перемещает регистры через логические границы для балансировки задержки, может дополнительно уменьшить сбои без изменения общей задержки. При написании VHDL дизайнеры должны избегать чрезмерно глубоких заявлений о случаях или запутанных комбинационных логических структур; вместо этого, структурировать код в стадии трубопровода, которые четко разделены регистрами. Сбережение мощности от уменьшенного сбоя может быть удивительно большим — часто 10-20% динамической мощности в проектах с интенсивной передачей данных.

5. Использование включения часов и режимов питания

Современные FPGA поддерживают несколько тактовых доменов и островков питания. В то время как VHDL не может напрямую управлять источником питания, код может инстанцировать или включать модули только тогда, когда это необходимо. Например, беспроводному приемнику может потребоваться только блок обработки базовой полосы при приеме пакета. При включении тактовых частот этого блока (с использованием функции Flip-flop CE) или при утверждении сброса, который отключает логику, активность переключения уменьшается. Для блоков с независимыми тактовыми доменами инструмент синтеза может применять автоматическое тактирование, если VHDL подразумевает условную работу. Разработчики также должны рассмотреть вопрос о добавлении сигнала «подавление мощности», который останавливает дерево часов или заставляет логику в состояние низкой активности.

6. Совместное использование ресурсов для сокращения площади и переключения

Когда на разных данных выполняются несколько аналогичных операций, совместное использование аппаратных ресурсов (например, один множитель или ALU, используемый в режиме мультиплексирования во времени) уменьшает общее количество логических ячеек и ресурсов маршрутизации, тем самым уменьшая как динамическую, так и статическую мощность. В VHDL это достигается путем вывода мультиплексированных паттернов данных. Например, вместо того, чтобы инстанцировать два отдельных аддитора для двух дополнений, которые никогда не происходят одновременно, используйте один аддитор с мультиплексором на своих входах. Сам мультиплексор добавляет небольшое переключение, но общее сокращение площади и емкости межсоединения обычно дает чистую экономию энергии. Инструменты синтеза также могут автоматически выполнять совместное использование ресурсов, если VHDL написан таким образом, который предполагает повторное использование - например, использование одного назначения сигнала переменной, которая обновляется в разных тактовых циклах.

Методы синтеза и внедрения для малой мощности

В то время как кодирование VHDL закладывает основу для низкой мощности, этапы синтеза и реализации также предлагают мощные рычаги. Современные поставщики FPGA предоставляют варианты синтеза, которые нацелены на низкую мощность. Например, Xilinx Vivado включает в себя стратегию синтеза «Power Optimization», которая использует оптимизацию на основе тактового воротника, сетчатку и LUT для минимизации переключения. Intel Quartus Prime предлагает аналогичные настройки в разделе Оптимизация мощности. Дизайнеры всегда должны включать эти параметры и проверять, что они не ухудшают закрытие времени. Кроме того, инструменты места и маршрута могут быть направлены на снижение динамической мощности, указывая ограничения размещения, которые сокращают сети высокой активности. Более короткие провода имеют меньшую емкость. Использование плана этажа, который группирует высокоскоростные блоки высокой активности близко друг к другу, снижает накладные расходы на маршрутизацию.

Оценка мощности является важной частью потока. Такие инструменты, как Xilinx Power Estimator (XPE) и Intel PowerPlay, обеспечивают ранние оценки, основанные на скоростях переключения, тактовых частотах и выборе устройства. Эти оценки становятся более точными после синтеза и реализации, когда могут быть импортированы реальные данные скорости переключения от моделирования (обычно в формате VCD или SAIF). Дизайнеры должны запускать моделирование мощности с репрезентативными векторами ввода для захвата реалистичной активности переключения. Распространенной ошибкой является использование наихудшего случая статического анализа, который переоценивает динамическую мощность; использование фактических переключателей дает более точную картину.

Внешние ресурсы для дальнейшего чтения:

Проверка и валидация низкоэнергетических конструкций

Оптимизация с низким энергопотреблением должна проверяться на ранней стадии и непрерывно. Моделирование дизайна с типичными и наихудшими шаблонами ввода при сборе активности переключения с использованием тест-скрипта VHDL. Многие инструменты моделирования могут генерировать файл оценки изменения значения (VCD); этот файл может быть прочитан инструментами оценки мощности для вычисления фактической динамической мощности. Для статической мощности инструмент использует значения утечки для целевого устройства. Разработчики также должны проверить, что сигналы амортизации часов не вводят нарушения удержания или настройки, и что логика включения не создает сбоев, которые распространяются на регистры. Формальные инструменты проверки могут сравнивать намерение мощности RTL с реализованным списком, чтобы обеспечить правильное применение оптимизацией, такой как амортизация часов.

Еще одна лучшая практика заключается в разделении дизайна на энергетические домены в иерархии VHDL. Благодаря четкому разделению модулей, которые могут работать при различных напряжениях или частотах, дизайн становится легче оптимизировать с помощью IP-адреса управления мощностью для конкретного поставщика. Например, система может иметь высокопроизводительный домен (например, для DSP), который работает на 200 МГц, и домен управления, который работает на 20 МГц. В VHDL эти домены должны быть инстанцированы в отдельных объектах с собственным тактовым вводом и включением сигналов. Инструмент синтеза может затем применять различные стратегии оптимизации для каждого домена.

Лучшие практики для низкоэнергетического VHDL-дизайна - краткое изложение

Заключение

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