新的硬件描述语言VHDL编程基础

上传人:汽*** 文档编号:584137893 上传时间:2024-08-30 格式:PPT 页数:130 大小:842.02KB
返回 下载 相关 举报
新的硬件描述语言VHDL编程基础_第1页
第1页 / 共130页
新的硬件描述语言VHDL编程基础_第2页
第2页 / 共130页
新的硬件描述语言VHDL编程基础_第3页
第3页 / 共130页
新的硬件描述语言VHDL编程基础_第4页
第4页 / 共130页
新的硬件描述语言VHDL编程基础_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《新的硬件描述语言VHDL编程基础》由会员分享,可在线阅读,更多相关《新的硬件描述语言VHDL编程基础(130页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 硬件描述语言硬件描述语言VHDL编程基础编程基础 本本章章首首先先介介绍绍了了VHDL的的基基本本结结构构,使使读读者者初初步步掌掌握握VHDL的的基基础础知知识识。最最后后通通过过大大量量的的实实例例使使读读者者进一步掌握使用进一步掌握使用VHDL的设计方法。的设计方法。本章主要内容本章主要内容第一节 概述第二节第二节 VHDL程序结构程序结构第三节第三节 VHDL的基本数据类型的基本数据类型第四节第四节 VHDL的基本描述语句的基本描述语句第五节第五节 子程序子程序第一节第一节 概述概述lVHDL(Very high speed intergated circuit Hard

2、ware Description Language):非常高速集成电路的硬件描非常高速集成电路的硬件描述语言。述语言。l20世纪世纪80年代诞生于美国国防部的一项年代诞生于美国国防部的一项研究计划,目的是使电路的设计能够以研究计划,目的是使电路的设计能够以文字的方式保存下来。文字的方式保存下来。l被列为被列为IEEE1076标准,也成为工业界的标准,也成为工业界的标准。标准。1.VHDL简介简介2Verilog HDL语言简介语言简介 lVerilog HDL它是在它是在C语言的基础上发展起来的,由语言的基础上发展起来的,由GDA(Gateway Design Automation)公司创造的

3、,公司创造的,1989年年cadence公司收购了公司收购了GDA公司,使得公司,使得Verilog HDL成为了该公司的独家专利。成为了该公司的独家专利。1990年年Cadence公司公开发公司公开发表了表了Verilog HDL,并成立并成立LVI组织以促进组织以促进Verilog HDL成为成为IEEE标准,即标准,即IEEE Standard 1364-1995。lVerilog HDL的最大特点就是易学易用,如果有的最大特点就是易学易用,如果有C语言的语言的编程经验,可以在一个较短的时间内很快的学习和掌握,编程经验,可以在一个较短的时间内很快的学习和掌握,VerilogVerilog

4、 HDL HDL语言的系统抽象能力稍逊于语言的系统抽象能力稍逊于VHDLVHDL,而对门而对门级开关电路的描述能力则优于级开关电路的描述能力则优于VHDLVHDL。二、二、VHDL的优点的优点1. 支持层次化设计支持层次化设计 2. 具有多层次描述系统硬件功能的能力具有多层次描述系统硬件功能的能力 3. 具有丰富的仿真语句和库函数具有丰富的仿真语句和库函数 4. VHDL语句的行为描述能力和程序结构决定了他具有语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。支持大规模设计的分解和已有设计的再利用功能。 VHDL的优点的优点5. 对设计的描述具有相对独立性,与

5、硬件的结构无关对设计的描述具有相对独立性,与硬件的结构无关 6.可以利用可以利用EDA工具进行逻辑综合和优化,并自动将工具进行逻辑综合和优化,并自动将VHDL描述转化为门级网表。描述转化为门级网表。7. 具有可移植性,可以在不同的设计环境和系统平台中具有可移植性,可以在不同的设计环境和系统平台中使用。使用。8. 具有良好的可读性。具有良好的可读性。三、三、VHDL与高级语言的区别与高级语言的区别l1.1.某些并行语句可以自动的重复执行,不需要某些并行语句可以自动的重复执行,不需要用循环指令来保证。用循环指令来保证。l2.VHDL2.VHDL中的许多语句不是按排列顺序执行的,中的许多语句不是按排

6、列顺序执行的,而是可以同时执行的(而是可以同时执行的(VHDLVHDL的并行性)。的并行性)。返 回第二节第二节 VHDL程序结构程序结构一、一、VHDL的基本结构的基本结构ENTITY nand_2 IS -定义一个实体定义一个实体PORT( a, b: IN STD_LOGIC; -描述输入输出描述输入输出 y: OUT STD_LOGIC); -信号信号END nand_2;LIBRARY IEEE;-IEEE库库说明说明USE IEEE.STD_Logic_1164.ALL; -自定义元件库自定义元件库ARCHITECTURE rtl OF nand_2 ISBEGIN -结构体说明结

7、构体说明y=NOT(a AND b);END rtl;1.USE定义区2.PACKAGE定义区3.ENTITY定义区4.ARCHITECTURE定义区定义元件库5.CONFIGURATION定义区定义使用那些自定义元件库定义电路实体的外观:I/O接口的规格描述电路内部的逻辑功能决定那一个architecture被使用1. VHDL基本结构图基本结构图2. 2. 实体说明实体说明l功能功能:描述设计模块的输入:描述设计模块的输入/输出信号或引脚,并给出输出信号或引脚,并给出设计模块与外界的接口。实体类似一个设计模块与外界的接口。实体类似一个“黑盒黑盒”,实体,实体描述了描述了“黑盒黑盒”的输入输

8、出口。的输入输出口。l格式格式: ENTITY 实体名实体名ISGENERIC(类属表类属表););PORT(端口表端口表););END ENTITY 实体名实体名实实 体体 名名l实体名实际上是器件名,最好根据相应的电路实体名实际上是器件名,最好根据相应的电路功能确定。如功能确定。如4位位2进制计数器用进制计数器用counter4b;8位加法器用位加法器用add8b;3/8译码器用译码器用ym_38。l实体名必须与文件名相同,否则无法编译实体名必须与文件名相同,否则无法编译。l实体名不能用工具库中定义好的元件名实体名不能用工具库中定义好的元件名。l实体名不能用中文,也不能用数字开头。实体名不

9、能用中文,也不能用数字开头。类类 属属 表表类属表:用以将信息参数传递到实体。类属表:用以将信息参数传递到实体。类属表的一般格式为:类属表的一般格式为:GENERIC(常数名:数据类型常数名:数据类型:=设定值设定值)GENERIC(awidth : INTEGER:=3; timex: time ); 其中:其中:常数名常数名由设计者确定;由设计者确定;数据类型数据类型通常取通常取INTEGER或或time等;在表中提供时间参数、总线等;在表中提供时间参数、总线宽度等信息。宽度等信息。端口表:指明实体的输入、输出信号极其模式。端口表:指明实体的输入、输出信号极其模式。端口表的一般格式为:端口

10、表的一般格式为:PORT(端口名:端口模式端口名:端口模式数据类型数据类型 )端口模式:端口模式:共四种:共四种: IN(输入)、输入)、 OUT(输出)、输出)、 INOUT(双向端口)双向端口) 、 BUFFER(输出并向内部反输出并向内部反馈)馈) 端端 口口 表表数据类型数据类型:VHDL作为一种强类型语言,必须对数据对作为一种强类型语言,必须对数据对象(常量、变量、信号)规定取值范围,即对传输或象(常量、变量、信号)规定取值范围,即对传输或存储数据的类型作明确的界定。存储数据的类型作明确的界定。实实 体体 举举 例例ENTITYENTITY black_box black_box I

