Трейд-С
Парадигма | Императивный ( процедурный , структурированный ), совпадающий |
---|---|
Разработано | Вычислительная лаборатория Оксфордского университета |
Разработчик | английский как английский язык; Целоксика; Ловкость; Наставник Графика; Сименс ЭДА |
Впервые появился | 1996 |
Стабильная версия | v3.0
|
Дисциплина набора текста | Статический , явный , номинальный , предполагаемый |
ТЫ | Кроссплатформенность (мультиплатформенность) |
Расширения имен файлов | .hcc, .hch |
Веб-сайт | Эда |
Основные реализации | |
Целоксика ДК | |
Под влиянием | |
С , КСП , Оккам |
Handel-C — это язык описания аппаратного обеспечения высокого уровня, предназначенный для аппаратного обеспечения низкого уровня и чаще всего используемый при программировании FPGA . Handel-C предназначен для проектирования аппаратного обеспечения тем же, чем первые языки программирования высокого уровня были для программирования процессоров . Это полное по Тьюрингу подмножество языка программирования C с упором на параллельные вычисления .
В отличие от многих других языков проектирования аппаратного обеспечения (HDL), ориентированных на конкретную компьютерную архитектуру, Handel-C можно скомпилировать в несколько HDL, а затем синтезировать на соответствующем оборудовании. Это позволяет разработчикам сосредоточиться на текущей задаче программирования, а не на особенностях конкретного языка дизайна и архитектуры.
Дополнительные возможности [ править ]
Подмножество C Handel-C включает в себя все общие функции языка C, необходимые для описания сложных алгоритмов . Как и во многих встроенных компиляторах C, типы данных с плавающей запятой были опущены. Арифметика с плавающей запятой поддерживается с помощью внешних библиотек , которые очень эффективны.
Параллельные программы [ править ]
Чтобы облегчить описание параллельного поведения, некоторые ключевые слова взаимодействующих последовательных процессов используются (CSP), а также общая файловая структура языка программирования Occam .
Например: [1]
par {
++c;
a = d + e;
b = d + e;
}
Каналы [ править ]
Каналы предоставляют механизм передачи сообщений между параллельными потоками . Каналы могут быть определены как асинхронные или синхронные (с предполагаемым элементом хранения или без него соответственно). Поток, записывающий в синхронный канал, будет немедленно заблокирован до тех пор, пока соответствующий прослушивающий поток не будет готов принять сообщение. Аналогично, поток-получатель блокирует оператор чтения до тех пор, пока поток-отправитель не выполнит следующую отправку. Таким образом, их можно использовать как средство синхронизации потоков. [1]
par {
chan int a; // declare a synchronous channel
int x;
// begin sending thread
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 пуст, принимающий поток блокируется при следующем чтении. Когда он заполнится, отправляющий поток заблокируется при следующей отправке. Канал с участниками в разных тактовых доменах автоматически становится асинхронным из-за необходимости наличия хотя бы одного элемента хранилища для смягчения метастабильности .
Поток может одновременно ожидать на нескольких каналах, синхронных или асинхронных, действуя в соответствии с первым доступным каналом с заданным приоритетом или, при необходимости, выполняя альтернативный путь, если ни один из них не готов.
Совместное использование области видимости и переменных [ править ]
Область объявлений ограничена блоками кода ( { ... }
), в котором они были объявлены, область действия является иерархической по своей природе, поскольку область действия объявлений находится внутри подблоков. [1]
Например:
int a;
void main(void)
{
int b;
/* "a" and "b" are within scope */
{
int c;
/* "a", "b" and "c" are within scope */
}
{
int d;
/* "a", "b" and "d" are within scope */
}
}
Расширения языка C [ править ]
В дополнение к влиянию стандартной семантики C на время выполнения программы, следующие ключевые слова [1] зарезервированы для описания практических особенностей среды FPGA или для элементов языка, полученных из Occam:
Типы и объекты | Выражения | Заявления |
---|---|---|
тян | <...> (уточнитель типов) | ! (отправить в канал) |
количество | [ : ] (выбор битового диапазона) | ? (читать с канала) |
шанут | \\ (уронить) | задерживать |
выражение макроса | <- (взять) | если выбрать |
внешний | @ (оператор конкатенации) | установить по ширине |
external_divide | выбирать | позволять ... ; в |
в соответствии | ширина | для |
интерфейс | первоочередной | |
внутренний | выпускема | |
внутренний_делитель | установить часы | |
мпрам | установить семью | |
макрос | часть набора | |
баран | установить сброс | |
ПЗУ | последовательность | |
сема | попробуйте { ... } сбросить | |
общий | тризема | |
сигнал | с | |
типоф | ||
неопределенный | ||
женщина |
Планирование [ править ]
В 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 приобрела активы Agility по синтезу C. [3]
Другими подмножествами C HDL, разработанными примерно в то же время, являются Transmogrifier C в 1994 году в Университете Торонто (ныне проект с открытым исходным кодом FpgaC ) и Streams-C в Национальной лаборатории Лос-Аламоса (теперь лицензированный Impulse Accelerated Technologies под названием Impulse C ).
См. также [ править ]
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б с д и «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 31 марта 2010 г. Проверено 31 марта 2010 г.
{{cite web}}
: CS1 maint: архивная копия как заголовок ( ссылка ) Справочное руководство по языку Handel-C - ^ Гейб Моретти (19 января 2009 г.). «Agility DS — жертва кредитного кризиса» . EETimes.com.
- ^ Дилан МакГрат (22 января 2009 г.). «Mentor покупает активы Agility по синтезу C» . EETimes.com.
Внешние ссылки [ править ]
- Ресурсы по языку Handel-C в Mentor Graphics
- Оксфорд Гендель-C
- Ахмед Аблак; Иссам Дамадж; Американский университет Кувейта (2016 г.). «HTCC: аппаратный компилятор Haskell в Handel-C». Конференция Euromicro 2016 по проектированию цифровых систем (DSD) . стр. 192–199. arXiv : 1907.07764 . дои : 10.1109/DSD.2016.24 . ISBN 978-1-5090-2817-7 . S2CID 13213191 .