handel-c

科技工作者之家 2020-11-17

Handel-C是一个编程语言,是一个专门编译用在FPGA以及ASIC上的硬件描述语言。它是一个C语言的子集,并且有一些非标准的控制硬件即时性以及平行性的特性。

为了要描述复杂的算法,C语言的子集包含了所有C语言常用的特性。像许多嵌入式编译器,浮点数资料型态都会被忽略掉。透过外部函式库的支援,浮点数运算会变的更有效率。

简介Handle-C为新一代硬件描述语言编译工具,过去因为太复杂而不能用硬件描述语言表示的算法以及由于处理器运行速度太慢而不能处理的算法,现在都可以利用Handle-C语言在大规模FPGA硬件上得以实现。设计者可以利用Handle-C语言,能在很短的时间里创建更庞大、更复杂和更高速的系统。

可编程逻辑器件的设计方法经历了布尔等式、原理图输入、硬件描述语言这样一个发展过程。随着设计的日益复杂和可编程逻辑器件规模的不断扩大,人们不断地寻求着更加抽象的行为级设计方法,以便在尽可能短时间内完成自己的设计构思,并希望能够找到一种方法,在更高的层次下设计更复杂、更高速的系统,能将软件设计和硬件设计统一到一个平台下,这就是Handle-C产生的现实背景。1

历史Handel-C是Oxford University里面的硬件编译群组所发展一系列的硬件描述语言。大约在1996年早期,Handel HDL进化到Handel-C。

Handel-C在被ESL发表之后,被许多大学的硬件研究单位被采用,

其他的C HDL子集也大约在同一时间被发展出来,像是1994年在多伦多大学的Transmogrifier C(现在变为开源码专案FpgaC),还有在Los Alamos National Laboratory的Streams-C(现在已经得到Impulse Accelerated Technologies的认可,并且重命名为Impulse C)。2

意义Handle-C在硬件的算法实现和硬件/软件结合设计中,可谓是一种具有革命性意义的语言,它的标准是由Celoxica公司提出的。Handle-C语言在基于ISO/ANSI-C语言的基础上,能够通过软件设计方法来实现硬件设计。Handle-C具有硬件发展的外延扩展,包括可变的数据宽度,并行处理方式和并行线程的通讯方式。该语言使用了一种简单的同步模型,简化了系统配置人员和软件工程师的设计工作。Handle-C的连续和并行操作的描述能力,可以用更短、更易懂的代码来代替以前的复杂状态图。 ---大部分的算法都是以C语言为原代码的,通常我们要进行硬件实现,就必须将C语言转化成VHDL或Verilog语言,这样就很容易导致风险和错误的出现。但利用Handle-C语言则不会出现这样的问题,因为它本身是基于C的语言体系,可以直接用来描述算法,随后进行编译加载到硬件上,方便易懂,大大地节省了编程时间,提高效率。

---直接面向于FPGA和PLD,Handle-C为硬件原型和最初电子产品的开发提供了一种快速的布线形式,这种开发过程可以在完整的软件环境里进行。Handle-C为设计者提供很大的开发空间,可以不断地进行调试以确定最终设计。---Handle-C语言可以应用到广泛的硬件实现编程中,如:

---网络安全——DES编密码算法在硬件的实现

---数字音乐——在可重置的硬件实现MP3解码

--- 图形处理——在FPGA/PLD上实现复杂的图像处理

---以上只是Handle-C应用的一部分,随着它的不断发展,相信其应用范围也会越来越广。2

Handle-C与C语言的比较---与C语言比较,Handle-C有如下的局限性:

---(1) 函数没有递归性;

---(2) 不支持旧类型的函数定义;

---(3) 不支持变量长度参数列表;

---(4) 不能改变变量的长度;

---(5) 1.0版本不支持浮点运算(新的1.1版本支持浮点运算的IP库,可以向该公司购买)。

---另外,Handle-C的操作符与C语言既有相同之处,又有其自身独有的关键词(见表2),编程人员在实际的编程中应该对以下的异同加以重视

---下面对Handle-C语言中仅有的操作符进行一些简单的说明。

---Delay表示对一个信号的延时;