11、SIS GenericGeneric ( ( constantconstant width : width : integerinteger := 7 := 7;); );PORTPORT ( (clkclk, , rstrst: :ININstd_logicstd_logic; ;d:d:IN IN std_logic_vectorstd_logic_vector(width(width DOWNTODOWNTO 0);0);q:q:OUTOUT std_logic_vectorstd_logic_vector(width(width DOWNTODOWNTO 0);0);co:co:OUT

12、 OUT std_logicstd_logic); );ENDEND black_box; black_box;黑盒黑盒黑盒黑盒rstrstd7:0d7:0clkclkq7:0q7:0coco关键字关键字关键字关键字类属参量类属参量类属参量类属参量端口定义端口定义端口定义端口定义端口模式端口模式端口模式端口模式端口模式端口模式端口数端口数端口数端口数端口数端口数据类型据类型据类型据类型据类型据类型实体结束实体结束实体结束实体结束练练 习习 一一 编写包含以下内容的实体代码编写包含以下内容的实体代码编写包含以下内容的实体代码编写包含以下内容的实体代码端口端口端口端口 D D 为为为为1212位输

13、入总线位输入总线位输入总线位输入总线 端口端口端口端口 OE OE 和和和和 CLK CLK 都是都是都是都是1 1位输入位输入位输入位输入端口端口端口端口 AD AD 为为为为 1212位双向总线位双向总线位双向总线位双向总线端口端口端口端口 A A为为为为1212位输出总线位输出总线位输出总线位输出总线端口端口端口端口 INT INT 是是是是1 1位输出位输出位输出位输出端口端口端口端口 AS AS 是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈是一位输出同时被用作内部反馈my_designd11:0oeclkad11:0a11:0intas练习一答

14、案练习一答案LIBRARY LIBRARY ieeeieee; ;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_1164.ALL;ENTITY my_design IS ENTITY my_design IS PORT (PORT (d:d: IN IN std_logic_vector(11 DOWNTO 0); std_logic_vector(11 DOWNTO 0);oeoe, , clkclk: :IN IN std_logic; std_logic;ad:ad: INOUT INOUT std_logic_vector(11 DOWN

15、TO std_logic_vector(11 DOWNTO 0);0);a:a:OUT OUT std_logic_vector(11 DOWNTO 0); std_logic_vector(11 DOWNTO 0);intint: :OUT OUT std_logic; std_logic;as:as: BUFFER std_logic);BUFFER std_logic);END my_design;END my_design;my_designd11:0oeclkad11:0a11:0intas练练 习习 1、编写包含全加器的实体代码。编写包含全加器的实体代码。编写包含全加器的实体代码。

16、编写包含全加器的实体代码。 2 2、编写、编写、编写、编写4 4选选选选1 1数据选择器的实体代码。数据选择器的实体代码。数据选择器的实体代码。数据选择器的实体代码。Full_adderabcsumcoMux_41absycd3. 结构体结构体 结构体:结构体:通过若干并行语句来描述设计实体的通过若干并行语句来描述设计实体的逻辑功逻辑功能能(行为描述)或(行为描述)或内部电路结构内部电路结构(结构描述),从而(结构描述),从而建立设计实体输出与输入之间的关系。一个设计实体建立设计实体输出与输入之间的关系。一个设计实体可以有多个结构体。可以有多个结构体。格式:格式: ARCHITECTURE A

17、RCHITECTURE 结构体名结构体名 OF OF 实体名实体名 ISIS 说明语句;说明语句; BEGIN BEGIN 并行语句;并行语句; END ARCHITECTURE END ARCHITECTURE 结构体名结构体名 ;VHDL结构体术语结构体术语l说明语句:用于定义结构体中所用的数据对象和子说明语句:用于定义结构体中所用的数据对象和子程序,并对所引用的元件加以说明,但不能定义变程序,并对所引用的元件加以说明,但不能定义变量。量。l并行语句并行语句 并行语句有五种类型,可以把它们看成并行语句有五种类型,可以把它们看成结构体的五种子结构。这五种语句结构本身是并行结构体的五种子结构。

18、这五种语句结构本身是并行语句,但内部可能含有并行运行的逻辑描述语句或语句,但内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句,如进程内部包含的即为顺序运行的逻辑描述语句,如进程内部包含的即为顺序语句。顺序语句。l五种语句结构分别为块语句、进程语句、信号赋值五种语句结构分别为块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。语句、子程序调用语句和元件例化语句。 结结构构体体结结构构图图结构体结构体说明语句说明语句功能描述语句功能描述语句块语句块语句进程语句进程语句信号赋值语句信号赋值语句子程序调用语句子程序调用语句元件例化语句元件例化语句由若干并行执行语句包装在一由若干并行

19、执行语句包装在一由若干并行执行语句包装在一由若干并行执行语句包装在一由若干并行执行语句包装在一由若干并行执行语句包装在一起形成一个子模块。起形成一个子模块。起形成一个子模块。起形成一个子模块。起形成一个子模块。起形成一个子模块。定义顺序语句模块,用从外部定义顺序语句模块,用从外部定义顺序语句模块,用从外部定义顺序语句模块,用从外部定义顺序语句模块,用从外部定义顺序语句模块,用从外部获得的信号值,或内部的运算获得的信号值,或内部的运算获得的信号值,或内部的运算获得的信号值,或内部的运算获得的信号值,或内部的运算获得的信号值,或内部的运算数据向其它的信号进行赋值。数据向其它的信号进行赋值。数据向其

20、它的信号进行赋值。数据向其它的信号进行赋值。数据向其它的信号进行赋值。数据向其它的信号进行赋值。将设计实体内的处理结果向将设计实体内的处理结果向将设计实体内的处理结果向将设计实体内的处理结果向将设计实体内的处理结果向将设计实体内的处理结果向定义的信号或界面端口进行定义的信号或界面端口进行定义的信号或界面端口进行定义的信号或界面端口进行定义的信号或界面端口进行定义的信号或界面端口进行赋值赋值赋值赋值赋值赋值用以调用过程或函数,并将用以调用过程或函数,并将用以调用过程或函数,并将用以调用过程或函数,并将用以调用过程或函数,并将用以调用过程或函数,并将获得的结果赋值于信号。获得的结果赋值于信号。获得

21、的结果赋值于信号。获得的结果赋值于信号。获得的结果赋值于信号。获得的结果赋值于信号。元件调用,用来调用另一个元件调用,用来调用另一个元件调用,用来调用另一个元件调用,用来调用另一个元件调用,用来调用另一个元件调用,用来调用另一个实体所描述的电路。实体所描述的电路。实体所描述的电路。实体所描述的电路。实体所描述的电路。实体所描述的电路。实体和结构体之间的关系实体和结构体之间的关系Input 1Input nOutput 1Output n实体实体A AB BC CD DSeSel lMUX_OutMUX_Out2 2l Structure描述描述 描述该设计单元的硬件结构描述该设计单元的硬件结构

22、,即即该硬件是如何构成的该硬件是如何构成的,类似于数字电路中的逻辑图描类似于数字电路中的逻辑图描述述.lDate Flow描述描述 它是类似于寄存器传输级的方它是类似于寄存器传输级的方式描述数据的传输和变换,以规定设计中的各种寄式描述数据的传输和变换,以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。存器形式为特征,然后在寄存器之间插入组合逻辑。与数字电路中的真值表描述相似。与数字电路中的真值表描述相似。lBehavior Process描述描述 只描述所希望电路的功只描述所希望电路的功能或者电路行为(输入输出间转换的行为),而没能或者电路行为(输入输出间转换的行为),而没有指

