硬件描述语言与数字系统开发第4章10_第1页
硬件描述语言与数字系统开发第4章10_第2页
硬件描述语言与数字系统开发第4章10_第3页
硬件描述语言与数字系统开发第4章10_第4页
硬件描述语言与数字系统开发第4章10_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、硬件描述语言与数字系统开发硬件描述语言与数字系统开发第第4 4章章 vhdl vhdl语言要素语言要素 vhdl vhdl 的标识符的标识符 vhdl vhdl 的数据对象的数据对象 vhdl vhdl 的数据类型的数据类型 vhdl vhdl 的运算操作符的运算操作符 vhdl vhdl 的关键字的关键字 edaeda技术常用术语技术常用术语n标识符(标识符(identifiers): identifiers): 可用来为设计实体、构造体、端口可用来为设计实体、构造体、端口及内部信号、变量、常量等参数命名,由英文字母、数字、及内部信号、变量、常量等参数命名,由英文字母、数字、下划线组成。下划

2、线组成。n书写规则:书写规则:n标识符中首字母必须是英文字母。标识符中首字母必须是英文字母。n标识符中末字母不能是下划线。标识符中末字母不能是下划线。n标识符中不允许出现两个连续的下划线。标识符中不允许出现两个连续的下划线。n标识符中不区分字母、数字的大小写。标识符中不区分字母、数字的大小写。nvhdlvhdl语言中的关键保留字不能用作标识符。语言中的关键保留字不能用作标识符。nvhdlvhdl语言中的分隔符由分号语言中的分隔符由分号“;”;”构成。构成。nvhdlvhdl语言中的注释符由双横线语言中的注释符由双横线“-”-”构成。构成。4.1 4.1 标识符标识符_decoder_1-起始为

3、非英文字母起始为非英文字母2fft,74hc245-起始为数字起始为数字sig_#n,clr/rst-符号符号“#” “/”#” “/”不能成为标识符的构成不能成为标识符的构成not-ack,d10%-符号符号“-” “%”-” “%”不能成为标识符的构成不能成为标识符的构成ryy_rst_-标识符的最后不能是下划线标识符的最后不能是下划线“_”_”data_bus -标识符中不能有双下划线标识符中不能有双下划线return,block-标识符不能为关键字标识符不能为关键字decoder_1 , fft3 , sig_n_8 , state0 , i2d_8le6 合法标识符:合法标识符:非法

4、标识符:非法标识符:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity rglight_cotrl isport(clk1,clk2:in std_logic; timh,timl:out std_logic_vector(3 downto 0); r,g,y:out std_logic);end rglight_cotrl;architecture rtl of rglight_cotrl issignal yy: std_logic;type rgy is (red,green,ye

5、llow);beginprocess(clk1)variable a:std_logic;variable state:rgy;variable th,tl:std_logic_vector(3 downto 0); 数据对象数据对象(data objects): data objects): vhdlvhdl语言中的数据对象是一个可以赋值语言中的数据对象是一个可以赋值的客体,类似于一种容器,可以接受各种数据类型的赋值。的客体,类似于一种容器,可以接受各种数据类型的赋值。 常用的数据对象有常量、变量、信号三大类。常用的数据对象有常量、变量、信号三大类。 顾名思义,顾名思义,常量常量用来存放仿真

6、用来存放仿真/ /综合过程中的不变值。综合过程中的不变值。 变量变量位于进程和子程序内部位于进程和子程序内部, ,主要用来暂时存放中间数据,即对中间主要用来暂时存放中间数据,即对中间计算结果或临时数据进行局部贮存。变量只在进程内部是可视的。计算结果或临时数据进行局部贮存。变量只在进程内部是可视的。 信号信号是是vhdlvhdl中最具硬件特色语言要素,是内部硬件相互连接的主要机中最具硬件特色语言要素,是内部硬件相互连接的主要机制,它表示把元件的装配端口连在一起的互连线,信号在整个实体内部制,它表示把元件的装配端口连在一起的互连线,信号在整个实体内部存放数据、传递信息。存放数据、传递信息。4.2

7、4.2 数据对象数据对象数据对象数据对象-常量常量常量常量( (关键字关键字constant)constant)常量在设计描述中保持某一规定类型的特定值不变常量在设计描述中保持某一规定类型的特定值不变 常量必须在实体、构造体或进程的说明区域加以说明常量必须在实体、构造体或进程的说明区域加以说明常量在定义时赋初值,赋值符号为常量在定义时赋初值,赋值符号为“:=”:=” 常量说明、赋值语句的一般格式:常量说明、赋值语句的一般格式: constant constant name : name : : = : = value; value;例:例:constantallis1:std_logic_ve

8、ctor(2downto0):=“111”;constantbuswidth:integer:=8;变量变量( (关键字关键字variable) variable) 仅用于进程和子程序仅用于进程和子程序变量的赋值符号为变量的赋值符号为“:=” :=” 必须在进程和子程序的说明性区域说明必须在进程和子程序的说明性区域说明不能表达连线和存储元件不能表达连线和存储元件变量说明、赋值语句的一般格式:变量说明、赋值语句的一般格式: variable variable name : name : ; name name : = : = value; value;例:例:variableva,vb:std_

9、logic_vector(7downto0);va:=“00101110”;vb(7downto4):=va(3downto0); 数据对象数据对象-变量变量 变量的赋值变量的赋值nvariable temp : std_logic_vector (7 downto 0);n整体赋值:整体赋值:temp := “10101010”;temp := x”aa” ; (1076-1993)n逐位赋值逐位赋值:temp(7) := 1;n多位赋值多位赋值temp (7 downto 4) := “1010”;信号信号( (关键字关键字signal)signal)信号用于声明内部信号信号用于声明内部信

10、号, ,而非外部信号而非外部信号(in, out, inout, buffer(in, out, inout, buffer)信号在元件之间起互联作用,可代表连线。信号在元件之间起互联作用,可代表连线。信号赋值符号为信号赋值符号为“=”=”。 信号说明、赋值语句的一般格式:信号说明、赋值语句的一般格式: signal signal name : name : ; name = name = value; value;例:例:signalx,y:integerrange0to100;signalhalfsum:std_logic_vector(7downto0);x=15;y=x+10;half

11、sum=“00001111”;数据对象数据对象-信号信号 信号的赋值信号的赋值nsignal temp : std_logic_vector (7 downto 0);n整体赋值整体赋值:temp = “10101010”;temp = x”aa” ; n逐位赋值逐位赋值: :temp(7) = 1;n多位赋值多位赋值: :ntemp (7 downto 4) = “1010”; 注意注意: : 信号与变量的信号与变量的赋值赋值符号符号是不同的。是不同的。 信号与变量的信号与变量的作用范围作用范围是不同的。是不同的。 信号与变量的信号与变量的综合效果综合效果是不同的。是不同的。 数据对象中的信

12、号与变量数据对象中的信号与变量例:例:variablev_abc:std_logic_vector(2downto0);signals_abc:std_logic_vector(2downto0);v_abc:=“000”;s_abc=“000”;architecturesignal描述描述label1:process1variable描述描述label2:process2variable描述描述 信号与变量的作用范围信号与变量的作用范围library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity

13、 rglight_cotrl isport(clk1,clk2:in std_logic; timh,timl:out std_logic_vector(3 downto 0); r,g,y:out std_logic);end rglight_cotrl;architecture rtl of rglight_cotrl issignal yy: std_logic;type rgy is (red,green,yellow);beginprocess(clk1)variable a:std_logic;variable state:rgy;variable th,tl:std_logic_

14、vector(3 downto 0);libraryieee;useieee.std_logic_1164.all;entitydff3isport(clk,d1:instd_logic;q1:outstd_logic);end;architecturebhvofdff3issignala,b:std_logic;beginprocess(clk)beginifclkeventandclk=1thena=d1;b=a;q1=b;endif;endprocess;end;dqdqdqdqd1q1d1q1clkclkbalibraryieee;useieee.std_logic_1164.all;

15、entitydff3isport(clk,d1:instd_logic;q1:outstd_logic);end;architecturebhvofdff3isbeginprocess(clk)variablea,b:std_logic;beginifclkeventandclk=1thena:=d1;b:=a;q1=b;endif;endprocess;end;dqdqdqdqd1q1d1q1clkclk 信号与变量的区别信号与变量的区别信号信号变量变量赋值符号赋值符号=:=:=功能功能 电路的内部连接电路的内部连接 内部数据交换内部数据交换作用范围作用范围 全局信号,进程和进程全局信号,进

16、程和进程之间的数据通信之间的数据通信内部变量,进程内内部变量,进程内部的数据传送部的数据传送行为行为 进程结束时赋值进程结束时赋值 立即赋值立即赋值n 数据类型数据类型(data types): data types): 规定数据对象的特征和取值规定数据对象的特征和取值范围,用它们可建立简单的或者复杂的数据对象。范围,用它们可建立简单的或者复杂的数据对象。typesfileaccesscompositeenumeraterphysicalrecordarrayscalarrealinteger4.3 4.3 数据类型数据类型 常用数据类型常用数据类型n标准数据类型(标准数据类型(1010种)种

17、)整数类型、实数类型、位、位矢量等整数类型、实数类型、位、位矢量等n用户定义类型用户定义类型枚举类型、数组类型等枚举类型、数组类型等 vhdl vhdl是与类型高度相关的语言,不允许将一种数据类型赋是与类型高度相关的语言,不允许将一种数据类型赋予另一种数据类型,若对不同类型的信号进行赋值需使用类型予另一种数据类型,若对不同类型的信号进行赋值需使用类型转换函数。转换函数。 vhdl vhdl含有很宽范围的数据类型,常用数据类型分为:含有很宽范围的数据类型,常用数据类型分为: 标准标准-整数类型整数类型n关键字:关键字:integerintegern范围为:范围为:-214783647-21478

