收藏 分享(赏)

第七章 VHDL语言(1).ppt

上传人:w89153 文档编号:7902892 上传时间:2019-05-29 格式:PPT 页数:351 大小:6.92MB
下载 相关 举报
第七章 VHDL语言(1).ppt_第1页
第1页 / 共351页
第七章 VHDL语言(1).ppt_第2页
第2页 / 共351页
第七章 VHDL语言(1).ppt_第3页
第3页 / 共351页
第七章 VHDL语言(1).ppt_第4页
第4页 / 共351页
第七章 VHDL语言(1).ppt_第5页
第5页 / 共351页
点击查看更多>>
资源描述

1、第七章,计算机学院:王伟,第4章 时序电路分析,第5章 时序电路设计,第6章 可编程逻辑器件,第7章 VHDL设计基础,第七章 VHDL设计基础,VHDL的基本语句,VHDL的基本知识,常见组合电路的VHDL设计,常见时序电路的VHDL设计,起源: 1985年,美国国防部提出计划;1987年成为IEEE1076标准;1993年进一步修订完善;是目前标准化程度最高,适应性最广的 HDL语言;,VHDL Very high speed integration circuits Hardware Description Language,特点: 全方位硬件描述从系统到电路 多种描述方式适应层次化设计

2、 数据类型丰富,语法严格清晰 串行和并行通用,物理过程清楚 与工艺结构无关,可用于各类EDA工具,VHDL,VHDL从根本上是并发执行的,通常称之为代码,而不是程序。 VHDL中只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。,VHDL与常规计算机程序的区别,几点重要提示,VHDL的可综合性问题所有的VHDL描述都可用于仿真,但不是所有的VHDL描述都能用硬件实现。 用硬件电路设计思想编写VHDL学好VHDL的关键是充分理解VHDL与硬件电路的关系。 VHDL从根本上是并发执行的,LIBRARY IEEE; USE IEEE.STD_

3、LOGIC_1164.ALL;ENTITY test ISPORT ( a,b: IN STD_LOGIC ; c: OUT STD_LOGIC); END test;ARCHITECTURE behav of test IS BEGINc=a AND b; END behav;,库,包,实体 说明,结构体,一个简单的VHDL程序,7.1 VHDL的基本知识,7.1 VHDL的基本知识,一个简单的VHDL程序,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY test ISPORT ( a,b: IN STD_LOGIC ; c: OUT STD

4、_LOGIC); END test;ARCHITECTURE behav of test IS BEGINc=a AND b; END behav;,实体:VHDL的基本设计单元. 一个基本设计单元,简单的可以是一个与门;复杂的可以是一个微处理器或一个系统. 但二者基本构成是一致的,都是由实体说明和构造体两部分组成.,一个完整的VHDL程序包括:,实体构造体库包集合配置,库,STD库:包集合“Standard”和“Textio”,WORK库:当前工作库,IEEE库:标准包集合STD_LOGIC_1164,ASIC库:,用户自定义库:,设计库(隐含打开),资源库(用LIBRARY),1.库分类,

5、2. 库说明放在设计单元的最前面,LIBRARY 库名; USE 库名. 程序包名.项目名;,ALL,LIBRARY ieee; USE ieee. Std_logic_1164.all;,包集合,1. 可编译,是库结构中的一个层次 2. 单纯地罗列设计中经常用到的信号定义、数据类型、元件语句、函数定义、过程定义等 3. 用于封装属于多个设计单元分享的信息,STD_LOGIC_1164程序包,STD_LOGIC_ARITH程序包,STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包,STANDARD和TEXTIO程序包,常用的预定义的程序包,配置,实体,结构体1,结构体

6、N,配置可以把特定的结构体 关联到(指定给)一个确定的实体。,例:2:4 译码器设计,方案1:反相器+3输入与门 方案2:单一逻辑门与非门,Configuration pg1 of decode isFor struc1End For; End pg1;,Configuration pg2 of decode isFor struc2End For; End pg2;,Entity decode isPort( ); End decode; Architecture struc1 of decode isBegin. End struc1; Architecture struc2 of dec