23、明或涉及实现这些行为的硬件结构。与数字电有指明或涉及实现这些行为的硬件结构。与数字电路中的逻辑表达式描述相似。路中的逻辑表达式描述相似。结构体的三种描述形式结构体的三种描述形式architecture one of mux21 is signal d,e:bit; begin d=a and (not)s; e=b and s; y=d or e; end one;Structure描述描述逻辑图逻辑图逻辑图逻辑图architecture one of mux21 isbegin y=(a and (not s) or (b and s);end one;Date Flow描述描述逻辑函数式逻

24、辑函数式逻辑函数式逻辑函数式Behavior Process描述描述 architecture one of mux21 isbegin y=a when s=0 else b; end one;真值表真值表结构体结构体行为描述举例行为描述举例2 X 8 Input AND gate:ENTITY black_box IS ENTITY black_box IS PORT (PORT (a, b:a, b: ININstd_logic_vectorstd_logic_vector(7 (7 DOWNTODOWNTO 0); 0);y:y:OUTOUT std_logic_vectorstd_l

25、ogic_vector(7 (7 DOWNTODOWNTO 0); 0);END black_box;END black_box;ARCHITECTURE ARCHITECTURE example example OF OF black_box black_box ISISBEGINBEGIN y = a AND b; y = a AND b;ENDEND example; example;操作案例操作案例1、操作题目:、操作题目:通过通过3 3 8 8译码器的设计实例,从整体译码器的设计实例,从整体结构上初步认识结构上初步认识VHDLVHDL的基本结构和语句特点。的基本结构和语句特点。2 2

26、、3 3 8 8译码器的电路图译码器的电路图如图所示如图所示,有有4 4个输入端个输入端(A0A0、A1A1、A2A2、ENEN),),8 8个输出端(个输出端(Y0Y0Y7Y7)3 3、步骤:定义元件库、实体、结构体、编译、仿真。步骤:定义元件库、实体、结构体、编译、仿真。返 回第三节第三节 VHDL的基本数据类型的基本数据类型 一、数据对象一、数据对象 是数据类型的载体,共有三种形式的对象:是数据类型的载体,共有三种形式的对象:ConstantConstant(常量)常量)VariableVariable(变量)变量)SignalSignal(信号)信号) 对象的说明格式为:对象的说明格式

27、为:对象类别对象类别 标识符表:类型标识标识符表:类型标识 := =初值初值 (1 1)常量声明)常量声明 常量是全局量常量是全局量, ,在结构描述、程序包说明、在结构描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明实体说明、过程说明、函数调用说明和进程说明中使用。中使用。 例:例: constant WIDTH :INTEGER := 8; constant X :NEW_BIT := X;(2 2)变量声明)变量声明定义了给定类型的变量名称。定义了给定类型的变量名称。例:例: variable A,B :BIT; variable INIT :NEW_BIT变量赋值变量赋值l

28、l整体赋值:整体赋值:temp := “10101010”;temp := x”AA” ; l l逐位赋值逐位赋值:temp(7) := 1;l l多位赋值多位赋值temp (7 downto 4) := “1010”;多位赋值多位赋值多位赋值多位赋值用双引号用双引号用双引号用双引号逐位赋值逐位赋值逐位赋值逐位赋值用单引号用单引号用单引号用单引号赋值标志赋值标志赋值标志赋值标志(3 3)信号声明)信号声明l信号可以将结构体中分离的并行语句连接起来,信号可以将结构体中分离的并行语句连接起来,并且通过端口其他模块与该设计内的连接起来。并且通过端口其他模块与该设计内的连接起来。l l信号为器件内部节

29、点信号,数据的进出不像端口信号为器件内部节点信号,数据的进出不像端口信号为器件内部节点信号,数据的进出不像端口信号为器件内部节点信号,数据的进出不像端口信号那样受限制,不必定义其端口模式。信号那样受限制,不必定义其端口模式。信号那样受限制,不必定义其端口模式。信号那样受限制,不必定义其端口模式。l l定义信号的目的是为了在设计电路时使用该信号。定义信号的目的是为了在设计电路时使用该信号。定义信号的目的是为了在设计电路时使用该信号。定义信号的目的是为了在设计电路时使用该信号。l l用用用用“ “=”=”来给信号赋值来给信号赋值来给信号赋值来给信号赋值 例:例: signal A,B :BIT;

30、signal INIT :INTEGE: = -1信号赋值信号赋值l lSIGNAL temp : Std_Logic_Vector (7 downto 0);l l整体赋值整体赋值:temp = “10101010”;temp = x”AA” ; l l逐位赋值逐位赋值:temp(7) = 1;l l多位赋值多位赋值:l ltemp (7 downto 4) = “1010”;多位赋值多位赋值多位赋值多位赋值用双引号用双引号用双引号用双引号逐位赋值逐位赋值逐位赋值逐位赋值用单引号用单引号用单引号用单引号赋值标志赋值标志赋值标志赋值标志信号举例信号举例LIBRARY ieee;USE ieee

31、.std_logic_1164.all;ENTITY simp ISPORT(a, b, c, d : IN Std_Logic;g : OUT Std_Logic);END simp;ARCHITECTURE logic OF simp ISSIGNAL e,f : Std_Logic;BEGINe = a or b;f=not(c or d);g =e and f;END logic;a ab bc cd dg gef f端口信号端口信号端口信号端口信号在构造体内声明在构造体内声明在构造体内声明在构造体内声明的内部连接信号的内部连接信号的内部连接信号的内部连接信号信号和变量的作用范围信号和

32、变量的作用范围ARCHITECTURESIGNAL 描述描述label1: PROCESS1VARIABLE 描述描述label2: PROCESS2VARIABLE 描述描述在进程的外面声明在进程的外面声明在进程的外面声明在进程的外面声明作用范围为全局作用范围为全局作用范围为全局作用范围为全局在进程内部说明在进程内部说明在进程内部说明在进程内部说明作用范围为进程内作用范围为进程内作用范围为进程内作用范围为进程内信号和变量的区别信号和变量的区别信号信号变量变量赋值符赋值符号号=:=功能功能电路的内部连接电路的内部连接内部数据交换内部数据交换作用范作用范围围全局,进程和进程之全局,进程和进程之间

33、的通信间的通信进程的内部进程的内部行为行为延迟一定时间后才赋延迟一定时间后才赋值值立即赋值立即赋值二、数据类型二、数据类型 1. 1. 标准定义的数据类型标准定义的数据类型 不必用不必用USEUSE说明而直接使用。说明而直接使用。1 1)Boolean(Boolean(布尔量):取值为布尔量):取值为FALSEFALSE和和TRUETRUE。2 2)CharacterCharacter(字符):使用时用字符):使用时用单引号单引号括起来,括起来,如:如:AA。3 3)StringString(字符串):使用时用字符串):使用时用双引号双引号括起来,如:括起来,如: 111000101 1110

34、00101 。4 4)IntegerInteger(整数):范围在整数):范围在- -(2 23131-1-1)()(2 23131- -1 1)5 5)RealReal(实数):范围在实数):范围在-1.0E+38 -1.0E+38 + 1.0E+38 + 1.0E+38 6 6)Bit(Bit(位位):):取值为取值为0 0或或1.1.7 7)Time(Time(时间时间):):取值范围与整数一致取值范围与整数一致, ,一般用于仿一般用于仿真。真。8 8)Bit_vectorBit_vector(位矢量):基于位矢量):基于BITBIT数据类型的数数据类型的数组。使用时必需注明宽度。组。使

35、用时必需注明宽度。9 9)NaturalNatural(自然数)和自然数)和Positive(Positive(正整数正整数):):是整是整数的一个子类型。数的一个子类型。1010)Severity levelSeverity level(错误等级):用来设计系统错误等级):用来设计系统的工作状态。有四种状态值:的工作状态。有四种状态值:NOTE(NOTE(注意注意) )、WARNING(WARNING(警告警告) )、ERROR(ERROR(错误错误) )、FAILURE(FAILURE(失败失败) )。2. 2. 用户自定义的数据类型用户自定义的数据类型1 1)Enumerated Typ

36、esEnumerated Types(枚举类型)格式如下:枚举类型)格式如下:TYPE TYPE 数据类型名数据类型名 IS IS (枚举文字,枚举文字枚举文字,枚举文字);); 例如:例如:TYPE color IS (red,green,yellow,blue);TYPE color IS (red,green,yellow,blue); TYPE level IS (0,1,Z); TYPE level IS (0,1,Z);2)Integer Types2)Integer Types(整数类型)和整数类型)和 Real TypesReal Types(实实数类型)格式为:数类型)格式为

