第3章VHDL编程基础课件.ppt
《第3章VHDL编程基础课件.ppt》由会员分享,可在线阅读,更多相关《第3章VHDL编程基础课件.ppt(590页珍藏版)》请在三一文库上搜索。
1、第3章 VHDL编程基础,3.1 概述 3.2 VHDL程序基本结构 3.3 VHDL语言要素 3.4 VHDL顺序语句 3.5 VHDL并行语句 3.6 子程序(SUBPROGRAM) 3.7 库、程序包及其他 3.8 VHDL描述风格 3.9 基本逻辑电路设计 3.10 状态机的VHDL设计,3.1 概 述,3.1.1 常用硬件描述语言简介 常用硬件描述语言有VHDL、Verilog和ABEL语言。VHDL起源于美国国防部的VHSIC,Verilog起源于集成电路的设计,ABEL则来源于可编程逻辑器件的设计。下面从使用方面将三者进行对比。 (1) 逻辑描述层次:一般的硬件描述语言可以在三个
2、层次上进行电路描述,其层次由高到低依次可分为行为级、RTL级和门电路级。VHDL语言是一种高级描述语言,适用于行为级和RTL级的描述,最适于描述电路的行为;Verilog语言和ABEL语言是一种较低级的描述语言,适用于RTL级和门电路级的描述,最适于描述门级电路。,(2) 设计要求:VHDL进行电子系统设计时可以不了解电路的结构细节,设计者所做的工作较少;Verilog和ABEL语言进行电子系统设计时需了解电路的结构细节,设计者需做大量的工作。 (3) 综合过程:任何一种语言源程序,最终都要转换成门电路级才能被布线器或适配器所接受。因此,VHDL语言源程序的综合通常要经过行为级RTL级门电路级
3、的转化,VHDL几乎不能直接控制门电路的生成。而Verilog语言和ABEL语言源程序的综合过程要稍简单,即经过RTL级门电路级的转化,易于控制电路资源。,(4) 对综合器的要求:VHDL描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高,Verilog和ABEL对综合器的性能要求较低。 (5) 支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的综合器仅仅Dataio一家。 (6) 国际化程度:VHDL和Verilog已成为IEEE标准,而ABEL正朝国际化标准努力。,3.1.2 VHDL的优点 VHDL的英文全名是Very-High-Speed In
4、tegrated Circuit Hardware Description Language,诞生于1982年。1987年底, VHDL被IEEE ( The Institute of Electrical and Electronics Engineers)和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上
5、扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起几乎全部的数字系统设计任务。,VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和
6、内部(或称不可视部分),即设计实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的,具体如下:,(1) 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。就目前流行的EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题,只是在综合与优化效率上略有差异。 (
7、2) VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。,(3) VHDL语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效、高速的完成必须有多人甚至多个开发组共同并行工作才能实现,VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有利的支持。,(4) 用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的实现芯片)。这种方
8、式突破了门级设计的瓶颈,极大地减少了电路设计的时间和可能发生的错误,降低了开发成本。利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系统。反过来,设计者还可以容易地从综合和优化的电路获得设计信息,返回去更新修改VHDL设计描述,使之更加完善。,(5) VHDL对设计的描述具有相对独立性。设计者可以不懂硬件的结构,也不必管最终设计的目标器件是什么,而进行独立的设计。正因为VHDL的硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各种系列的CPLD、FPGA及各种门阵列器件。 (6) 由于VHDL具有类属描
9、述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。,3.1.3 VHDL程序设计约定 为了便于程序的阅读和调试,本书对VHDL程序设计特作如下约定: (1) 语句结构描述中方括号“ ”内的内容为可选内容。 (2) 对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的。本书一般使用大写。 (3) 程序中的注释使用双横线“-”。在VHDL程序的任何一行中,双横线“-”后的文字都不参加编译和综合。,(4) 为了便于程序的阅读与调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的较高层次的缩进两个字符。 (
10、5) 考虑到MAX+plusII要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程序文件的命名均与其实体名一致。,3.2 VHDL程序基本结构,3.2.1 VHDL程序设计举例 1设计思路 全加器可以由两个1位的半加器构成,而1位半加器可以由如图3.1所示的门电路构成。 1位半加器的端口信号A 和B分别是2位相加的二进制输入信号,SO是相加和的输出信号,CO是进位输出信号,左边的门电路结构构成了右边的半加器H_ADDER。在硬件上可以利用半加器构成如图3.2所示的全加器,当然还可以将一组这样的全加器级联起来构成一个串行进位
11、的加法器。图3.2中,全加器 F_ADDER内部的功能结构是由3个逻辑器件构成的,即由两个半加器U1、U2和一个或门U3连接而成。,图3.1 1位半加器逻辑原理图,图3.2 1 位全加器逻辑原理图,2. VHDL源程序 1) 或门的逻辑描述 - IEEE库的使用说明 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -实体OR2的说明 ENTITY OR2 IS PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC); END ENTITY OR2; -实体OR2的结构体ART1的说明 ARCHITECTURE ART1 OF OR2
12、 IS BEGIN C=A OR B; END ARCHITECTURE ART1;,2) 半加器的逻辑描述 - IEEE库的使用说明 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -实体H_ADDER的说明 ENTITY H_ADDER IS PROT(A,B:IN STD_LOGIC; CO,SO:OUT STD_LOGIC);,END ENTITY H_ADDER; - 实体H_ADDER的结构体ART2的说明 ARCHITECTURE ART2 OF H_ADDER IS BEGIN SO=(A OR B) AND (A NAND B); CO=
13、NOT (A NAND B); END ARCHITECTURE ART2;,3) 全加器的逻辑描述 - IEEE库的使用说明 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -实体F_ADDER的说明 ENTITY F_ADDER IS PORT(AIN,BIN,CIN:IN STD_LOGIC; COUT,SUM: OUT STD_LOGIC); END ENTITY F_ADDER; -实体F_ADDER的结构体ART3的说明 ARCHITECTURE ART3 OF F_ADDER IS -元件调用声明,COMPONENT H_ADDER PORT
14、(A,B:IN STD_LOGIC; CO,SO:OUT STD_LOGIC); END COMPONENT; COMPONENT OR2 PORT(A,B:IN STD_LOGIC; C: OUT STD_LOGIC); END COMPONENT; SIGNAL D,E,F:STD_LOGIC; -元件连接说明 BEGIN U1:H_ADDER PORT MAP(A=AIN,B=BIN,CO=D,SO=E); U2:H_ADDER PORT MAP(A=E,B=CIN,CO=F,SO=SUM); U3:OR2 PORT MAP(A=D,B=F,C=COUT); END ARCHITECTU
15、RE ART3;,3. 说明及分析 (1) 整个设计包括三个设计实体,分别为OR2、H_ADDER和_ADDER,其中实体F_ADDER为顶层实体。三个设计实体均包括三个组成部分:库、程序包使用说明,实体说明和结构体说明。这三个设计实体既可以作为一个整体进行编译、综合与存档,也可以各自进行独立编译、独立综合与存档,或被其他的电路系统所调用。,(2) 实体 OR2定义了或门OR2的引脚信号A、B(输入)和C(输出),其对应的结构体ART1描述了输入与输出信号间的逻辑关系,即将输入信号A、B相或后传给输出信号端C,由此实体和结构体描述一个完整的或门元件。 (3) 实体H_ADDER及对应的结构体A
16、RT2描述了一个如图3.1所示的半加器。由其结构体的描述可以看到,它是由一个与非门、一个非门、一个或门和一个与门连接而成的,其逻辑关系来自于半加器真值表。在VHDL中,逻辑算符NAND、NOT、OR和AND分别代表“与非”、“非”、“或”和“与”4种逻辑运算关系。,(4) 在全加器接口逻辑VHDL描述中,根据图3.2右侧的1位二进制全加器F_ADDER的原理图,实体F_ADDER定义了引脚的端口信号属性和数据类型。其中,AIN和BIN分别为两个输入的相加位,CIN为低位进位输入,COUT 为进位输出,SUM为1位和输出。其对应的结构体ART3的功能是利用COMPONENT声明语句和COMPON
17、ENT例化语句将上面由两个实体OR2和H_ADDER描述的独立器件,按照图3.2全加器内部逻辑原理图中的接线方式连接起来。,(5) 在结构体ART3中,COMPONENTEND COMPONENT 语句结构对所要调用的或门和半加器两元件作了声明(COMPONENT DECLARATION),并由SIGNAL语句定义了三个信号D、E和F,作为中间信号转存点,以利于几个器件间的信号连接。接下去的“PORT MAP( )”语句称为元件例化语句(COMPONENT INSTANTIATION)。所谓例化,在电路板上,相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取了一个元件符号放在电路原理图上
18、,并对此符号的各引脚进行连线。例化也可理解为元件映射或元件连接,MAP是映射的意思。例如,语句“U2:H_ADDER PORT MAP(A=E,B=CIN,CO=F,SO=SUM)”表示将实体H_ADDER描述的元件U2的引脚信号A、B、CO和SO分别连向外部信号E、CIN、F和SUM。符号“=”表示信号连接。,(6) 实体F_ADDER引导的逻辑描述也是由三个主要部分构成的,即库、实体和结构体。从表面上看来,库的部分仅包含一个IEEE标准库和打开的IEEE.STD_LOGIC_1164.ALL程序包。但实际上,从结构体的描述中可以看出,其对外部的逻辑有调用的操作,这类似于对库或程序包中的内容
19、作了调用。因此,库结构部分还应将上面的或门和半加器的VHDL描述包括进去,作为工作库中的两个待调用的元件。由此可见,库结构也是VHDL程序的重要组成部分。,3.2.2 VHDL程序的基本结构 从前面的设计实例可以看出,一个相对完整的VHDL程序(或称为设计实体)具有如图3.3所示的比较固定的结构。至少应包括三个基本组成部分:库、程序包使用说明,实体说明和实体对应的结构体说明。其中,库、程序包使用说明用于打开(调用)本设计实体将要用到的库、程序包;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,可以含有一个或
20、一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。,如何才算一个完整的VHDL程序(设计实体),并没有完全一致的结论,因为不同的程序设计目的可以有不同的程序结构。通常认为,一个完整的设计实体的最低要求应该能为VHDL综合器所接受,并能作为一个独立设计单元,即以元件的形式存在的VHDL程序。这里所谓的元件,既可以被高层次的系统所调用,成为该系统的一部分,也可以作为一个电路功能块而独立存在和独立运行。,图3.3 VHDL程序设计基本结构,3.
21、2.3 实体(ENTITY) 实体是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述。它规定了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。 1实体语句结构 实体说明单元的常用语句结构如下: ENTITY 实体名 IS GENERIC(类属表); PORT(端口表); END ENTITY 实体名;,实体说明单元必须以语句“ENTITY 实体名IS”开始,以语句“END ENTITY 实体名;”结束,其中的实体名是设计者自己给设计实体的命名,可作为其他设计实体对该设计实体进行调用时用。中间在方括号内的语句描述,在特定的情况下并非是必须的。例如构
22、建一个VHDL仿真测试基准等情况中可以省去方括号中的语句。,2类属(GENERIC)说明语句 类属(GENERIC)参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种静态信息通道,类属的值可以由设计实体外部提供。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。,类属说明的一般书写格式如下: GENERIC(常数名;数据类型:设定值 ;常数名:数据类型:设定值 ); 类属参量以关键词GENERIC引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。类属表说明用于确定设计实体和其外部环境
23、通信的参数,传递静态的信息。类属说明在所定义的环境中的地位十分接近常数,但却能从环境(如设计实体)外部动态地接受赋值,其行为又有点类似于端口PORT。因此,常如以上的实体定义语句那样,将类属说明放在其中,且放在端口说明语句的前面。,在一个实体中定义的、可以通过GENERIC参数类属的说明,为它创建多个行为不同的逻辑结构。比较常见的情况是选用类属来动态规定一个实体端口的大小,或设计实体的物理特性,或结构体中的总线宽度,或设计实体中、底层中同种元件的例化数量等。一般在结构体中,类属的应用与常数是一样的。例如,当用实体例化一个设计实体的器件时,可以用类属表中的参数项定制这个器件,如可以将一个实体的传
24、输延时、上升和下降延时等参数加到类属参数表中,然后根据这些参数进行定制,这对于系统仿真控制是十分方便的。类属中的常数名是由设计者确定的类属常数名,数据类型通常取INTEGER或TIME等类型,设定值即为常数名所代表的数值。但需注意,综合器仅支持数据类型为整数的类属值。,【例3.2.1】 ENTITY MCK IS GENERIC(WIDTH:INTEGER:=16); PORT(ADD_BUS:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0) ; . 在这里,GENERIC语句对实体MCK的作为地址总线的端口ADD_BUS的数据类型和宽度作了定义,即定义ADD_BU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 编程 基础 课件
链接地址:https://www.31doc.com/p-2602228.html