吉林大学数字电路设计基础课程 —— vhdl语法

上传人:博****1 文档编号:569491562 上传时间:2024-07-29 格式:PPT 页数:64 大小:572.03KB
返回 下载 相关 举报
吉林大学数字电路设计基础课程 —— vhdl语法_第1页
第1页 / 共64页
吉林大学数字电路设计基础课程 —— vhdl语法_第2页
第2页 / 共64页
吉林大学数字电路设计基础课程 —— vhdl语法_第3页
第3页 / 共64页
吉林大学数字电路设计基础课程 —— vhdl语法_第4页
第4页 / 共64页
吉林大学数字电路设计基础课程 —— vhdl语法_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《吉林大学数字电路设计基础课程 —— vhdl语法》由会员分享,可在线阅读,更多相关《吉林大学数字电路设计基础课程 —— vhdl语法(64页珍藏版)》请在金锄头文库上搜索。

1、可编程器件及数字系统设计可编程器件及数字系统设计VHDL硬件描述语言硬件描述语言可编程器件及数字系统设计可编程器件及数字系统设计第四讲第四讲第四讲:第四讲:VHDL硬件描述语言硬件描述语言nVHDL概述概述nVHDL数据类型与数据对象数据类型与数据对象nVHDL命令语句命令语句一、一、VHDLVHDL概述概述 VHDL是超高速集成电路硬件描述语言是超高速集成电路硬件描述语言 ( (Very High speed Integrated Circuit Hardware Description Language)的英文缩写。的英文缩写。 语法和风格语法和风格:(1 1)类似与现代高级编程语言,如)

2、类似与现代高级编程语言,如C语言。语言。(2)VHDL描述的是硬件,它包含许多硬件特描述的是硬件,它包含许多硬件特有的结构。有的结构。硬件描述语言硬件描述语言HDL:美国:美国Iverson, 1962VHDL硬件描述语言硬件描述语言: 20世纪世纪80年代初年代初, 美国国防部美国国防部VHSIC计划计划目的目的:方便电子设计文档的交流和成果的再利用方便电子设计文档的交流和成果的再利用一、一、VHDL概述概述u VHDL发展历史发展历史 1983年提出了硬件描述语言的标准化问题。年提出了硬件描述语言的标准化问题。 1985年,第年,第1版版VHDL完成;完成; 1987年,国际电气与电子工程

3、师协会(年,国际电气与电子工程师协会(IEEE)将)将VHDL语言语言作为硬件描述语言的工业标准(作为硬件描述语言的工业标准(IEEE1076);); 1988年,美国国防部规定所有官方的年,美国国防部规定所有官方的ASIC设计都必须以设计都必须以VHDL作为设计描述语言,此后作为设计描述语言,此后VHDL逐渐成为工业界标准。逐渐成为工业界标准。 1993年,年,IEEE在在87版本的基础上进行了若干修订,增修为版本的基础上进行了若干修订,增修为IEEE1164标准;标准; 1999年,年,IEEE又将数字模拟混合又将数字模拟混合VHDL的版本作为工业标准,的版本作为工业标准,即即IEEE10

4、76.3;一、一、VHDL概述概述u VHDL与电路图设计电路的方式不同:与电路图设计电路的方式不同:和电路图设计方式相比:和电路图设计方式相比:(1)易于修改;)易于修改;(2)设计能力更强;)设计能力更强;(3)VHDL语言很方便:独立于器件设计;语言很方便:独立于器件设计;相同的程序代码可以用于不同厂家生产的相同的程序代码可以用于不同厂家生产的器件。器件。 一、一、VHDL概述概述u VHDL语言的程序结构语言的程序结构 LIBRARY(USE)- 库库 PACKAGE - 程序包集合程序包集合 ENTITY - 实体实体 ARCHITECTURE - 结构体结构体 CONFIGURAT

