Подтвердить что ты не робот

Можете ли вы программировать FPGA на языках C?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Это не то, как кто-то, кто умеет разрабатывать ПЛИС, обычно подходит к проблеме. Это медленный и, возможно, голодный голодный способ делать что-то.

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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