18、3647到到214783647214783647(2 231-31-1 1)n需要综合时,要对范围加以限制需要综合时,要对范围加以限制例如:例如:variable tmp : integer := 255signalcount:integerrange0to255count=count+1 标准标准-实数类型实数类型n关键字:关键字:realrealn范围为:范围为:-1.0e38-1.0e38到到1.0e381.0e38n很多综合器不支持该类型很多综合器不支持该类型 标准标准-自然数类型自然数类型n关键字:关键字:naturalnaturaln范围为:范围为:0 0到到到到214783647

19、214783647(2 231-31-1 1)n大于等于大于等于0 0的正整数,是整数的一个子集的正整数,是整数的一个子集标准标准-位类型位类型n关键字:关键字:bitbitn范围为:只有范围为:只有2 2种取值:种取值:00和和11,表示表示2 2种状态种状态n与整数类型中的与整数类型中的0 0、1 1不同不同n与布尔类型中的与布尔类型中的00、11不同不同 标准标准-位矢量类型位矢量类型n关键字:关键字:bit_vectorbit_vectorn位矢量是用双引号括起来的一组位数据位矢量是用双引号括起来的一组位数据, ,可用可用来表示总线状态来表示总线状态n位矢量需后跟范围说明指定矢量长度位

20、矢量需后跟范围说明指定矢量长度 (toto、downtodownto) n位矢量前可加符号标记进制位矢量前可加符号标记进制(b(b、o o、x)x)n位矢量可分段操作位矢量可分段操作 标准标准-布尔类型布尔类型n关键字:关键字:booleanbooleann范围为:只有范围为:只有2 2种状态:种状态:00和和11,表示,表示 “真真”和和“假假” ” ,用于关系运算和逻辑判断,用于关系运算和逻辑判断(if)(if)n与整数类型中的与整数类型中的0 0、1 1不同,没有数值的含义不同,没有数值的含义n与位类型中的与位类型中的00、11也不同也不同 标准标准-字符类型字符类型n关键字:关键字:c