5、ION - 配置语句配置语句一、一、VHDL概述概述一、一、VHDL概述概述include “stdio.h”; include “math.h”;int main(void) int a,b,c; a=8; b=9; c=a+b; return c; Library std; Use std.standard.all;Entity and2 is Port( a,b : in bit;c : out bit);End and2;Architecture a1 of and2 is Begin c = a and b; End a1;VHDL程序程序 C程序程序 Library(库)(库)是用

6、于存放预先编译好的是用于存放预先编译好的Package(程程序包)。序包)。Package (程序包程序包)中定义了基本的常数,数据类型,中定义了基本的常数,数据类型,元件及子程序等。元件及子程序等。 作用:声明在实体和结构体定义中将用到的作用:声明在实体和结构体定义中将用到的 数据类型、元件或子程序等。数据类型、元件或子程序等。声明格式:声明格式: Library 库名库名; Use 库名库名. PACKAGE名名.All;一、一、VHDL概述概述(1)Library和和Package部分部分 作作用用: ENTITY(实实体体)用用于于定定义义电电路路的的外观,即外观,即I/O端口的类型和

7、数量。端口的类型和数量。 定义格式:定义格式:Entity 实体名实体名 is Port( a : in bit; b : in bit; c : out bit);End 实体名实体名; ;(2)ENTITY定义区定义区一、一、VHDL概述概述端口名端口名数据类型数据类型端口模式端口模式端口模式(端口模式(MODE)有以下几种类型有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)端口模式可用下图说明:(黑框代表一个设计或模块) IN OUT BUFFER INOUT一、一、VHDL概述概述(3)ARCHITECTURE定义区定义区实

8、体的实现。即说明电路执行什么动作或实现功能。实体的实现。即说明电路执行什么动作或实现功能。定义格式:定义格式: Architecture 结构体名结构体名 of 实体实体名名 is 声明语句;声明语句;(内部信号、变量、常数,元件,子程序声明内部信号、变量、常数,元件,子程序声明) Begin并行描述语句;并行描述语句;End 结构体名;结构体名;一、一、VHDL概述概述(4)CONFIGURATION部分部分 一个完整一个完整VHDL电路设计必须有电路设计必须有一个实体一个实体和和对应的对应的结构体结构体,即,即实体和结构体对实体和结构体对构成一个完整的构成一个完整的VHDL设计。设计。 一

9、个实体可对应一个结构体或多个结构体一个实体可对应一个结构体或多个结构体,即,即一个实体可以有不同的描述方式。一个实体可以有不同的描述方式。作用:作用:当实体有多个结构体时,系统默认实体选用最当实体有多个结构体时,系统默认实体选用最后一个结构体,利用后一个结构体,利用CONFIGURATION语句可以任语句可以任意选择采用哪一个结构体。意选择采用哪一个结构体。一、一、VHDL概述概述定义格式:定义格式:Configuration 配置名配置名 of 实体名实体名 isfor 选用的结构体名选用的结构体名end for;end configuration 配置名配置名 ;一、一、VHDL概述概述u

10、 标识符的定义原则:标识符的定义原则:(1)标识符由字母、数字和下划线组成,)标识符由字母、数字和下划线组成,a7_;(2)在标识符不区分大小写,在标识符不区分大小写,ab和和AB是一是一样的;样的;(3)第一个字符必须是字母,即)第一个字符必须是字母,即a666;(4)不允许有两个连续的下划线,不允许有两个连续的下划线,a_b错错误;误;(5)末尾不能是下划线,)末尾不能是下划线,mname_错误;错误;(6)标识符不能和关键字相同)标识符不能和关键字相同,如如Entity,is等。等。一、一、VHDL概述概述u 设计范例:设计范例:2输入与门输入与门abc电路真值表电路真值表abc0001

11、00010111一、一、VHDL概述概述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;Entity and2 is Port( a : in bit; b : in bit; c : out bit);End and2;-实体定义结束。实体定义结束。 双减号双减号-为为VHDL程序的程序的注释符,类似注释符,类似C语言中的语言中的/注释符。注释符。一、一、VHDL概述概述Architecture Na of and2 is Begin c

