编程范型 | 指令式(过程式, 结构化), 并发 |
---|---|
設計者 | 牛津大学计算机实验室 |
實作者 | ESL; Celoxica; Agility; Mentor Graphics |
发行时间 | 1996年 |
型態系統 | 静态, 表明, 标称, 类型推论 |
操作系统 | 跨平台 |
文件扩展名 | .hcc, .hch |
網站 | www |
主要實作產品 | |
Celoxica DK | |
啟發語言 | |
C, CSP, occam |
Handel-C是一個程式語言,是一個專門編譯用在FPGA以及ASIC上的硬體描述語言。它是一個C語言的子集,並且有一些非標準的控制硬體即時性以及并行性的特性。
為了要描述複雜的演算法,C語言的子集包含了所有C語言常用的特性。像許多嵌入式編譯器,浮點數資料型態都會被忽略掉。透過外部函式庫的支援,浮點數運算會變的更有效率。
为了设立一种描述并行行为的方式,使用了一些CSP关键字,还有Occam的通用文件结构。
例如[1]:
par {
++c;
a = d + e;
b = d + e;
}
通道提供了在并行线程之间的消息传递机制。通道可以定义为异步的或同步的(分别有和没有缓冲区存储)。一个线程写一个同步通道会被立即阻塞,直到对应的监听线程准备好接收这个消息。类似的接收线程将阻塞在读语句上,直到发送线程执行了下一个发送。因此它们可以用作同步线程的方式[1]。例如:
par {
chan int a; // 声明一个同步通道
int x;
// 开始发送线程
seq (i = 0; i < 10; i++) {
a ! i; // 向通道顺序的发送0到9
}
// 开始接收线程
seq (j = 0; j < 10; j++) {
a ? x; // 进行10次从通道读入变量x
delay; // 在连续读取之间介入1个时钟周期的延迟
// 这有阻塞在写入之间的发送线程的效果
}
}
异步通道提供了特定数量的存储,通过它们以FIFO的形式进行数据传递。在这个FIFO既不充满又不空无的时候,发送和接收线程二者可以不被阻塞的进行。但是,在FIFO是空无的时候,接收线程将被阻塞于下次读取之时。当它是充满的时候,发送线程将被阻塞于下次发送之时。有着差异的时钟域参与者的通道是自动异步的,因为需要至少一个存储元素来缓和亚稳定性。
一个线程可以同时等待多个通道,同步的或异步的,作用于给定优先级的特定次序下的第一个可用者之上,或者在都没有准备好的情况下可选的执行一个可替代的路径。
Handel-C是牛津大学计算实验室裡面的硬體編譯群組所發展一系列的硬體描述語言。大約在1996年早期,Handel HDL進化到Handel-C。
Handel-C在被ESL發表之後,被許多大學的硬體研究單位被採用。
其他的C HDL子集也大約在同一時間被發展出來,像是1994年在多倫多大學的Transmogrifier C(現在變為開源碼專案FpgaC),還有在洛斯阿拉莫斯国家实验室的Streams-C(現在已經得到Impulse加速技术公司的認可,並且重命名為Impulse C)。