7、ode isBegin. End struc2;,Configuration 配置名 of 实体名 isFor 选配结构体名End For; End 配置名;,配置,译码器实体,译码器 结构体1,译码器 结构体2,7.1 VHDL的基本知识,(一)VHDL的实体(二)VHDL的结构体(三)数据对象(四)数据类型(五)VHDL操作符(六)结构体的描述方式,实体三要素,库声明列出了当前设计中需要用到的所有库文件 实体说明(Entity Declaration)定义了设计单元的输入输出接口信号或引脚 结构体(Architecture Body)描述了电路要实现的功能,(一) VHDL的实体: ent

8、ity,entity 实体名 is port (端口名,端口名:方向 数据类型;端口名,端口名:方向 数据类型); end 实体名;,(一) VHDL的实体: entity,实体说明的基本格式,功能:描述设计单元的输入输出接口信号或引脚,library ieee; use ieee.std_logic_1164.all;entity test isport ( a,b: in std_logic; c: out std_logic); end test;architecture behav of test is beginc=a and b; end behav;,entity 实体名 is

9、port (端口名,端口名:方向 数据类型;端口名,端口名:方向 数据类型); end 实体名;,1. 端口(port)说明,port (端口名,端口名 :信号方向 数据类型;);,port (x,y: IN Bit;sum: OUT Bit;input: IN Bit_Vector(1 TO n);Output: OUT Bit);,VHDL:不区分大小写!,信号流动的方向(信号模式),in 输入out 输出inout 双向,可入可出buffer 双向,可内反馈 但该端口只能在实 体内赋值,不能外部驱动,Inout: 既可由VHDL程序内部的信号提供输入,又可由VHDL程序外部的信号提供输入

10、;可定义一般的双向信号,如数据总线 Buffer:只能由VHDL程序内部的信号提供输入;可定义设计中的观察量,就像用示波器去观察一样,它可以采集被观察信号的任何变化,而不会在外界给它施加任何输入。,Buffer与Inout的区别,Buffer与Inout的区别,若构造体内部要使用该信号,则锁存器的输出端必须被说明为Buffer。 一个构造体用Buffer说明输出端口,与其连接的另一个构造体的端口也要用Buffer说明,而OUT没有此限制。,2. 实体声明例子,7.1 VHDL的基本知识,(一)VHDL的实体(二)VHDL的结构体(三)数据对象(四)数据类型(五)VHDL操作符(六)结构体的描述

11、方式,(二) VHDL的构造体:architecture,一个实体可以有多个构造体,分别代表该器件的不同实现方案,构造体的基本格式,architecture 构造体名 of 实体名 is定义说明语句; begin并行处理语句; End 构造体名;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY test ISPORT ( a,b: IN STD_LOGIC ; c: OUT STD_LOGIC); END test;ARCHITECTURE behav of test IS BEGINc=a AND b; END behav;,构造体是对实体功

12、能的具体描述,一定要跟在实体的后面 通常,先编译实体再编译构造体,如实体需要重新编译,则构造体也需要重新编译,构造体的语法要点,每个构造体必须属于一个实体 除了第一句和begin句外,其余各句均以分号结束 在每一部分中,各语句处于并列状态,执行时不分先后次序 每条并行语句形成一个电路逻辑单元,构造体,构造体的三种描述方式 数据流描述信号赋值语句 行为描述进程 结构描述元件例化构造体的三种子结构BLOCK语句结构PROCESS语句结构SUBPROGRAMS语句结构,(二) 构造体:architecture,数据流描述/RTL描述信号赋值语句行为描述进程/数学模型结构描述元件例化/逻辑元件连接,1