12、 =0 when a=0 and b = 0 else 0 when a=1 and b = 0 else 0 when a=0 and b = 1 else 1; - 符号符号=为信号直接赋值符。为信号直接赋值符。 End Na; - 结构体结构体Na Architecture Nb of and2 is Begin c = a and b; - and 为逻辑与操作为逻辑与操作End Nb; -结构体结构体Nb一、一、VHDL概述概述Configuration s1 of and2 isfor naend for;end configuration s1;-结构体配置结束。结构体配置结束。

13、一、一、VHDL概述概述二、二、VHDL数据类型与数据对象数据类型与数据对象在在VHDL程序中,我们经常会遇到这样的语句:程序中,我们经常会遇到这样的语句:Signal A : std_logic;Variable B : std_logic_vector(7 downto 0); Constant C : integer;数据对象类型数据对象类型数据类型数据类型数据对象名数据对象名u VHDL语言中的基本数据类型语言中的基本数据类型逻辑类型逻辑类型数值类型数值类型布尔代数布尔代数(Boolean)位位 (Bit)标准逻辑标准逻辑 (Std_Logic)整数整数 (Integer)实数实数 (

14、Real)二、二、VHDL数据类型与数据对象数据类型与数据对象n 逻辑数据逻辑数据类型类型 (1)布尔代数()布尔代数(Boolean)型型 ; (2)位()位(Bit);); (3)标准逻辑()标准逻辑(Std_logic););type BIT is (0, 1); type BOOLEAN is (FALSE, TRUE) ;二、二、VHDL数据类型与数据对象数据类型与数据对象标准逻辑类型标准逻辑类型Type Std_Logic Is ( U, -Undefined X , -Forcing Unknown 0 , -Forcing 0 1 , -Forcing 1 Z , -Hign

15、Impedance W, -Weak Unknown L , -Weak 0; H , -Weak 1;- , -Dont Care;)二、二、VHDL数据类型与数据对象数据类型与数据对象 标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型l 逻辑序列逻辑序列位序列 (Bit_Vector)标准逻辑序列 (Std_Logic_Vector)二、二、VHDL数据类型与数据对象数据类型与数据对象Signal data: Std_Logic_Vector( 7 downto 0);Signal address: Bit_Vector (

16、 0 to 3);序列的范围大小声明方式:序列的范围大小声明方式:To, Downtol 序列的使用序列的使用二、二、VHDL数据类型与数据对象数据类型与数据对象l 序列的分解与合成序列的分解与合成Signal A: Std_Logic_Vector( 3 downto 0);Signal B: Std_Logic_Vector( 0 to 3);Signal C: Std_Logic_Vector( 0 to 1);Signal D: Std_Logic_Vector( 1 downto 0);C= A( 2 downto 1);B= A(3) & D & 1;二、二、VHDL数据类型与数据

17、对象数据类型与数据对象n 数值类型数值类型(1)整数)整数Type Integer Is Range -231 231-1限定整数取值范围的方法:限定整数取值范围的方法:Signal A: Integer;Signal B: Integer Range 0 to 7;Signal C: Integer Range -1 to 1;二、二、VHDL数据类型与数据对象数据类型与数据对象l 无符号数无符号数 Unsigned与标准逻辑序列相似,声明时必须指明其与标准逻辑序列相似,声明时必须指明其位数。位数。Signal A : Unsigned(3 downto 0);Signal B : Unsi

