Handel-C

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

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

Содержание
  • 1 Дополнительные возможности
    • 1.1 Параллельные программы
    • 1.2 Каналы
    • 1.3 Совместное использование объема и переменных
    • 1.4 Расширения языка C
    • 1.5 Планирование
  • 2 История
  • 3 Ссылки
  • 4 Внешние ссылки
Дополнительные возможности

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

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

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

Например:

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

Каналы

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

par {chan int a; // объявляем синхронный канал int x; // начинаем отправку потока seq (i = 0; i < 10; i++) { a ! i; // send the values 0 to 9 sequentially into the channel } // begin receiving thread seq (j = 0; j < 10; j++) { a ? x; // perform a sequence of 10 reads from the channel into variable x delay; // introduce a delay of 1 clock cycle between successive reads // this has the effect of blocking the sending thread between writes } }

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

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

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

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

Например:

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

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

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

Типы и объектыВыраженияВыражения
чан<...>(уточняющий тип)! (отправить в канал)
chanin[:] (выбор диапазона бит)? (чтение из канала)
chanout\\ (drop)delay
macro expr<- (take)ifselect
external@ (оператор конкатенации)установить intwidth
external_divideвыбратьlet...; in
inlinewidthpar
interfaceprialt
internalreleasesema
internal_divideset clock
mpramset family
macro procset part
ramset reset
romseq
sematry {...} reset
sharedtrysema
сигналс
типом
undefined
wom

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

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

История

Исторические корни 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 прекратила свою деятельность после того, как не смогла получить дополнительные капитальные вложения или кредит.

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

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

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

.

Последняя правка сделана 2021-05-22 12:22:12
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте