收藏 分享(赏)

VHDL硬件描述语言(入门简述).ppt

上传人:精品资料 文档编号:10605506 上传时间:2019-12-04 格式:PPT 页数:159 大小:1.67MB
下载 相关 举报
VHDL硬件描述语言(入门简述).ppt_第1页
第1页 / 共159页
VHDL硬件描述语言(入门简述).ppt_第2页
第2页 / 共159页
VHDL硬件描述语言(入门简述).ppt_第3页
第3页 / 共159页
VHDL硬件描述语言(入门简述).ppt_第4页
第4页 / 共159页
VHDL硬件描述语言(入门简述).ppt_第5页
第5页 / 共159页
点击查看更多>>
资源描述

1、2019/12/4,1,第三章,硬件描述语言基础,2,2019/12/4,章节目录,3.1 硬件描述语言概述 3.2 VHDL语言程序结构 3.3 VHDL语法基础 3.4 VHDL常用语句 3.5 组合电路的VHDL描述 3.6 时序电路的VHDL描述,调换,3,2019/12/4,3.1 硬件描述语言概述,可编程逻辑器件、电子设计自动化(EDA)与硬件描述语言,可编程逻辑器件是一种功能可变的集成器件,可通过编程的方法设计其完成不同的逻辑功能,设计需借助软件工具,即采用电子设计自动化的方式,设计形式有原理图和硬件描述语言两种,硬件描述语言是用来描述数字电路系统的一种语言,4,2019/12/

2、4,3.1 硬件描述语言概述,目前常用的硬件描述语言有两种,VHDL,Verilog HDL,Very High Speed Integrated Circuit Hardware Description Language 超高速集成电路硬件描述语言,Verilog Hardware Description Language Verilog硬件描述语言,VHDL语言发展较早,从使用者数量来看,目前两种语言平分秋色,VHDL语言更严谨、更适合设计大型数字系统。两种语言相似的地方很多,学会一种可自学另一种。,5,2019/12/4,3.1 硬件描述语言概述,VHDL语言的IEEE标准VHDL IE

3、EE 1076-1987VHDL IEEE 1076-1993,早在1980年,因为美国军事工业需要描述电子系统的方法,美国国防部开始进行VHDL的开发1987年,由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会 )将VHDL制定为标准,称为IEEE1076-19871993年制定了第二个IEEE标准版本,称为IEEE1076-1993,增加了一些新的命令和属性,6,2019/12/4,章节目录,3.1 硬件描述语言概述 3.2 VHDL语言程序结构 3.3 VHDL语法基础 3.4 VHDL常用语句 3.5

4、组合电路的VHDL描述 3.6 时序电路的VHDL描述,7,2019/12/4,五个基本组成部分,库(Library) 程序包(Package),实体说明(Entity Declaration),结构体(Archiecture),配置(Configuration),主要部分,注意: 程序扩展名为.vhd,8,2019/12/4,【例3-1】2选1数据选择器的VHDL语言描述,功能:2选1数据选择器,Sel=0时,f=d0; Sel=1时,f=d1;,9,2019/12/4,- 2 to 1 mux VHDLLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;EN

5、TITY mux ISPORT (d0,d1,sel: IN STD_LOGIC;f: OUT STD_LOGIC);END mux;,库 程序包,实体说明,VHDL语言程序,注释,10,2019/12/4,ARCHITECTURE structure OF mux IS SIGNAL temp: STD_LOGIC; -内部信号 BEGIN p0:PROCESS(d0,d1,sel) -进程VARIABLE temp1,temp2,temp3: STD_LOGIC;BEGIN -进程内的局部变量temp1:=d0 AND(NOT sel);-变量间的逻辑关系temp2:=d1 AND sel

6、;temp3:=temp1 OR temp2;temp=temp3;f=temp; END PROCESS p0; -进程结束 END structure; -结构体结束,结构体,11,2019/12/4,EDA工具软件QuartusII综合出来的电路,程序中的信号temp被优化掉了,12,2019/12/4,1行是注释,用 “-”引头 23行是库说明部分,打开库及库中的程序包 47行是实体说明部分,描述电路的端口信号 8最后是结构体部分,描述电路的逻辑功能 VHDL语言不区分大小写,为阅读方便,关键字用大写,用户自定义部分用小写。,说明,13,2019/12/4,本节三方面内容,3.2.1

7、实体说明 3.2.2 结构体 3.2.3 程序包、库及配置,14,2019/12/4,3.2.1 实体说明,【格式】,ENTITY IS,GENERIC (类属常数说明);,PORT (端口说明);,实体语句部分;,END ENTITY ;,主要部分,表示必选项, 表示可选项,【主要功能】说明电路的名字、输入输出信号。,15,2019/12/4,【例】4位串行进位加法器的实体说明。,ENTITY adder_ripple IS,GENERIC (m: TIME :=5ns);,PORT (a, b: IN STD_LOGIC_VECTOR(3 DOWNTO 0);q: OUT STD_LOGI

8、C_VECTOR(3 DOWNTO 0);cout: OUT STD_LOGIC);,END adder_ripple;,实体名由用户自定义,必须和主文件名一致 必须以ENTITY IS开始,以END 结束 在端口说明部分说明输入输出信号的情况 在类属常数说明部分说明类属常数的情况,16,2019/12/4,类属常数:若程序中多处用到某个常数,为方便修改,可将其定义为类属常数,只需修改类属常数的值,则程序中与其有关的常数自动修改。,1.类属常数说明语句,【功能】说明类属常数的名字,数据类型,设定值。,GENERIC (m: TIME :=5ns);,【格式】,GENERIC (常数名: 数据类

9、型 :=设定值;常数名: 数据类型 :=设定值);,【例】,17,2019/12/4,2.端口说明语句,【格式】,PORT (端口名,端口名: 模式 数据类型;端口名,端口名: 模式 数据类型);,PORT (a,b: IN STD_LOGIC_VECTOR(3 DOWNTO 0);q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout: OUT STD_LOGIC);,【功能】 说明输入输出信号的名字,输入输出模式,数据类型,位宽。,【例】,18,2019/12/4,端口名是输入输出信号的名字。 模式是指输入输出信号的方向。 数据类型是指输入输出信号的取值类型。,表

10、3-1端口方向说明,BIT BIT_VECTOR STD_LOGIC INTEGER BOOLEAN STD_LOGIC_VECTOR,常用数据类型,数据类型在3.3节详细介绍,说明:,BUFFER是INOUT的子集,做输入时,信号不是由外部驱动,而是从输出反馈得到。,19,2019/12/4,3.2.2 结构体,【格式】,ARCHITECTURE OF IS内部信号或元件定义语句; BEGINEND ;,【功能】描述电路的具体结构、功能。,主要部分,20,2019/12/4,ARCHITECTURE是关键字。 结构体名可随意起,实体名必须和实体说明中的实体名一致。 定义语句是指对内部信号、元

11、件、常数等的说明。 并行处理语句部分是结构体的主要部分,描述电路的结构、功能等。 BEGIN后开始结构和功能的描述。,说明:,21,2019/12/4,【例3-2】一个RS触发器的结构体(数据流描述方式),该电路中并行语句部分使用的是并行信号赋值语句,描述了两个与非门的连接关系。,22,2019/12/4,【例3-3】一个RS触发器的结构体(结构描述方式),本例是RS触发器的另一种描述方式,并行处理语句采用的是元件例化语句,后面3.4.1介绍。,23,2019/12/4,【例3-4】一个全加器的VHDL程序(数据流描述方式),本例结构体中的并行处理部分采用的也是并发信号赋值语句。描述了两个异或

12、门和一个与或门。 本例中的类属说明语句说明了一个时间常数tpd是5ns,后面的赋值语句使用了该延时参数。,24,2019/12/4,结构体中并行语句有5种类型,信号赋值语句 元件例化语句 进程语句结构 块语句结构 子程序语句结构,3.4节详细介绍,25,2019/12/4,3.2.3 包集合、库及配置,1. 包集合(Package),包集合中存放供多个实体公用的数据类型、常量、子程序。 包集合又存放在库中。 一般情况下,要使用某个包集合中的资源时,必须对该包集合进行使用说明。 一般情况下,要使用某个库中的包集合时,也必须对该库进行说明。,【格式】,LIBRARY ; USE ,LIBRARY

13、IEEE; USE IEEE.STD_LOGIC_1164.ALL,【例】,类似于C语言中的头文件,26,2019/12/4,VHDL提供的常用的标准包集合:STANDARDSTD_LOGIC_1164,STANDARD包中定义了若干数据类型、子类型、函数;该包已预先在STD库中编译好,并且自动与所有模型连接,使用时无须说明;STD_LOGIC_1164包中也定义了若干数据类型和函数; 该包已预先在IEEE库中编译好,但是在使用时须加以使用说明;,在STD 库中,在IEEE库中,,用时不须说明,,用时须说明,27,2019/12/4,常用的数据类型(整数、实数、BIT、BIT_VECTOR、布

14、尔量、字符、字符串、物理型、错误等级、自然数和正整数)均在STANDARD程序包中,常用的数据类型(STD_LOGIC、STD_LOGIC_VECTOR)在STD_LOGIC_1164程序包中,28,2019/12/4,【包集合结构格式】,PACKAGE IS 说明语句; END 包集合名;,PACKAGE BODY IS 说明语句; END 包集合名;,包首,包体,用户可自定义包集合。,29,2019/12/4,【例3-10】自定义包集合的例子。,-包集合说明(包首) PACKAGE example ISTYPE alu_op IS (add,sub,mul,div,eq,gt,lt);CO

15、NSTANT pi: REAL :=3.1415926;delay1:TIME;COMPONENT nand2PORT (a,b: IN BIT;c:OUT BIT);END COMPONENT;FUNCTION mean(a,b,c:REAL) RETURN REAL; END example;,说明了一个枚举型的数据类型alu_op,两个常数pi、delay1,一个元件nand2,一个函数mean,30,2019/12/4,-包集合体 PACKAGE BODY example ISCONSTANT delay1:TIME=15ns;FUNCTION mean(a,b,c:REAL) RET

16、URN REAL;BEGINRETURN(a+b+c)/3.0;END mean; END example;,包集合体中具体说明了时间常数delay1的值、 函数mean的功能,31,2019/12/4,USE WORK. example. ALL;,自定义的包集合存放在现行工作库WORK库中。使用WORK库时不需说明。 自定义的包集合在使用时必须进行使用说明。,【例】,说明:,32,2019/12/4,2. 库(Library),【格式】,库中存放已编译过的设计单元(如实体、程序包等); 库中内容可以用作其它VHDL描述的资源。 使用库时一般需要说明。,LIBRARY ;,5种库,IEEE

17、STD ASIC WORK 用户定义库,LIBRARY IEEE;,【例】,33,2019/12/4,IEEE STD_LOGIC_1164 NUMERIC_BIT NUMERIC_STD STD_LOGIC_ARITH STD_LOGIC_SIGNED STD_LOGIC_UNSIGNED STD STANDARD TEXTIO VATIL(面向ASIC的库) VATIL_TIMING VATIL_PRIMITIVE WORK(现行工作库) 用户自定义库,无须说明,不但要说明库,还要说明库中的程序包。,例: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL,

18、最常用,例: LIBRARY STD; USE STD.STANDAR.ALL;,34,2019/12/4,3. 配置语句(Configration),一个实体可以有多个结构体。 可利用配置语句来选择不同的结构体,使其与要设计的实体相对应。,实体1 结构体1 结构体2,【例】,CONFIGURATION confr OF rsff IS FOR 结构体1; END FOR; END confr ;,【格式】,CONFIGURATION 配置名 OF 实体名 IS FOR 结构体1名; END FOR; END 配置名;,35,2019/12/4,实体1 结构体1,实体2 结构体2,应用: 比如

19、可设计两个不同风格的结构体,比较其性能差异,可以用配置语句选择其中的一个结构体。 否则,只能设计两个实体(程序),分别调试。,实体 结构体1 结构体2,VS,36,2019/12/4,章节目录,3.1 硬件描述语言概述 3.2 VHDL语言程序结构 3.3 VHDL语法基础 3.4 VHDL常用语句 3.5 组合电路的VHDL描述 3.6 时序电路的VHDL描述,37,2019/12/4,3.3 VHDL语法基础,3.3.1 标识符和保留字 3.2.2 数据对象 3.2.3 数据类型 3.3.4 数据类型的转换 3.3.5 运算操作符,五方面内容,38,2019/12/4,3.3.1 标识符和

20、保留字,规则: 由字母数字下划线组成 必须以英文字母开头 最后一个字符不能是下划线 不允许出现连续两个下划线 保留字不能作一般的标识符 不区别大小写,1. 标识符,即由用户起的实体名、结构体名、信号名、变量名,39,2019/12/4,2. 保留字,表3-3 常用保留字,保留字即VHDL语言中已使用的关键字。 保留字不能用作标识符。,40,2019/12/4,41,2019/12/4,3.3.2 数据对象,对象有四种类型:,常数 信号 变量 文件,最常用,42,2019/12/4,3.3.2 数据对象,1. 常数,CONSTANT 常数名 : 数据类型 := 表达式 ;,【常数声明格式】,使用

21、前必须声明,CONSTANT toler : DISTANCE := 1.5 nm; CONSTANT pi : REAL := 3.141592 ; CONSTANT cycle_time : TIME := 100 ns; CONSTANT Propagation_Delay : DELAY_LENGTH;,【例】,常数值,43,2019/12/4,2. 变量,variable 变量名 : 数据类型 约束条件 := 表达式 ;,【变量声明格式】,使用前必须声明,【例】,VARIABLE result:STD_LOGIC :=0; VARIABLE x, y, z:INTEGER; VARI

22、ABLE count:INTEGER RANGE 0 TO 255 :=10;,初始值,声明时可带初始值,约束条件,44,2019/12/4,【变量赋值格式】,变量名 :=表达式;,【例】,result := 1; x :=y+3;,注意赋值符号 := 表达式的数据类型和变量的类型必须一致。 表达式可以是运算表达式也可以是具体数值。,45,2019/12/4,3. 信号,SIGNAL 信号名 : 数据类型 约束条件 := 表达式 ;,【信号声明格式】,使用前必须声明,【例】,SIGNAL first_sig: INTEGER; SIGNAL sys_clk:BIT :=0; SIGNAL se

23、cond_sig, third_sig:INTEGER :=10; SIGNAL s:INTEGER RANGE 0 TO 20 :=15;,初值,声明时可带初始值,约束条件,46,2019/12/4,【信号赋值格式】,信号名 =表达式;,【例】,a = b AFTER 10ns; a = expression_b; a = expression_b AFTER 10ns;,注意信号说明中的赋初值符号是 :=,而信号赋值语句中的赋值符号为=。 表达式的数据类型和信号的类型必须一致。 表达式可以是运算表达式也可以是具体数值。 信号赋值可以添加延时信息。,47,2019/12/4,变量是局部的,信

24、号是全局的; 变量只能用在进程内,信号没有此限制。若变量用于进程之外,必须将该变量先赋给一个相同类型的信号,用信号在进程之间传递数据。 信号可以延迟,变量不能。 变量不能用于硬件连线,常用在高层次建模的计算中。 进程对信号敏感而对变量不敏感。 赋值符号不一样;,信号和变量的区别,48,2019/12/4,3.3.3 数据类型,Scalar types 标量型 Composite 复合型 Access 存取型 File 文件型 Protected 保护型,5种类型,每一种中又有若干子类型和具体数据类型。,49,2019/12/4,已经在标准数据包STANDARD和STD_LOGIC_1164中定

25、义好的常用的数据类型如下:,整数、实数、BIT、BIT_VECTOR、布尔量、 字符、字符串、物理型、错误等级、自然数和正整数,本节介绍以上数据类型的特点。,STD_LOGIC、 STD_LOGIC_VECTOR,STANDARD,STD_LOGIC_1164,50,2019/12/4,3.3.3 数据类型,整数(INTEGER) (属于:标量型整数型,在STANDARD程序包中 ),整数的表示范围为- (231-1) (231-1)。,【例】,VARIABLE a:INTEGER :=15;,SIGNAL s:INTEGER RANGE 0 TO 20 :=15;,INTEGER型数据值不用

26、引号括起来,51,2019/12/4,2. 实数(REAL) (属于:标量型浮点型, 在STANDARD程序包中 ),实数的表示范围为- 1.0E38 +1.0E38。,实数的书写方式举例: 1.0 666.666 36.5e-4,某些数即可以用整数表示,也可以用实数表示,如1.0是实数,1是整数,两者数值相同但类型不同。,REAL型数据值不用引号括起来,52,2019/12/4,3. BIT(属于:标量型枚举型),和 BIT_VECTOR(属于:复合型数组型),在STANDARD程序包中,BIT又称位型,其值仅有2个,0 和1;,BIT_VECTOR又称位矢量,是BIT的数组。,例:,BIT

27、型数值要用单引号括起来, BIT_VECTOR型数值要用双引号括起来。,SIGNAL a : BIT; SIGNAL low_byte : BIT_VECTOR (0 to 7) ; a = 1; Low_byte = “00000101”;,53,2019/12/4,4. 布尔型(BOOLEAN) (属于:标量型枚举型,在STANDARD程序包中),BOOLEAN的值仅有2个,TRUE 和FALSE。,54,2019/12/4,5. STD_LOGIC,和 STD_LOGIC_VECTOR,在STD_LOGIC_1164程序包中,STD_LOGIC又称标准逻辑变量,其值有9个,U,X,0,1

28、,Z,W,L,H,-。常用的是0,1,Z。 STD_LOGIC_VECTOR称标准逻辑向量,是STD_LOGIC的数组。,STD_LOGIC型数值要用单引号括起来, STD_LOGIC_VECTOR型数值要用双引号括起来。,例:,SIGNAL a : STD_LOGIC; a = 1;,55,2019/12/4,6. 字符(CHARACTER)(属于:标量型枚举型),和 字符串(STRING)(属于:复合型数组型),在STANDARD程序包中,CHARACTER型数值要用单引号括起来。 STRING型数值要用双引号括起来。,例: A,a,1,2 。 “ABC”,“HELLO”。,56,2019

29、/12/4,7. 时间型( TIME) (属于:标量型物理型,在STANDARD程序包中 ),GENERIC (m: TIME :=5ns);,例:,57,2019/12/4,8. 错误等级(SEVERITY_LEVEL) (属于:标量型枚举型,在STANDARD程序包中 ),SEVERITY_LEVEL的值有4个,NOTE, WARNING, ERROR, FAILURE。 注意,警告,错误,失败。,58,2019/12/4,9. 自然数(NATURAL)(标量型整数型整数),和 正整数(POSITIVE)(标量型整数型整数),在STANDARD程序包中,NATURAL 和POSITIVE是

30、INTEGER 的子类型。,59,2019/12/4,以上是已经在标准数据包STANDARD和std_logic_1164中定义好的常用的数据类型。,除此之外,还可以由用户自定义数据类型。,可以由用户自定义的数据类型: 枚举类型 整数类型 数组类型 记录类型 存取类型 文件类型 时间类型 实数类型,TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 ;,TYPE 数据类型名 IS 数据类型定义;,【格式】,60,2019/12/4,TYPE alu_op IS (add,sub,mul,div,eq,gt,lt);,type BIT is (0, 1);,type BIT_VECTO

