硬件描述语言(Hardware Description Language,HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。非过程计算机硬件描述语言是指不显式处理过程细节的硬件描述语言。这里所说的过程细节,不是指待解问题及其解法的本质所要求的的,而是指为计算机上实现求解任务而设定的计算细节及其执行顺序。
简介非过程计算机硬件描述语言是使人们无须关心问题的解法和计算过程的描述,只要指明输入数据所要完成的加工项目和输出形式,就能得到所需要的结果,而其余工作都由系统予以完成的硬件描述语言,主要特征如下:数据的联想引用机制;数据的高级操作符;不指明可变性顺序。联想引用机制是指不指明访问路径、只需给出条件或性质的描述;高级操作符是指可直接表示集合、数组的运算的操作符;可变性顺序是指改变执行次序也不影响处理结果的顺序。
硬件描述语言1970年代以来,集成电路的复杂程度按照半导体业界摩尔定律的趋势急剧增长。电路设计人员的工作量不断增加,这使得他们必须放弃以往那样从特定的电子元件,如CMOS、双极性晶体管为基础,来开始复杂电路的设计工作。设计流程的关注重心开始转到电路系统的数据流动以及有关时序的信息,这样的设计抽象级别被称为“寄存器传输级”。设计人员通过使用硬件描述语言,可以将精力放在电路逻辑功能、时序的设计上,而不需要一开始就考虑具体的器件制造工艺以及它们对电路功能的影响。
在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用HDL设计系统硬件电路时主要使DHL编写源程序。所谓硬件描述语言 是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言,它可以使数字逻辑电路设计者利用这种语言来描述自己的设计思想1。
硬件描述语言在很多地方可能和传统的软件编程语言类似,但是最大的区别是,前者能够对于硬件电路的时序特性进行描述。硬件描述语言是构成电子设计自动化体系的重要部分。小到简单的触发器,大到复杂的超大规模集成电路(如微处理器),都可以利用硬件描述语言来描述。常见的硬件描述语言包括Verilog、VHDL等。
硬件描述语言是对电路系统的结构、行为的标准文本描述。硬件描述语言和一些并行编程语言一样存在并行性的表达方式。然而,和大多数用于软件设计的编程语言不同,硬件描述语言可以描述硬件系统在不同时间的时序行为,而时序性正是硬件电路的重要性质之一。在计算机辅助设计中,用于描述电路模块中连线、各层次模块之间互连的硬件描述语言代码,被称为“网表”。硬件描述语言可以在结构级(或称逻辑门级)、行为级、寄存器传输级这几种不同的层次上对电路进行描述,实现同一功能的硬件描述语言也可以使用任一层次的硬件描述语言代码来描述。通过逻辑综合,后两种层次的硬件描述语言代码可以被转换到低抽象级别的门级描述,但是采用不同厂商的工具、使用不同的综合设置策略可能会产生不同的结果。
在实现具体的硬件电路之前,设计人员可以利用硬件描述语言来进行仿真。在硬件实现的过程中,硬件描述语言的源文件通常会被转换成一种类似可执行文件的中间文件,该文件可以解释硬件描述语言的各种代码、语句的语义。正由于此,硬件描述语言具有了类似软件编程语言的一些性质,但是总体来说,它仍然属于规约语言、建模语言的范畴。模拟电路也有自己的硬件描述语言,但和数字电路的差异较大。
相关硬件描述语言Verilog是一种用于描述、设计电子系统(特别是数字电路)的硬件描述语言,主要用于在集成电路设计,特别是超大规模集成电路的计算机辅助设计。Verilog是电气电子工程师学会(IEEE)的1364号标准。
Verilog能够在多种抽象级别对数字逻辑系统进行描述:既可以在晶体管级、逻辑门级进行描述,也可以在寄存器传输级对电路信号在寄存器之间的传输情况进行描述。除了对电路的逻辑功能进行描述,Verilog代码还能够被用于逻辑仿真、逻辑综合,其中后者可以把寄存器传输级的Verilog代码转换为逻辑门级的网表,从而方便在现场可编程逻辑门阵列上实现硬件电路,或者让硬件厂商制造具体的专用集成电路。设计人员还可以利用Verilog的扩展部分Verilog-AMS进行模拟电路和混合信号集成电路的设计。
SystemC是一种基于C++语言的用于系统设计的计算机语言,是用C++编写的一组库和宏。它是为了提高电子系统设计效率而逐渐发展起来的产物。IEEE于2005年12月批准了IEEE1666-2005标准。
通常,系统由软件部分和硬件部分组成,系统的一部分功能由软件实现,而另一部分功能则由硬件实现。早期的系统比较简单,系统工程师将准备设计的系统划分为软件部分和硬件部分,分别由软件工程师和硬件工程师进行设计、仿真、实现和改进,最后再将软件部分和硬件部分结合起来形成系统。软件工程师使用C和C++等程序设计语言,因为这些语言专长于描述串行执行的程序,用来仿真软件部分;而硬件工程师则使用VHDL和Verilog等硬件描述语言,因为这些语言专长于描述并行运行的硬件,用来仿真硬件部分。但是,随着电子系统的不断发展,系统结构越来越复杂,系统元件也越来越多,这就要求系统工程师在先期划分软件和硬件时,就对整个系统性能有很好的了解和掌握,以便更好地划分软件和硬件,减小设计中不必要的失误所带来的损失和风险。SystemC也就由此孕育而生,因为它能够满足对软件和硬件协同仿真的需求。
本词条内容贡献者为:
王慧维 - 副研究员 - 西南大学