零点起飞学Xilinx FPG
上QQ阅读APP看书,第一时间看更新

4.1 Verilog HDL语言简介

Verilog HDL作为世界上最流行的两种硬件描述语言之一,被广泛应用在FPGA的项目开发中。本节将从硬件描述语言的角度切入,对Verilog HDL语言进行详细介绍。

4.1.1 硬件描述语言

硬件描述语言(Hardware Description Language,HDL)以文本形式描述数字系统硬件结构和行为,是一种用形式化方法描述数字电路和系统的语言,允许设计者从顶层到底层逐层描述自己的设计思想。即用一系列分层次的模块表示复杂的数字系统,并逐层进行验证仿真,再把具体的模块组合起来由综合工具转化成门级网表,再利用布局布线工具把网表转化为具体电路结构实现。目前,这种自顶向下的方法已被广泛应用。概括地讲,HDL语言包含以下主要特征:

既包含一些高级程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体结构。

通过使用结构级行为描述,可以在不同的抽象层次描述设计。HDL语言采用自顶向下的数字电路设计方法,主要包括3个领域5个抽象层次。

是并行处理的,具有同一时刻执行多任务的能力。这和一般高级设计语言(例如C语言等)串行执行的特征是不同的。

具有时序的概念。一般的高级编程语言是没有时序概念的,但在硬件电路中从输入到输出总是有延时存在,为了描述这一特征,需要引入时延的概念。HDL语言不仅可以描述硬件电路的功能,还可以描述电路的时序。

Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,均为IEEE标准,被广泛地应用于可编程逻辑器件的项目开发。二者都是在20世纪80年代中期开发出来的,前者由Gateway Design Automation公司(于1989年被Cadence公司收购)开发,后者由美国军方研发。

传统的数字逻辑硬件电路的描述方式是基于原理图设计的,即根据设计要求选择器件,绘制原理图,完成输入过程。这种方法在早期应用中得到了广泛应用,其优点是直观、便于理解;但在大型设计中,其维护性很差,不利于设计、建设和复用。此外,原理图设计法最致命的缺点是:当所用芯片停产或升级换代后,相关设计都需要做出改动甚至是重新开始。HDL以文本形式描述数字系统硬件结构和行为,不仅可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

随着人们对数十万、百万乃至千万门电路设计需求的增加,依靠传统的原理图输入已经不能满足设计人员的要求。与原理图设计方法相比,Verilog HDL语言利用高级的设计方法,将系统划分为子模块,便于团队开发;且设计与芯片的工艺和结构无关,通用性和可移植强。

4.1.2 Verilog HDL语言的历史

1983年,Gateway Design Automation(GDA)硬件描述语言公司的Phil Moorby首创了Verilog HDL。后来Moorby成为Verilog HDL-XL的主要设计者和Cadence公司的第一合伙人。1984—1986年,Moorby设计出第一个关于Verilog HDL的仿真器,并提出了用于快速门级仿真的XL算法,使Verilog HDL语言得到迅速发展。1987年Synonsys公司开始使用Verilog HDL行为语言作为综合工具的输入语言。1989年Cadence公司收购了Gateway Design Automation公司,Verilog HDL成为Cadence公司的私有财产。1990年初,Cadence公司把Verilog HDL和Verilog HDL-XL分开,并公开发布了Verilog HDL。随后成立的OVI(Open Verilog HDL International)组织负责Verilog HDL的发展并制定有关标准,OVI由Verilog HDL的使用者和CAE供应商组成。1993年,几乎所有ASIC厂商都开始支持Verilog HDL,并且认为Verilog HDL-XL是最好的仿真器。同时,OVI推出2.0版本的Verilog HDL规范,IEEE则将OVI的Verilog HDL 2.0作为IEEE标准的提案。1995年12月,IEEE制定了Verilog HDL的标准IEEE 1364—1995。目前,最新的Verilog语言版本是2000年IEEE公布的Verilog 2001标准,它大幅度提高了系统级别和可综合性能。

4.1.3 Verilog HDL语言的能力

Verilog HDL既是一种行为描述语言,也是一种结构描述语言。按照一定的规则和风格编写代码,就可以将功能行为模块通过工具自动转化为门级互连的结构模块。这意味着利用Verilog语言所提供的功能,可以构造一个模块间的清晰结构描述复杂的大型设计,并对所需的逻辑电路进行严格的设计。下面列出的是Verilog语言的主要特点。