21、haractercharactern字符是用单引号括起来的一个字母、数字、字符是用单引号括起来的一个字母、数字、空格或特殊符号空格或特殊符号n字符区分大小写,字符区分大小写,bb与与bb不同不同n字符字符11与整数与整数1 1不同,没有数值的含义不同,没有数值的含义n字符字符11与位类型中的与位类型中的11也不同也不同n关键字:关键字:stringstringn字符串是用双引号括起来的一个字符序列,字符串是用双引号括起来的一个字符序列,用于程序提示或结果说明用于程序提示或结果说明n字符串区分大小,写字符串区分大小,写“range”range”与与 “range”range”不同不同 标准标准-

22、字符串类型字符串类型n关键字:关键字:timetimen范围为:范围为:-214783647-214783647到到214783647214783647(2 231-31-1 1)n时间类型可用来指定延时时间和标定仿真时刻时间类型可用来指定延时时间和标定仿真时刻n一个完整的时间类型包含整数和单位两部分,一个完整的时间类型包含整数和单位两部分,且整数和单位间应留有一个空格位且整数和单位间应留有一个空格位n时间是一物理量数据,单位为:时间是一物理量数据,单位为: fs,ps,ns,us,ms,sec,min,hrfs,ps,ns,us,ms,sec,min,hr 标准标准-时间类型时间类型 标准标

23、准-错误等级错误等级n关键字:关键字:severity levelseverity leveln范围为:范围为:notenote(注意),(注意),warningwarning(警告),(警告),errorerror(出错),(出错),failurefailure(失败)(失败)n错误等级用于提示系统当前的工作状态及严重错误等级用于提示系统当前的工作状态及严重等级等级 自定义自定义-枚举类型枚举类型n关键字:关键字:typetypen一般格式一般格式: : type type 数据类型名数据类型名 is (is (元素元素1,1,元素元素2.);2.);枚举类型常用于定义状态机的状态枚举类型常

24、用于定义状态机的状态,例如例如: : type states is (s1,s2,s3,s4);type trafficis(red,green,blue);signalpresent_state,next_state:traffic;例如例如: : type std_logic is (u,x,0,1,z,w,l,h,_);而而 std_logic_vector是是std_logic的的组合,属工业标准的逻辑类型组合,属工业标准的逻辑类型如:如:data:instd_logic_vector(7downto0);则则data表示表示8 8根数据线根数据线。如给如给data赋值赋值5ah可写为

25、:可写为:data=“01011010”;或或data=x“5a”(x表示表示1616进制进制) )。 自定义自定义-枚举类型枚举类型初初值值不不定定高高阻阻弱弱不不定定弱弱低低弱弱高高不不可可能能std_logic_vector类型定义如下:类型定义如下:typestd_logic_vectorisarray(naturalrange)ofstd_logic; 自定义自定义-物理类型物理类型n关键字:关键字:typetypen一般格式一般格式: type : type 数据类型名数据类型名 is is 范围;范围;n例如:例如: type t is range type t is range

26、 1e18 to 1e181e18 to 1e18;units units fs;fs;ps=1000fs;ps=1000fs;ns=1000ps;ns=1000ps;us=1000ns;us=1000ns;ms=1000us;ms=1000us;sec=1000ms;sec=1000ms;min=60sec;min=60sec;hr=60min;hr=60min;end units; end units; 无符号数据类型无符号数据类型(unsigned type) (unsigned type) variablevar:unsigned(0to10);signalsig:unsigned(5

27、downto0);有符号数据类型有符号数据类型(signed type) (signed type) signed(0101)代表代表+5,5signed(1011)代表代表5variablevar:signed(-10to10);unsigned(1000)代表代表+8,8 不同数据类型间的转换不同数据类型间的转换n vhdlvhdl语言对数据类型有着极为严格的分类和定义,不同类型的数据、语言对数据类型有着极为严格的分类和定义,不同类型的数据、对象不能随意赋值、代入,必要时,应进行类型转换。对象不能随意赋值、代入,必要时,应进行类型转换。n 常用的数据类型转换方法有二:常用的数据类型转换方法