18、gned( 7 downto 0);注意注意: 必须使用必须使用downto形式。形式。二、二、VHDL数据类型与数据对象数据类型与数据对象(2)实数)实数Type Real Is Range -1.7E38 to 1.7E38; 实数类型的表示可用科学计数形式或者带实数类型的表示可用科学计数形式或者带小数点的形式。小数点的形式。二、二、VHDL数据类型与数据对象数据类型与数据对象l VHDL中的运算符中的运算符二、二、VHDL数据类型与数据对象数据类型与数据对象 算术运算符:算术运算符: +加加-减减*乘乘/除除*乘方乘方mod 求模求模 rem 求余求余 abs求绝对值求绝对值 逻辑运算:

19、逻辑运算: and 逻辑与逻辑与or逻辑或逻辑或nand与非与非nor 或非或非xor 异或异或xnor同或同或not 逻辑非逻辑非关系运算符:关系运算符: = 等于等于/= 不等于不等于小于小于大于大于= 大于或等于大于或等于注:其中注:其中=操作符操作符也用于表示信号的赋值也用于表示信号的赋值操作。操作。 &连接符连接符,将两个数将两个数据对象或矢量连接成维据对象或矢量连接成维数更大的矢量,它可给数更大的矢量,它可给代码书写带来方便。代码书写带来方便。 例如:例如: vabc=a & b & c;如如果果a=1 , b=0 , c=1 ,则则 vabc=“101” 。二、二、VHDL数据类

20、型与数据对象数据类型与数据对象u 用户自定义数据类型:用户自定义数据类型:(1) 列举数据类型列举数据类型Type 列举名称列举名称 is (元素元素1,元素,元素2,)例子:例子:Type state is(S0,S1,S2,S3);Signal S: state;二、二、VHDL数据类型与数据对象数据类型与数据对象(2) 数组类型数组类型Type 数组名称数组名称 is Arrary(范围范围) of 数据类型;数据类型;例子:例子: Type Byte is Arrary(7 downto 0) of Bit; Signal sdo: Byte;二、二、VHDL数据类型与数据对象数据类型

21、与数据对象u 数据类型的转换数据类型的转换 在在VHDL语言里,语言里,不同类型的数据信号之间不同类型的数据信号之间不能互相赋值不能互相赋值。当需要不同类型数据之间。当需要不同类型数据之间传递信息时,就需要传递信息时,就需要类型转换函数类型转换函数将其中将其中的一种类型数据转换为另一中数据类型后,的一种类型数据转换为另一中数据类型后,再进行信号的传递。再进行信号的传递。二、二、VHDL数据类型与数据对象数据类型与数据对象例如:例如:Signal Y : Std_logic_vector(7 downto 0);Signal X : Integer range 0 to 255;Y= CONV_

22、STD_LOGIC_VECTOR(X,8);二、二、VHDL数据类型与数据对象数据类型与数据对象CONV_INTEGER 将数据类型将数据类型 UNSIGNED, SIGNED转换为转换为INTEGER 类型类型. CONV_UNSIGNED 将数据类型将数据类型INTEGER, SIGNED转换为转换为UNSIGNED 类型类型.CONV_SIGNED 将数据类型将数据类型INTEGER, UNSIGNED转换为转换为SIGNED类型类型.CONV_STD_LOGIC_VECTOR 将数据类型将数据类型INTEGER, UNSIGNED, SIGNED, STD_LOGIC转换为转换为STD

23、_LOGIC_VECTOR 类型类型. 二、二、VHDL数据类型与数据对象数据类型与数据对象u 数据对象数据对象常常 量量信信 号号变变 量量(Data Objects)二、二、VHDL数据类型与数据对象数据类型与数据对象(1) 常量常量定义格式定义格式:Constant 常量名称常量名称: 数据类型数据类型 :=给定值;给定值; 常量通常来来定义延迟和功耗等参数。常量通常来来定义延迟和功耗等参数。注意!常数定义的同时进行赋初值。注意!常数定义的同时进行赋初值。常数在程序包说明、实体说明、结构体描常数在程序包说明、实体说明、结构体描述、过程说明、函数调用中使用。述、过程说明、函数调用中使用。二

