




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章内容提要VHDL的标识符数据对象数据类型运算操作符,第3章VHDL的语言要素,3.1VHDL的标识符,标识符是最常用的命名符,标识符可以是常数、变量、信号、端口、子程序、实体、结构体的名称等;VHDL的标识符有两种,基本标识符(VHDL87版)和扩展标识符(VHDL93版)。VHDL93版对VHDL87版的标识符语法规则进行了扩展,形成了VHDL93版的标识符语法规则,以反斜杠“”界定,VHDL基本标识符的命名必须遵循如下规则:基本标识符由字母、数字和下划线组成第一个字符必须是字母最后一个字符不能是下划线不允许连续2个下划线保留字(关键字)不能用于标识符大小写是等效的下面是合法的标识符:Decoder_1,fft,sig_N,state,aaa,一、基本标识符,扩展标识符用反斜杠来界定,可以以数字打头;例:74ls173,controller_docode都是合法的标识符允许包含图形符号和空格;例:$500常量的数据类型可以是标量型和复合型,但不能是文件型和存取型(Access);常量可以在实体、结构体、程序包、进程、块和子程序的说明部分中被定义。常量的使用范围取决于它被定义的位置。,一、常量(CONSTANT),1.常量声明格式:,CONSTANTVCC:REAL:=5.0;CONSTANTPI:REAL:=3.14;CONSTANTDELAY_time:TIME:=10ns;CONSTANTROM_size:INTEGER:=16#FFFF#;,2.常量声明示例:,二、变量(VARIABLE),1.变量的声明格式:VARIABLE变量名:数据类型约束条件:=初始值;2.变量的赋值格式:目标变量名:=表达式;说明:变量允许多次赋值,且赋值立即生效,不能产生附加延时(它是一种理想化的数据传输过程);变量定义时允许设置初始值,但在综合时,综合器将略去所有的初始值;对变量进行赋值时,目标变量可以是单值变量,也可以是数组型变量;在VHDL中,变量只能在进程和子程序(过程和函数)中使用,它是一个局部量。,3、变量使用示例:,VARIABLEx,y,z:INTEGER;VARIABLECOUNT:INTEGERRANGE0TO255:=10;VARIABLEa,b:BIT_VECTOR(0to7);b:=”1010101”;a:=b;a(3to6):=(1,1,0,1);-注意赋值符号两边的位宽必须相等a(0to5):=b(2to7);a(7):=0;注意上例中对数组中单个元素赋值和多个元素赋值时的差异。,信号是VHDL语言独有的数据对象,信号相当于电路中元件之间的连线,或者认为是电路内部的某一节点。信号除了没有数据流动方向的说明以外,其它性质与实体的端口概念是一致的。,1.信号声明格式:SIGNAL信号名:数据类型约束条件:表达式;2.信号赋值格式:信号名=表达式;,三、信号(SIGNAL),信号的赋值符号是“=”,但赋初值符号也是“:=”;信号没有方向性:可以被赋值,也可被读取;信号通常在实体、结构体和包集合中定义,但不能在进程和子程序中定义;信号赋值不是立即发生的,需要经过一个特定的延时量后才有效;在进程中,只能将信号列入敏感表,而不能将变量列入敏感表;在一个进程中,允许对同一信号有多个驱动源(即对其进行多次赋值),但只有最后的赋值语句有效;,信号的使用说明:,libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytestisport(a,b:inintegerrange0to7;c,d:outintegerrange0to15);endentitytest;architecturebehavoftestissignalcc,dd:integerrange0to15;beginprocess(a,b)begincc=a+b;-赋值语句不会执行dd=a-b;cc=a-b;-最后一个赋值语句有效c=cc;d=dd;endprocess;endbehav;,3、信号的使用示例:多个驱动源对同一信号赋值,定义了两个信号cc,dd,MAX+plusII警告:FoundmultipleassignmentstothesamesignalinaProcessStatementonlythelastassignmentwilltakeeffect.,端口其实也是信号,变量赋值立即生效,而信号赋值需要在delta()延时量(延时:系统自动设置一个微小延时量)系统或者用户指定的延时周期后(用AFTER子句指定)才生效这是信号和标量的本质区别所在;信号不允许在进程和子程序中声明,而变量(不包括共享变量)只能在进程和子程序中使用;赋值符号不同:信号的赋值符号是“=”,而变量的赋值符号为“:=”;在进程(PROCESS)中,只能把信号列入敏感信号表,而不能将变量列入敏感表;,4、信号和变量的区别,signald:std_logic;beginProc_A:process(a,b,c,d)begind=a;x=b+d;d=c;y=b+d;endprocessProc_A;,Proc_B:process(a,b,c,d)variabled:std_logic;begind:=a;x=b+d;d:=c;y=b+d;endprocessProc_B;,例1:思考以下两个进程的运行结果有何不同?,进程Proc_A运行结果为:x=b+c;y=b+c;,进程Proc_B运行结果为:x=b+a;y=b+c;,process(reset,clk)variableaa,bb:integerrange0to9;beginifreset=1thenaa:=1;bb:=0;elsifrising_edge(clk)thenifaa=1thenbb:=4;endif;ifbb=4thenaa:=5;endif;endif;a=aa;b=bb;endprocess;end;,process(reset,clk)beginifreset=1thenaa=1;bb=0;elsifrising_edge(clk)thenifaa=1thenbb=4;endif;ifbb=4thenaa=5;endif;endif;a=aa;b=bb;endprocess;end;,例2:思考以下两个进程的运行结果有何不同?,重要结论:,在进程中,变量赋值语句一旦被执行,目标变量立即被赋予新值,在执行下一条语句时,改变量的值为上一句新赋的值,而信号的赋值语句即使被执行也不会使信号立即发生代入,下一条语句执行时,仍然使用原来的信号值,信号是在进程挂起时才发生代入的。,四、VHDL的数据对象的赋值,集合操作(整体赋值),集合操作-采用序号,集合操作-采用others,注意:OTHERS必须放在最后。,3.3VHDL的数据类型,VHDL是一种强类型语言,要求在设计实体中的各个数据对象必须具有确定的数据类型,并且只有相同数据类型的操作数才能进行赋值或运算。VHDL的数据类型有以下4大类型:,预定义数据类型(标准数据类型)是VHDL中最常用、最基本的数据类型,这些数据类型大部分在VHDL的标准程序包STANDARD和STD_LOGIC_1164中定义。用户自定义数据类型用户自行定义的数据类型,其基本元素仍属于预定义数据类型。,根据数据类型产生的来源,上述四大类数据类型可分成:,一、预定义数据类型,以上十种类型是VHDL中的标准类型(在标准程序包STANDARD中定义)使用时不需作显式声明,可以直接使用。,二、其它预定义数据类型,1、标准逻辑位类型(STD_LOGIC)标准逻辑位数据类型是扩展的BIT类型,在IEEE1164标准中预定义了该数据类型:Typestd_logicis(U,X,0,1,Z,W,L,H,-);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bit。2、标准逻辑位矢量类型(STD_LOGIC_VECTOR)STD_LOGIC_VECTOR是基于STD_LOGIC数据类型的一维数组,数组中的每一个元素都是以上定义的一位STD_LOGIC。,定义时须指明无符号整数的位数,最左边位为最高位。例如:SIGNALx:UNSIGNED(0TO3);-4位无符号整数定义不能用UNSIGNED定义负数;UNSIGNED数据和STD_LOGIC_VECTOR数据可以进行相互转换,如:SIGNALA,B:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALE,F:UNSIGNED(1DOWNTO0);E=UNSIGNED(A);B=STD_LOGIC_VECTOR(F);,3、UNSIGNED无符号整数类型,4、SIGNED有符号数类型,SIGNED数据类型表示一个有符号的数值,综合器将其解释为补码,最高位是符号位。如:SIGNALx,y:UNSIGNED(0TO3);-4位无符号整数定义x“ADDAXBX”,OTHERS=BX);-名字关联方式Instr2.Mnemonic:=MULAXBX;-对记录中单个元素赋值,记录类型使用示例:,5.用户定义的子类型,是对已定义的数据类型,做一些范围限制而形成的一种新的数据类型,定义格式如下:SUBTYPE子类型名IS基本数据类型RANGE约束范围例:subtypedigitisintegerrange0to9;subtypeiobusisstd_logic_vector(7downto0);signaladdr:iobus;signaldata_bus:iobus;,6.数据类型之间的转换,VHDL是一种强类型语言,不同数据类型的数据对象在相互操作时必须进行转换(Conversion);在VHDL语言的标准程序包中,提供了一些常用的类型转换函数来实现不同数据类型之间的转换。注意,在VHDL程序中要使用到那一个转换函数,必须在库及程序包声明中包括该程序包。(1)std_logic_1164程序包提供的类型转换函数to_stdlogicvector(a)、to_bitvector(a)、to_bit(a)、to_stdlogic(a)(2)std_logic_unsigned程序包提供的类型转换函数conv_integer(a)(3)std_logic_arith程序包提供的类型转换函数conv_std_logic_vector(a)conv_integer(a),3.4VHDL的运算操作符,在VHDL中包含以下四类运算操作符:逻辑运算符(LogicalOperator)AND、OR、NAND、NOR、XOR、NOT关系运算符(RelationalOperator)=、/=、=算术运算符(ArithmeticOperator)+、-、*、/等并置运算符(ConcatenationOperator)&,一、逻辑运算符,逻辑运算符中,NOT运算符的优先级最高,其他运算符AND、OR、NAND、NOR、XOR之间无优先级顺序在,等号和不等号(=和/=)适用于所有数据类型的对象之间的比较。两个位矢量类型的对象进行比较时,自左向右,按位比较。信号赋值符号和小于等于符的符号都是=,具体含义要根据上下文判断;从综合角度而言,简单的比较运算(=和/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西农业大学《员工招聘与素质测评》2023-2024学年第二学期期末试卷
- 建阳市2025年三下数学期末监测模拟试题含解析
- 云南省楚雄州双柏县一中2025届高三第十五次考试生物试题含解析
- 辽宁广告职业学院《生物化学基础》2023-2024学年第二学期期末试卷
- 中北大学《燃料及燃烧学》2023-2024学年第二学期期末试卷
- 天津农学院《自然地理学二》2023-2024学年第二学期期末试卷
- 图木舒克职业技术学院《广告提案》2023-2024学年第二学期期末试卷
- 阳江职业技术学院《工程数学1》2023-2024学年第二学期期末试卷
- 四川省乐山市2025年5月初三月考物理试题含解析
- 云南省昭通市永善一中2025年高三假期自主综合能力测试(一)生物试题含解析
- 糖尿病饮食与护理
- 2025年天津市河东区中考一模历史试题(原卷版+解析版)
- 河南省南阳市新未来联考2024-2025学年高一下学期4月期中物理试题(含解析)
- 《基于STM32的智能水质检测系统的设计》9400字(论文)
- 2025年医保政策考试:医保患者权益保障知识竞赛试题库
- 2025年江苏省期无锡市天一实验校初三5月模拟英语试题含答案
- 中国普通食物营养成分表(修正版)
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 本科毕业论文氯化聚氯乙烯树脂的工艺研究及其供需现状
- 在产业链建设调度推进会议上的讲话稿
- 医院感染管理科十四五发展规划
评论
0/150
提交评论