Handel-C
Handel-C是一个程式语言,是一个专门编译用在FPGA以及ASIC上的硬体描述语言。它是一个C语言的子集,并且有一些非标准的控制硬体即时性以及并行性的特性。
编程范型 | 指令式(过程式, 结构化), 并发 |
---|---|
设计者 | 牛津大学计算机实验室 |
实作者 | ESL; Celoxica; Agility; Mentor Graphics |
发行时间 | 1996年 |
型态系统 | 静态, 表明, 标称, 类型推论 |
操作系统 | 跨平台 |
文件扩展名 | .hcc, .hch |
网站 | www |
主要实作产品 | |
Celoxica DK | |
启发语言 | |
C, CSP, occam |
补充特征
编辑为了要描述复杂的演算法,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)。
参见
编辑引用
编辑- ^ 1.0 1.1 Handel-C Language Reference Manual (PDF). [2020-05-10]. (原始内容存档 (PDF)于2010-06-15).
外部链接
编辑- Handel-C language resources(页面存档备份,存于互联网档案馆) at Mentor Graphics
- Oxford Handel-C (页面存档备份,存于互联网档案馆)