24、、二、VHDL数据类型与数据对象数据类型与数据对象library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; -必需定义必需定义+entity exam1 is port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0);end exam1; architecture m1 of exam1 isconstant num : integer := 6;beginop = ip + num;end m1;

25、二、二、VHDL数据类型与数据对象数据类型与数据对象(2) 信号信号定义格式定义格式Signal 信号名称信号名称: 数据类型数据类型 :=初始值初始值;信号相当于电路内部元件之间的物理连线信号相当于电路内部元件之间的物理连线, ,因因此信号的赋值有一定的延迟时间此信号的赋值有一定的延迟时间. .二、二、VHDL数据类型与数据对象数据类型与数据对象l“信信号号”数数据据对对象象,代代表表电电路路内内部部信信号号或或连连接接线线路路,其在元件之间起互连作用。其在元件之间起互连作用。注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。建议

26、信号对象定义后再进行赋值。建议信号对象定义后再进行赋值。l信号为全局量。信号为全局量。l在实体说明、结构体描述和程序包说明中使用。在实体说明、结构体描述和程序包说明中使用。l信号赋值的语法格式为:信号赋值的语法格式为:信号名信号名 = 表达式;表达式;如:如:Signal S1 : Std_logic_vector(3 Downto 0); S1 = “0000”;二、二、VHDL数据类型与数据对象数据类型与数据对象(3)变量)变量定义格式定义格式Variable 变量名称变量名称: 数据类型数据类型 :=初始值初始值;变量只能用于进程之中变量只能用于进程之中,变量的赋值是立变量的赋值是立即生

27、效的即生效的,常用于高层次抽象的算法描述常用于高层次抽象的算法描述当中。当中。二、二、VHDL数据类型与数据对象数据类型与数据对象 “变变量量”数数据据对对象象,它它用用于于对对中中间间数数据据的的临临时时存存储储,并不一定代表电路的某一组件。并不一定代表电路的某一组件。 注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。建议变量对象定义后再进行赋值。变量为局部量。变量为局部量。仅限于进程(仅限于进程(Process)或子程序中使用。)或子程序中使用。 变量赋值的语法格式为:变量赋值的语法格式为:目标信

28、号值目标信号值:=表达式;表达式;如:如:Variable S1 : Std_logic_vector(3 Downto 0); S1 := “0000”;二、二、VHDL数据类型与数据对象数据类型与数据对象信号和变量的比较信号和变量的比较 (1)信号和变量的对应关系不同信号和变量的对应关系不同:信号代表电路内部信号或连:信号代表电路内部信号或连接线路;而变量则不是。接线路;而变量则不是。 (2)信号和变量声明的位置不同信号和变量声明的位置不同:信号声明在子程序、进程的外:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。部;而变量声明在子程序、进程的内部。 (3)信号为全局量,而

29、变量只在定义它的域中才可见信号为全局量,而变量只在定义它的域中才可见。因此,。因此,变量不能在两个进程之间传递信息。变量不能在两个进程之间传递信息。 (4)在一个进程中多次为一个信号赋值时,只有最后一个值会起)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。作用;而变量则不同,每次赋值都会改变它的值。(5)赋值不同。赋值不同。在进程中,信号赋值只有在进程结束时起作用,在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为,变量赋值为“:=

30、”。数据对象属性数据对象属性(1)数值类属性:)数值类属性: (数组类型的数据对象)(数组类型的数据对象)数值类属性有数值类属性有 left, right, low, high, length。其中用符号其中用符号 隔开对象名及其属性。隔开对象名及其属性。 left表示数组的左边界;表示数组的左边界; right表示数组的右边界;表示数组的右边界; low表示数组的下边界;表示数组的下边界; high表示数组的上边界;表示数组的上边界; length表示数组的长度。表示数组的长度。如:如:Signal A : std_logic_vector(7 downto 0);Signal B : st

