VHDL语言介绍与设计
- 格式:doc
- 大小:214.50 KB
- 文档页数:35
vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。
本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。
一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。
通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。
二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。
然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。
在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。
在学习了VHDL的基础知识后,我们开始进行实验设计。
我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。
首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。
然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。
接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。
三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。
在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。
在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。
VHDL语言的特点及发展趋势摘要:VHDL语言是一种用于硬件电路设计的高级语言。
它在80年代初期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
作为一种硬件电路设计语言,VHDL在数字电子系统设计的过程中,发挥着十分重要的作用。
关键字:VHDL 硬件描述语言发展趋势一、VHDL的历史VHDL是Very-High-Speed Integrated Circuit Hardware Description Language 的缩写,诞生于二十世纪八十年代初期。
1987年底,VHDL被美国电气和电子工程师协会(IEEE)和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL作为IEEE的工业标准硬件描述语言,在电子工程领域,已成为事实上的通用硬件描述语言。
在新的世纪中,VHDL语言将承担起大部分的数字系统设计任务。
二、VHDL的主要特点与其他硬件描述语言相比,VHDL具有以下特点:1、VHDL支持自上向下和基于库的设计方法,而且支持同步电路、异步电路、现场可编程门阵列器件(FPGA)以及其他随即电路的设计。
VHDL具有比其他硬件描述语言更强大的行为描述能力,基于抽象的行为描述风格避开了具体的器件结构,使设计人员能从逻辑行为上描述和设计大规模电子系统。
目前流行的EDA 工具和VHDL综合器大都能实现行为描述到RTL描述的转换。
2、强大的系统硬件描述能力。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
VHDL介绍VHDL是⼀种硬件描述语⾔,它可以对电⼦电路和系统的⾏为进⾏描述。
制定了ieee.1164库。
使⽤VHDL语⾔描述的电路,可以进⾏综合和仿真。
VHDL代码3个基本组成部分:库(library)声明、实体(entity)和构造体(architecture)。
库(library)声明:列出了当前设计中需要⽤到的所有⽂件,如ieee,std,work等。
实体(entity):定义了电路的输⼊和输出引脚。
构造体(architecture):所包含的代码描述了电路要实验的功能。
1、库声明库(library)的建⽴和使⽤有利于设计重⽤和代码共享,同时可以使代码结构更加清晰。
2、库的种类在VHDL设计中有3个常⽤的库:ieee库,std库和work库。
在ieee库中有⼀个ieee正式认可的标准std_logic_1164.all。
ieee库包含了许多包集。
⽐如:std_logic_1164:定义了std_logic(8值)和std_ulogic(9值)多值逻辑系统。
std_logic_arith:定义了signal(有符号)和unsigned(⽆符号)数据类型和相关算术运算和⽐较运算操作。
它包含许多数据类型转换函数,这种函数可以实现数据类型的转换。
常⽤的数据类型转换函数包括conv_integer(p),conv_unsigned(p,b),conv_signed(p,b)和conv_std_logic_vector(p,b).std_logic_signed:内部包含⼀些函数,这些函数可以使std_LOGIC_vector类型的数据像signed类型的数据⼀样进⾏运算操作。
std_logic_unsigned:内部包含⼀些函数,这些函数可以使std_logic_vector类型的数据类型像unsigned类型的数据⼀样操作。
std库std库是VHDL设计环境的标准资源库,包括数据类型和输⼊/输出⽂本等内容。
fpga设计中vhdl语言简介
VHDL是一种硬件描述语言(HDL),旨在帮助工程师和设计师进行复杂电路和系统的设计和仿真。
VHDL语言是由美国国防部发起的,现在已经成为全球应用最广泛的HDL之一。
VHDL语言的基础包括三个部分:实体(entity)、体(architecture)和过程(process)。
实体定义组件的接口,在其内部,architecture结构体提供了具体的实现。
过程是编写复杂操作的基本方式,类似于C语言中的函数。
VHDL语言的数据类型包括标准逻辑类型,如布尔、位和字符类型,以及更复杂的数据类型,如数组和记录类型。
此外,VHDL也支持自定义数据类型。
在FPGA设计中,VHDL语言的主要作用是设计和实现可编程逻辑电路。
VHDL语言描述的电路可以在硬件上运行,也可以使用仿真器进行验证和测试。
总体而言,VHDL语言是一种强大的硬件描述语言,对于设计和实现复杂的电路和系统非常有用。
在FPGA设计中,VHDL语言是必不可少的一部分。
第六章 VHDL语言介绍与设计VHDL语言的英文全名为Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言。
6.1 VHDL语言的基本语法6.1.1 VHDL语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。
使用标识符要遵守如下法则:●标识符由字母(A…Z;a…z)、数字和下划线字符组成。
●任何标识符必须以英文字母开头。
●末字符不能为下划线。
●不允许出现两个连续下划线。
●标识符中不区分大小写字母。
●VHDL定义的保留子或称关键字,不能用作标识符。
●VHDL中的注释由两个连续的短线(--)开始,直到行尾。
以下是非法标识符:-Decoder —起始不能为非英文字母3DOP —起始不能为数字Large#number —“#”不能成为标识符的构成符号Data__bus —不能有双下划线Copper_ —最后字符不能为下划线On —关键字不能用作标识符。
注:在AHDL语言中标识符要区分大小写,但在VHDL语言中不区分大小写。
所以写程序时,一定要养成良好的书写习惯,应用关键字时用大写,自己定义的标识符用小写。
标识符表示的几种数据对象的详细说明如下:1)常数(Constant )常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。
常数一被赋值就不能在改变。
一般格式:CONSTANT 常数名:数据类型:=表达式;例:CONSTANT Vcc: REAL: =5.0;—设计实体的电源电压指定常数所赋得值应与定义的数据类型一致。
常量的使用范围取决于它被定义的位置。
程序包中定义的常量具有最大的全局化特性,可以用在调用此程序包的所有设计实体中;设计实体中某一结构体中定义的常量只能用于此结构体;结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。
2)变量(Variable)变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。
用作局部数据存储。
在仿真过程中。
它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。
变量常用在实现某种算法的赋值语句中。
一般格式:V ARIABLE 变量名数据类型约束条件:=表达式;例:V ARIABLE x,y:INTEGER; —定义x,y为整数变量V ARIABLE count: INTEGER RANGE0 TO255:=10; —定义计数变量范围变量的适用范围仅限于定义了变量的进程或子程序中。
若将变量用于进程之外,必须该值赋给一个相同的类型的信号,即进程之间传递数据靠的信号。
变量赋值语句的语法格式如下:目标变量:=表达式;变量赋值符号是“:=”。
赋值语句右方的表达式必须是一个与目标变量有相同数据类型的数值。
变量不能用于硬件连线和存储元件。
3)信号(Signal)信号是描述硬件系统的基本数据对象,它类似于连接线,它除了没有数据流动方向说明以外,其它性质与实体的端口(Port)概念一致。
变量的值可以传递给信号,而信号的值不能传递给变量。
信号通常在构造体、包集合和实体中说明。
信号说明格式为:SIGNAL 信号名:数据类型;信号初始值的设置不是必需的,而且初始值仅在VHDL的行为仿真中有效。
1.变量变量只能在进程、函数和过程中使用,一旦赋值立即生效。
例:VARIABLE x, y: INTEGER;VARIABLE count: INTEGER RANGE 0 TO 255:=10;2.信号信号除了没有方向的概念以外几乎和端口概念一致。
例:SIGNAL sys_clk: BIT:=’0’;SIGNAL ground: BIT:=’0’在程序中,信号值输入信号时采用代入符”<=”,而不是赋值符“:=”,同时信号可以附加延时。
信号传送语句:s1<=s2 AFTER 10ns信号是一个全局量,可以用来进行进程之间的通信3.信号与变量的区别:信号赋值可以有延迟时间,变量赋值无时间延迟;信号除当前值外还有许多相关值,如历史信息等,变量只有当前值;进程对信号敏感,对变量不敏感;信号可以是多个进程的全局信号,但变量只在定义它之后的顺序域可见;信号可以看作硬件的一根连线,但变量无此对应关系。
例:ENTITY reg1 ISPORT ( d : in BIT;clk : in BIT;q : out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clk='1' AND clk’event THENa <= d;b <= a;q <= b;END IF;END PROCESS;END reg1;ENTITY reg1 ISPORT ( d : in BIT;clk : in BIT;q : out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISBEGINPROCESS (clk)V ARIABLE a, b : BIT;BEGINIF clk='1' AND clk’event THENa := d;b := a;q <= b;END IF;END PROCESS;END reg1;6.1.2 VHDL语言的数据类型VHDL语言提供了许多标准的数据类型,用户也可自定义数据类型,这样使VHDL语言的描述能力和自由度进一步提高。
但VHDL语言的数据类型的定义相当严格,不同类型之间的数据不能直接代入。
而且相同数据类型,但位长不同的也不能直接代入,否则EDA工具在编译综合时会报告类型错。
因此,为了熟练地使用VHDL 语言编写程序,必须很好的理解各种数据意义。
1.VHDL标准的数据类型1)整数(Integer)整数类型的数代表正整数、负整数和零,表示的范围-(231-1)~(231-1),它与算术整数相似,可进行“+”,“-”,“*”,“/”等算术运算,不能用于逻辑运算。
2)实数(Real)实数类型也类似于数学上的实数,或称浮点数,表示范围为-1.0E38~1.0E38.3)位(Bit)在数字系统中信号通常采用一个位来表示,取值值能是1获0。
4)位矢量(Bit_Vector)位矢量是用双引号括起来的一组位数据,使用位矢量必须注明位宽。
例如:SIGNALa:BIT_VEVCTOR(7to0)信号a被定义为一个具有8位位宽的矢量,最左位为a(7),最右位为a(0)。
5)布尔量(Boolean)一个布尔量具有两个状态:“真”或“假”。
布尔量不属于数值,因此不能用于运算,它只能通过关系运算符获得。
一般这一类型的数据初始值总为FALSE.6)字符(Character)字符也是一种数据类型,字符类型通常用单引号引起来,如‘A’。
字符类型区分大小写,如‘B’不同于‘b’。
7)字符串(String)字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串数组。
常用于程序的提示和说明,如“STRING”等。
8)时间(Time)时间是一个物理数据。
完整的时间类型包括整数和单位两部分;整数与单位之间至少留一个空格,如55 ms,2 ns。
在包集合STANDARD中给除了时间的预定义,其单位为fs,ps,ns,us,ms,sec,min,hr。
在系统仿真时,时间数据很有用,可用它表示信号延时,从而使模型系统能更逼近实际系统的运行环境。
9)错误等级(Severity Level)在VHDL仿真器中,错误等级用来指示设计系统的工作状态,它有四种:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。
在仿真过程中,可输出这四种状态以提示系统当前的工作状态。
10)自然数(Natural)和正整数(Positive)自然数是整数的一个子类型,非负的整数,即为零和正整数。
而Positive只能为正整数。
2.IEEE预定义标准逻辑位与矢量在IEEE库的程序包STD_LOGIC1164中,定义了两个重要的数据类型,即标准逻辑位STD_LOGIC和标准逻辑矢量STD_LOGIC_VECTOR,使得STD_LOGIC数据可以具有如下的9种不同的值:“U”—初始值“0”—0“Z”—高阻“L”—弱信号0“X ”—不定“1”—1“W”—弱信号不定“H”—弱信号1“_”—不可能情况注意在使用该类型数据时,在程序中必须写出库说明语句和使用包集合的说明语句。
3.用户定义的数据类型6.1.3 VHDL语言的运算操作符在VHDL语言中共用4类操作符,可以分别进行逻辑运算(Logic)、关系运算(Relational)、算术运算(Arithmetic)和并置运算(Concatenation)。
被操作符所操作的对象是操作数,且操作数的类型应该和操作符所要求的类型相一致。
需要注意的是,各家EDA综合软件对运算操作符支持程序各不相同,使用时应参考综合工具说明。
1)逻辑运算符运算符在VHDL语言中逻辑运算符有6种,他们分别为:NOT(非) OR(或)AND(与)NOR(或非)NAND(与非)XOR(异或)2)关系运算符关系运算符它们分别是:=(等于)/=(不等于)<(小于)<=(小于等于)>(大于)>=(大于等于)3)算术运算符+(加)/(除)SLL(逻辑左移)ROR(逻辑循环右移)-(减)MOD(求模)SRL(逻辑右移)ABS(取绝对值)*(乘)REM(取余)SLA(算术左移)4)其他运算符<=(信号赋值):=(信号赋值)-(负)+ (正)& (并置运算符,用于位的连接)=>(并联运算符,在元件例化时可用于形参倒实参的映射)6.2 VHDL语言的结构VHDL语言主要组成构件有设计实体(Entity)、结构体(Architecture)、子程序(Function Procedure )、集合包(Package)和库(Library),前四种称为可编译的设计单元。
一个VHDL设计就是有这四种构件的组成,编译之后将它们放在制定的库中共享。
其中,实体用于描述设计的接口界面信号,它规定端口数目,端口方向和端口类型。
它与硬件电路设计中的符号相对应。
而结构体指定设计的真实行为,性能和结构,与硬件电路设计中的原理图相对应。
子程序是可被调用的执行某一特定功能算法的集合。
集合包则是为了使常用的数据类型、常数和子程序对于其他设计块可用而集中充放的一批设计单元和约定。
6.2.1 设计实体实体的定义语法为:ENTITY 实体名IS[端口说明];END 实体名;端口说明书写格式如下:PORT(端口名{,端口名}:方向数据类型名;………………端口名{,端口名}:方向数据类型名);例如,一个二选一路数据选择器的设计实体可描述如下:ENTITY selection ISPORT(a, b, sel: IN BIT;C : OUT BIT );END selection;6.2.2 构造体用于描述系统内部的结构和行为。