13、.结构体的三种描述方式,1) 数据流描述(Data Flow Description) 以类似于寄存器传输级的方式描述数据的传输和变换。 主要使用并行的信号赋值语句,显式表示该设计单元的行为,隐式表示该设计单元的结构.,结构体的描述方式,RTL描述是用于逻辑综合的实体描述方法与行为描述不同,RTL描述中指定了各个寄存器的时钟,确定了存储单元的复用结构及总线,指定了电路元件之间的连接关系。RTL数据模型描述的语句与实际寄存器的结构模型之间存在直接的映射关系,程序的描述隐含了电路结构。在RTL描述中,信号代表了硬件中数据的实际移动方向以及电路的互连关系。,1) 数据流描述(Data Flow De

14、scription),1.结构体的三种描述方式,由于RTL描述用于逻辑综合,故RTL描述对语句有严格限制:一些难以综合的语句(如信号代入中的延时等)一些抽象的数据类型(如实数、记录、文件等)一些难以综合或不可综合的运算符(如除法/、乘方*等)都不能在程序中使用,1) 数据流描述(Data Flow Description),1.结构体的三种描述方式,结构体的描述方式,根据电子实体的逻辑表达式或逻辑真值表进行描述 程序结构简单,容易进行逻辑综合,综合结果最优化; 无法应用于大型设计中; 利用信号的赋值方式来描述电路内信号数据的流动情形直接式的信号赋值“=”条件式的信号赋值“whenelse”选择

15、式的信号赋值“withselectwhen”,1) 数据流描述(Data Flow Description),采用寄存器传输(RTL)描述方式,例1:2选1数据选择器,ENTITY mux21a IS PORT( a, b: IN BIT;s: IN BIT;y: OUT BIT); END mux21a; ARCHITECHURE dataflow OF mux21a ISBEGINy=(a AND s) OR (NOT s AND b);END dataflow;,结构体,1) 数据流描述(Data Flow Description),实体,back,结构体的描述方式,1) 数据流描述(D

16、ata Flow Description),Y = A and B; Z = (NOT A) and (NOT D) or C;,对于硬件电路来说,所有的逻辑门在任何时刻都处于执行状态,这是与传统计算机语言的根本不同之处!,结构体的描述方式,1) 数据流描述(Data Flow Description),例2:4 选1 多路选择器,例:8位比较器的布尔方程RTL描述。,LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY comparator ISPORT ( a, b : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;c

17、 : OUT STD_LOGIC ) ;END comparator ;ARCHITECTURE rtl OF comparator ISBEGIN c= NOT( a (0) XOR b(0) AND NOT (a (1) XOR b (1)AND NOT (a(2) XOR b(2) AND NOT (a(3)XOR b(3)AND NOT (a(4) XOR b(4) AND NOT (a(5) XOR b(5)AND NOT (a(6) XOR b(6) AND NOT (a(7)XOR b(7) ;END rtl ;,back,例:8位比较器的布尔方程RTL描述。,back,结构体的

18、描述方式,2)行为描述(Behavior Description),描述该设计单元的功能(即该单元能做些什么)。往往不涉及设计实体的电路结构 主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送;程序中,往往大量采用算术运算、关系运算、惯性延时、传输延时等难以进行逻辑综合和不能进行逻辑综合的VHDL语句。 采用行为描述的VHDL程序主要用于系统数学模型的仿真或系统工作原理的仿真,特点:对硬件知识的依赖最少,程序结构简单.,结构体的描述方式,2)行为描述(Behavior Description),描述硬件电路的行为模式 由指令 process(进程)引导 配合ifthenelse,ca

19、seiswhen等具有顺序性的指令来完成 在行为描述里,其程序的设计特性与普通的高级语言十分相似,它们会依指令语句出现的顺序作先后的处理,1.结构体的三种描述方式,采用行为描述方式,例:2选1数据选择器,ENTITY mux21a IS PORT( a, b: IN BIT;s: IN BIT;y: OUT BIT); END mux21a; ARCHITECHURE behv OF mux21a ISBEGINy=a WHEN s=0 ELSEb;END behv;,实体,结构体,2)行为描述(Behavior Description),特点:对硬件知识的依赖最少,程序结构简单.,go,仿真

20、结果,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL;ENTITY comparator ISPORT ( a, b : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 );c : OUT STD_LOGIC) ;END comparator ;ARCHITECTURE behavior OF comparator ISBEGINPROCESS ( a, b )BEGINIF a = b THEN c=1 ;ELSE c=0;END IF;END PROCESS;END behavior ;,例: 8位比较器结构体的行为描述,go,结构体

21、的描述方式,例:4 选1 多路选择器,2)行为描述(Behavior Description),结构体的描述方式,2)行为描述(Behavior Description),例:4 选1 多路选择器,结构体的描述方式,3)结构描述(Structure Description),1. 结构体的三种描述方式,结构化描述是常用的层次化设计方法。对于一个复杂的电子系统,可将其分解成若干个子系统,子系统可以再进一步分解成若干个模块。 层次化设计便于多人协作,同时并行设计。在结构化设计中,每个设计层次可以作为一个元件,而无需考虑元件的复杂性。 每个元件可以分别仿真,然后将各个元件组合起来构成系统,进行整体调

22、试。,描述该设计单元的硬件结构(该硬件是如何构成的)。 主要使用元件例化语句及配置指定语句描述元件的类型及元件的互连关系 用户将自己设计的电路标准化后作为一个元件放在库中供调用的过程称为元件例化,或者称为标准化。,结构体的描述方式,3)结构描述(Structure Description),步骤1:元件的声明,步骤2:各元件间的连线映射(Mapping),例化名:元件名PORT MAP( 端口名= 连接端口名,.);,COMPONENT 元件名ISPORT (端口名表); END COMPONENT;,映射方式,参数映射关系和端口映射关系有两种:位置映射和名称映射。 1位置映射方法 PORT