28、有二: 类型标记法与函数转换法类型标记法与函数转换法如如: :a=16) thens_v:=s_v-16;cout=1;elsecout=0;end if;s=conv_std_logic_vector(s_v,4);end process;end behave;a3.0b3.0cins3.0coutadd_arith_4inst4.4 4.4 运算操作符运算操作符 vhdlvhdl为构造计算数值的表达式提供的预定义为构造计算数值的表达式提供的预定义算符。预定义算符可分为四种类型:算符。预定义算符可分为四种类型:算术运算符算术运算符关系运算符关系运算符逻辑运算符逻辑运算符连接运算符连接运算符

29、算术运算符算术运算符运算符运算符功能功能运算符运算符功能功能+ +加加sllsll逻辑左移逻辑左移- -减减srlsrl逻辑右移逻辑右移* *乘乘slasla算术左移算术左移/ /除除srasra算术右移算术右移* * *乘方乘方rolrol逻辑循环左移逻辑循环左移modmod取模取模rorror逻辑循环右移逻辑循环右移remrem取余取余absabs取绝对值取绝对值 关系运算符关系运算符运算符运算符功能功能= =等于等于/=/=不等于不等于小于小于大于大于= =小于等于小于等于= =大于等于大于等于 逻辑运算符逻辑运算符运算符运算符功能功能andand与与oror或或nandnand与非与非

30、nornor或非或非xorxor异或异或xnorxnor异或非异或非notnot非非 其他运算符其他运算符运算符运算符功能功能+ +正正- -负负& &并置并置类 型操 作 符功 能操 作 数 数 据 类 型算 术 操 作 型+加整 数-减整 数&并 置一 维 数 组*乘整 数 和 实 数 ( 包 括 浮 点 数 )/除整 数 和 实 数 ( 包 括 浮 点 数 )mod取 模整 数rem取 余整 数sll逻 辑 左 移bit或 布 尔 型 一 维 数 组srl逻 辑 右 移bit或 布 尔 型 一 维 数 组sla算 术 左 移bit或 布 尔 型 一 维 数 组sra算 术 右 移bit或

31、 布 尔 型 一 维 数 组rol逻 辑 循 环 左 移bit或 布 尔 型 一 维 数 组ror逻 辑 循 环 右 移bit或 布 尔 型 一 维 数 组*乘 方整 数abs取 绝 对 值整 数vhdlvhdl操作符列表操作符列表1 1类型操作符功能操作数数据类型关系操作符=等于任何数据类型/=不等于任何数据类型大于枚举与整数类型,及对应的一维数组=大于等于枚举与整数类型,及对应的一维数组vhdlvhdl操作符列表操作符列表2 2类型操作符功能操作数数据类型逻辑操作符and与bit,boolran,std_logicor或bit,boolran,std_logicnand与非bit,bool

32、ran,std_logicnor或非bit,boolran,std_logicxor异或bit,boolran,std_logicxnor异或非bit,boolran,std_logicnot非bit,boolran,std_logic符号操作符+正整数-负整数vhdlvhdl操作符列表操作符列表3 3 运算优先级运算优先级*absnot*/modrem+正正 -负负+-&sll sla srl sra rol ror= =and or nand nor xor xnor逻辑运算举例逻辑运算举例std_logic_vector是按位运算的。是按位运算的。例例:a=“10101”;b=“1001

33、1”则则aandb=“10001”;aorb=“10111”;nota=“01010”;【例】【例】signala,b,c:std_logic_vector(3downto0);signald,e,f,g:std_logic_vector(1downto0);signalh,i,j,k:std_logic;signall,m,n,o,p:boolean;.a=bandc;-b、c相与后向相与后向a a赋值,赋值,a a、b b、c c的数据类型同属的数据类型同属4 4位长的位矢量位长的位矢量d=eorforg;-两个操作符两个操作符oror相同,不需括号相同,不需括号h=(inandj)nandk;-nandnand不属上述三种算符中的一种,必须加括号不属上述三种算符中的一种,必须加括号l=(mxo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论