37、: TYPE TYPE 数据类型名数据类型名 IS RANGE IS RANGE 约束范围;约束范围; 例如例如: TYPE TYPE intint IS RANGE -10 TO 10; IS RANGE -10 TO 10;3)Array Types(3)Array Types(数组类型)格式如下:数组类型)格式如下:TYPE TYPE 数据类型名数据类型名 IS IS ARRAYARRAY(索引范围)索引范围)OFOF类型名称类型名称 ; 例如例如:TYPE a IS ARRAY(integer0 TO 9)OF std_logic:TYPE a IS ARRAY(integer0 TO

38、 9)OF std_logic3. IEEE3. IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量 在在IEEEIEEE的程序包中的程序包中std_logic_1164std_logic_1164中中定义了两个重要定义了两个重要的数据类型。的数据类型。1 1)std_logic:std_logic:工业标准的逻辑类型。取值为工业标准的逻辑类型。取值为00(强(强0 0)、)、11(强(强1 1)、)、ZZ(高阻态)、高阻态)、XX(强未知的)。强未知的)。2 2)std_logic_vector:std_logic_vector:工业标准的逻辑类型。工业标准的逻辑类型。std_logics

39、td_logic的组合。的组合。注意:使用这两种数据时,注意:使用这两种数据时,程序中必须声明程序中必须声明:LIBRARY IEEE;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL USE IEEE.STD_LOGIC_1164.ALLStd_Logic数据类型数据类型l lIEEE IEEE std_logic_std_logic_ 1164 1164中定义的一种数据类型,它中定义的一种数据类型,它中定义的一种数据类型,它中定义的一种数据类型,它包含包含包含包含9 9种取值分别为:种取值分别为:种取值分别为:种取值分别为: UU未初始化未初始化未初始化未

40、初始化用于仿真用于仿真用于仿真用于仿真 XX强未知强未知强未知强未知用于仿真用于仿真用于仿真用于仿真 00强强强强0 0用于综合与仿真用于综合与仿真用于综合与仿真用于综合与仿真 11强强强强1 1用于综合与仿真用于综合与仿真用于综合与仿真用于综合与仿真 ZZ高阻高阻高阻高阻用于综合与仿真用于综合与仿真用于综合与仿真用于综合与仿真 WW弱未知弱未知弱未知弱未知用于仿真用于仿真用于仿真用于仿真 LL弱弱弱弱0 0用于综合与仿真用于综合与仿真用于综合与仿真用于综合与仿真 HH弱弱弱弱1 1用于综合与仿真用于综合与仿真用于综合与仿真用于综合与仿真 _忽略忽略忽略忽略用于综合与仿真用于综合与仿真用于综合

41、与仿真用于综合与仿真三、标识符三、标识符 标识符是标识符是VHDLVHDL语言最基本的要素之一,是使用语言最基本的要素之一,是使用VHDLVHDL语言的基础。标识符是描述语言的基础。标识符是描述VHDLVHDL语言中端口、信号、常语言中端口、信号、常数、变量以及函数等名称的字符串。数、变量以及函数等名称的字符串。VHDLVHDL标识符书写规标识符书写规则如下:则如下: 1 1)使用的字符由)使用的字符由2626个英文字母、数字个英文字母、数字0 09 9以及下划以及下划线组成;线组成; 2 2)标识符必须以英文字母开始,不区分大小写;)标识符必须以英文字母开始,不区分大小写; 3 3)不能以下

42、划线结尾;)不能以下划线结尾; 4 4)标识符中不能有空格;)标识符中不能有空格; 5 5)标识符不能与)标识符不能与VHDLVHDL的关键字重名。的关键字重名。 四、运算符四、运算符(1)算术运算符)算术运算符 + 加加 * 乘方乘方 减减 MOD 求模求模 * 乘乘 REM 求余求余 / 除除 ABS 求绝对值求绝对值(2)关系运算符)关系运算符= 等于等于/= 不等于不等于 小于小于= 小于或等于小于或等于 大于大于=大于或等于大于或等于其中其中=符号也用于信号的赋值操作符号也用于信号的赋值操作 (3)逻辑运算符)逻辑运算符AND 逻辑与逻辑与 SLL 逻辑左移逻辑左移OR 逻辑逻辑SR

43、L 逻辑右移逻辑右移NAND 逻辑与非逻辑与非 SLA 算术左移算术左移NOR 逻辑或非逻辑或非 SRA 算术右移算术右移XOR 逻辑异或逻辑异或 ROR 逻辑循环右移逻辑循环右移NOT 逻辑非逻辑非 ROL 逻辑循环左移逻辑循环左移五、五、VHDLVHDL属性属性 VHDL属性(属性(Attribute)是指实体、结构体、类是指实体、结构体、类型及信号的一些表现特征。一般需要了解型及信号的一些表现特征。一般需要了解VHDL中的中的数值类属性、函数类属性以及范围类属性。其引用的数值类属性、函数类属性以及范围类属性。其引用的一般形式均为:对象一般形式均为:对象属性。属性。1 1数值类属性数值类属

44、性 数值类属性可用于返回数组、块或一般数据的有数值类属性可用于返回数组、块或一般数据的有关属性。如左边界(关属性。如左边界(left)、)、右边界(右边界(right)、)、下边界(下边界(low)、)、上边界(上边界(high)和数组长度和数组长度(l length)。)。例如:例如: sdownsdown :IN std_logic_vector :IN std_logic_vector(8 DOWNTO 08 DOWNTO 0); ; 这个信号的各属性值如下:这个信号的各属性值如下: sdownsdownleftleft=8;sdown=8;sdownright=0;sdownright

45、=0;sdownlowlow=0; =0; sdownsdownhighhigh=8;sdown=8;sdownlength=9;length=9;2 2函数类属性函数类属性 函数类属性用来返回有关信号行为功能的信息。如信函数类属性用来返回有关信号行为功能的信息。如信号属性函数:号属性函数:eventevent,它的值为布尔型,如果刚好有它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),事件发生在该属性所附着的信号上(即信号有变化),则其取值为则其取值为TrueTrue,否则为否则为FalseFalse。利用此属性可决定时利用此属性可决定时钟边沿是否有效,即时钟是否发生

46、。例如:时钟边沿表钟边沿是否有效,即时钟是否发生。例如:时钟边沿表示示SIGNAL SIGNAL clkclk:IN std_logicIN std_logic则:则:clkclkeventevent AND AND clkclk= =1 1,表示时钟的上升沿。表示时钟的上升沿。 clkeventclkevent AND AND clkclk=0=0,表示时钟的下降沿表示时钟的下降沿。 3 3范围类属性范围类属性范范围围(RANGERANGE)类类属属性性,用用来来生生成成一一个个限限制制性性数据对象的范围。数据对象的范围。例如:数据总线的范围例如:数据总线的范围SIGNAL SIGNAL d

47、ata_bus data_bus : :std_logic_wectorstd_logic_wector( 15 15 DOWNTO 0DOWNTO 0); ;Data_busData_busRANGE=15 DOWNTO 0;RANGE=15 DOWNTO 0;注意:注意:MAX+PLUSMAX+PLUS不支持该属性不支持该属性。练练 习习 1、编写包含全加器的结构体代码。编写包含全加器的结构体代码。编写包含全加器的结构体代码。编写包含全加器的结构体代码。 2 2、编写、编写、编写、编写3 3输入与非门的结构体代码。输入与非门的结构体代码。输入与非门的结构体代码。输入与非门的结构体代码。Fu

48、ll_adderabcsumcoand3abycARCHITECTURE example1 OF Full_adder ISBEGIN sum= a XOR b XOR c; c = (a AND b)OR(b AND c)OR(a AND c);END example1;ARCHITECTURE example2 OF and3 ISBEGIN y= a AND b AND c;END example2;练练 习习 答答 案案返 回第四节第四节 VHDL的基本描述语句的基本描述语句 一、顺序语句一、顺序语句1. IF语句语句 顺序语句用于进程过程或函数之中,为算法描顺序语句用于进程过程或函数

49、之中,为算法描述提供了述提供了IF 语句语句、CASE语句、语句、 LOOP语句。语句。可以用于实现两种或两种以上的条件分支判断。可以用于实现两种或两种以上的条件分支判断。格式为:格式为:IF 布尔表达式布尔表达式1 THEN 顺序语句顺序语句1 ELSIF 布尔表达式布尔表达式2 THEN 顺序语句顺序语句2 END IF 1)IF 布尔表达式布尔表达式1 THEN顺序语句顺序语句1END IF 常用格式常用格式2)IF 布尔表达式布尔表达式1 THEN顺序语句顺序语句1ELSE顺序语句顺序语句2END IF 3)IF 布尔表达式布尔表达式1 THEN顺序语句顺序语句1ELSIF 布尔表达式

