介绍
Verilog和VHDL是两种主要的硬件描述语言(HDLs ),工程师和设计人员用来建模、仿真和综合数字系统。这些语言对于开发集成电路(IC)、现场可编程门阵列(FPGAs)和其他数字硬件至关重要。
虽然这两种语言的用途相似,但它们有不同的语法、设计方法和特性,这些会影响它们在特定项目中的选择。本文旨在提供全面的Verilog和VHDL比较,深入研究它们的历史、语法、设计方法、特性、工具、行业采用和应用。
什么是硬件描述语言?
硬件描述语言(HDL)描述了数字电路的行为或结构方向。这些语言可以模拟数字电路,以便在制造之前评估电路响应。此外,Verilog和VHDL都用于制定数字电路,以产生基于ASIC或FPGA的系统.
例如,考虑下面的例子,其中HDL代码产生一个简单的数字电路设计。
module HalfAdder (
input A, // First input bit
input B, // Second input bit
output Sum, // Sum output
output Cout // Carry output
);
assign Sum = A ^ B; // XOR operation for sum
assign Cout = A & B; // AND operation for carry output
endmodule
HDL的趋势始于20世纪80年代,当时数字设计公司探索了能够塑造数字电路的语言的可能性。而Java HDL (JHDL)、Cypress SemiConductor Corporation的Active HHDL等几种HDL。、Verilog和VHDL已经被IEEE(电气和电子工程师协会)标准广泛接受和认可。两种语言的历史发展Verilog的历史Verilog最初是由Gateway Design Automation在20世纪80年代后期开发的,作为模拟和验证数字电路的专有语言。它是从1983年到1984年开发的第一批硬件描述语言之一。这种语言因其简单易用而迅速流行起来。以下是对其发展的简要总结:1990: Cadence Design Systems收购了Gateway Design Automation,随后发布了Verilog语言作为开放标准。这一决定刺激了Verilog用户社区的发展和第三方模拟和合成工具的开发。1995: 发布了Verilog的第一个官方标准,称为IEEE标准1364-1995。这个标准引入了对语言的一些增强,包括对行为建模和测试平台的支持。2001: IEEE发布了一个更新的标准,IEEE 1364-2001,它通过添加表示复杂数字系统的结构和改进对验证的支持,扩展了该语言的功能。2005: IEEE将Verilog标准与SystemVerilog合并,system Verilog是一个Verilog超集,包含系统级建模、验证和设计重用的高级功能。IEEE 1800标准已经成为使用Verilog进行数字设计的事实标准。如今,Verilog广泛应用于半导体行业设计专用集成电路(ASICs)、FPGAs和其它数字系统。VHDL的历史VHDL代表VHSIC(超高速集成电路)硬件描述语言,由美国国防部(DoD)在20世纪80年代早期开发,作为VHSIC计划的一部分。该计划的主要目标是为数字系统的设计和验证创建一种标准化语言,特别是对于军事应用。VHDL被设计成一种强大的、灵活的、可移植的语言,可以在不同的抽象层次上准确地表示复杂的数字系统。1987:IEEE采用VHDL作为官方标准,IEEE 1076。这种标准化有助于推动VHDL在军事和商业领域的广泛采用。1993: 一个值得注意的修订IEEE 1076-1993被批准,它引入了对综合和测试平台的支持2008: IEEE 1076-2008获得批准,增加了改进的建模和验证功能。2019: IEEE 1076-2019获得批准。该标准增强了综合、验证和设计建模,并引入了定点算法支持。如今,VHDL被广泛用于设计ASICs、FPGAs和其他数字系统,拥有强大的仿真、综合和验证工具生态系统来支持设计过程。语言句法和结构Verilog语法Verilog的语法基于C编程语言,这使得那些具有C或类似C语言背景的人可以熟悉和理解它。Verilog的基本构建模块是模块,代表数字系统的各个组件。一个模块可以包含输入、输出、内部信号和其他模块的实例,允许分层设计。Verilog中的数据类型在Verilog中,数据类型包括:线-表示组件之间的物理连接reg -在寄存器中存储值整数真实的整数和实数数据类型用于算术运算和建模。Verilog支持各种运算符,如算术运算符、关系运算符、逻辑运算符和按位运算符。这些运算符使设计人员能够在语言中执行计算、比较和数据操作。Verilog语法的一个关键特征是使用程序性和连续的赋值,用于:描述数字系统的行为模拟组合逻辑和各种信号之间的关系。下面是一个实现2输入与门的简单Verilog模块示例:module and_gate (
input wire a,
input wire b,
output wire y
);
assign y = a & b;
endmodule在本例中,名为“and_gate”的模块有两条输入线“a”和“b”,以及一条输出线“y”。连续赋值语句“assign y = a & b;”定义输入和输出信号之间的关系,实现与门功能。VHDL语法VHDL语法受Ada编程语言的启发,与Verilog相比更加冗长。VHDL的主要构件是实体和体系结构,它们共同定义了数字系统的行为和结构。实体描述了组件的接口,包括其输入和输出端口,而架构定义了组件的内部行为和互连。VHDL数据类型VHDL有丰富的数据类型,包括:少量比特向量整数真实的枚举类型。bit和bit_vector数据类型分别表示二进制值和二进制值数组。整数和实数数据类型用于算术运算和建模,而枚举类型允许设计人员用有限的一组值定义自定义数据类型。VHDL支持广泛的运算符,包括算术、关系、逻辑和按位运算符。这些运算符使设计人员能够在语言中执行计算、比较和数据操作。在VHDL语言中,并发和顺序语句描述数字系统的行为以及数字系统中信号之间的关系。下面是一个简单的VHDL实体和架构示例,它实现了一个2输入与门:entity and_gate is
port (
a : in bit;
b : in bit;
y : out bit
);
end entity and_gate;
architecture behavior of and_gate is
begin
y <= a and b;
end architecture behavior;在此示例中,实体“and_gate”定义了具有两个输入端口“a”和“b”以及一个输出端口“y”的接口。架构“行为”使用并发信号赋值语句“y <= a和b”描述了and门的内部行为,它定义了输入和输出信号之间的关系。数字设计方法设计方法是指设计、实施和验证数字电子系统。它包含一系列原则、实践和技术,工程师遵循这些原则、实践和技术来确保最终的数字电路满足其预期的功能、性能和可靠性要求。数字电路设计方法中通常涉及的一些关键方面和步骤包括:规格和需求分析-理解数字电路的要求和规格。高层次的设计-创建定义数字系统整体结构和功能的高级或架构设计。功能验证-验证概要设计是否满足规定的要求。它包括模拟和建模,以确保系统按预期运行。RTL(寄存器传输级)设计-使用硬件描述语言(HDL)如Verilog或VHDL创建详细的RTL设计。延伸阅读:RTL设计:释放寄存器传输级设计能力的综合指南合成-使用综合工具将RTL描述转换成门级网表。门级模拟-模拟门级网表,以验证它在综合后满足功能和时序要求。物理设计-执行物理设计任务,包括平面规划、布局和布线,以生成电路的物理表示。这一步对于制造芯片至关重要。时间分析-分析电路的时序违规,并确保设计满足指定的时序约束。功能验证(再次)进行彻底的验证测试,以确保合成和物理设计的电路行为正确。可测性设计(DFT)实施可测试性功能以促进制造测试,如内置自测(BIST)或扫描链。制造业-将最终设计发送到制造工厂(铸造厂)进行芯片制造。测试-测试制造的芯片以识别任何缺陷或制造错误。调试和验证-调试测试期间出现的任何问题,并验证芯片是否符合原始规格。文档-在整个设计过程中维护全面的文档,包括设计规范、测试计划和设计评审。芯片后调试-如果设计在FPGA或ASIC中实现,可能需要进行硅后验证,以确保设计在物理设备中正确工作。迭代和优化-根据需要对设计进行迭代,以解决任何问题,优化性能,或根据反馈或不断变化的需求进行改进。Verilog设计方法Verilog设计方法使用模块和层次的概念。模块是数字系统的基本构件,封装了功能和互连。一个模块可以实例化其他模块,创建一个层次化的设计,促进模块化、可重用性和易于理解。设计师通常从创建代表整个数字系统的顶级模块开始。该模块实例化并互连较低级别的模块,这些模块可以实例化甚至更低级别的模块。这种层次化的方法允许设计者将复杂的系统分解成可管理的、可重用的组件。Verilog中的测试平台测试平台在Verilog设计方法中至关重要。测试平台是一个独立的模块,它实例化被测设计(DUT)并应用输入激励来验证其功能。可以使用behavioral Verilog编写测试平台,它允许设计人员描述系统的期望行为,而无需指定其实现细节。这种抽象使得能够在各种条件下有效地验证设计的功能和性能。模拟和综合工具ModelSim和VCS等仿真工具使设计人员能够执行和调试Verilog代码,从而深入了解数字系统在不同场景下的行为。Synopsys Design Compiler和Xilinx Vivado等综合工具将Verilog代码转换为门级网表或FPGA比特流,然后分别用于ASIC或FPGA上的实施。这些工具还执行优化以满足设计约束,如时序、面积和功耗要求。VHDL设计方法学VHDL设计方法侧重于实体、架构和层次。实体定义了组件的接口,而架构描述了组件的内部行为和互连。像Verilog一样,VHDL提倡分层设计方法,允许设计者将复杂的系统分解成更小的、可重用的组件。在典型的VHDL设计过程中,设计者创建代表整个数字系统的顶级实体。该实体实例化并互连较低级别的实体,这些实体可以进一步实例化甚至更低级别的实体。这种层次结构支持模块化和可重用性,使得管理和理解复杂的设计更加容易。VHDL中的测试平台在VHDL中,可以使用行为VHDL编写测试平台,允许设计者描述系统的期望行为,而无需指定其实现细节。这种抽象有效地验证了设计在各种条件下的功能和性能。基本语言特征Verilog功能Verilog提供几个重要特性,使设计人员能够有效地建模和验证数字系统。一些最显著的特性包括。程序性任务-在“always”模块中用于描述数字系统响应输入信号或内部状态变化的行为。这些任务允许设计人员使用熟悉的编程结构(如if-else语句和循环)来模拟时序逻辑,如触发器和状态机。连续任务-用于模拟组合逻辑,并定义输入和输出信号之间的关系。这些分配被连续评估,确保输出信号总是关于它们的输入信号是最新的。门级建模-Verilog支持门级建模,这允许设计人员使用原始门来描述数字系统,如与门、或门和非门。这一特性使设计人员能够在较低的抽象层次上对数字系统进行建模和仿真,从而深入了解底层硬件实现。用户定义的原语(UDP)Verilog允许设计人员创建用户定义的原语,即可以在设计中实例化和使用的自定义门级组件。UDP使设计人员能够模拟复杂或专门的逻辑元素,这些元素可能无法作为内置原语使用。行为建模-Verilog支持行为建模,允许设计人员描述数字系统的预期行为,而无需指定其实现细节。这种抽象使得能够在各种条件下有效地验证设计的功能和性能。例如,考虑一个用Verilog实现的简单4位计数器:module counter (
input wire clk,
input wire reset,
output reg [3:0] count
);
always @(posedge clk or posedge reset) begin
if (reset) begin
count <= 4'b0000;
end else begin
count <= count + 4'b0001;
end
end
endmodule在此示例中,计数器使用always块中的过程赋值来模拟计数器的顺序行为。计数信号在时钟的上升沿更新,当复位信号有效时,计数器复位。这演示了Verilog特性的使用,如程序分配、行为建模以及reg和wire等数据类型。VHDL特性VHDL提供了一组丰富的特性,可以有效地对数字系统进行建模、仿真和验证。一些最显著的特征包括:流程语句-用于以顺序方式描述数字系统的行为,类似于传统的编程语言。这些语句在一个对特定信号或事件敏感的“进程”块中执行。Process语句允许设计人员使用熟悉的编程结构(如if-else语句和循环)对时序逻辑(如触发器和状态机)进行建模。并发语句-用于信号分配和组件实例化,描述同时发生的信号和组件之间的关系。这些语句使设计者能够对组合逻辑进行建模,并定义数字系统中组件之间的互连。组件实例化-允许设计者创建可重用的组件,并在更高级的架构中实例化它们。这个特性促进了模块化和可重用性,使得管理和理解复杂的设计变得更加容易。泛型和配置-使设计人员能够创建参数化组件并自定义其行为或结构。泛型允许设计者定义组件的参数,而配置允许设计者指定实体和架构之间的映射,以及特定实例的泛型值。包和库-允许设计者跨多个项目组织和重用代码。包可以包含数据类型、子程序和组件的声明,而库用于存储和管理包和设计单元。