Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Дополнительные возможности [ править ]

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

Параллельные программы [ править ]

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

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

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

Каналы [ править ]

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

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

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

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

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

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

Например:

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

Расширения языка C [ править ]

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

Планирование [ править ]

В 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 в Национальной лаборатории Лос-Аламоса (теперь лицензированы для Impulse Accelerated Technologies под названием Impulse C ).

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Ресурсы языка Handel-C в Mentor Graphics
  • Оксфорд Хендель-C