31、d_logic_vector(0 to 3);则这两个信号的属性值分别为:则这两个信号的属性值分别为: Aleft=7; Aright=0; Alow=0; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;数据对象属性数据对象属性(2)event属性:属性: event属性属性,它的它的值为布尔型值为布尔型,如果刚好有事,如果刚好有事件发生在该属性所附着的信号上(即信号有变件发生在该属性所附着的信号上(即信号有变化),则其取值为化),则其取值为Ture,否则为否则为False。 利用此属性可决定时钟信号的变化情

32、况,即时利用此属性可决定时钟信号的变化情况,即时钟是否发生。钟是否发生。数据对象属性数据对象属性例如:时钟边沿表示:例如:时钟边沿表示:signal clk : in std_logic;则则clkevent and clk=1表示时钟的上升沿。表示时钟的上升沿。即时钟变化了,且其值为即时钟变化了,且其值为1。 clkevent and clk=0表示时钟的下降沿。表示时钟的下降沿。即时钟变化了,且其值为即时钟变化了,且其值为0。此外,还可利用两个函数来表示时钟的边沿此外,还可利用两个函数来表示时钟的边沿。rising_edge(clk) 表示时钟的上升沿表示时钟的上升沿falling_edg

33、e(clk) 表示时钟的下降沿表示时钟的下降沿数据对象属性数据对象属性三、三、VHDL命令语句命令语句并列语句并列语句顺序语句顺序语句VHDL命令语句命令语句并列语句并列语句 并列语句一般处于进程(并列语句一般处于进程(PROCESS)的外的外部。所有并列语句都是并行执行的,即与部。所有并列语句都是并行执行的,即与它们出现的先后次序无关。它们出现的先后次序无关。 并列语句有三个特点:并列语句有三个特点:a. 所有语句的执行是并行的;所有语句的执行是并行的;b. 每条语句的执行和其所在的位置无关;每条语句的执行和其所在的位置无关;c. 并列语句的输出仅仅依赖于输入,没有其并列语句的输出仅仅依赖于

34、输入,没有其它的限制条件。它的限制条件。 并列语句并列语句(1)直接赋值语句直接赋值语句:= 赋值运算符赋值运算符(2)条件赋值语句条件赋值语句:When-Else(3)选择赋值语句选择赋值语句:With-Select-When(4) Process(进程进程)语句语句(5) Block(块)(块)语句语句(6) 函数调用语句(后面章节讲)函数调用语句(后面章节讲)(7) Component(元件元件)例化语句例化语句(8)For-Generate语句语句直接赋值语句直接赋值语句直接赋值语句的格式:直接赋值语句的格式:Signal_name=expression;如:如:Signal A,B:

35、 std_logic_vector(7 downto 0); A=”0000000”; B=”1000000”;我们也可以这样赋值:我们也可以这样赋值:A0); 结果信号结果信号A的每一位的值都为的每一位的值都为0。B0);信号对象的位数很多时,采用信号对象的位数很多时,采用others来赋值很方便。来赋值很方便。When-Else条件赋值语句条件赋值语句语法格式为:语法格式为:label: Signal_name= expression1 When logic_expression1 Else expression2 When logic_expression2 Else expressio

36、nn;例如:例如:f=1 when (x1=x2) else 0;With-Select-When选择式赋值选择式赋值label:With expression SelectSignal_name=expression When constant_value , expression When constant_value ;signal tmp : std_logic_vector(1 downto 0);Begintmp=x&y;With tmp Selectz statement1; statement; When constant_value2 = statement2; statement; When others = statement3; statement;End case;变量赋值语句变量赋值语句由于变量赋值是立即起作用的,所以在进程中变量赋值是顺由于变量赋值是立即起作用的,所以在进程中变量赋值是顺序语句。序语句。例如:例如:Processvariable a,b:integer;begina:=30;b:=40;a:=b;b:=a;end process;由于变量的赋值是顺序进行的,所以运行结果是由于变量的赋值是顺序进行的,所以运行结果是a=b=40。

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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