50、布尔表达式2 THEN顺序语句顺序语句2 END IF 4)IF 布尔表达式布尔表达式1 THENIF 布尔表达式布尔表达式2 THEN顺序语句顺序语句 END IFEND IF 【例例4-3】IF语句描述的判断程序语句描述的判断程序(2选选1)IFs = 0THENy= a0;ELSIFs =1THENy= a1;ENDIF练练 习习用用IFIF语句实现语句实现4 4选选1 1IF s= IF s= 00 THEN y= a;ELSIF s= ELSIF s= 01THEN y= b;ELSIF s= ELSIF s= 10THEN y= c;ELSEELSE ydddd=0; -当当s=其

51、他时,其他时,d=0End Case;课后练习课后练习用用casecase语句实现语句实现3-83-8译码器译码器ym_38A0A1ENY7:0A23. LOOP语句语句 用于用于循环控制循环控制,与,与LOOP有关的五种语法其格式如下:有关的五种语法其格式如下: (1)循环标号循环标号: LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号;(2)标号标号: FOR 循环变量循环变量 IN 循环次数范围循环次数范围 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号;(3)循环标号循环标号: WHILE 条件条件 LOOP 顺序语句;顺序语句; END LOOP

52、 循环标号循环标号;(4)NEXT语句:在语句:在LOOP语句中,用来语句中,用来跳出当跳出当前循环前循环。其格式为:。其格式为:NEXT 循环标号循环标号 WHEN条件条件;(5)EXIT语句:用来语句:用来结束结束LOOP语句语句的执行。其的执行。其格式为:格式为:EXIT 循环标号循环标号 WHEN条件条件;利用利用LOOPLOOP语句可以简化同类顺序语句表达式语句可以简化同类顺序语句表达式. .如如: :Signal a,b,c:std_logic_vector(1 to 3)For n IN 1 to 3 LOOPa(n)= b(n)AND c(n)END LOOP等效于:等效于:a

53、(1)= b(1)AND c(1)a(2)= b(2)AND c(2)a(3)dddNULL;End Case;End Process;空语句空语句空语句空语句二、并行语句二、并行语句l并行语句与一般软件程序的最大区别就是在结构并行语句与一般软件程序的最大区别就是在结构体中的执行都是体中的执行都是同时进行同时进行的,的,既它们的执行顺序既它们的执行顺序与语法的书写顺序无关与语法的书写顺序无关。这种并行性是由硬件本。这种并行性是由硬件本身的并行性决定的,一旦电路接通电源,各部分身的并行性决定的,一旦电路接通电源,各部分就会按照事先设计好的方案同时工作。就会按照事先设计好的方案同时工作。l 并行语

54、句主要有进程语句(并行语句主要有进程语句(PROCESS)、)、块语块语句句( BLOCK )、)、并行信号赋值语句、生成语句并行信号赋值语句、生成语句( GENERATE )、)、元件例化语句、断言语句。元件例化语句、断言语句。1. 进程语句进程语句 进程语句是一段复合语句,由一段程序进程语句是一段复合语句,由一段程序构成,构成,各个进程之间是并行进行的,而进程各个进程之间是并行进行的,而进程的内部语句都是顺序执行的的内部语句都是顺序执行的。一个结构体中。一个结构体中可以包括多个进程语句,多个进程之间依靠可以包括多个进程语句,多个进程之间依靠信号(信号(SIGNAL)来传递。来传递。进程语句

55、进程语句PROCESS1PROCESSnsignalsignalA AR RC CHHI IT TE EC CT TU UR RE E一个构造体可以有一个构造体可以有一个构造体可以有一个构造体可以有一个构造体可以有一个构造体可以有多个进程语句多个进程语句多个进程语句多个进程语句多个进程语句多个进程语句进程和进程之间进程和进程之间进程和进程之间进程和进程之间进程和进程之间进程和进程之间是并行的是并行的是并行的是并行的是并行的是并行的进程和进程之间进程和进程之间进程和进程之间进程和进程之间进程和进程之间进程和进程之间的数据交换通过的数据交换通过的数据交换通过的数据交换通过的数据交换通过的数据交换通

56、过信号完成信号完成信号完成信号完成信号完成信号完成进程内部是顺序进程内部是顺序进程内部是顺序进程内部是顺序进程内部是顺序进程内部是顺序语句语句语句语句语句语句 进程语句的格式如下:进程语句的格式如下: 标号标号: PROCESS(敏感信号表敏感信号表)说明语句说明语句;-定义一些局部变定义一些局部变量量BEGIN顺序语句顺序语句;END PROCESS 标号:标号: ;敏感信号表敏感信号表l l进程赖以启动的敏感表。对于表中列出的任何进程赖以启动的敏感表。对于表中列出的任何进程赖以启动的敏感表。对于表中列出的任何进程赖以启动的敏感表。对于表中列出的任何信号的改变信号的改变信号的改变信号的改变,

57、都将启动进程,执行进程内相应都将启动进程,执行进程内相应都将启动进程,执行进程内相应都将启动进程,执行进程内相应顺序语句顺序语句顺序语句顺序语句. .l l一些一些一些一些VHDLVHDL综合器,综合后对应进程的硬件系综合器,综合后对应进程的硬件系综合器,综合后对应进程的硬件系综合器,综合后对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不统对进程中的所有输入的信号都是敏感的,不统对进程中的所有输入的信号都是敏感的,不统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人论在源程序的进程中是否把所有的信号都列人论在源程序的进程中是否把所有的信号都列人论在源程序的

58、进程中是否把所有的信号都列人敏感表中敏感表中敏感表中敏感表中. .l l为了使软件仿真与综合后的硬件仿真对应起来,为了使软件仿真与综合后的硬件仿真对应起来,为了使软件仿真与综合后的硬件仿真对应起来,为了使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输入信号都列入敏感表中应当将进程中的所有输入信号都列入敏感表中应当将进程中的所有输入信号都列入敏感表中应当将进程中的所有输入信号都列入敏感表中. .LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY if_case IS PORT ( a, b, c, d : IN Std_Logic; sel

59、: IN Std_Logic_Vector(1 downto 0); y, z : OUT Std_Logic);END if_case;ARCHITECTURE logic OF if_case ISBEGINif_label: PROCESS(a, b, c, d, sel)BEGINIF sel=00 THEN y = a;ELSIF sel=01 THEN y = b;ELSIF sel=10 THEN y = c;ELSE y z z z z z = 0;END CASE;END PROCESS case_label;END logic;进程语句举例进程语句举例两个进程两个进程是并发

60、的是并发的进程的运行进程的运行依赖于敏感依赖于敏感表内参数的表内参数的变化变化敏感表举例敏感表举例if_ label: if_ label: PROCESSPROCESS(oe(oe) )BEGINBEGINIFIF oeoe=1 =1 THENTHEN y = a; y = a; END IFEND IF; ;END PROCESSEND PROCESS if_label; if_label;仿真结果错误仿真结果错误仿真结果错误仿真结果错误仿真结果错误仿真结果错误敏感表举例敏感表举例if_label: if_label: PROCESSPROCESS(oe,a(oe,a) )BEGINBEG

61、INIFIF oeoe=1 =1 THENTHEN y = a; y dddNULL;End Case; End Process;3、进程必须由一个敏感信号表中定义的任一敏进程必须由一个敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一个显示的感信号的变化来启动,否则必须有一个显示的WAIT语句来激励。语句来激励。4、进程语句本身是并行语句。即同一结构体中进程语句本身是并行语句。即同一结构体中的不同进程是并行运行的,后者是根据敏感信号的不同进程是并行运行的,后者是根据敏感信号独立运行的。独立运行的。5、信号是多个进程间的通信线。信号是多个进程间的通信线。6、在同一进程中只能放置一个含有时

62、钟边沿检、在同一进程中只能放置一个含有时钟边沿检测语句的条件语句。测语句的条件语句。2. 块语句块语句 块语句将结构体中的并行语句结合在一起,其主块语句将结构体中的并行语句结合在一起,其主要目的是改善并行语句极其结构的可读性,一般用于要目的是改善并行语句极其结构的可读性,一般用于较复杂的较复杂的VHDL程序。程序。 其格式如下:其格式如下: 块名称:块名称: BLOCK (表达式)表达式)块声明项块声明项;BEGIN并行语句;并行语句;END BLOCK 块名称块名称; 3. 并行信号赋值语句并行信号赋值语句(1)简单(并行)信号赋值语句)简单(并行)信号赋值语句格式:赋值目标格式:赋值目标

