《VHDL语言基础》PPT课件.ppt
《《VHDL语言基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL语言基础》PPT课件.ppt(221页珍藏版)》请在三一办公上搜索。
1、VHDL语言基础,何宾2011.09,VHDL语言基础-本章概述,本章详细介绍了VHDL语言的基本结构、VHDL语言要素、VHDL语言语句的原理和设计方法。VHDL语言是整个EDA设计中最核心的内容之一。读者必须熟练的掌握VHDL语言,并且通过实验掌握使用VHDL语言对可编程逻辑器件进行编程的方法和技巧。,VHDL语言基础-VHDL程序结构,一个完整的VHDL程序包含实体(entity)、结构体(architecture)、配置(configuration)、包集合(package)、库(library)5个部分。实体主要是用于描述和外部设备的接口信号;构造体用于描述系统的具体逻辑行为功能;包
2、存放设计使用到的公共的数据类型、常数和子程序等;配置用来从库中选择所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、包集合和配置等。,VHDL语言基础-VHDL程序结构,VHDL的基本结构是由实体和结构体两部分组成的。实体用于描述设计系统的外部接口信号,结构体用于描述系统的行为、系统数据的流程或者系统组织结构形式。设计实体是VHDL程序的基本单元,是电子系统的抽象。根据所设计的数字系统的复杂度的不同,其程序规模也大不相同。,VHDL语言基础-VHDL程序结构,实体由类属说明和端口说明两个部分组成。根据IEEE标准,实体组织的一般格式为:ENTITY IS Generic Decl
3、arations Port Declarations END;(1076-1987 version)END ENTITY;(1076-1993 version),VHDL语言基础VHDL实体,VHDL语言基础VHDL实体,实体说明在VHDL程序设计中描述一个元件或一个模块与设计系统的其余部分(其余元件、模块)之间的连接关系,可以看作一个电路图的符号。因为在一张电路图中,某个元件在图中与其他元件的连接关系是明显直观的。,确定实体或组件中定义的局部常数。模块化设计时多用于不同层次模块之间信息的 传递。可从外部改变内部电路结构和规模。类属说明必须放在端口说明之前。generic(:=.);,VHDL
4、语言基础类属说明,类属常用于定义:实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。例:entity mck is generic(width:integer:=16);port(add_bus:out std_logic_vector(width-1 downto 0);,VHDL语言基础类属说明,VHDL语言基础端口说明,定义实体的一组端口称作端口说明(port declaration)。端口说明是对设计实体与外部接口的描述,是设计实体和外部环境动态通信的通道,其功能对应于电路图符号的一个引脚。实体说明中的每一个I/O信号被称为一个端口,一个端口就是一个数据对象。端口可以被赋
5、值,也可以当作变量用在逻辑表达式中。,语法格式:Port(:;.)其中:port_name为端口名字;mode为端口模式;type为数据类型。,VHDL语言基础端口说明,VHDL语言基础端口说明,(1)输入模式(in)输入仅允许数据流入端口。输入信号的驱动源由外部向该设计实体内进行。输入模式主要用于时钟输入、控制输入(如Load、Reset、Enable、CLK)和单向的数据输入,如地址信号(address)。,VHDL语言基础端口说明,(2)输出模式(out)输出仅允许数据流从实体内部输出。输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看作可读的。输出模式常用于计数输出、单向
6、数据输出、设计实体产生的控制其他实体的信号等。,VHDL语言基础端口说明,(3)缓冲模式(buffer)缓冲模式的端口与输出模式的端口类似,只是缓冲模式允许内部引用该端口的信号。缓冲端口既能用于输出,也能用于反馈。缓冲端口的驱动源可以是:设计实体的内部信号源;其他实体的缓冲端口。缓冲不允许多重驱动,不与其他实体的双向端口和输出端口相连。,VHDL语言基础端口说明,VHDL语言基础端口说明,(4)双向模式(inout)双向模式可以代替输入模式、输出模式和缓冲模式。在设计实体的数据流中,有些数据是双向的,数据可以流入该设计实体,也有数据从设计实体流出,这时需要将端口模式设计为双向端口。双向模式的端
7、口允许引入内部反馈,所以双向模式端口还可以作为缓冲模式用。由上述分析可见,双向端口是一个完备的端口模式。,VHDL语言基础数据类型,数据类型端口说明除了定义端口标识名称、端口定义外,还要标明出入端口的数据类型。由IEEE std_logic_1164所约定的、由EDA工具支持和提供的数据类型为标准逻辑(standard logic)类型。标准逻辑类型也分为布尔型、位型、位矢量型和整数型。为了使EDA工具的仿真、综合软件能够处理这些逻辑类型,这些标准库必须在实体中声明或在USE语句中调用。,VHDL语言基础实体举例,【例3-1】下面给出一个关于8位计数器的实体说明 entity counter
8、is generic(byte:integer:=8);port(clk:in std_logic;rst:in std_logic;counter:out std_logic_vector(byte-1 downto 0);end counter;,VHDL语言基础结构体,结构体具体指明了该设计实体的行为,定义了该设计实体的逻辑功能和行为,规定了该设计实体的内部模块及其内部模块的连接关系。VHDL对构造体的描述通常有三种方式进行描述:1)行为描述;2)寄存器传输描述;3)结构描述;,VHDL语言基础结构体,一个结构体的VHDL的描述为:architecture of is-declarati
9、ve_items(signal declarations,component declarations,etc.)begin-architecture body end;,VHDL语言基础结构体,其中:arch_name为结构体的名字;entity_name为实体的名字。结构体的begin开始的前面部分为声明项(declarative_items),通常是对设计内部的信号或者元件进行声明;而begin后面一直到结构体的结束,该部分是对实体行为和功能的具体的描述。该部分的描述是由顺序语句和并发语句完成的。,VHDL语言基础结构体内信号定义,由结构体的书写格式知道,在关键字ARCHITECTURE
10、和BEGIN之间的部分,用于对结构内部使用的信号、常数、数据类型、函数进行定义。特别需要注意的是,这些声明用于结构体内部,而不能用于实体内部,因为一个实体中可能有几个结构体相对应。另外,实体说明中定义I/O信号为外部信号,而结构体定义的信号为内部信号。,VHDL语言基础结构体内信号定义,结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,但不需要定义信号模式(mode),不需要说明信号方向,因为这些结构体的内部信号是用来描述结构体内部的连接关系。,VHDL语言基础结构体内并行语句,并行处理语句是结构体描述的主要语句,并行处理语句在begin和end之间。并行处理语句表明,若一个结
11、构体的描述用的是结构描述方式,则并行语句表达了结构体的内部元件之间的互连关系。这些语句是并行的,各个语句之间没有顺序关系。,VHDL语言基础结构体内并行语句,若一个结构体是用进程语句来描述的,并且这个结构体含有多个进程,则各进程之间是并行的。但必须声明,每个进程内部的语句是有顺序的,不是并行的。若一个结构体用模块化结构描述,则各模块间是并行的,而模块内部视描述方式而定。,VHDL语言基础结构体内并行语句,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux4 IS PORT(a:in std_logic_vector(3 downto 0);s
12、el:in std_logic_vector(1 downto 0);q:out std_logic);END mux4;ARCHITECTURE rtl OF mux IS BEGIN q=a(0)when sel=”00”else a(1)when sel=”01”else a(2)when sel=”10”else a(3)when sel=”11”else X END rtl;,VHDL语言基础描述风格,VHDL语言主要有三种描述风格:行为描述;数据流(RTL寄存器传输)描述;结构描述;这三种描述方式从不同角度对硬件系统进行描述。一般情况下,行为描述用于模型仿真和功能仿真;而RTL描述
13、和结构描述可以进行逻辑综合。,VHDL语言基础结构体行为描述,行为描述是以算法形式对系统模型、功能的描述,与硬件结构无关。抽象程度最高。行为描述中常用语句的语句主要有:1)进程;2)过程;3)函数;,VHDL语言基础结构体行为描述,【例3-4】两输入或门的行为描述。ENTITY or2 IS PORT(a,b:in std_logic;c:out std_logic);END or2;ARCHITECTURE behav of or2 is BEGIN c=a or b AFTER 5 ns;END behave;,VHDL语言基础结构体数据流描述,数据流描述又称为寄存器传输级RTL描述。RT
14、L级描述是以寄存器为特征,在寄存器之间插入组合逻辑电路。即以描述数据流的流向为特征。,VHDL语言基础结构体数据流描述,【例3-5】四选一选择器的数据流(RTL)描述。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux4 IS port(x:in std_logic_vector(3 downto 0);sel:in std_logic_vector(1 downto 0);y:out std_logic);END mux4;ARCHITECTURE rtl of mux4 IS
15、 BEGIN y=x(0)when sel=”00”else x(1)when sel=”01”else x(2)when sel=”10”else x(3);END rtl;,VHDL语言基础结构体数据流描述,这种基于RTL级的描述,虽然具体了一些,但仍没有反映出实体内的具体结构。使用RTL描述时,应遵循以下几个原则:1、在一个进程中,不允许存在两个寄存器的描述【例3-6】下面是违反规则1的描述 PROCESS(clk1,clk2)BEGIN if rising_edge(clk1)then y=a;end if;if rising_edge(clk2)then z=b;end if;END
16、 PROCESS;,VHDL语言基础结构体数据流描述,2、在描述寄存器时,不允许使用IF语句中的ELSE项【例3-7】下面是违反规则2的描述 PROCESS(clk)BEGIN if rising_edge(clk)then y=a;else y=b;end if;END PROCESS;,VHDL语言基础结构体数据流描述,3、在描述寄存器时,必须带入信号值【例3-8】下面的例子说明了如何带入信号的方法 PROCESS(clk)VARIABLE tmp:std_logic;BEGIN y=tmp;if rising_edge(clk)then tmp:=a;end if;END PROCESS
17、;,VHDL语言基础结构体结构化描述,在多层次的设计中,高层次的设计模块调用低层次的设计模块,构成模块化的设计。从上面的例子可以看出来,全加器由两个半加器和一个或门构成,元件之间,元件与实体端口之间通过信号连接。知道了他们的构成方式,那么就可以通过元件例化语句进行描述。,VHDL语言基础结构体结构化描述,【例3-9】全加器的结构化的描述。Architecture structure_view of Full_adder is Component half_adder port(a,b:in std_logic;s,c:out std_logic);end component;component
18、 or_gate port(a,b:in std_logic;c:out std_logic);end component;signal a,b,c:std_logic;begin Inst_half_adder1:port map(x,y,a,b);Inst_half_adder2:port map(a,cin,sum,c);Inst_or_gate:port map(b,c,cout);End structure_view;,VHDL语言基础结构体结构化描述,VHDL语言基础结构体结构化描述,结构层次化编码是模块化设计思想的一种体现。目前大型设计中必须采用结构层次化编码风格,以提高代码的可
19、读性,易于分工协作,易于设计仿真测试激励。最基本的结构化层次是由一个顶层模块和若干个子模块构成,每个子模块根据需要还可以包含自己的子模块。结构层次化编码结构如图3.5所示。在进行结构层次化设计过程中,要遵循以下的原则:,VHDL语言基础结构体结构化描述,VHDL语言基础结构体结构化描述,1、结构的层次不易太深,一般为3到5层即可。在综合时,一般综合工具为了获得更好的综合效果,特别是为了使综合结果所占用的面积更小,会默认将RTL代码的层次打平。而有时为了在综合后仿真和布局布线后时序仿真中较方便的找出一些中间信号,比如子模块之间的接口信号等,可以在综合工具中设置保留结构层次,以便于仿真信号的查找和
20、观察.,VHDL语言基础结构体结构化描述,2、顶层模块最好仅仅包含对所有模块的组织和调用,而不应该完成比较复杂的逻辑功能。较为合理的顶层模块由:输入输出管脚声明、模块的调用与实例化、全局时钟资源、全局置位/复位、三态缓冲和一些简单的组合逻辑等构成。,VHDL语言基础结构体结构化描述,3、所有的I/O信号,如输入、输出、双向信号等的描述在顶层模块完成。4、子模块之间也可以有接口,但是最好不要建立子模块间跨层次的接口,例如上图中 模块A1到模块B1之间不宜直接连接,两者需要交换的信号可以通过模块A,模块B的接口传递。这样做的好处是增加了设计的可读性和可维护性。5、子模块的合理划分非常重要,应该综合
21、考虑子模块的功能、结构、时序、复杂度等多方面因素。,VHDL语言基础资源共享,除实体和构造体外,包集合、库及配置是VHDL语言和另外3个可以各自独立进行编译的源设计单元。通过使用库、包和配置,可以实现设计的共享。,VHDL语言基础资源共享(库种类),一个库中可以存放集合定义、实体定义、结构体定义和配置定义。当需要引用一个库时,首先需要对库名进行说明,其格式为:LIBRARY 其中为库的名字,这时就可以使用库中已经编译好的设计。对库中集合包的访问必须再经由USE语句才能打开。其格式为:USE 其中为程序包的名字。,VHDL语言基础资源共享(库种类),当前在VHDL语言中的库大致可以分为5种:IE
22、EE库、STD库、ASIC矢量库、用户定义库和WORK库。,VHDL语言基础资源共享(库种类),1)IEEE 库 定义了四个常用的程序包:std_logic_1164(std_logic types&related functions)std_logic_arith(arithmetic functions)std_logic_signed(signed arithmetic functions)std_logic_unsigned(unsigned arithmetic functions),VHDL语言基础资源共享(库种类),2、STD 库(默认库)STD库是VHDL的标准库,在库中存放S
23、TANDARD的包集合。由于它是VHDL的标准库,因此设计人员如果调用STANDARD包内的数据可以不进行标准格式的说明。STD库中还包含TEXTIO的包集合,在使用这部分包时,必须说明库和包集合名,然后才能使用该包集合中的数据。LIBRARY STD USE STD.TEXTIO.ALL;STANDATD包集合中定义最基本的数据类型包括Bit,bit_vector,Boolean,Integer,Real,and Time等。,VHDL语言基础资源共享(库种类),3、面向ASIC的库 在VHDL中,为了门级仿真的要求,各公司提供面向ASIC的逻辑门库。在该库中存放着与逻辑门一一对应的实体。为
24、了使用它,必须对库进行说明。4、WORK库 是存放设计数据的库。设计所描述的VHDL语句并不需要说明,将存放到WORK中。在使用该库的时候无须说明。,VHDL语言基础资源共享(库种类),5、用户定义库 用户定义库是设计人员根据设计的需要所开发的包集合和实体等,可以汇集在一起定义成一个库。在使用库时必须要说明库名称,然后才能调用包内的数据等。,VHDL语言基础资源共享(库使用),1、库的说明 除了WORK和STD库外,其它的库在使用前都需要进行说明,其说明格式为:library;其中 LIB_NAME为所需要调用的库的名字。,VHDL语言基础资源共享(库使用),2、库的调用 此外,还需要设计人员
25、指明使用库中哪个包集合以及包集合中的项目名(过程名、函数名等)。use.all 其中LIB_NAME为所需要调用的库的名字,PACKAGE_NAME为所需要调用的包的名字。,VHDL语言基础资源共享(库使用),3、库的作用范围 库说明语句的作用范围从一个实体说明开始到所属的构造体、配置为止。当一个文件中出现两个以上的实体时,两条作为使用库的说明语句应在每个实体说明语句前重复书写。,VHDL语言基础资源共享(包集合),包集合(Package)说明像C语言中的include语句一样,用来单纯的罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等。使用包集合时用U
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL语言基础 VHDL 语言 基础 PPT 课件
链接地址:https://www.31ppt.com/p-5454330.html