31、R is array (NATURAL range ) of BIT;,subtype POSITIVE is INTEGER range 1 to INTEGERHIGH;,定义一个数据类型alu_op,是枚举型,取值为add,sub,mul,div,eq,gt,lt中的一个 声明变量a是alu_op型的。,Variable a : alu_op,例,下例为标准程序包中的某些数据类型定义,61,2019/12/4,3.3.4 数据类型的转换,自学,62,2019/12/4,3.3.5 操作符,5类操作符,逻辑运算 关系运算 算术运算 并置运算 移位运算,63,2019/12/4,可以对 BI

32、T, BOOLEAN,STD_LOGIC,STD_LOGIC_VECTOR等类型数据进行逻辑运算。,1. 逻辑运算符,64,2019/12/4,2. 算术运算符,通常取模运算也叫取余运算,它们返回结果都是余数。rem和mod唯一的区别在于: 当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem取余函数结果的符号和x的一样,而mod求模和y一样。,65,2019/12/4,3. 关系运算符,66,2019/12/4,4. 并置运算符,sel=b ,例:,若b=1,a=0,则sel=“10”,Y =H & e & l & l & o,Y =“Hello”,67,2019/

33、12/4,3.3.5 运算操作符,5. 移位运算符,补零,补首位,例: a SLL 3,68,2019/12/4,3.3.5 运算操作符,运算符的优先级,见P.115,69,2019/12/4,章节目录,3.1 硬件描述语言概述 3.2 VHDL语言程序结构 3.3 VHDL语法基础 3.4 VHDL常用语句 3.5 组合电路的VHDL描述 3.6 时序电路的VHDL描述,70,2019/12/4,3.4 VHDL常用语句,仿真时:,两大类:,并行语句,顺序语句,并行语句同时并行执行, 顺序语句按先后次序执行。,71,2019/12/4,3.4.1 并行语句,ARCHITECTURE OF I

