Гендель-C - Handel-C

Гендель-C
ПарадигмаИмператив (процедурный, структурированный ), одновременный
РазработаноВычислительная лаборатория Оксфордского университета
РазработчикESL; Целоксика; Ловкость; Наставник Графика
Впервые появился1996
Стабильный выпуск
v3.0
Печатная дисциплинаСтатический, манифест, номинальный, предполагаемый
Операционные системыКроссплатформенность (мультиплатформенность)
Расширения имени файла.hcc, .hch
Интернет сайтwww.наставник.com/товары/ fpga/ handel-c/
Основной реализации
Celoxica DK http://192.168.100.187
Под влиянием
C, CSP, Оккам

Гендель-C это высокий уровень язык программирования который нацелен на низкоуровневое оборудование, чаще всего используется при программировании ПЛИС. Это богатое подмножество C, с нестандартными расширениями для управления созданием аппаратных средств с упором на параллелизм. Handel-C предназначен для проектирования аппаратного обеспечения тем же, чем были первые языки программирования высокого уровня для программирования процессоров. В отличие от многих других языков дизайна, ориентированных на конкретную архитектуру, Handel-C может быть скомпилирован для ряда языков дизайна и затем синтезирован на соответствующем оборудовании. Это позволяет разработчикам сосредоточиться на задаче программирования, а не на особенностях конкретного языка дизайна и архитектуры.

Дополнительные возможности

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

Параллельные программы

Чтобы облегчить способ описания параллельное поведение несколько из CSP используются ключевые слова вместе с общей файловой структурой Оккам.

Например:[1]

номинал {         ++c;     а = d + е;     б = d + е;}

каналы

каналы обеспечить механизм для передача сообщений между параллельные потоки. Каналы могут быть определены как асинхронные или синхронные (с предполагаемым элементом хранения или без него соответственно). Поток, записывающий в синхронный канал, будет немедленно заблокирован пока соответствующий поток прослушивания не будет готов принять сообщение. Точно так же получающий поток будет блокировать инструкцию чтения до тех пор, пока отправляющий поток не выполнит следующую отправку. Таким образом, они могут использоваться как средство синхронизация потоки.[1]

номинал {    чан int а; // объявляем синхронный канал    int Икс;    // начинаем отправку потока    seq (я = 0; я < 10; я++) {        а ! я;  // последовательно отправляем значения от 0 до 9 в канал    }    // начинаем получать поток    seq (j = 0; j < 10; j++) {        а ? Икс;  // выполняем последовательность из 10 чтений из канала в переменную x        задерживать;  // вводим задержку в 1 такт между последовательными чтениями                // это приводит к блокировке потока отправки между операциями записи    }}

Асинхронные каналы предоставляют определенный объем хранилища для данных, проходящих через них в форме ФИФО. Хотя этот FIFO не является ни полным, ни пустым, потоки отправки и получения могут продолжаться без блокировки. Однако, когда FIFO пуст, принимающий поток блокируется при следующем чтении. Когда он заполнен, отправляющий поток блокируется при следующей отправке. Канал с актерами в разных часы домены автоматически асинхронный из-за необходимости хотя бы одного элемента хранилища для смягчения метастабильность.

Поток может одновременно ожидать на нескольких каналах, синхронных или асинхронных, воздействуя на первый доступный с заданным порядком приоритета или, возможно, исполняя альтернативный путь, если ни один из них не готов.

Совместное использование области и переменных

Объем объявлений ограничен блоками кода ({ ... }), в котором они были объявлены, область действия является иерархической по своей природе, поскольку объявления находятся в области действия внутри субблоков.[1]

Например:

int а;пустота главный(пустота){   int б;   / * "a" и "b" находятся в пределах видимости * /   {     int c;     / * "a", "b" и "c" находятся в пределах области действия * /    }   {     int d;     / * "a", "b" и "d" находятся в пределах области действия * /     }}

Расширения языка C

Помимо эффектов, стандартная семантика C имеют в сроках программы следующие ключевые слова[1] зарезервированы для описания практических аспектов среды FPGA или для языковых элементов, полученных от Оккама:

Типы и объектыВыраженияЗаявления
чан<...> (тип уточняющий)! (отправить в канал)
чанин[:] (выбор битового диапазона)? (читать с канала)
шанут (уронить)задерживать
макрос expr<- (взять)ifselect
внешний@ (оператор конкатенации)установить ширину интервала
external_divideВыбратьпозволять ... ; в
в соответствииширинаноминал
интерфейсПриальт
внутреннийрелизсема
internal_divideустановить часы
мпрамустановить семью
макросустановить часть
баранустановить сброс
ПЗУseq
семапопробуйте {...} сбросить
общийтрисема
сигналс
тип
неопределенный
женщина

Планирование

В Handel-C назначение и команда задержки занимают один цикл. Все остальные операции «бесплатные».[1] Это позволяет программистам вручную планировать задачи и создавать эффективные трубопроводы. Путем организации циклов параллельно с правильными задержками конвейеры могут значительно увеличить пропускную способность данных за счет увеличения использования аппаратных ресурсов.

История

Исторические корни Handel-C лежат в серии Вычислительная лаборатория Оксфордского университета языки описания оборудования, разработанные группой компиляции оборудования. Handel HDL превратился в Handel-C примерно в начале 1996 года. Технология, разработанная в Оксфорде, была выделена и стала краеугольным продуктом Embedded Solutions Limited (ESL) в 1996 году. ESL была переименована в Celoxica в сентябре 2000 года.

Handel-C был принят многими исследовательскими группами университетского оборудования после его выпуска ESL, в результате чего он смог зарекомендовать себя в качестве предпочтительного инструмента проектирования оборудования в академическом сообществе, особенно в Соединенном Королевстве.

В начале 2008 года подразделение Celoxica по производству ESL было приобретено компанией Agility, которая, среди прочего, разрабатывала и продавала инструменты ESL, поддерживающие Handel-C.

В начале 2009 года Agility прекратила свою деятельность из-за невозможности получить дополнительные капитальные вложения или кредит.[2]

В январе 2009 года Mentor Graphics приобрела активы синтеза C. Agility.[3]

Другая подгруппа C HDL, разработанная примерно в то же время, - это Transmogrifier C в 1994 г. Университет Торонто (теперь FpgaC проект с открытым исходным кодом) и Streams-C на Лос-Аламосская национальная лаборатория (теперь имеет лицензию на Импульсные ускоренные технологии под именем Импульс C )

Рекомендации

  1. ^ а б c d е «Архивная копия» (PDF). Архивировано из оригинал (PDF) 31 марта 2010 г.. Получено 2010-03-31.CS1 maint: заархивированная копия как заголовок (связь) Справочное руководство по языку Handel-C
  2. ^ Гейб Моретти (19 января 2009 г.). «Agility DS - жертва кредитного кризиса». EETimes.com.
  3. ^ Дилан МакГрат (22 января 2009 г.). "Mentor покупает активы синтеза C Agility". EETimes.com.

внешняя ссылка