2009-12-21 3 views
4

Я продолжаю слышать в основном от инженеров-электриков, что C используется для работы fpga.fpga: выбор C++ для программирования fpga

Что относительно C++? Есть ли недостатки в использовании C++? Я бы подумал, что параллелизм, требуемый при программировании на аппаратное обеспечение, будет лучше обслуживаться C++ больше, чем C, нет?

Также что я использую после этого, чтобы сделать совместимый C++ с оборудованием?

+2

Вы имеете в виду программирование FPGS f/w с помощью C или доступ к работающей FPGA из приложения C? В последнем случае я не понимаю, почему C++ нельзя использовать. Вы также можете посмотреть SystemC. Это не предназначено для программирования FPGA, хотя я полагаю, что тщательно написанный код SystemC потенциально может быть переведен на HDL. С другой стороны, если вы пишете код, используя только конструкты SystemC, вы также можете писать в VHDL или Verilog. –

ответ

16

Я уверен, что FPGA запрограммированы либо в VHDL, либо в Verilog.

http://en.wikipedia.org/wiki/Vhdl

http://en.wikipedia.org/wiki/Verilog

Я знаю, что Altera также предлагает некоторые C к HDL переводчиков. Я сомневаюсь, что они полезны для чего угодно, кроме крошечных проектов.

+0

Я могу сказать, что все работы FPGA, которые я сделал, были в Verilog – GrayWizardx

+0