---?与!是两个相对应的操作符,?表示从一个通道(channel)里读出数据;!表示向一个通道

里写进数据;

---piralt多用于分支语句,函数里面有多个操作,写在前面的case具有最高的执行优先权;

---seq 和par为Handle-C在语法上新增加的两种结构,seq为顺序结构,在seq内的每一句程序

都按每个时钟来执行;而在par语句中,所有的程序代码段都在同一个时钟来临时执行。在程序

中,如无seq和par操作符,则认为语句为顺序结构。

---Ifselect的用法如if...else。

---Handle-C程序的编写如同C/C++程序的编写规范,也要引进各种头文件,也可以对各种函数进

行调用。对于其输入输出端口有它自身严格的定义,时钟信号由用户自己定义,这些操作在此不

作深入的探讨。

---那么如何将C语言与Handle-C语言对应起来呢?以下是将传统的C语言映射到硬件上的几个步

骤:

---(1) 决定如何将软件系统映射到目标硬件平台。

---(2) 将传统的C语言程序转化成Handle-C程序,并用仿真器检查程序的语法错误。

---(3) 从Handle-C提供的特别的操作平台去修改已有的程序代码。

---(4) 加入良好的并行操作。

---(5) 在程序中加入必须的硬件接口及映射仿真通道。

---(6) 使用FPGA的布线工具去产生FPGA硬件映射程序。

---以上的映射步骤仅供参考,实际应用中,可以根据设计的需要适当地增加或是删减相应的步

骤。

Handle-C与VHDL的比较---虽然Handle-C语言与VHDL语言各有自己的一套的编程语法规则,但两者的根本目的是一样的,即要把算法思想硬件化,加载到可编程芯片里进行实际应用。Handle-C本身是基于C的语言体系,可以直接用来描述算法,方便易懂,大大地节省了编程时间,提高效率。而VHDL语言的编写符合硬件工作者的思维架构,较容易进行模块化编程,将所要实现功能进行分块实行。

---VHDL编程中的端口定义映射在Handle-C代码中的格式如下:

---Interface VHDL_ entity_sort (VHDL_to_HC_port {, VHDL_to_HC_port})

---VHDL_from_HC_port{,VHDL_from_HC_port});

---其中:VHDL_entity_sort为VHDL实体的名称。

---VHDL_to_HC_port为Handle-C输入的端口的类型和名称。

---VHDL_from_HC_port为Handle-C输出的端口的类型和名称。

---如果要把程序进行综合,我们目前要把Handle-C程序编译成VHDL,用Snyplify、

LeonardoSpectrum或FPGA Exprerss等工具将这些代码进行综合。我们也可用Altera或Xilinx 公司的布线工具去将程序进行布局布线。---其他编程上的区别在此就不展开讨论了。2

Handle-C的编译环境简介---Handle-C语言标准是由Celoxica公司提出的,该公司同时也推出了相应的编译环境软件DK1.1,该软件的使用要先与C/C++的语言环境相连接起来,以C/C++作语言基础进行编程,所以安装完DK1.1软件后,应该安装的编译器有Visual C++6.0(或更高版本),或者是Borland C++编译器5.5版本。该编译环境所面向的FPGA设计的器件有如下系列:Xlinx 4000E、Xlinx 4000L、Xlinx 4000EX、Xlinx 4000XL、Xlinx 4000XV、Xlinx Virtex、Altera 10K、Altera 20K。另外,此软件还可以使用Xilinx公司或Altera公司的可编程逻辑布局布线工具、可以与ModelSim软件工具连接起来,直接在DK1.1里调用。

---如同在C语言中加上头文件即可调用库函数一样,在DK1.1中,也可很方便地调用各种功能

库,如浮点的IP库等。通过这样的连接,便可使Handle-C的应用范围更加广泛。1

结论---随着EDA技术的不断成熟,软件和硬件的相互融合也越来越多,Handle-C语言设计的前景应该会更好。现在Celoxica公司提出的Handle-C语言已经越来越成熟,而且所能支持应用的FPGA芯片也越来越多,这种新的硬件描述语言将会成为将算法硬件化的一种利器。2

本词条内容贡献者为:

曹慧慧 - 副教授 - 中国矿业大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。