Можете ли вы программировать FPGAs на C-подобных языках? [закрытый]

в университете я запрограммировал FPGA на C-подобном языке. Однако я также знаю, что обычно программируют FPGAs в Verilog или VHDL. Это дизайнерский выбор? Если да, то каковы недостатки в работе?

в идеале я хотел бы программировать FPGA на C-подобном языке, а не на VHDL.

Я думал о том, чтобы получить Xilinx Virtex-5, если это имеет значение?

9 ответов


короткий ответ: "Да, конечно".

вот отличный обзор компиляторов C для FPGAs и систем на основе FPGA.

компилятор C-to-hardware (синтез HLL)

недостатки и соображения производительности находятся в системной архитектуре и полосах пропускания связи, а не в использовании C против аппаратного языка проектирования (HDL). Соображения при использовании C против HDL заключаются во времени программирования и проблемах обслуживания программного обеспечения, не так много в исполнении.


FPGA не являются процессорами. C-это язык, предназначенный для процессоров.

Да, есть компиляторы C для FPGA.

Это хорошая идея? Я бы сказал, Нет. Дизайн, который вы собираетесь в конечном итоге (из того, что я видел), обычно является государственной машиной, которая имеет одно состояние на строку кода в C. Затем государственная машина перемещается через состояния, выполняющие алгоритм. Либо это, либо какая-то другая машина Тьюринга устанавливается для выполнения код.

Это не как кто-то опытный в дизайне FPGA обычно подходит к проблеме. Это медленный и потенциально голодный способ делать что-то.

точно так же, как английский-лучший язык для написания романа, чем Fortran, VHDL и Verilog-лучшие языки для описания логических схем, чем C.

Если вы серьезно относитесь к использованию FPGAs, используйте язык, предназначенный для описания логических схем. Это может быть крутое обучение кривая, но результаты будут намного лучше, ИМХО.


вы можете установить мягкий процессор core внутри логика FPGA и запустите код C внутри виртуального процессора. Xilinx имеет ядра Microblaze (лицензированные) и Picoblaze (свободные). Есть и другие мягкие ядра, которые вы можете реализовать (MIPS, x86, 8051 и т. д.).

однако это в значительной степени считается "взломом", так как ядра очень медленные по сравнению с реальными ядрами. И я думаю, что любой преобразование C-to-FPGA в конечном итоге начнет пахнуть как запуск мягкого ядра, а не дать вам эффективность, которую вы заслуживаете для работы на FPGA. FPGAs не машины Тьюринга, они мешок логических ворот. Вы можете построить машину Тьюринга из ворот, но не поэтому вы купили мешок ворот.

Это как купить мешок Лего, и построить молоток и набор гвоздей из кирпичей. Это может сработать, но вам лучше купить молоток, чтобы забивать гвозди, и лучше строить замки, космические корабли и пожарные станции с Лего.


есть действительно некоторые компиляторы, которые позволяют выводить (решать с использованием неполного описания) аппаратные схемы с использованием языка высокого уровня, такого как C. "C-to-gates" на самом деле является популярным модным словом. Имидж компании рекламируют то, что программисты могут писать аппаратные средства, если язык, который они используют, используется для описания программного обеспечения. Это невероятно неправильно по ряду причин, главной из которых являются фундаментальные различия между моделью выполнения, принятой языки, такие как C и языки описания оборудования.

иллюстративный пример: C предполагает в своей основе большую произвольно доступную линейную адресную память-предположение, которое редко выполняется для аппаратного обеспечения. С-С-ворота компилятор сталкивается с сложной задачей interperting в поведение описанной программы и проектирования аппаратной схемы с тем же поведением.

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

надеюсь, это поможет,


Я думаю, вы использовали Гендель C. Его подмножество C. Из того, что я знаю, результат не очень оптимизирован. Verilog и VHDL позволяют больше оптимизации. Я говорю это, основываясь на моем опыте работы с Генделем C несколько лет назад


возможно, вы захотите взглянуть на технологию C-to-hardware, где вы можете написать код C, и он будет скомпилирован/переведен на VHDL или Verilog. этот пост перечисляет несколько компиляторов. Я не использовал его сам, поэтому у меня нет никакого опыта с ним. Надеюсь, это поможет!


многие дизайнеры пишут VHDL / Verilog вместо языка высокого уровня по тем же причинам, по которым многие программисты использовали (и до сих пор в некоторых случаях) пишут сборку вместо Java: вы можете настроить использование ресурсов и производительность на низком уровне. Как VHDL и Verilog-языки, предназначенные для проектирования оборудования. C не. Имея достаточно времени, вы всегда можете написать программу в VHDL / Verilog, которая превзойдет языковую программу высокого уровня. То, что HLL дает вам 1) более быстрое развитие, 2) легкость обслуживания, и 3) по возможности большая удобоносимость.

было много усилий для компиляции существующих языков программирования высокого уровня (C-один) для целей FPGA. Большинство из них действительно генерируют оптимизированный код. Например, Impulse C-это подмножество C с некоторыми дополнительными библиотеками, поддерживающими параллелизм на уровне процесса, а также компилятор, оптимизирующий вход C для параллелизма на уровне инструкций. ИТ-трубопроводы петли, сопоставляет определенные операции с высокой производительностью аппаратные примитивы он знает, что базовое семейство FPGA обеспечивает и т. д. (Полное раскрытие: я помог построить цепочку инструментов Impulse C.)

на среды C-to-hardware список Карлито и Дэвид указатель ссылка на довольно исчерпывающим. Xilinx Virtex-5 поддерживается многими из них, и если вы используете любое недавнее семейство FPGA от крупного поставщика, выбор оборудования не должен быть проблемой. Некоторые из сред HLL поддерживают встроенные (или softcore) встроенные процессоры лучше, чем другие.


вы должны взглянуть на SystemC. Преимущества использования языка на основе C многочисленны. Особенно, с точки зрения системного проектирования вы можете использовать, что ваше другое программное обеспечение (прошивка и другие низкоуровневые вещи) написано в C. следовательно, ваша команда программного обеспечения может на очень ранней стадии тестирования против rtl-кода.

в 2011 году Xilinx купил компанию AutoESL, которая разработала синтез высокого уровня с SystemC. Xilinx повторно использовал имя, когда выпустил свой продукт "AutoESL". Особенно с их новой схемой Zynq, двухъядерной ARM Cortex A9, встроенной вместе с логикой FPGA, это, вероятно, станет мощным инструментом для разработки системы.


Я хотел бы добавить что-то, что я считаю самым близким ответом на вопрос OP. Если вы ищете C-подобный язык (который не совпадает с C), вы обязательно должны проверить Synflow. Идея состоит в том, чтобы иметь современный язык, который позволяет проектировать быстрее без кривой обучения VHDL/Verilog и без накладных расходов. Также это бесплатно и с открытым исходным кодом!

раскрытие информации: я соучредитель Synflow: -)