Я сделал некоторые из AHDL (http://en.wikipedia.org/wiki/Altera_Hardware_Description_Language) - но это аналогичный язык для VHDL. –

+1

+1. Просто уточнить - писать C для FPGA просто не имеет смысла. FPGA - это все (параллельная) обработка цифрового сигнала, а не последовательное процедурное программирование. Вы можете перевести C в Verilog, а затем синтезировать его в аппаратное обеспечение, но это похоже на то, чтобы вырезать волосы с помощью топора. Кроме того, есть несколько мягких реализаций процессора для FPGA (например, Microblaze), и вы можете написать программу на C и запустить ее на этом мягком процессоре, но опять же - она ​​почти не имеет никакого отношения к программированию ПЛИС. – 2012-04-10 13:12:13

8

Далеко и прочь самый простой способ программирования FPGA - через модуль FPGA LabView. Однако это также связывает вас с оборудованием и программным обеспечением. Не дешевое решение, но, безусловно, самый быстрый способ получить вашу программу на аппаратных средствах, не изучая ничего, кроме LabVIEW.

1

Два, что я могу вспомнить от головы: C++ гораздо сложнее писать компиляторы (в данном случае, HDL-переводчики) для и имеет слишком много функций, которые просто не будут полезны при таком низкоуровневом программировании, как Программирование fpga требует.

4

Возможно, они используют интерфейс C с ПЛИС. При работе с одним из классов дизайна мы использовали Verilog для программирования FPGA и C на прилагаемой Linux-плате. В этом случае они, скорее всего, используют C, так как проще выбить небольшую программу на C, чем на C++.

1

Как и другие, большинство ПЛИС сконструированы с использованием VHDL или Verilog. Я также видел PALASM несколько лет назад для небольших проектов. Конструкция представляет собой логическое описание, которое преобразуется в настройки, которые настраивают FPGA. Verilog основан на c, поэтому знание c поможет с изучением verilog, однако FPGA по своей природе параллельны, так что синтаксис может выглядеть похожим, а не иначе.

+0

PALASM очень устарел (используется в 1980-х годах так). –

-2

Обычно вы получаете большую стандартную библиотеку с C++ и C, а C ближе к тому, как работает оборудование, то есть проще для инженеров-электриков.

5

Существует большая разница между компиляцией для процессоров и компиляцией для ПЛИС. «Нормальные» компиляторы генерируют двоичный программный код. Специальные компиляторы FPGA генерируют «аппаратное обеспечение». Есть компиляторы, которые превращают C-подобный код в «hardware». Но это не совсем C. Это может быть производная C, протяженная с целыми типами произвольных битовых длин и, вероятно, ограничена итерацией и нерекурсивными вызовами функций.

Я большой поклонник C++, но даже я вижу, что многие его части просто не подходят для FPGA: виртуальные функции, RTTI, исключения. По крайней мере, это мое впечатление. Я не тестировал сами компиляторы C-like FPGA, но мой приятель работал с ними, и это, предположительно, PITA.

+0

«специальные компиляторы FPGA» охватывает несколько инструментов: синтез; отображение; место и маршрут – shuckc

3

Возможно, вы говорите о SystemC, который представляет собой набор классов и макросов C++, используемых главным образом для моделирования на уровне транзакций, а не для синтеза. Модель высокого уровня может затем использоваться в качестве золотой ссылки для проверки описания уровня передачи регистра (RTL), который обычно кодируется в VHDL или Verilog.

+0

Однако использование SystemC требует использования довольно дорогостоящих инструментов синтеза - по крайней мере, в десятках тысяч долларов. Определенно не можете использовать бесплатные инструменты поставщика FPGA. – aneccodeal

6

Вы можете использовать C или C++ для программирования FPGA, но для этого требуется очень дорогое программное обеспечение Highlevel Synthesis. CatapultC - это продукт от Mentor Graphics, который позволяет вам писать свой алгоритм в неигровом C++. Затем он синтезирует этот C++ в RTL VHDL или Verilog. Но CatapultC продает за более чем 100 000 долларов, так что это определенно не для любителей. Есть еще один продукт под названием ImpulseC, который позволяет вам писать код C, который затем синтезируется в RTL, но я уверен, что он обрабатывает C не C++. ImpulseC составляет около 2000 долларов.

Для любителей, вы, вероятно, лучше всего придерживаетесь VHDL или Verilog, чтобы описать свой дизайн, а затем использовать бесплатные инструменты от Xilinx или Altera, чтобы синтезировать этот код и программировать FPGA.

+0

Есть CtoVerilog: http://www.c-to-verilog.com/ – aneccodeal

+0

@aneccodeal aye corumba $ 100k! –

1

Что вы имеете в виду это «поведенческой синтез», метод компиляции, что позволяет принимать последовательный код в качестве входных данных (C, SystemC, C++) и генерировать автоматически пару FSM + DATAPATH в VHDL или Verilog , которые затем могут быть синтезированы с использованием обычных синтезаторов Xilinx или Altera.

На сегодняшний день есть много "поведенческих синтезаторов":

  • CatapultC от Mentor Graphics позволяет использовать большое подмножество C, а также C++
  • Cynthesizer из системы Forte Design (SystemC основы) [ редактировать 2015: Теперь Cadence]
  • для FPGA, ImpulseC кажется вполне зрелым
  • [редактировать 2015] для Xilinx FPGA: Vivado-HLS

Надеется, что это помогает

1

Они могли бы говорить о языке программирования, как Handel-C, который является своим родом C диалекта, целевой для аппаратного программирования. Handel-C можно прямо или косвенно скомпилировать на HDL, что, в свою очередь, создает конфигурацию FPGA (т. Е. «Программу» на FPGA).

Хотя VHDL и Verilog гораздо труднее изучить, я предлагаю вам сразу начать. Когда вы делаете связанные с FPGA вещи, вас обычно интересует эффективность. Handel-C скорее всего сделает менее эффективный код, чем код, который вы можете написать вручную (в VHDL или Verilog).

Редактировать: Нет версии C++ для Handel-C или связанных компиляторов, с которыми я когда-либо работал.

-1

Не уверен, что это было сказано (я не читал все ответы), но это вероятность того, что то, что вы слышите, - это работающее программное обеспечение в мягком ядре ... Например, у Altera есть Nios II, который может запускать ядро ​​linux (uCLinux), которое позволит запускать некоторые предварительно загруженные программы на этом мягком ядре, которое, в свою очередь, связывается с FPGA. Таким образом, FPGA по-прежнему будет запрограммирована с VHDL/Verilog для аппаратной части, тогда любые данные, которые она может хранить, могут быть доступны для небольшого приложения, работающего на ОС в мягком ядре. Я уверен, что C++ будет разрешен до тех пор, пока uCLinux/любое ядро ​​работает под управлением языка.

~ Doddy

0
  1. Вы можете использовать мягкий процессор, работающий на FPGA и кода в C оттуда (Nios от Altera, Xilinx MicroBlaze от и т.д.).
  2. SOC FPGA с использованием OpenCL для взаимодействия с FPGA от процессора ARM.
0

Вы можете использовать C/C++ для программирования FPGA. Xilinx имеет SDSoC, инструмент, основанный на затмении, для программирования ваших ПЛИС с использованием C/C++. Это в основном создает аппаратный ускоритель для части кода, помеченного как синтезируемый. Это подразумевает устройства zynq на основе ARM + FPGA, хост-код работает на ARM

Существует еще один прототип SDAccel для ПК. С кодом хоста на X86 & акселератор на FPGA, подключенном к вашему слоту PCIe.

Смежные вопросы