VHDL与数字电路设计21914.ppt
2023/1/30,南京理工大学机械工程学院,1,第四章VHDL硬件描述语言,张志安 南京理工大学,2023/1/30,南京理工大学机械工程学院,2,主要内容4.1 VHDL语言概述 4.2 VHDL语言程序的基本结构4.3 VHDL语言的数据类型及运算操作符4.4 VHDL语言的顺序描述语句4.5 VHDL语言的并发描述语句4.6 VHDL语言在数字电路中的应用,2023/1/30,南京理工大学机械工程学院,3,4.1 VHDL语言概述,VHDL:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,80年代初由美国国防部在实施超高速集成电路(VHSIC)项目时开发的。1987年由 IEEE 协会批准为 IEEE 工业标准,称为IEEE1076-1987。各EDA公司相继推出支持VHDL的设计环境。1993年被更新为 93 标准,即IEEE1076-1993。进一步提高抽象描述层次,扩展系统描述能力。,数字电子技术的基本知识回顾,组合逻辑电路 编码器、译码器、数据选择器、加法器、数值比较器等时序逻辑电路同步时序逻辑电路异步时序逻辑电路寄存器、移位寄存器、计数器、序列信号发生器,一、传统设计方法,(1)首先确定可用的元器件;(2)根据这些器件进行逻辑设计,完成各模块;(3)将各模块进行连接,最后形成系统;(4)而后经调试、测量观察整个系统是否达到规定的性能指标。,传统的设计方法是基于中小规模集成电路器件进行设计(如74系列及其改进系列、74HC系列等都属于通用型数字集成电路),而且是采用自底向上进行设计:,EDA(Electronics Design Automation)即电子设计自动化技术,是利用计算机工作平台,从事电子系统和电路设计的一项技术。EDA技术为电子系统设计带来了这样的变化:(1)设计效率提高,设计周期缩短;(2)设计质量提高;(3)设计成本降低;(4)能更充分地发挥设计人员的创造性;(5)设计成果的重用性大大提高,省去了不必要的重复劳动。,二、EDA设计方法,自顶向下的设计方法,数字电路的EDA设计是基于PLD进行设计的,支持自顶向下的设计方法:(1)首先从系统设计入手,在顶层进行功能划分和结构设计;(2)然后再逐级设计底层的结构;(3)并在系统级采用仿真手段验证设计的正确性;(4)最后完成整个系统的设计,实现从设计、仿真、测试一体化。,传统设计方法 vs EDA设计方法,三、PLD器件,如果能把所设计的数字系统做成一片大规模集成电路,则不仅能减小电路的体积、重量、功耗,而且会使电路的可靠性大为提高。为某种专门用途而设计的集成电路叫做专用集成电路,即所谓的ASIC(Application Specific Integrated Circuit的缩写)。在用量不大的情况下,设计和制造这样的专用集成电路成本很高,而且设计、制造的周期也较长。可编程逻辑器件的研制成功为解决上述问题提供了比较理想的途径。,(一)出现的背景,(二)PLD概述,PLD:可编程逻辑器件(Programmable Logic Device)可编程逻辑器件是一种数字集成电路的半成品,在其芯片上按一定排列方式集成了大量的逻辑门和触发器等基本逻辑元件。通过编程可以设置其逻辑功能。PLD编程:利用开发工具对PLD进行加工,即按设计要求将这些片内的元件连接起来,使之完成某个逻辑电路或系统的功能,成为一个专用集成电路(ASICApplication Specific Integrated Circuit)。,PLD开发系统,PLD开发系统包括硬件和软件两部分。硬件部分:计算机、下载电缆或编程器;软件部分:集成开发系统。Altera公司:Maxplus、Quartus Xilinx公司:Foundation、ISE Lattice公司:Synario System、ispEXPERT System,2023/1/30,南京理工大学机械工程学院,12,四、PLD设计流程,1、PLD设计准备,在设计之前,首先要进行方案论证和器件选择等设计准备工作。设计者首先要根据任务要求,判断系统的可行性。系统的可行性要受到逻辑要求合理性、成本、开发条件、器件供应等方面的约束。若系统可行,则根据系统所完成的功能及复杂程度,对器件本身的资源和成本、工作速度及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。,2、设计输入,将所设计的电路的逻辑功能按照开发系统要求的形式表达出来的过程称为设计输入。通常,设计输入有如下三种方式:(1)原理图输入方式 适用于对系统及各部分电路很熟悉的场合。(2)硬件描述语言输入方式 硬件描述语言是用文本方式描述设计,硬件描述语言有ABEL、AHDL、VHDL、Verilog等,其中VHDL和Verilog已成为IEEE标准。(3)波形输入方式,3、设计处理,逻辑优化 把逻辑描述转变为最适合在器件中实现的形式,优化使设计所占用的资源最少。逻辑综合 根据设计描述,对给定的硬件结构组件,最终获得门级电路甚至更底层的电路描述文件,即将多个模块化设计文件合并为一个网表文件。适配 确定优化后的逻辑能否与器件中的宏单元和I/O单元适配。分割 将大的设计分割为多个便于器件内部资源实现的逻辑小块的形式。,2023/1/30,南京理工大学机械工程学院,16,4、设计校验,设计校验过程包括功能仿真和时序仿真。功能仿真时序仿真,5、器件编程,器件编程就是将开发系统生成的目标文件下载到可编程逻辑器件中,来定义内部模块的逻辑功能以及它们的相互连接关系。两种编程方式:编程器下载电缆,返回,2023/1/30,南京理工大学机械工程学院,17,4.2 VHDL语言程序的基本结构,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程序,2023/1/30,南京理工大学机械工程学院,18,库(Library)是经编译后的数据的集合,它用于存放包集合定义、实体定义、构造体定义和配置定义。声明格式:Library 库名;,(1)库(Library),4.2 VHDL语言程序的基本结构,VHDL库可分为 5种:,1)IEEE 库,2)STD 库(标准库),3)面向ASIC的库,4)WORK库(默认库),5)用户定义库,2023/1/30,南京理工大学机械工程学院,19,4.2 VHDL语言程序的基本结构,(2)包集合(Package),包集合(Package)中定义了基本的常数、信号、数据类型、元件语句、函数定义及过程定义等。是库结构中的一个层次。声明格式:use 库名包集合名项目名;use 库名.PACKAGE名.All;,包集合的结构包括:包集合标题(包首)包集合主体(包体),2023/1/30,南京理工大学机械工程学院,20,package 包集合名 is 包说明项 end 包集合名;,4.2 VHDL语言程序的基本结构,(2)包集合(Package),package body 包集合名 is 包体说明项 end 包集合名;,包集合标题,包集合主体,包集合体并非必须,只有在包集合中要说明子程序时,包集合体才是必须的。,2023/1/30,南京理工大学机械工程学院,21,作用:ENTITY(实体)用于定义电路的外观,即I/O端口的类型和数量。定义格式:Entity 实体名 is Port(a:in bit;b:in bit;c:out bit);End 实体名;,(3)实体(ENTITY)定义区,端口名,数据类型,端口模式,4.2 VHDL语言程序的基本结构,:,;,2023/1/30,南京理工大学机械工程学院,22,端口说明(PORT)端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。其一般书写格式为:PORT(端口名:端口模式 数据类型;端口名:端口模式 数据类型;);,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,23,标识符的定义原则:(1)标识符由字母、数字和下划线组成,a_7;(2)标识符不区分大小写,ab和AB是一样的;(3)第一个字符必须是字母,即a666;(4)不允许有两个连续的下划线,a_b错误;(5)末尾不能是下划线,mname_错误;(6)标识符不能和关键字相同,如Entity,is等。,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,24,端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)IN OUT BUFFER INOUT,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,25,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,输入(IN)允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。,输出(OUT)输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。,2023/1/30,南京理工大学机械工程学院,26,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,双向模式(INOUT)双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。,缓冲(BUFFER)缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。,2023/1/30,南京理工大学机械工程学院,27,(3)实体(ENTITY)定义区,4.2 VHDL语言程序的基本结构,out 和 buffer 的区别:,2023/1/30,南京理工大学机械工程学院,28,结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。,(4)结构体(ARCHITECTURE)定义区,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,29,(4)结构体(ARCHITECTURE)定义区,定义格式:Architecture 结构体名 of 实体名 is 声明语句;(内部信号、变量、常数,元件,子程序声明)Begin 并行描述语句;End 结构体名;,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,30,结构体(ARCHITECTURE)构造图,2023/1/30,南京理工大学机械工程学院,31,图中5种功能描述语句的基本组成和功能分别是:块语句是由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个子模块。进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值。信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。子程序调用语句可以调用进程或参数,并将获得的结果赋值于信号。元件例化语句对其他的设计实体做元件调用说明,并将此元件的端口与其他元件、信号或高层实体的界面端口进行连接。,(4)结构体(ARCHITECTURE)定义区,4.2 VHDL语言程序的基本结构,2023/1/30,南京理工大学机械工程学院,32,4.2 VHDL语言程序的基本结构,实体与结构体的关系:,一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。,2023/1/30,南京理工大学机械工程学院,33,4.2 VHDL语言程序的基本结构,(5)配置(CONFIGURATION),配置:从某个实体的多种结构体描述方式中选择 特定的一个。,2023/1/30,南京理工大学机械工程学院,34,configuration 配置名 of 实体名 is for 选配结构体名 end for;end 配置名;,4.2 VHDL语言程序的基本结构,(5)配置(CONFIGURATION),在用VHDL描述硬件电路时,常常采用结构描述方式和混合描述方式。在这两种描述方式中,常常需要将其他设计实体作为元件进行引用,这时就需要将不同元件通过配置安装到不同的设计实体中。VHDL提供了配置语句用于描述各种设计实体和元件之间连接关系以及设计实体和结构体之间的连接关系。,2023/1/30,南京理工大学机械工程学院,35,library ieee;use ieee.std_logic_1164.all;entity nand is port(a:in std_logic;b:in std_logic;c:out std_logic);end entity nand;architecture art1 of nand is begin c=not(a and b);end architecture art1;,例:一个与非门不同实现方式的配置如下:,2023/1/30,南京理工大学机械工程学院,36,architecture art2 of nand is begin c=1 when(a=0)and(b=0)else 1 when(a=0)and(b=1)else 1 when(a=1)and(b=0)else 0 when(a=1)and(b=1)else 0;end architecture art2;,例:一个与非门不同实现方式的配置如下:,2023/1/30,南京理工大学机械工程学院,37,configuration first of nand is for art1;end for;end first;configuration second of nand is for art2 end for;end second;,例:一个与非门不同实现方式的配置如下:,2023/1/30,南京理工大学机械工程学院,38,二输入与门电路设计范例,电路真值表,2023/1/30,南京理工大学机械工程学院,39,Library std;Use std.standard.all;Entity and2 is Port(a:in bit;b:in bit;c:out bit);End and2;-实体定义结束。,双减号-为VHDL程序的注释符,类似C语言中的/注释符。,二输入与门电路设计范例,2023/1/30,南京理工大学机械工程学院,40,二输入与门电路设计范例,Architecture Na of and1 is Begin c=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,2023/1/30,南京理工大学机械工程学院,41,二输入与门电路设计范例,Configuration s1 of and1 isfor Naend for;end configuration s1;Configuration s2 of and2 isfor Nbend for;end configuration s2;-结构体配置结束。,2023/1/30,南京理工大学机械工程学院,42,2选1多路选择器的VHDL描述,2023/1/30,南京理工大学机械工程学院,43,2选1多路选择器的VHDL描述,ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y=a WHEN s=0 ELSE b;END ARCHITECTURE one;,实体,结构体,2023/1/30,南京理工大学机械工程学院,44,2选1多路选择器的VHDL描述,ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e:BIT;BEGINd=a AND(NOT S);e=b AND s;y=d OR e;END ARCHITECTURE one;,2023/1/30,南京理工大学机械工程学院,45,2选1多路选择器的VHDL描述,ENTITY mux21a IS PORT(a,b,s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS(a,b,s)BEGIN IF s=0 THEN y=a;ELSE y=b;END IF;END PROCESS;END ARCHITECTURE one;,2023/1/30,南京理工大学机械工程学院,46,mux21a功能时序波形,2选1多路选择器的VHDL描述,返回,2023/1/30,南京理工大学机械工程学院,47,4.3 VHDL语言的数据类型及运算操作符,1、数据对象2、数据类型3、运算操作符4、数据对象属性5、VHDL语言词法规则,2023/1/30,南京理工大学机械工程学院,48,1、数据对象,三种对象:常量(Constant)变量(Variable)信号(Signal)三种对象的物理含义:常量代表数字电路中的电源、地、恒定逻 辑值等常数;变量代表暂存某些值的载体,常用于描述 算法;信号代表物理设计中的某一条硬件连接线,包括输入、输出端口。,2023/1/30,南京理工大学机械工程学院,49,1、数据对象,三种对象的特点及说明场合:信号:全局量,用于architecture、package、entitiy。变量:局部量,用于process、function、procedure。常量:全局量,可用于上面两种场合。,2023/1/30,南京理工大学机械工程学院,50,1、数据对象,常量说明 常量说明:对某一个常量名赋予一个固定的值。格式:例:constant data:bit_vector(3 downto 0):=“1010”constant width:integer:=8;constant x:new_bit:=x;常量数据类型必须与表达式的数据类型一致。,constant 常数名:数据类型:=表达式;,2023/1/30,南京理工大学机械工程学院,51,常量的可视性(作用范围):,常量是全局量,其作用范围取决于常量被定义的位置。,2023/1/30,南京理工大学机械工程学院,52,1、数据对象,变量说明 变量是一个局部量,只能在进程和子程序中定义、使用。其作用范围仅限于定义了变量的进程和子程序中。格式:例:variable a,b:bit;variable count:integer range 0 to 255:=10;变量的初值可用于仿真,但综合时被忽略。,variable 变量名:数据类型 约束条件:=表达式;,2023/1/30,南京理工大学机械工程学院,53,1、数据对象,信号说明 电子硬件系统运行的基本特性:各部分电路工作的并行特性;信号传输过程中的延时特性;多驱动源的总线特性;时序电路中触发器的记忆特性等。信号是电子系统内部硬件连接和硬件特性的抽象表示。用来描述硬件系统的基本特性。格式:,signal 信号名:数据类型 约束条件:表达式;,2023/1/30,南京理工大学机械工程学院,54,1、数据对象,例:signal a,b:bit;signal init:integer:=-1;signal s1:std_logic:=0;signal s2:std_logic_vector(15 downto 0);注:a.综合时初值被忽略。b.信号是全局量。可在结构体、实体、块中 说明和使用信号。c.在进程和子程序中只能使用信号,不能说 明信号。,2023/1/30,南京理工大学机械工程学院,55,例:进程中信号与变量的使用,entity ex is port(.);end ex;architecture arch_ex of ex is signal a,b:std_logic;begin process(a,b)variable c,d:std_logic;begin c:=a+b;d:=a-b;end process;end arch_ex;,2023/1/30,南京理工大学机械工程学院,56,1、数据对象,信号与端口的区别:除没有方向说明外,信号与实体的“端口(PORT)”概念相似。端口是一种隐形的信号。entity exam is port(signal a,b:in std_logic;signal c:out std_logic);end exam;端口是一种有方向的信号。即输出端口不能读出数据,只能写入数据;输入端口不能写入数据,只能读出数据。信号本身无方向,可读可写。,2023/1/30,南京理工大学机械工程学院,57,信号与变量的区别:信号和变量是VHDL中重要的客体,他们之间的主要区别有:信号赋值至少要有延时;而变量赋值没有。信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。进程对信号敏感而不对变量敏感。信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件。变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。,2023/1/30,南京理工大学机械工程学院,58,process(a,b,c,d)begind=a;x=b+d;d=c;y=b+d;end process;,process(a,b,c)Variable d:std_logic_vector(0 to 3)begind:=a;x=b+d;d:=c;y=b+d;end process;,结果:x=b+c;x=b+c;,结果:x=b+a;x=b+c;,信号量的值将进程语句最后所带入的值作为最终代入值;而变量的值一经赋值就变成新的值。,2023/1/30,南京理工大学机械工程学院,59,2、数据类型,在VHDL程序中,经常会遇到这样的语句:Signal A:std_logic;Variable B:std_logic_vector(7 downto 0);Constant C:integer;,数据对象类型,数据类型,数据对象名,VHDL是一种强数据类型语言。要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类型,并且相同数据类型的量才能互相传递和作用。,2023/1/30,南京理工大学机械工程学院,60,2、数据类型,标准数据类型 IEEE预定义标准 用户自定义数据类型VHDL的标准数据类型十种 1)布尔量(boolean)布尔量具有两种状态:false 和 true 常用于逻辑函数,如相等(=)、比较()等中作逻辑比较。如,bit 值转化成boolean 值:boolean_var:=(bit_var=1);,2023/1/30,南京理工大学机械工程学院,61,2、数据类型,2)位(bit)bit 表示一位的信号值。放在单引号中,如 0 或 1。3)位矢量(bit_vector)bit_vector 是用双引号括起来的一组位数据。如:“001100”X“00B10B”4)字符(character)用单引号将字符括起来。variable character_var:character;.Character_var:=A;,2023/1/30,南京理工大学机械工程学院,62,2、数据类型,5)整数(integer)integer 表示所有正的和负的整数。硬件实现时,利用32位的位矢量来表示。可实现的整数范围为:-(231-1)to(231-1)VHDL综合器要求对具体的整数作出范围限定,否则无法综合成硬件电路。如:signal s:integer range 0 to 15;信号 s 的取值范围是0-15,可用4位二进制数表示,因此 s 将被综合成由四条信号线构成的信号。,2023/1/30,南京理工大学机械工程学院,63,2、数据类型,6)自然数(natural)和正整数(positive)natural是integer的子类型,表示非负整数。positive是integer的子类型,表示正整数。定义如下:subtype natural is integer range 0 to integerhigh;subtype positive is integer range 1 to integerhigh;,2023/1/30,南京理工大学机械工程学院,64,2、数据类型,7)实数(REAL)或称浮点数 取值范围:-1.0E38-+1.0E38 实数类型仅能用于VHDL仿真器,一般综合器 不支持。8)字符串(string)string 是 character 类型的一个非限定 数组。用双引号将一串字符括起来。如:variable string_var:string(1 to 7);string_var:=“Rosebud”;,2023/1/30,南京理工大学机械工程学院,65,9)时间(TIME)由整数和物理单位组成 如:55 ms,20 nsTYPE TIME IS RANGE 2147483647 TO 2147483647UNITEfs;-飞秒(10-15S)VHDL中的最小时间单位ps=1000fs;-皮秒ns=1000ps;-纳秒us=1000ns;-微秒ms=1000us;-毫秒sec=1000ms;-秒min=60sec;-分hr=60min;-时END units;,2、数据类型,2023/1/30,南京理工大学机械工程学院,66,2、数据类型,10)错误等级(SEVERITY_LEVEL)仿真中用来指示系统的工作状态,共有四种:NOTE(注意)WARNING(警告)ERROR(出错)FAILURE(失败),其定义如下:TYPE severity_level IS(note,warning,error,failure);,2023/1/30,南京理工大学机械工程学院,67,2、数据类型,IEEE预定义标准逻辑位与矢量 1)std_logic 类型 由 ieee 库中的std_logic_1164 程序 包定义,为九值逻辑系统,如下:(U,X,0,1,Z,W,L,H,-)U:初始值,X:不定,0:0,1:1,Z:高阻,W:弱信号不定,L:弱信号0,H:弱信号1,-:不可能情况,2023/1/30,南京理工大学机械工程学院,68,2、数据类型,IEEE预定义标准逻辑位与矢量 由 std_logic 类型代替 bit 类型可以完成电子系统的精确模拟,并可实现常见的三态总线电路。2)std_logic_vector 类型 由 std_logic 构成的数组。定义如下:type std_logic_vector is array(natural range)of std_logic;赋值的原则:相同位宽,相同数据类型。,2023/1/30,南京理工大学机械工程学院,69,2、数据类型,用户自定义数据类型 用户自定义类型是VHDL语言的一大特色。可由用户定义的数据类型有:枚举类型 整数和实数类型 数组类型 记录类型 子类型,2023/1/30,南京理工大学机械工程学院,70,2、数据类型,2023/1/30,南京理工大学机械工程学院,71,SUBTYPE语句格式:例:subtype digits is integer range 0 to 9;由subtype 语句定义的数据类型称为子类型。,2、数据类型,subtype 子类型名 is 基本数据类型 约束范围;,2023/1/30,南京理工大学机械工程学院,72,2、数据类型,自定义整数类型 用户定义的整数类型是标准包中整数类型的子范围。格式:例:type my_integer is integer range 0 to 15;自定义数组类型 数组:同类型元素的集合。VHDL支持多维数组。多维数组的声明:type byte is array(7 downto 0)of bit;1维8位数组 type vector is array(3 downto 0)of byte;2维4X8数组,type 类型名称 is integer 整数范围;,2023/1/30,南京理工大学机械工程学院,73,3、运算操作符,VHDL运算操作符的分类:逻辑运算符(Logical Operator)关系运算符(Relational Operator)算术运算符(Arithmetic Operator)并置运算符(Overloading Operator),2023/1/30,南京理工大学机械工程学院,74,1)逻辑运算符 6种:and、or、nand、nor、xor、not 要求:操作数类型必须相同。可为如下类型:bit、bit_vector、std_logic、std_logic_vector、boolean 数组操作数的维数、大小必须相同。注:当有两个以上的逻辑表达式时,左右没有 优先级差别,必须使用括号,如:x=(a and b)or(not c and d),2023/1/30,南京理工大学机械工程学院,75,例外:当逻辑表达式中只有“and”、“or”、“xor”运算符时,可以省略括号。如:a=b and c and d and e;a=b or c or d or e;a=b xor c xor d xor e;,上述逻辑运算在库ieee的程序包std_logic_1164中定义。,2023/1/30,南京理工大学机械工程学院,76,Library IEEE,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY liti IS;,PORT(a,b,c,d:IN STD_LOGIC;,e:out STD_LOGIC);,END liti;,ACHITECTURE AA1 OF liti IS,BEGIN,e=(a and b)or tmp;,Signal tmp:std_logic;,tmp=c xor d;,END AA1;,2023/1/30,南京理工大学机械工程学院,77,2)关系运算符 6 种:=、/=、=用于比较相同父类的两个操作数,返回 boolean值。在关系运算符中小于等于符“=”和代入符“=”是相同的,在读VHDL语言的语句时,应按照上下文关系来判断此符号到底是关系符还是代入符。,上述运算在库ieee的程序包std_logic_arith中定义。,2023/1/30,南京理工大学机械工程学院,78,ENTITY my1 is,PORT(a,b:in bit_vector(0 to 3),m:out boolean);,END my1;,ARCHITECTURE a1 of my1,BEGIN,m=(a=b);,END a1;,ENTITY my1 is,PORT(a,b:in bit_vector(0 to 3),m:out boolean);,ARCHITECTURE a1 of my1,BEGIN,m=b);,END a1;,END my1;,Library IEEE,USE IEEE.STD_LOGIC_ARITH.ALL;,2023/1/30,南京理工大学机械工程学院,79,3)算术运算符,VHDL语言中有5类算术运算符,他们分别是:求和操作符:(加)、(减)求积操作符:*(乘)、/(除)、MOD(求模)、REM(取余)符号操作符:(正)、(负)混合操作符:*(指数)、ABS(取绝对值)移位操作符:SLL(逻辑左移)、SRL(逻辑右移)、SLA(算术左移)、SRA(算术右移)、ROL(逻辑循环左移)、ROR逻辑循环右移)只能是bit_vetor类型,上述运算在库ieee的程序包std_logic_arith中定义。,2023/1/30,南京理工大学机械工程学院,80,移位操作语法结构:左操作数必须是bit_vetor类型右操作数必须是integer类型。,SLL逻辑左移:右端空出来的位置填0;SRL逻辑右移:左端空出来的位置填0;SLA算术左移:复制右端位,填充右端空出位置上;SRA算术右移:复制左端位,填充左端空出位置上;,2023/1/30,南京理工大学机械工程学院,81,4)并置运算符&用于位的连接,SIGNAL g,h,i:STD_LOGIC;SIGNAL c,d,e:STD_LOGIC _VECTOR(0 TO 1);SIGNAL a:STD_LOGIC _VECTOR(0 TO 3);d=i&NOT h;-元素与元素并置,形成长度为2的数组 a=c&d;-数组与数组并置,形成长度为4的数组,2023/1/30,南京理工大学机械工程学院,82,运算操作符的优先顺序,运算符 优先级NOT,ABS,*最高优先级*,/,MOD,REM+(正号),(负号)+,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,=AND,OR,NAND,NOR,XOR,XNOR 最低优先级,2023/1/30,南京理工大学机械工程学院,83,(1)数值类属性:(数组类型的数据对象)数值类属性有left,right,low,high,length。其中用符号“”隔开对象名及其属性。left表示数组的左边界;right表示数组的右边界;low表示数组的下边界;high表示数组的上边界;length表示数组的长度。,4、数据对象属性,如:Signal A:std_logic_vector(7 downto 0);Signal B:std_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;,left表示数组的左边界;right表示数组的右边界;low表示数组的下边界;high表示数组的上边界;length表示数组的长度。,2023/1/30,南京理工大学机械工程学院,85,(2)event属性:event属性,它的值为布尔型,如果刚好有事 件发生在该属性所附着的信号上(即信号有变化),则其取值为Ture,否则为False。利用此属性可决定时钟信号的变化情况,即时钟是否发生。,4、数据对象属性,2023/1/30,南京理工大学机械工程学院,86,(2)event属性:例如:时钟边沿表示 signal clk:in std_logic;则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1。clkevent and clk=0表