63、=表达式;表达式; 如如q =b+c;(2)条件信号赋值语句条件信号赋值语句 格式:格式:赋值目标赋值目标 =表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式;表达式; 注意:注意:由于条件测试的顺序性,第一句具有最高赋由于条件测试的顺序性,第一句具有最高赋值优先级,第二句次之,以此类推。值优先级,第二句次之,以此类推。ARCHITECTURE ar_6 OF fzh_1 ISBEGINy= aWHENq=00ELSE bWHENq=01ELSE cWHENq=10ELSE d;END ar_6;【例例4-10】条件信号赋值语句的用法条件信号赋值语句的用法(3)选择信号赋值语句选择信

64、号赋值语句 格式:格式:WITH 选择表达式选择表达式 SELECT 赋值目标赋值目标 =表达式表达式 WHEN 选择值,选择值, 表达式表达式 WHEN 选择值;选择值; 选择信号赋值语句不允许有条件重叠的现象,也选择信号赋值语句不允许有条件重叠的现象,也不允许存在条件涵盖不全的情况。不允许存在条件涵盖不全的情况。 注意:注意:选择信号赋值语句本身不能在进程中应选择信号赋值语句本身不能在进程中应用,但其功能却与进程中的用,但其功能却与进程中的CASE语句的功能相似。语句的功能相似。 CASE语句的执行依赖于进程中敏感信号的改变而启语句的执行依赖于进程中敏感信号的改变而启动进程。选择信号语句中