可描述顺序执行或并行执行的程序结构。

用延迟表达式或事件表达式明确控制过程的启动时间。

通过命名的事件触发其他过程里的激活行为或停止行为。

提供了可带参数且非零延续时间的任务程序结构。

提供了可定义新的操作符的函数结构。

提供了用于建立表达式的算术运算符、逻辑运算符和位运算符。

提供了一套完整的表示组合逻辑基本元件的原语。

提供了双向通路和电阻器件的描述。

可建立MOS器件的电荷分享和衰减模型。

可以通过构造性语句精确地建立信号模型。

在行为级描述中,Verilog HDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。

能够使用门和模块实例化语句在结构级进行结构描述。

高级编程语言结构,例如条件语句、情况语句和循环语句,Verilog HDL语言都可以使用。

可以显式地对并发和定时进行建模。

提供强有力的文件读写能力。

语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果。例如,事件队列上的事件顺序在标准中没有定义。与C语言风格有很多的相似之处,学习起来比较容易。

4.1.4 Verilog HDL和VHDL语言的异同

Verilog HDL和VHDL都是用于数字逻辑设计的硬件描述语言,二者的相同点在于:都能形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述;简化电路行为的描述;具有电路仿真和验证机制;支持电路描述由高层到低层的综合转换;与实现工艺无关;便于管理和设计重用。

Verilog HDL和VHDL最大的差别在语法上,Verilog HDL是一种类C语言,而VHDL是一种类ADA语言。由于C语言简单宜用且应用范围广泛,使得Verilog HDL语言容易学习,如果具有C语言基础,很快就能够掌握;相比之下,VHDL语句较为晦涩,使用难度较大,一般需要半年以上的专业培训才能够掌握。

此外,Verilog HDL和VHDL又有各自的特点,由于Verilog HDL推出较早,因而拥有更广泛的客户群体、更丰富的资源。传统观点认为,Verilog HDL在系统级抽象方面较弱,不太适合特大型系统。大多数业界学者和工程师认为VHDL侧重于系统级描述,从而更多地为系统级设计人员所采用;Verilog HDL侧重于电路级描述,因而更多地为电路级设计人员采用。但这两种语言也仍处于不断完善的过程中,都在朝着更高级、更强大描述语言的方向前进。经过IEEE Verilog 2001标准的补充之后,Verilog HDL语言的系统级表述性能和可综合性能有了大幅度的提高。

综上所述,Verilog HDL语言作为学习HDL设计方法的入门和基础是非常合适的。掌握了Verilog HDL语言建模、综合和仿真技术,不仅可以增加读者对数字电路设计技术的深入了解,还可以为后续阶段的高级学习打好基础,例如进行数字信号处理和无线通信的FPGA实现、IC设计等。

4.1.5 Verilog HDL和C语言的异同

虽然Verilog HDL的某些语法与C语言接近,但存在本质的区别。Verilog HDL是一种硬件描述语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真;C语言是一种软件开发语言,控制硬件实现某些功能。利用Verilog HDL编程时,要时刻记得它是硬件语言,时刻将Verilog HDL与硬件电路对应起来。二者的异同点如下。

C语言是由函数组成的,而Verilog HDL则是由称之为module的模块组成的。

C语言中的函数调用通过函数名相关联,函数之间的传值是通过端口变量实现的。相应地,Verilog HDL中的模块调用也通过模块名相关联,模块之间的联系同样通过端口之间的连接实现,与C语言中端口变量不同的是,模块间连接反映的是硬件之间的实际物理连接。

C语言中,整个程序的执行从main函数开始。Verilog HDL没有相应的专门命名模块,每一个module模块都是等价的,但必定存在一个顶层模块,它的端口中包含了芯片系统与外界的所有I/O信号。从程序的组织结构上讲,这个顶层模块类似于C语言中的main函数,但Verilog HDL中所有module模块都是并发运行的,这一点必须从本质上与C语言加以区别。

C语言是运行在CPU平台上的,是串行执行的。Verilog HDL语言用于CPLD/FPGA开发,或者IC设计,对应着门逻辑,所有模块是并行执行的。

Verilog HDL中对注释语句的定义与C语言类似。