EDA技术实用教程.ppt
《EDA技术实用教程.ppt》由会员分享,可在线阅读,更多相关《EDA技术实用教程.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、EDAEDA技术技术实用教程实用教程第第6章章 VHDL设计进阶设计进阶第第6 6章章 VHDLVHDL设计进阶设计进阶6.1 46.1 4位加法计数器的位加法计数器的VHDLVHDL描述描述一、一、一、一、4 4位加法计数器位加法计数器位加法计数器位加法计数器【例【例6-1】ENTITY CNT4 IS PORT(CLK:IN BIT;Q :BUFFER INTEGER RANGE 15 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q=Q+1;END
2、IF;END PROCESS;END bhv;第第6 6章章 VHDLVHDL设计进阶设计进阶注意注意:(1)表面上)表面上BUFFER具有双向端口具有双向端口INOUT的功能,但实的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来,并不含有馈回来,并不含有IN的功能。的功能。(2)VHDL规定加规定加,减等算术符减等算术符+,-对应的操作数对应的操作数(如式如式a+b中的中的a和和b)的数据类型只能是的数据类型只能是INTEGER(除非对算术操作符有除非对算术操作符有一些特殊的说明一些特殊的说明,如重载函数的利用如重载函
3、数的利用).(3)表达式)表达式Q=Q+1的右项与左向并非处于相同的时刻的右项与左向并非处于相同的时刻内,对于时序电路,前者的结果出现于当前时钟周期;后者,内,对于时序电路,前者的结果出现于当前时钟周期;后者,即左项要获得当前的即左项要获得当前的Q+1,需等待下一个时钟周期。需等待下一个时钟周期。第第6 6章章 VHDLVHDL设计进阶设计进阶二、二、二、二、整数、自然数和正整数数据类型整数、自然数和正整数数据类型整数、自然数和正整数数据类型整数、自然数和正整数数据类型 整数类型整数类型INTEGER INTEGER 的元素包括正整数、负整数和零。的元素包括正整数、负整数和零。在在VHDLVH
4、DL中,整数的取值范围是中,整数的取值范围是-2147483647+2147483647-2147483647+2147483647,即可用,即可用3232位有符号的二进制数表示。位有符号的二进制数表示。注意:注意:通常通常VHDLVHDL仿真器将仿真器将INTEGERINTEGER类型作为有符号数处理,类型作为有符号数处理,而而VHDLVHDL综合器则将综合器则将INTEGERINTEGER作为无符号数处理。作为无符号数处理。在使用整数时,在使用整数时,VHDLVHDL综合器要求必须使用综合器要求必须使用RANGERANGE字句为所字句为所定义的数限定范围,然后根据所限定的范围来决定表示此信
5、号定义的数限定范围,然后根据所限定的范围来决定表示此信号或变量的二进制数的位数或变量的二进制数的位数因为VHDL综合器无法综合未限定范围的整数类型的信号或变量。第第6 6章章 VHDLVHDL设计进阶设计进阶 在例6-1中的语句 Q:BUFFER INTEGER RANGE 15 DOWNTO 0;即限定Q的取值范围是0-15共16个值,可用4位二进制数来表示,因此,VHDL综合器即将Q综合成由四条信号线构成的总线方式信号:Q(3)、Q(2)、Q(1)和Q(0)。第第6 6章章 VHDLVHDL设计进阶设计进阶整数常量的书写方式示例如下:整数常量的书写方式示例如下:1 1 十进制整数十进制整数
6、0 0 十进制整数十进制整数3535 十进制整数十进制整数1010E3E3 十进制整数十进制整数1000100016#16#D9#D9#十六进制整数十六进制整数D9HD9H8#720#8#720#八进制整数八进制整数720 O O 2#11010010#2#11010010#二进制整数二进制整数11010010B11010010B第第6 6章章 VHDLVHDL设计进阶设计进阶 NB:在语句中整数的表达不加单引号在语句中整数的表达不加单引号,如1、0、25等;而逻辑位的数据必须加引号,如1、0、“10”、“1000111”。自然数类型自然数类型NATURAL是整数类型的一个子类型,它包括是整数
7、类型的一个子类型,它包括0和所有正整数。和所有正整数。如果对例6-1的Q定义为NATURAL类型,综合的结果不变,语句表达为:Q:BUFFER NATURAL RANGE 15 DOWNTO 0;正整数类型POSITIVE也是整数类型的一个子类型,它只比自然数类型NATURAL少一个0。尽管如此,对于许多综合器来说,若定义例6-1的Q为 Q:BUFFER POSITIVE RANGE 15 DOWNTO 0,仍然能综合出相同的计数器电路来。与与BIT、BIT-VECTOR一样,整数类型一样,整数类型INTEGER、NATURAL和和POSITIVE都定义在都定义在VHDL标准程序包标准程序包S
8、TANDARD中,中,是默认打开的是默认打开的。第第6 6章章 VHDLVHDL设计进阶设计进阶三、三、三、三、4 4位加法计数器的另一种表达方式位加法计数器的另一种表达方式位加法计数器的另一种表达方式位加法计数器的另一种表达方式【例【例6-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4 IS PORT(CLK:IN STD_LOGIC;Q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 IS
9、SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=Q1+1;END IF;Q=Q1;END PROCESS;END bhv;第第6 6章章 VHDLVHDL设计进阶设计进阶例例6-2特点:特点:(1)若输入和输出为标准逻辑位若输入和输出为标准逻辑位STD_LOGIC和标准逻辑位和标准逻辑位矢量矢量STD_LOGIC_VECTOR,必须利用必须利用LABRARY语句和语句和USE语语句,打开程序包句,打开程序包STD_LOGIC_1164。如例6-2中的CLK和
10、Q。(2)Q的端口模式是OUT,由于没有输入的端口模式特性,因此不能如例6-1那样直接用Q=Q+1中。考虑到计数器必须建立一个用于计数累加的寄存器,因此在计数器内部先定义一个信号在计数器内部先定义一个信号SIGNAL(类似于节点),语句表达上可以在结构体的ARCHITECTURE和BEGIN之间定义一个信号:SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0)第第6 6章章 VHDLVHDL设计进阶设计进阶 由于Q1是内部的信号,不必像端口信号那样定义它们的端口模式,即Q1的数据流动是不受方向限制的。因此可以在在Q1=Q1+1中用信号中用信号Q1来完成累加的任务,然后将
11、累加的结来完成累加的任务,然后将累加的结果用语句果用语句Q=Q1向端口向端口Q输出。输出。于是,在例6-2的不完整的IF条件语句中,Q1变成了内部加法计数器的数据端口。第第6 6章章 VHDLVHDL设计进阶设计进阶(3)考虑到VHDL不允许在不同数据类型的操作数之间进行直接操作或运算,而Q1=Q1+1中数据传输符中数据传输符=右边加号的两个右边加号的两个操作数分属不同的数据类型操作数分属不同的数据类型:Q1(逻辑矢量)+1(整数),不满足算术符“+”对应的操作数必须是整数类型,且相加和也为整数类型的要求,因此必须对对Q1=”、“”、“0);-计数器复位计数器复位,独立于独立于CLK,称为异步
12、称为异步 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿检测时钟上升沿 IF EN=1 THEN -检测是否允许计数检测是否允许计数 IF CQI 0);-大于大于9,计数值清零,计数值清零 END IF;END IF;END IF;IF CQI=1001 THEN COUT=1;-计数大于计数大于9,输,输出进位信号出进位信号 ELSE COUT=0;END IF;CQ=CQI;-将计数值向端口输出将计数值向端口输出 END PROCESS;END behav;第第6 6章章 VHDLVHDL设计进阶设计进阶图图6-3 例例6-3的的RTL电路电路第第6 6章章
13、 VHDLVHDL设计进阶设计进阶图图6-4 例例6-3的工作时序的工作时序第第6 6章章 VHDLVHDL设计进阶设计进阶二、二、二、二、相关语法相关语法相关语法相关语法 1.1.变量变量 变量变量VARIABLEVARIABLE与信号与信号SIGNALSIGNAL一样,都属于数据对象,一样,都属于数据对象,在此程序中的功能与信号相似。但在此程序中的功能与信号相似。但变量的赋值符号与信号的变量的赋值符号与信号的赋值符号是不同的赋值符号是不同的,信号的赋值符号是信号的赋值符号是“=”,“XOTHERS=X)为为了了简简化化表表达达才才使使用用短短语语“(“(OTHERS=X)”OTHERS=X
14、)”,这这是是一一个个省省略略赋赋值值操操作作符符,它它可可以以在在较较多多位位的的位位矢矢量量赋赋值值中中作作省省略略化化的的赋值,赋值,如以下语句:如以下语句:SIGNAL d1:STD_LOGIC_VECTOR(4 DOWNTO 0);VARIABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);.d1 0);a1:=(OTHERS=0);这条语句等同于这条语句等同于d1X)”还可以给位矢量的某一部分位赋还可以给位矢量的某一部分位赋值之后再使用值之后再使用OTHERS给剩余的位赋值给剩余的位赋值,例如:d21.4=1,OTHERS=0,此赋值语句的意义是给位矢量d2
15、的第1位和第4位赋值为1,而其余位赋值为0。下例是用省略赋值操作符“(OTHERS=X)”给d2赋其他信号的值:d1e(3),3=e(5),OTHERS=e(1);这个矢量赋值语句也可以改写为使用连接符连接符的语句(假设d1的长度为5位):fX)”的描述方法要优于的描述方法要优于“”的描述方法的描述方法,因为后者的缺点是赋值依赖于矢量的长度,当长度改变时必须重新排序。第第6 6章章 VHDLVHDL设计进阶设计进阶三、三、三、三、带有并行置位的移位寄存器带有并行置位的移位寄存器带有并行置位的移位寄存器带有并行置位的移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_116
16、4.ALL;ENTITY SHFRT IS -8位右移寄存器位右移寄存器 PORT(CLK,LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB:OUT STD_LOGIC );END SHFRT;【例【例6-4】8位右移移位寄存器位右移移位寄存器第第6 6章章 VHDLVHDL设计进阶设计进阶ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS(CLK,LOAD)VARIABLE REG8:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN IF CLKEVENT AND CLK
17、=1 THEN IF LOAD=1 THEN -装载新数据装载新数据 REG8:=DIN;ELSE REG8(6 DOWNTO 0):=REG8(7 DOWNTO 1);END IF;END IF;QB=REG8(0);END PROCESS;-输出最低位输出最低位END behav;第第6 6章章 VHDLVHDL设计进阶设计进阶图图6-5 例例6-4的工作时序的工作时序(1 1)在第)在第一个时钟到来时,一个时钟到来时,LOADLOAD恰为高电平恰为高电平(2 2)第二个时钟,以及以后的时钟信号都是移位时钟)第二个时钟,以及以后的时钟信号都是移位时钟,高位置高位置1 1(3 3)第二个时钟
18、后,)第二个时钟后,QBQB输出了右移出的第输出了右移出的第2 2个位个位11第第6 6章章 VHDLVHDL设计进阶设计进阶常数定义的一般表述:常数定义的一般表述:CONSTANT 常数名:数据类型常数名:数据类型:=表达式表达式;6.3 6.3 数据对象数据对象DATA OBJECTSDATA OBJECTS 在VHDL中,数据对象有三类,即常量(CONSTANT)、变量(VARABLE)和信号(SIGNAL)。一、常数(一、常数(一、常数(一、常数(CONSTANTCONSTANTCONSTANTCONSTANT)常数的定义和设置主要是为了使程序更容易阅读和修改。常数的定义和设置主要是为
19、了使程序更容易阅读和修改。例如,将逻辑位的宽度定义为一个常量,只要修改这个常量就能很容易地改变宽度,从而改变硬件结构。在程序中,常量是一个恒定不变的值,一旦作了数据类在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中不能在改变,因而具有全局性意型和赋值定义后,在程序中不能在改变,因而具有全局性意义。义。第第6 6章章 VHDLVHDL设计进阶设计进阶例如:CONSTANT FBT:STD_LOGIC_VECTOR:=“010110”;-标准位矢量类型 CONSTANT DATAIN:INTEGER:=15-整数类型 VHDL要求所定义的常量数据类型必须与表达式的数据类型要
20、求所定义的常量数据类型必须与表达式的数据类型一致。一致。常量的可视性规则常量的可视性规则即常量的使用范围取决于它被定义即常量的使用范围取决于它被定义的位置。的位置。*如果在程序包程序包中,常量具有最大的的全局化特征,可以用在调用此程序包的所有设计实体中;*常量如果定义在设计实体设计实体中,其有效范围为这个实体定义的所有的结构体(多结构体);*如果常量定义在设计实体的某一结构体某一结构体中,则只能用于此结构体;*如果常量定义在结构体的某一单元结构体的某一单元,如一个进程中,则这个常量只能用在这一进程中。第第6 6章章 VHDLVHDL设计进阶设计进阶定义变量的一般表述:定义变量的一般表述:VAR
21、IABLE 变量名变量名:数据类型数据类型:=初始值初始值;二、变量(二、变量(二、变量(二、变量(VARIABLEVARIABLE)在在VHDL语法规则中,变量是一个局部量,只能在语法规则中,变量是一个局部量,只能在进程进程和和子程序子程序中使用。中使用。变量不能将信息带出对它作出定义的当前结构中。变量不能将信息带出对它作出定义的当前结构中。变量的赋值是一种理想化的数据传输,是立即发生的,不变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时的行为。存在任何延时的行为。变量的主要作用是在进程中作为临时的数据存储单元。变量的主要作用是在进程中作为临时的数据存储单元。例如例如:VARI
22、ABLE a:INTEGER RANGE 0 TO 15;VARIABLE d:STD_LOGIC;分别定义a的取值范围从0到15的整数型变量;d为标准位类型的变量。第第6 6章章 VHDLVHDL设计进阶设计进阶 变量赋值的一般表述为;变量赋值的一般表述为;目标变量名目标变量名:=表达式;表达式;注意:注意:10 变量赋值符号是变量赋值符号是“:=”,变量数值的改变是通过变,变量数值的改变是通过变量赋值来实现的。量赋值来实现的。20 赋值语句右方的赋值语句右方的“表达式表达式”必须是一个与必须是一个与“目标变目标变量名量名”具有相同数据类型的数值,这个表达式可以是一个运算具有相同数据类型的数
23、值,这个表达式可以是一个运算表达式,也可以是一个数值。表达式,也可以是一个数值。30 通过赋值操作,新的变量值的获得是立刻发生的。通过赋值操作,新的变量值的获得是立刻发生的。40 变量赋值语句左边的目标变量可以是单值变量,也变量赋值语句左边的目标变量可以是单值变量,也可以是一个变量的集合,如位矢量类型的变量。可以是一个变量的集合,如位矢量类型的变量。例如例如:VARIABLE x,y:INTEGER RANGE 15 DOWNTO 0;VARIABLE a,b:STD_LOGIC_VECTOR(7 DOWNTO 0);x:=11;y:=2+x;-运算表达式赋值,y也是实数变量 a:=b a(0
24、 TO 5):=b(2 TO 7);第第6 6章章 VHDLVHDL设计进阶设计进阶信号定义格式:信号定义格式:SIGNAL 信号名:信号名:数据类型数据类型:=初始值初始值;三、信号(三、信号(三、信号(三、信号(SIGNALSIGNAL)信号是描述硬件系统的基本数据对象,它类似于连接线信号是描述硬件系统的基本数据对象,它类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。信号作为一种数值容器,不但可以容纳当前值,也可以保信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值持历史值与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向。信号初始值的设置不是必
25、须的信号初始值的设置不是必须的,而且初始值仅在VHDL的行为仿真中有效。除了没有方向说明外,信号信号与实体的端口(Port)概念是一致的,它可以看成是实体内部(可以看成是实体内部(设计器件内部设计器件内部)的端口)的端口。信号的使用和定义范围是实体、结构体和程序包,在进程和子程序的顺信号的使用和定义范围是实体、结构体和程序包,在进程和子程序的顺序语句中不允许定义信号。序语句中不允许定义信号。第第6 6章章 VHDLVHDL设计进阶设计进阶 当信号定义了数据类型和表达式后,在VHDL设计中就能对信号进行赋值了。信号的赋值语句表达式信号的赋值语句表达式为:目标信号名目标信号名=表达式;表达式;这里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 实用教程
限制150内