65、也有敏感量,即动进程。选择信号语句中也有敏感量,即选择表达选择表达式式 。当。当选择表达式选择表达式 的值发生变化时,就将启动此语的值发生变化时,就将启动此语句对各子句的选择值进行测试对比,当发现有满足句对各子句的选择值进行测试对比,当发现有满足条件的子句的选择值时,就将此子句表达式中的值条件的子句的选择值时,就将此子句表达式中的值赋给赋给赋值目标。赋值目标。 ARCHITECTURE ar_7 OF fzh_2 ISBEGINWITH q SELECTyx(1),y=y(1), ci=cm(1),sum=s(1), co=cm(2);yj2:adde_1 PORT MAP(x(2), y(2

66、), cm(2), sum=s(2), co=cm(3);yj3:adde_1 PORT MAP(x(3), y(3), cm(3), s(3), co);ENDar_9;混合关联方式混合关联方式混合关联方式混合关联方式混合关联方式混合关联方式名字关名字关名字关名字关名字关名字关联方式联方式联方式联方式联方式联方式位置关联方式位置关联方式位置关联方式位置关联方式位置关联方式位置关联方式元件定义元件定义元件定义元件定义元件定义元件定义*一位加法器的描述一位加法器的描述*LIBRARY ieee;USEieee.std_logic_1164.ALL;ENTITY add_1 ISPORT(x,IN

67、std_logic; y:INstd_logic;ci:INstd_logic;sum: OUT std_logic;co:OUT std_logic;END add_1;ARCHITECTURE ar_10 OF add_1 ISBEGINsum=x XOR y XOR ci;co=( x AND y )OR( x AND ci)OR( y AND ci);END ar_10;练习:练习:用用D触发器构成触发器构成4位移位寄存器,用例化语位移位寄存器,用例化语句进行设计。句进行设计。DQclkdin d0DQclkd1DQclkd2DQclkd3d4doutU0U1U2U3clkLIBRAR

68、Y ieee;USEieee.std_logic_1164.ALL;ENTITY shifter ISPORT(din,clk:INstd_logic; dout:OUT std_logic);END shifter;ARCHITECTURE a OF shifter IS COMPONENT dff PORT (D,clk: IN std_logic; Q: OUT std_logic); END COMPONENT;SIGNAL d: std_logic _vector (4 DOWNTO 0);练练 习习 答答 案案BEGINd(0)d(2), clk= clk, Q =d(3); U3

69、:dff PORT MAP (D=d(3), clk= clk, Q =d(4); dout X, C1=Z, B1 = Y);END a;LIBRARY ieee;USEieee.std_logic_1164.ALL;ENTITY yf2 ISPORT(A1,B1:INstd_logic; C1:OUT std_logic);END yf2;ARCHITECTUREb OF yf2 ISBEGIN C1 =A1 NAND B1;END b; 5. 生成语句生成语句 生成语句具有复制作用,可以生成与某个元件或设生成语句具有复制作用,可以生成与某个元件或设计单元电路完全相同的一组并行元件或设计单

70、元电路结计单元电路完全相同的一组并行元件或设计单元电路结构。构。 格式格式1: 标号:标号: FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明语句;说明语句; BEGIN 并行语句;并行语句; END GENERATE标号;标号;格式格式2: 标号:标号: IF 条件条件 GENERATE 说明语句;说明语句; BEGIN 并行语句;并行语句; END GENERATE标号;标号;练习:练习:用用D触发器构成触发器构成4位移位寄存器,用生成语位移位寄存器,用生成语句进行设计。句进行设计。LIBRARY ieee;USEieee.std_logic_1164.ALL;EN

71、TITY shifter ISPORT(din,clk:INstd_logic; dout:OUT std_logic);END shifter;ARCHITECTUREa OF shifter IS COMPONENT dff PORT(D,clk:IN std_logic; Q:OUT std_logic); END COMPONENT;SIGNAL d: std_logic _vector (0 TO 4);BEGINd(0)=din; G:For i IN 0 TO 3 GENERATE U:dff PORT MAP (d(i),clk,d(i+1); END GENERATE G;

72、dout=d(4);END a;生成生成生成生成生成生成44 4个相同的个相同的个相同的个相同的个相同的个相同的DD D触发器触发器触发器触发器触发器触发器6. 6. 断言语句断言语句l断言语句是面向仿真的语句,综合器通常忽略此语断言语句是面向仿真的语句,综合器通常忽略此语句。并行断言语句等价一个进程语句,但不作任何句。并行断言语句等价一个进程语句,但不作任何操作,仅用于判断某一条件是否成立。操作,仅用于判断某一条件是否成立。l格式为:格式为: ASSERT 条件条件 REPORT报告信息报告信息SEVERITY出错级别出错级别; 当判断条件为当判断条件为FauseFause时报告错误。时报告

73、错误。Note: 用在仿真时传递信息。用在仿真时传递信息。Warning: 用于非平常情形,仿真仍继续,结果不可预知。用于非平常情形,仿真仍继续,结果不可预知。Error: 仿真不能继续。仿真不能继续。Failure: 致命错误,必须立即停止。致命错误,必须立即停止。错误级别为四级:错误级别为四级: LIBRARY ieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_arith.ALL;USEieee.std_logic_unsigned.ALL;ENTITYrs_1ISPORT(s,r:IN std_logic; q,nq :OUT std_l

74、ogic);END rs_1;ARCHITECTURE ar_11 OF rs_1 ISBEGINPROCESSVARIABLE blh_1:bit:=0;BEGINASSERT NOT(s=1AND r=1)REPORTBOTH s AND r EQUAL TO1!“ SEVERITY ERROR;断言语句断言语句断言语句断言语句断言语句断言语句IF s =0AND r=0 THEN blh_1:=blh_1;ELSIF s=0AND r=1THEN blh_1:=0;ELSE blh_1:=1;END IF;q=blh_1 after 2 ns; nq=NOT blh_1WAIT ON r

75、,s;END PROCESS;END ar_11;返 回第五节第五节 子程序子程序l子程序由一组顺序语句组成,是为了在程序中重复使子程序由一组顺序语句组成,是为了在程序中重复使用而设立的。用而设立的。l子程序不是一个独立的编译单位,只能置于实体或程子程序不是一个独立的编译单位,只能置于实体或程序包中。序包中。l在结构体中定义的子程序对于该结构体来说是局部的,在结构体中定义的子程序对于该结构体来说是局部的,即不能被其它设计层次的结构体调用。如果要在其它即不能被其它设计层次的结构体调用。如果要在其它结构体中调用同一个子程序,就需要把子程序定义到结构体中调用同一个子程序,就需要把子程序定义到程序包中

76、。程序包中。l VHDL中的子程序有两类:中的子程序有两类:过程子函数:过程通过其接口返回过程子函数:过程通过其接口返回0个或多个值。个或多个值。函数子函数:函数直接返回单个值。函数子函数:函数直接返回单个值。l 子程序包含两部分:即子程序声明和主体部子程序包含两部分:即子程序声明和主体部分。分。在程序包中声明子程序时,子程序声明必须要放在程在程序包中声明子程序时,子程序声明必须要放在程序包声明中,子程序主体必须要放在程序包体中。序包声明中,子程序主体必须要放在程序包体中。一、函数的定义与引用一、函数的定义与引用 函数语句的作用是输入若干参数,通过函数运算函数语句的作用是输入若干参数,通过函数

77、运算求值,最后返回直接一个值。求值,最后返回直接一个值。 函数语句的格式为:函数语句的格式为:FUNCTION 函数名函数名 参数表参数表RETURN 类型;类型; -函数头函数头FUNCTION 函数名函数名 参数表参数表 -函数体函数体RETURN 类型类型 IS 程序声明项程序声明项; BEGIN 顺序语句;顺序语句;END 函数名;函数名; 函数头是程序包与函数的接口界面。函数头是程序包与函数的接口界面。如果要将一如果要将一个函数组织成程序包入库,则必须定义函数头,且函个函数组织成程序包入库,则必须定义函数头,且函数头应放在程序包的说明部分,而函数体应放在程序数头应放在程序包的说明部分

78、,而函数体应放在程序包的包体内。包的包体内。如果只在一个结构体中定义并调用函数,如果只在一个结构体中定义并调用函数,则只需定义函数体即可。则只需定义函数体即可。 其中:函数表中为参数名、参数类别及数据类型,其中:函数表中为参数名、参数类别及数据类型,函数的参数为信号或常数,默认情况为常数;在函数的参数为信号或常数,默认情况为常数;在RETURNRETURN后面的数据类型为函数返回值的类型;子程序后面的数据类型为函数返回值的类型;子程序声明项用来说明函数体内引用的对象和过程;顺序语声明项用来说明函数体内引用的对象和过程;顺序语句就是函数体,用来定义函数的功能。句就是函数体,用来定义函数的功能。L

79、IBRARY ieee;USEieee.std_logic_1164.ALL;ENTITYfunISPORT (A: IN std_logic _Vector(0 TO 2); M :OUT std_logic _Vector(0 TO 2);END fun;ARCHITECTURE art OF fun IS FUNDTION sam (X,Y,Z: BIT) RETURN BIT IS BEGIN RETURN(X AND Y) OR Z; END sam;函数应用实例函数应用实例只有输入变量只有输入变量只有输入变量只有输入变量只有输入变量只有输入变量PROCESS(A)BEGINM(0)

80、=sam(A(0), A(1), A(2);M(1)=sam(A(2), A(0), A(1);M(2)=sam(A(1), A(2), A(0);END PROCESS;END art;当当当当当当AA A的的的的的的33 3个位中任何一位有个位中任何一位有个位中任何一位有个位中任何一位有个位中任何一位有个位中任何一位有变化时,将启动对变化时,将启动对变化时,将启动对变化时,将启动对变化时,将启动对变化时,将启动对samsamsam函函函函函函数的调用,并将返回值赋数的调用,并将返回值赋数的调用,并将返回值赋数的调用,并将返回值赋数的调用,并将返回值赋数的调用,并将返回值赋给给给给给给MMM

81、输出。输出。输出。输出。输出。输出。函数调用是一个函数调用是一个函数调用是一个函数调用是一个函数调用是一个函数调用是一个表达式。表达式。表达式。表达式。表达式。表达式。二、过程的定义与引用二、过程的定义与引用 过过程程的的作作用用是是传传递递信信息息,即即通通过过参参数数进进行行内内外外的的信信息息传传递递。其其中中参参数数需需说说明明(信信号号、变变量量及及常常量量)类类别、类型及传递方向。别、类型及传递方向。 过程定义的格式为:过程定义的格式为: PROCEDURE 过程名过程名 参数声明参数声明 IS子程序声明项子程序声明项; BEGIN顺序语句;顺序语句; END PROCEDURE

82、过程过程名名 ; 其中:参数声明指明了输入、输出端口的数目和类型。其中:参数声明指明了输入、输出端口的数目和类型。参数声明的语法格式为:参数声明的语法格式为: 参数名:方式参数名:方式 方式参数类型有方式参数类型有inoutinoutinoutinoutbuffer buffer 等四种。等四种。 过程的调用是一条语句过程的调用是一条语句,调用时通过其接口返回调用时通过其接口返回0个或个或多个值。多个值。 根据环境的不同,过程调用有两种方式,即顺序语句根据环境的不同,过程调用有两种方式,即顺序语句方式和并行语句方式。方式和并行语句方式。在一般的顺序语句自然执行过程中,在一般的顺序语句自然执行过

83、程中,一个过程被执行,则属于顺序语句方式;当某个过程处于一个过程被执行,则属于顺序语句方式;当某个过程处于并行语句环境中时,其过程体中定义的任一并行语句环境中时,其过程体中定义的任一IN或或INOUT的目标参量发生改变时,将启动过程的调用,这时的调用的目标参量发生改变时,将启动过程的调用,这时的调用属于并行语句方式。属于并行语句方式。过程的调用过程的调用LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITYfunISPORT (A: IN std_logic _Vector(0 TO 2; M : OUT std_logic _Vector(0 TO 2

84、);END fun;ARCHITECTURE art1 OF fun IS PROCEDURE sam1 (X,Y,Z: IN BIT; N:OUT BIT) IS BEGIN N:=(X AND Y) OR Z; END sam1;过程应用实例过程应用实例不仅有输入变量不仅有输入变量不仅有输入变量不仅有输入变量不仅有输入变量不仅有输入变量还有输出变量。还有输出变量。还有输出变量。还有输出变量。还有输出变量。还有输出变量。BEGINsam1(A(0), A(1), A(2), N(0);sam1(A(2), A(0), A(1), N(1);sam1(A(1), A(2), A(0), N(2

85、);M(0)= N(0); M(1)= N(1);M(2)= N(2); -等效于:等效于:M= N(2)& N(1)& N(0);END art1;过程的调用即启动了对过过程的调用即启动了对过过程的调用即启动了对过过程的调用即启动了对过过程的调用即启动了对过过程的调用即启动了对过程体的顺序语句的调用,程体的顺序语句的调用,程体的顺序语句的调用,程体的顺序语句的调用,程体的顺序语句的调用,程体的顺序语句的调用,调用调用调用调用调用调用33 3次。次。次。次。次。次。过程调用是一条过程调用是一条过程调用是一条过程调用是一条过程调用是一条过程调用是一条语句语句语句语句语句语句。三、子程序重载三、子

86、程序重载 子程序重载(子程序重载(Subprograms Overload)的特性使函的特性使函数或过程子程序中,允许多个子程序具有相同的子程序数或过程子程序中,允许多个子程序具有相同的子程序名,但参数不同,以便在调用时分辨不同功能的子程序,名,但参数不同,以便在调用时分辨不同功能的子程序,使子程序输出不同的数据。决定引用子程序的因素如下:使子程序输出不同的数据。决定引用子程序的因素如下: 1)子程序调用出现的参数个数;)子程序调用出现的参数个数; 2)调用中出现的参数类型;)调用中出现的参数类型; 3)子程序为函数时返回值的类型;)子程序为函数时返回值的类型; 4)调用时参数采用名字关联方式

87、时形参的名字。)调用时参数采用名字关联方式时形参的名字。 注意:注意: 子程序与进程不同,它不能从结构体的其余部分子程序与进程不同,它不能从结构体的其余部分直接读取信号或向信号赋值,所有通信必须通过子程直接读取信号或向信号赋值,所有通信必须通过子程序的界面端口进行。子程序与元件例化也不同,当子序的界面端口进行。子程序与元件例化也不同,当子程序被实体或另一个子程序调用时,综合后将嵌入其程序被实体或另一个子程序调用时,综合后将嵌入其中;而不是像元件例化语句那样,产生一个新的设计中;而不是像元件例化语句那样,产生一个新的设计层次。层次。第六节第六节 库和程序包库和程序包l库(库(Library):用

88、于存放预先编译好的程序包用于存放预先编译好的程序包(PACKAGE)和数据集合体。常用的库和数据集合体。常用的库有有IEEE、STD、WORK、用户库等。这些设计单元可用作其它用户库等。这些设计单元可用作其它VHDL描述的资源。用户编写的设计单元既可以访问描述的资源。用户编写的设计单元既可以访问多个设计库,又可以加入到设计库中,被其他单元所多个设计库,又可以加入到设计库中,被其他单元所访问。访问。l使用格式为:使用格式为: LIBRARY 库名称;库名称; 一、设计库一、设计库二、程序包二、程序包 在在VHDLVHDL中中数数据据类类型型、常常量量及及子子程程序序在在实实体体说说明明和和结结构

89、构体体内内定定义义,而而这这些些数数据据类类型型、常常量量及及子子程程序序对对其其他他设设计计实实体体是是不不可可见见的的。为为使使它它们们对对其其他他设设计计实实体体可可见见,VHDLVHDL提提供供了了程程序序包包(PackagePackage)。用用程程序序包包可可定定义义一一些些公公用用的的子子程程序序、常常量量以以及及自自定定义义数数据据类类型型等等。各各种种VHDLVHDL编编译译系系统统都都含含有有多多个个标标准准程程序序包包,如如Std-Logic-Std-Logic-11641164和和StandardStandard程程序序包包。用用户户也也可可已已自自行行设设计计程程序序

90、包包(保存到保存到WORK下下)。)。 程程序序包包由由两两个个独独立立的的单单元元组组成成:程程序序包包声声明明单单元元和和程序包体单元程序包体单元构成。构成。(1 1)程序包声明单元的一般格式:)程序包声明单元的一般格式: PACKAGE程序包名程序包名IS 说明语句说明语句 END 程序包名程序包名;其中说明语句为:类型定义、常量定义、子程序声明、其中说明语句为:类型定义、常量定义、子程序声明、信号声明及元件声明等。信号声明及元件声明等。 (2)程序包体单元的一般格式:)程序包体单元的一般格式: PACKAGE BODY程序包名程序包名IS 包体语句包体语句 END 程序包名程序包名;P

91、ACKAGE funIS SUBTYPE SEGMENT IS BIT _Vector (0 to 6);); TYPE BCD IS RANGE 0 to 9;END fun;ENTITYDECODER ISPORT (INPUT: BCD; DRIVE : OUT SEGMENT);END DECODER ;ARCHITECTURE art OF DECODER IS BEGIN WITH INPUT SELECT例:例:在现行在现行WORK库中定义程序包并立即库中定义程序包并立即 使用实例。使用实例。 DRIVE=B “1111110” WHEN 0, B “0110000” WHEN

92、1, B “1101101” WHEN 2, B “1111001” WHEN 3, B “0110011” WHEN 4, B “1011011” WHEN 5, B “1011111” WHEN 6, B “1110000” WHEN 7, B “1111111” WHEN 8, B “1111011” WHEN 9, B “0000000” WHEN OTHERS; END art;返 回第七节第七节 基本逻辑电路设计基本逻辑电路设计一、一、VHDL语言中基本语句总结语言中基本语句总结1、顺序语句、顺序语句 1)顺序语句中的)顺序语句中的IF、CASE、LOOP、NULL语语句句只用于进

