Handel-C
Handel-C是一个编程语言,是一个专门编译用在FPGA以及ASIC上的硬件描述语言。它是一个C语言的子集,并且有一些非标准的控制硬件即时性以及并行性的特性。
指令式(过程序, 结构化), 并发 | |
设计者 | 牛津大学计算机实验室 |
实作者 | ESL; Celoxica; Agility; Mentor Graphics |
1996年 | |
型态系统 | 静态, 表明, 标称, 类型推论 |
操作系统 | 跨平台 |
文档扩展名 | .hcc, .hch |
网站 | www |
主要实作产品 | |
Celoxica DK | |
启发语言 | |
C, CSP, occam |
补充特征
为了要描述复杂的算法,C语言的子集包含了所有C语言常用的特性。像许多嵌入式编译器,浮点数数据型态都会被忽略掉。通过外部函数库的支持,浮点数运算会变的更有效率。
信道
信道提供了在并行线程之间的消息传递机制。信道可以定义为异步的或同步的(分别有和没有缓冲区存储)。一个线程写一个同步信道会被立即阻塞,直到对应的监听线程准备好接收这个消息。类似的接收线程将阻塞在读语句上,直到发送线程执行了下一个发送。因此它们可以用作同步线程的方式[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)。
参见
引用
- (PDF). [2020-05-10]. (原始内容存档 (PDF)于2010-06-15).
外部链接
- Handel-C language resources(页面存档备份,存于) at Mentor Graphics
- Oxford Handel-C (页面存档备份,存于)