23、MAP (a(0) , b(0), x(0) );PORT ( a , b: IN STD_LOGIC ; c: OUT STD_LOGIC ); -元件,2. 名称映射方法 U0:xnor2 PORT MAP (a=a(0), c= x(0), b=b(0) );,8位比较器结构体的结构化描述,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comparator ISPORT ( a, b: IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 );c: OUT STD_LOGIC );END comparator; ARCHITE

24、CTURE structure OF comparator ISSIGNAL x: STD_LIGIC_VECTOR ( 7 DOWNTO 0 ) ;COMPONENT xnor2PORT ( a, b: IN STD_LOGIC; c: OUT STD_LOGIC );END COMPONENT;BEGIIN U0:xnor2 PORT MAP ( a(0), b(0), x (0) );U1:xnor2 PORT MAP ( a(1), b(1), x (1) ); U2:xnor2 PORT MAP ( a(2), b(2), x (2) ); U3:xnor2 PORT MAP ( a

25、(2), b(2), x (2) ); U4:xnor2 PORT MAP ( a(4), b(4), x (4) ); U5:xnor2 PORT MAP ( a(5), b(5), x (5) ); U6:xnor2 PORT MAP ( a(6), b(6), x (6) ); U7:xnor2 PORT MAP (a(7),b(7),x (7); c= x(0) AND x(1) AND x(2) AND x (3) AND x(4) AND x(5) AND x(6) AND x(7); END structure;,go,底层元件二输入同或门的描述,LIBRARY IEEE; US

26、E IEEE.STD_LOGIC_1164.ALL;ENTITY xnor2 ISPORT ( a, b: IN STD_LOGIC; c: OUT STD_LOGIC );END xnor2;ARCHITECTURE bool OF xnor2 ISBEGINc=NOT ( NOT a)AND b OR a AND( NOT b);END bool;,构造体,(二) 构造体:architecture,构造体的三种描述方式 数据流描述信号赋值语句 行为描述进程 结构描述元件例化构造体的三种子结构BLOCK语句结构PROCESS语句结构SUBPROGRAMS语句结构,大型电路设计中,全部电路用唯

27、一一个模块描述是不方便的 希望将整个电路分成几个相对独立的模块加以描述一个结构体可以用几个子结构,即几个独立模块构成,构造体的三种子结构BLOCK语句结构PROCESS语句结构SUBPROGRAMS语句结构,2.结构体的三种子结构,结构体的子结构,进程(PROCESS),块(BLOCK),子程序(SUBPROGRAM),结构体,构造体的三种子结构BLOCK语句结构简单块卫式块(guarded BLOCK)PROCESS语句结构SUBPROGRAMS语句结构,结构体的子结构,BLOCK语句结构,块标号名:BLOCK声明部分;BEGIN END BLOCK 块标号名;,(1)简单块:,(1) 简单

28、块:仅仅是一种对原有代码进行区域分割的方式,增强可读性和可维护性,b1:BLOCKsignal a: STD_LOGIC;BEGINa=input_sig WHEN en=1 ELSE Z END BLOCK b1;,2.结构体的三种子结构BLOCK,结构体的子结构,(1) 简单块:仅仅是一种对原有代码进行区域分割的方式,增强可读性和可维护性,结构体的子结构,2.结构体的三种子结构BLOCK,BLOCK语句结构,(2)卫式块:一种特殊的BLOCK,当某一条件被满足时,BLOCK语句才能被执行,块标号名:BLOCK(卫式表达式)声明部分;BEGIN END BLOCK 块标号名;,特点:BLOC

29、K中的语句是并发执行的.,结构体的子结构,2.结构体的三种子结构BLOCK,例:用BLOCK子结构实现D锁存器,块结构的特点,(1)块内的语句是并发执行的,运行结果与语句的书写顺序无关; (2)在结构体内,可以有多个块结构,块在结构体内是并发运行的; (3)块的运行有无条件运行和条件运行两种。条件运行的块结构称为卫式BLOCK(GUARDED BLOCK)。 (4)构内可以再有块结构,形成块的嵌套,组成复杂系统的层次化结构。,块的内部结构与结构体类似,是一种层次化结构设计方法。,块结构的使用方法,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE

30、bit32 IS -定义一个名为bit32的程序包TYPE tw32 IS ARRAY (31 DOWNTO 0) OF STD_LOGIC; -定义一个名为tw32的数组END bit32;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.bit32.ALL;ENTITY cpu IS PORT (clk, interrupt: IN STD_LOGIC;Addr: OUT TW32; -定义32位地址总线Data: INOUT TW32); -定义32位数据总线END cpu;,ARCHITECTURE cpu_block OF cpu ISSIGNAL addr_

31、bus, data_bus: TW32;BEGINAlu: BLOCK -Alu块SIGNAL Ad_bus: TW32;BEGIN : -Alu功能描述END BLOCK Alu;,Register: BLOCK -寄存器组块SIGNAL reg_bus: TW32;BEGINRegister1: BLOCKSIGNAL Add_bus: TW32; -内层块引用外层块的信号BEGIN: -寄存器功能描述END BLOCK register1;: -其余寄存器的功能描述END BLOCK register;: -cpu_blk的其余功能描述END cpu_blk;,Addr,Data,clk

32、,interrupt,addr_bus,data_bus,Alu,Add_bus,Regsiter,Reg_bus,Regsiter1,Add_bus,cpu,构造体的三种子结构BLOCK语句结构简单块卫式块(guarded BLOCK)PROCESS语句结构SUBPROGRAMS语句结构,结构体的子结构,PROCESS语句结构,进程名: process(信号名,.信号名) 说明语句;begin顺序语句; end process 进程名;,敏感量表,类型,变量,常量,函数,过程的声明或定义,进程,2.结构体的三种子结构PROCESS,PROCESS语句说明区,专门用来声明在process语句区

33、内所需要用到的对象及数据类型子程序(procedure及function)数据类型;常量; 声明在此处的对象其有效范围只限制在process的语句区内,属于局部对象,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,进程,2.结构体的三种子结构PROCESS,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,顺序语句只出现在进程和子程序(过程和函数)中,包括:wait语句;顺序赋值语句:信号赋值符号: “ = ” ;变量赋值符号:“ := ”顺序控制语句:条件控制:i

34、f, case;循环控制:loop, for, while, next, exit;空语句:null;断言语句:assert, report;过程调用:过程名(实际参数)返回语句:return;,PROCESS语句顺序语句,顺序语句的特点,执行的顺序性由按先后顺序执行的语句组成时间的并行性进程中的敏感信号变化时,进程内的顺序语句按先后顺序执行一次,但时间计算的起点是相同的,进程,2.结构体的三种子结构PROCESS,进程,2.结构体的三种子结构PROCESS,按行为模式描述的程序,并不是在任何时刻都会被处理,只有在敏感信号表中的信号发生变化时才会被启动 当敏感信号表中的信号被改变时,在它下面的

35、所有语句就会立刻由上而下依顺序被处理 如果进程语句中含有敏感信号表,则等价于语句内的最后一个语句是一个隐含的WAIT语句。该WAIT语句的形式如下,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,wait on 敏感信号表;,敏感信号表应紧跟在保留字PROCESS之后,含有敏感信号表的进程语句中不允许再显式出现WAIT语句,PROCESS语句敏感信号表,进程,PROCESS语句敏感信号表,进程内部执行过程,进程是个无限循环 进程中的语句顺序执行 进程中允许有多个wait语句 遇到wait语句进程即被挂起,直到条件满足进程被激活接

36、着向下执行 进程间通过信号而相互激励/通信,进程,进程,结构体的行为描述,2.结构体的三种子结构PROCESS,进程(Process),进程语句的特点,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,进程通常带有敏感量表(信号名列表),表中无论哪个信号值发生变化,都将启动该PROCESS语句,进程就从头到尾执行一次; 最后一个语句执行完毕,就返回开始的PROCESS语句,等待下一次变化的出现;,两个进程间的通信,ENTITY pro_com IS PORT (sa: IN BIT, q: OUT BIT)END pro_com;

37、 ARCHITECTURE folow OF pro_com ISSINGAL sta, stb: BIT: =0; BEGIN A: PROCESS (sa, sta) BEGIN IF (saEVENT AND sa=1) OR(staEVENT AND sta=1) ; THEN stb=1 AFTER 20nS ; 0 AFTER 30nS; ENDIF; END PROCESS A;,B: PROCESS (stb)BEGIN IF (stbEVENT AND stb = 1) THENsta=1 AFTER 10nS;0 AFTER 20nS;ENDIF; END PROCESS

38、B;END folow;,当进程的执行不再导致进程内部敏感量发生任何变化时,进程将停止执行,此时进程功能块处于稳定状态。 进程本身为结构体内的一条并行语句,其内部可执行部分是顺序语句; 进程可以使用结构体的各种信号作为输入和输出,在进程中可以改变这些信号的值;,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,进程语句的特点,进程语句之间的关系,一个VHDL模型的进程语句之间是并行关系 进程语句本身则定义了单独一组在整个模拟期间连续执行的顺序语句,进程,进程语句的特点,进程内不允许定义新的信号,但可以定义局部变量、常量、函数等;这

39、些定义的数据对象只在该进程内部使用; 当process后面的语句中出现wait指令时,其括号内的敏感信号表不可以存在,因为此时process后面的语句是否要执行需由wait指令来决定,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,进程内部所有的语句都是顺序执行的, 进程和进程之间是并行执行的, 进程的启动由PROCESS语句的敏感信号量表中的信号量触发,也可以由WAIT语句触发,进程语句的特点 总结,进程名:process(信号名,.信号名) 说明语句;begin顺序语句; ; end process 进程名;,用进程设计D触

40、发器,LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY dff4 IS PORT (clk, d, clr, pset:IN STD_LOGIC;q:OUT STD_LOGIC ); END dff4;ARCHITECTURE rtl OF dff4 ISBEGINPROCESS (clk, pset, clr)BEGINIF (clr = 0 ) THEN q = 0;ELSIF (pset = 0) THEN q = 1;ELSIF (clk EVENT AND clk = 1) THEN q = d;END IF;END PROCESS;END

41、 rtl;,进程(PROCESS),块(BLOCK),结构体,某个功能独立的电路,可以用块(BLOCK)实现,也可以用进程(PROCESS)实现块(BLOCK)中语句并行执行进程(PROCESS)中语句顺序执行,构造体的三种子结构BLOCK语句结构简单块卫式块(guarded BLOCK)PROCESS语句结构SUBPROGRAMS语句结构,3.结构体的三种子结构SUBPROGRAMS,Procedure语句结构,Procedure 过程名(参数1;参数2;)IS 定义语句;begin顺序语句; end 过程名;,3.结构体的三种子结构SUBPROGRAMS,进程名:process(信号名,.

42、信号名) 说明语句;begin顺序语句; ; end process 进程名;,Function语句结构,Function 函数名(参数1;参数2;)RETURN 数据类型 IS 定义语句;begin顺序语句; end 函数名;,函数的编写特点,1. 函数可以看作是一种多输入/单输出的电路模块; 2 . 函数信号表中带有若干形式参量,在调用时由实际信号取代,实现主程序向函数的输入;在函数内部,信号被作为常量对待; 3 函数内部可以定义局部使用的类型、常量、变量、函数、 过程;但不能定义信号; 4. 函数的输入只能是常数或信号,在函数中被作为in模 式,不能改变; 5. 函数中不能有out模式的

43、数据对象,运算结果通过return语句赋值给函数名输出。,.,包集合1,包集合n,库,过程、函数、包集合及库之间的关系,procedure 语句的设计要点,1 过程依靠参量与主程序交换信息,参量说明紧跟在过程名后面的括号中; 2 参量模式为:in 输入,作为常量;out 输出,作为变量或信号;inout 双向,作为变量或信号; 若要作为信号,最好在参量名前加注signal,Procedure 过程名(参数1;参数2;)IS 定义语句;begin顺序语句; end 过程名;,procedure 语句的设计要点,Procedure 过程名(参数1;参数2;)IS 定义语句;begin顺序语句; e

44、nd 过程名;,3 过程内部可以定义局部使用的类型、常量、变量、函数、过程,但不能定义信号,也不能进行元件调用;过程的内部不能包含或隐含寄存器; 4. 过程内部的执行语句为顺序语句。,过程可以并行调用(在结构体中)顺序调用(在进程中)并行过程的参量应该为信号量;顺序过程的参量为变量,可以利用顺序赋值语句将输出结果传递给信号量;,Procedure 过程名(参数1;参数2;)IS 定义语句;begin顺序语句; end 过程名;,procedure 语句的设计要点,(一)VHDL的实体(二)VHDL的结构体(三)数据对象常量变量信号(四)数据类型(五)VHDL操作符(六)结构体的描述方式,7.1

45、 VHDL的基本知识,(三) 数据对象(Data Object),1.常量(constant)定义,constant 常量名:数据类型 := 表达式;,2. 变量(variable)定义,variable 变量名:数据类型 := 初始值;,3. 信号(signal)定义,signal 信号名:数据类型 := 初始值;,全局量,可在实体/结构体描述、程序包/过程/ 函数/进程的说明中使用; 常量必须在说明时赋值,所赋值与说明的类型必须一致; 常量不一定有硬件对应;常见的硬件对应是固定的接地线或正电源。,1.常量(constant),constant 常量名:数据类型 := 表达式;,consta

46、nt vcc: real:= 5.0; constant tpd: time:= 5ns; constant fbus:std_logic_vector:=“0110”;,例:,为运算方便采用的中间量,没有具体硬件对应,在实际的硬件电路中是不存在的。 只在函数、过程、进程中说明,为局部量; 变量只在顺序语句中使用;不能产生附加延时,2. 变量(variable),variable 变量名:数据类型 := 初始值;,variable temp : std_logic; variable bus_a : std_logic_vector(7 downto 0);,例:,变量的赋值,注意: 变量定义

47、时可赋初值,没有指定初始值,默认为其数据类型中的第一个值(最左边的值) 变量只在函数、过程、进程等子结构中使用,一旦子结构执行结束,变量值随即消失; 在一个结构体中,同一个变量名可以出现在不同的子程序中,表达不同的数据对象。,采用“:=”符号进行,3. 信号(signal),signal 信号名:数据类型 := 初始值;,用来表达硬件内部元件的实际接线,有具体物理含义!,信号使用前必须先进行说明,下述声明均为全局变量:输入/输出信号在实体中说明通用信号在包集合中进行说明模块内部信号在结构体内说明,信号说明语句基本格式,例:signal temp : std_logic;signal bus_a : std_logic_vector(7 downto 0);signal sys_out : bit:= 1; 注意:端口(输入/输出)信号已在实体中说明,在结构体中就不再说明;,Signal 信号名 : 数据类型 ;,Signal 信号名 : 数据类型:= 表达式 ;,信号的赋值,例: temp=1; z=x and(not y);s1=s2 after 10 ns; 赋值号两边的信号原则上必须为相同类型; 信号可在构造体、过程、进程内赋值; 信号不能在函数内赋值;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报