93、程、过程、函数只用于进程、过程、函数。 2)IF、CASE用于条件选择;用于条件选择;LOOP用于循环用于循环控制偏重计算;控制偏重计算;NULL是一条空语句,一般用于是一条空语句,一般用于CASE语句中。语句中。2、并行语句、并行语句1)PROCESS语句注意敏感信号表,一般将进程语句注意敏感信号表,一般将进程中的输入信号或变量都写入敏感信号表中,如中的输入信号或变量都写入敏感信号表中,如无敏感信号,则使用无敏感信号,则使用WAIT语句。语句。2)BLOCK语句改善并行语句极其结构的可读性。语句改善并行语句极其结构的可读性。3)并行信号赋值语句:)并行信号赋值语句:(1)简单信号赋值语句)简

94、单信号赋值语句(2) WHEN ELSE 语句语句(不用与进程;不用与进程;ELSE 后面无符号)后面无符号)(3)选择信号赋值语句的用法)选择信号赋值语句的用法 ARCHITECTURE ar_7 OF fzh_2 IS BEGIN WITHqSELECT y= a WHEN 00,-选选择择值值用用“,” 结结束束bWHEN 01,cWHEN 10,dWHEN OTHERS; ENDar_7;4 4)元件例化语句:主要用于在元件例化语句:主要用于在VHDLVHDL中的层次设计。中的层次设计。5 5)生成语句:作用就是复制)生成语句:作用就是复制FOR 循环变量循环变量 IN 取值范围取值范

95、围 GENERATE3 .子程序子程序 VHDL中的子程序包括函数中的子程序包括函数(FUNCTION)和过程(和过程(PROCEDURE)等等两类。两类。 函数的作用就是输入若干个参数,通过函函数的作用就是输入若干个参数,通过函数运算求值,最后直接返回一个值。数运算求值,最后直接返回一个值。 过程的调用是一条语句,调用时通过其接过程的调用是一条语句,调用时通过其接口返回口返回0个或多个值。个或多个值。4. 库和程序包库和程序包二、组合逻辑电路的设计二、组合逻辑电路的设计1译码器译码器例:一位共阴七段数码管译码器例:一位共阴七段数码管译码器LIBRARY ieee;USE ieee.std_l

96、ogic_1164.ALL;entity bcd7 IS PORT(d3,d2,d1,d0:IN std_logic; a,b,c,d,e,f,g:OUT std_logic);END;ARCHITECTURE arc_bcd7 OF bcd7 IS SIGNAL din: std_logic_vector(3 DOWNTO 0);SIGNAL dout:std_logic_vector(6 DOWNTO 0);BEGINdin dout dout dout dout dout dout dout dout dout dout= 1110000; -显示显示7 . . .END CASE;EN

97、D PROCESS;a=dout(6); b=dout(5); c=dout(4); d=dout(3); e=dout(2); f=dout(1); g=dout(0); END arc_bcd7; 三、时序逻辑电路的设计三、时序逻辑电路的设计ARCHITECTURE behave OF count ISBEGINPROCESS(clk,rst,load,plus_sub,din)BEGINIF(clkevent AND clk=1)THEN IF(rst=1)THEN dout0);-同步复位同步复位 ELSIF(1oad=1)THEN dout=din; -同步置数同步置数 ELSIF(plus_sub=1)THEN-加法计数加法计数 1同步十进制可逆计数器同步十进制可逆计数器 IF(dout=9)THENdout=0000; -计数容量设定计数容量设定 ELSE dout=dout+1; END IF;ELSIF(plus_sub=0)THEN -减法计数减法计数 IF(dout=0)THEN dout=1001; ELSE dout=dout-1; END IF; END IF; END IF;END PROCESS; END behave;E N D返 回返 回A0A1A2ENY0Y1Y2Y3Y4Y5Y6Y73-8译码器译码器返 回

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号