34、S定义语句; BEGINEND ;,并行语句用在结构体的并行处理语句部分,72,2019/12/4,进程语句 并行信号赋值语句 元件例化语句 块语句 过程调用语句 参数传递语句 生成语句 并行断言语句,ARCHITECTURE OF IS定义语句; BEGIN进程语句 并行信号赋值语句 元件例化语句END ;,73,2019/12/4,ARCHITECTURECOMPONENTEND COMPONENT; BEGINPROCESSEND PROCESSdff1: dff PORT MAP(S(0),clk,S(1);q1;,各 部 分 之 间 是 并 行 的,74,2019/12/4,1. 进

35、程语句,【格式】,进程标号: PROCESS 敏感信号表 IS 进程内部变量说明部分; BEGINEND PROCESS 进程标号;,进程语句是最主要的并行语句,它在VDHL程序设计中使用频率最高,也是最能体现硬件描述语言的一条语句。,75,2019/12/4,【例3-7】带异步复位功能的D触发器的VHDL描述。,76,2019/12/4,当敏感信号发生变化时,执行进程。 当执行完最后一个语句时,回到第一个语句,等待下一次敏感信号变化。 一个结构体中可以有多个进程,进程之间是并行的。 仿真时进程内部各条语句是顺序执行的。 进程语句说明部分可以说明需要的局部变量。,【说明】,77,2019/12

36、/4,2. 并行信号赋值语句,并发信号赋值语句,例: q1=a+b; q2=a*b;,当a或b有变化时,两条语句同时执行。 模拟了两个加法器和乘法器电路。,注意前提是信号赋值语句放在进程外; 若放在进程中,则变成了顺序执行的语句。,当信号赋值语句放在进程外时,就是并发信号赋值语句。,78,2019/12/4,条件信号赋值语句,【格式】,目标信号=表达式1 WHEN 条件1 ELSE表达式2 WHEN 条件2 ELSE表达式3 WHEN 条件3 ELSE表达式n-1 WHEN 条件n-1 ELSE表达式n;,当条件1满足时,目标信号=表达式1 当条件2满足时,目标信号=表达式2 ,【功能】,条件

37、判断是按顺序执行的,先判断条件1满足否,再判断条件2满足否。,79,2019/12/4,【例3-11】用条件信号赋值语句设计4选1数据选择器。,80,2019/12/4,选择信号赋值语句,【格式】,WITH 选择条件表达式 SELECT 目标信号=表达式1 WHEN 选择条件1表达式2 WHEN 选择条件2表达式3 WHEN 选择条件3表达式n WHEN 选择条件n;表达式n+1 WHEN OTHERS;,当选择条件表达式值=条件1时,目标信号=表达式1 当选择条件表达式值=条件2时,目标信号=表达式2 ,【功能】,条件判断是同时进行的,无优先级。,81,2019/12/4,【例3-12】用选

38、择信号赋值语句设计4选1数据选择器。,该例既使用了条件信号赋值语句也使用了选择信号赋值语句,82,2019/12/4,3. 元件例化语句,元件例化语句是最能体现层次化设计思想的语句。,例如设计由D触发器构成的移位寄存器,可以将设计分成2层,底层描述D触发器,顶层调用底层描述的D触发器。,在顶层中调用底层设计时,就要用到元件例化语句。,层次化设计简单说即将整个系统分成不同的层次,顶层设计可以调用底层设计。,83,2019/12/4,【格式】,COMPONENT GENERIC 类属说明; PORT ; END COMPONENT;, GENERIC MAP(参数映射) PORT MAP (端口映

39、射);,定义元件: 把底层设计定义成一个元件,元件例化: 调用定义好的元件,并说明该元件与其他信号的连接关系。,84,2019/12/4,【例3-14】用元件例化语句描述由D触发器构成的移位寄存器。,dff是另一个程序对应的电路,这里将其定义成一个元件,并用其构成一个移位寄存器。,85,2019/12/4,86,2019/12/4,元件名必须与底层文件的实体名一致。 端口映射部分要指明元件内部信号与外部信号的连接关系,其顺序必须与端口说明部分的顺序一致。 一个元件定义部分可以对应多个元件例化部分,相当于调用了多个元件而已。 元件标号名可以帮助标示不同的元件。,【说明】,87,2019/12/4

40、,4. 生成语句,非重点不讲,88,2019/12/4,ARCHITECTURECOMPONENTEND COMPONENT; BEGINPROCESSEND PROCESSdff1: dff PORT MAP(S(0),clk,S(1);q1;,各部分之间是并行的,89,2019/12/4,3.4.2 顺序语句,顺序语句是相对于并行语句而言的。 顺序语句的特点是:每一条顺序语句的执行顺序是与它们的书写顺序相一致的。 顺序语句只能出现在进程和子程序中。,进程标号: PROCESS 敏感信号表 IS 进程语句说明部分; BEGINEND PROCESS 进程标号;,90,2019/12/4,顺序

41、赋值语句 WAIT语句 IF语句 CASE语句 LOOP语句 EXIT语句 RETURN语句 NULL语句 REPORT语句 断言语句,常用,91,2019/12/4,1.顺序赋值语句,变量赋值语句,【格式】,目标变量 := 表达式,注意赋值符号 := 表达式的数据类型和变量的类型必须一致。 表达式可以是运算表达式也可以是具体数值。 变量赋值限定在进程、函数、过程等顺序区域内。 变量赋值无时间特性。 变量值具有局部性。只在进程内有效。,count :=count+1;,【例】,92,2019/12/4, 信号赋值语句,【格式】,目标信号 = 表达式,信号赋值语句中的赋值符号为=。 表达式的数据

42、类型和信号的类型必须一致。 表达式可以是运算表达式也可以是具体数值。 信号赋值可以添加延时信息。 用在进程中才是顺序语句,S=a XOR b XOR c;,【例】,当信号赋值语句放在进程内时,就是顺序语句。 放在进程外时就是并行语句。,93,2019/12/4,2.WAIT语句,【格式】,WAIT -无限等待 WAIT ON -敏感信号变化 WAIT UNTIL -条件满足 WAIT FOR -时间到,【功能】,进程在仿真运行中总是处于两种状态之一:执行或挂起。 进程状态的变化可受WAIT语句的控制,当进程执行到WAIT语句时就将被挂起,并设置好再次执行的条件。可以设置4种条件。,94,201

43、9/12/4,3.IF语句,IF语句是一种条件控制语句,是常用语句之一。 IF语句只能用在进程中。,网上流传一句话:IF、CASE打天下,95,2019/12/4,【格式】,IF THEN ; END IF;, IF THEN 语句,当条件满足时,执行THEN后的语句,否则,不执行,【功能】,条件不完整,常用来实现时序电路,96,2019/12/4,顺序处理语句,当条件满足时,d的值赋给q,否则,q值不变,【例3-17】用IF THEN语句描述D触发器功能。,97,2019/12/4,【格式】,IF THEN ; ELSE ; END IF;,两分支, IF THEN ELSE语句,当条件满足

44、时,执行THEN后的语句,否则,执行ELSE后的语句。 条件完整,常用来实现组合电路。,【功能】,98,2019/12/4,【例】用IF THEN ELSE语句描述二选一数据选择器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT (d0,d1,sel: IN STD_LOGIC;f: OUT STD_LOGIC);END mux;,99,2019/12/4,ARCHITECTURE beha OF mux IS BEGIN PROCESS(d0,d1,sel) BEGINIF (sel=0) THENf=d0;ELSEf=

45、d1;END IF; END PROCESS; END beha;,Sel=0时,f=d0; Sel=1时,f=d1;,100,2019/12/4,【格式】,IF THEN ; ELSIF THEN ; ELSE ; END IF;,多分支, IF THEN ELSIFELSE语句,当条件1满足时,执行THEN后的顺序语句1,否则,当条件2满足时,执行THEN后的顺序语句2,否则执行ELSE后的顺序语句3。 条件完整,常用来实现组合电路。,【功能】,101,2019/12/4,条件1优先级高 条件2优先级低,还可以再分支,102,2019/12/4,【例】数据选择器的VHDL程序。(P137)

46、,注意: 条件要完整,最后必须加ELSE f=0, 否则会综合出寄存器。,103,2019/12/4,3.4.2 顺序语句,条件不完整的综合结果,有寄存器,104,2019/12/4,条件完整的综合结果,无寄存器,105,2019/12/4,4. CASE语句,【格式】,CASE 表达式 IS WHEN 取值1 = 顺序处理语句1; WHEN 取值2 = 顺序处理语句2; .WHEN OTHERS = 顺序处理语句n; END CASE;,CASE语句也是常用语句之一,具有条件控制功能。 也只能用在进程中。,106,2019/12/4,几个条件是同等级的,107,2019/12/4,【例3-1

47、9】用CASE语句实现3-8线译码器。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder_3to8 ISPORT (a,b,c,g1,g2,g3: IN STD_LOGIC;y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decoder_3to8;ARCHITECTURE beha OF decoder_3to8 IS SIGNAL indata: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN Indata=c,108,2019/12/4,PROCESS(Indata,g1

48、,g2,g3) BEGINIF (g1=1 AND g2=0 AND g3=0) THENCASE indata ISWHEN “000” = y y y y y y y y y=“XXXXXXXX”;END CASE;ELSE f=“11111111“;END IF; END PROCESS; END beha;,109,2019/12/4,CASE语句的各条件表达式是同时执行的。 条件表达式的所有情况都要列举到。 可用WHEN OTHERS 描述。,【说明】,110,2019/12/4,5. LOOP语句,【格式】,FOR 循环变量 IN 取值范围 LOOP;END LOOP;,LOOP是循环语句,有两种,FORLOOP WHILELOOP,FOR LOOP,若循环变量在取值范围内则执行循环, 否则结束循环。,【功能】,111,2019/12/4,【例3-20 】用FORLOOP语句描述的偶校验发生器。,设a=11001110, 则tmp=1,奇数个1; 设a=11001100, 则tmp=0,偶数个1。,112,2019/12/4,【格式】,WHILE 条件 LOOP;END LOOP;,若条件为真则执行循环, 若为假则结束循环。,WHILELOOP,【功能】,113,2019/12/4,【例3-21】用WHILELOOP语句描述的偶校验发生器。,

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

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

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


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

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

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