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

下载本文档

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

文档简介

硬件描述语言与数字系统开发(第4章)-10

标识符(identifiers):可用来为设计实体、构造体、端口及内部信号、变量、常量等参数命名,由英文字母、数字、下划线组成。书写规则:标识符中首字母必须是英文字母。标识符中末字母不能是下划线。标识符中不允许出现两个连续的下划线。标识符中不区分字母、数字的大小写。VHDL语言中的关键保留字不能用作标识符。VHDL语言中的分隔符由分号“;”构成。VHDL语言中的注释符由双横线“--”构成。4.1标识符_Decoder_1 --起始为非英文字母2FFT,74HC245 --起始为数字Sig_#N,CLR/RST --符号“#”“/”不能成为标识符的构成Not-Ack,D10% --符号“-”“%”不能成为标识符的构成RyY_RST_ --标识符的最后不能是下划线“_”data__BUS --标识符中不能有双下划线return,BLOCK --标识符不能为关键字

Decoder_1,FFT3,Sig_N_8,State0,I2d_8le6合法标识符:非法标识符:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityrglight_cotrlisport(clk1,clk2:instd_logic;

timh,timl:outstd_logic_vector(3downto0);

r,g,y:outstd_logic);endrglight_cotrl;architecturertlofrglight_cotrlissignalyy:std_logic;typergyis(red,green,yellow);beginprocess(clk1)variablea:std_logic;variablestate:rgy;variableth,tl:std_logic_vector(3downto0);

数据对象(DataObjects):VHDL语言中的数据对象是一个可以赋值的客体,类似于一种容器,可以接受各种数据类型的赋值。

常用的数据对象有常量、变量、信号三大类。顾名思义,常量用来存放仿真/综合过程中的不变值。

变量位于进程和子程序内部,主要用来暂时存放中间数据,即对中间计算结果或临时数据进行局部贮存。变量只在进程内部是可视的。

信号是VHDL中最具硬件特色语言要素,是内部硬件相互连接的主要机制,它表示把元件的装配端口连在一起的互连线,信号在整个实体内部存放数据、传递信息。4.2数据对象

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

常量说明、赋值语句的一般格式:<关键字>constant<常量名>name:<数据类型>:=<值>value;例:constantallis1:std_logic_vector(2downto0):=“111”;constantbuswidth:integer:=8;变量(关键字variable)仅用于进程和子程序变量的赋值符号为“:=”必须在进程和子程序的说明性区域说明不能表达连线和存储元件变量说明、赋值语句的一般格式:<关键字>variable<变量名>name:<数据类型>;

<变量名>name :=<值>value;例:variableva,vb:std_logic_vector(7downto0);va:=“00101110”;

vb(7downto4):=

va(3downto0);数据对象----变量变量的赋值VARIABLEtemp:STD_LOGIC_VECTOR(7downto0);整体赋值:

temp:=“10101010”;

temp:=x”AA”;(1076-1993)逐位赋值:

temp(7):=‘1’;多位赋值

temp(7downto4):=“1010”;多位赋值用双引号逐位赋值用单引号赋值标志信号(关键字signal)信号用于声明内部信号,而非外部信号(in,out,inout,buffer)信号在元件之间起互联作用,可代表连线。信号赋值符号为“<=”。

信号说明、赋值语句的一般格式:<关键字>signal<信号名>name:<数据类型>;

<信号名>name<=<值>value;例:signalx,y:integerrange0to100;signalhalfsum:std_logic_vector(7downto0);X<=15;Y<=x+10;Halfsum<=“00001111”;

数据对象----信号信号的赋值SIGNALtemp:STD_LOGIC_VECTOR(7downto0);整体赋值:

temp<=“10101010”;

temp<=x”AA”;逐位赋值:

temp(7)<=‘1’;多位赋值:temp(7downto4)<=“1010”;X:十六进制O:十进制逐位赋值用单引号多位赋值用双引号赋值标志

注意:信号与变量的赋值符号是不同的。信号与变量的作用范围是不同的。信号与变量的综合效果是不同的。数据对象中的信号与变量例:variablev_abc:std_logic_vector(2downto0);signals_abc:std_logic_vector(2downto0);v_abc:=“000”;s_abc<=“000”;ARCHITECTURE{SIGNAL描述}label1:PROCESS1{VARIABLE描述}label2:PROCESS2{VARIABLE描述}在进程内部说明,作用范围为进程内在进程的外面声明,作用范围为全局信号与变量的作用范围libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityrglight_cotrlisport(clk1,clk2:instd_logic;timh,timl:outstd_logic_vector(3downto0);r,g,y:outstd_logic);endrglight_cotrl;architecturertlofrglight_cotrlissignalyy:std_logic;typergyis(red,green,yellow);beginprocess(clk1)variablea:std_logic;variablestate:rgy;variableth,tl:std_logic_vector(3downto0);LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENA<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;

END;BALIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENA:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;

END;

信号与变量的区别信号变量赋值符号<=:=功能电路的内部连接内部数据交换作用范围全局信号,进程和进程之间的数据通信内部变量,进程内部的数据传送行为进程结束时赋值立即赋值

数据类型(DataTypes):规定数据对象的特征和取值范围,用它们可建立简单的或者复杂的数据对象。4.3数据类型常用数据类型标准数据类型(10种)

整数类型、实数类型、位、位矢量等用户定义类型

枚举类型、数组类型等VHDL是与类型高度相关的语言,不允许将一种数据类型赋予另一种数据类型,若对不同类型的信号进行赋值需使用类型转换函数。VHDL含有很宽范围的数据类型,常用数据类型分为:标准----整数类型关键字:INTEGER范围为:-214783647到214783647(231-1)需要综合时,要对范围加以限制

例如:VARIABLETmp:Integer:=255SIGNALcount:integerrange0to255count<=count+1标准----实数类型关键字:REAL范围为:-1.0E38到1.0E38很多综合器不支持该类型 标准----自然数类型关键字:NATURAL范围为:0到到214783647(231-1)大于等于0的正整数,是整数的一个子集 标准----位类型关键字:BIT范围为:只有2种取值:‘0’和‘1’,表示2种状态与整数类型中的0、1不同与布尔类型中的‘0’、‘1’不同 标准----位矢量类型关键字:BIT_VECTOR位矢量是用双引号括起来的一组位数据,可用来表示总线状态位矢量需后跟范围说明指定矢量长度(TO、DOWNTO)位矢量前可加符号标记进制(B、O、X)位矢量可分段操作标准----布尔类型关键字:BOOLEAN范围为:只有2种状态:‘0’和‘1’,表示“真”和“假”,用于关系运算和逻辑判断(IF)与整数类型中的0、1不同,没有数值的含义与位类型中的‘0’、‘1’也不同标准----字符类型关键字:CHARACTER字符是用单引号括起来的一个字母、数字、空格或特殊符号字符区分大小写,‘B’与‘b’不同字符‘1’与整数1不同,没有数值的含义字符‘1’与位类型中的‘1’也不同关键字:STRING字符串是用双引号括起来的一个字符序列,用于程序提示或结果说明字符串区分大小,写“RANGE”与“range”不同标准----字符串类型关键字:TIME范围为:-214783647到214783647(231-1)时间类型可用来指定延时时间和标定仿真时刻一个完整的时间类型包含整数和单位两部分,且整数和单位间应留有一个空格位时间是一物理量数据,单位为:fs,ps,ns,us,ms,sec,min,hr标准----时间类型标准----错误等级关键字:SEVERITYLEVEL范围为:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)错误等级用于提示系统当前的工作状态及严重等级自定义----枚举类型关键字:TYPE一般格式:TYPE数据类型名IS(元素1,元素2….);

枚举类型常用于定义状态机的状态,例如:TYPEStatesIS(S1,S2,S3,S4);type

trafficis(red,green,blue);signalpresent_state,next_state:traffic;

例如:

TYPEStd_logicIS (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’_’);而

Std_logic_Vector

是std_logic的组合,属工业标准的逻辑类型

如:

data:instd_logic_vector(7downto0);则data表示8根数据线。如给data赋值5AH可写为:

data<=“01011010”;或data<=X“5A”(X表示16进制)。自定义----枚举类型初值不定高阻弱不定弱低弱高不可能STD_LOGIC_VECTOR类型定义如下:TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;自定义----物理类型关键字:TYPE一般格式:TYPE数据类型名IS范围;例如:

TYPETISRANGE–1E18TO1E18;

UNITS

fs;

ps=1000fs;

ns=1000ps;

us=1000ns;

ms=1000us;

sec=1000ms;

min=60sec;

hr=60min;

ENDUNITS;无符号数据类型(UNSIGNEDTYPE)VARIABLEvar:UNSIGNED(0TO10);SIGNALsig:UNSIGNED(5DOWNTO0);有符号数据类型(SIGNEDTYPE)SIGNED'("0101")代表+5,5SIGNED'("1011")代表–5

VARIABLEvar:SIGNED(-10TO10);UNSIGNED'("1000")代表+8,8不同数据类型间的转换

VHDL语言对数据类型有着极为严格的分类和定义,不同类型的数据、对象不能随意赋值、代入,必要时,应进行类型转换。常用的数据类型转换方法有二:类型标记法与函数转换法如:a<=real(b)--将integer转换为real;如:tobit(a)/bit_vector(a)--将std_logic(矢量)转换为bit(矢量);如:tostd_logic(a)/std_logic_vector(a)--将bit(矢量)转换为std_logic(矢量);如:convstd_logic_vector(a,位长)--将integer,unsigned转换为std_logic_vector;如:convinteger--将std_logic_vector,unsigned转换为integer。前3个转换函数在ieee库的std_logic_1164程序包中;后2个转换函数在ieee库的std_logic_arith及std_logic_unsigned程序包中。std库/ieee库中的程序包libraryieee;USEieee.std_logic_1164.all;USEieee.std_logic_arith.all;USEieee.std_logic_unsigned.all;ENTITYadd_arith_4ISPORT(A,B:INstd_logic_vector(3downto0);cin :INstd_logic;S:OUTstd_logic_vector(3downto0);cout:OUTstd_logic);ENDadd_arith_4;ARCHITECTUREbehaveOFadd_arith_4ISbeginprocess(a,b,cin)variablea_v,b_v:integerrange0to15;variables_v:integerrange0to31;variablecin_v:integerrange0to1;beginif(cin='1')thencin_v:=1;elsecin_v:=0;endif;a_v:=conv_integer(a);b_v:=conv_integer(b);

s_v:=a_v+b_v+cin_v;if(s_v>=16)thens_v:=s_v-16;cout<='1';elsecout<='0';endif;s<=conv_std_logic_vector(s_v,4);endprocess;ENDbehave;4.4运算操作符

VHDL为构造计算数值的表达式提供的预定义算符。预定义算符可分为四种类型:算术运算符关系运算符逻辑运算符连接运算符算术运算符运算符功能运算符功能+加SLL逻辑左移-减SRL逻辑右移*乘SLA算术左移/除SRA算术右移**乘方ROL逻辑循环左移MOD取模ROR逻辑循环右移REM取余ABS取绝对值关系运算符运算符功能=等于/=不等于〈小于〉大于〈=小于等于〉=大于等于逻辑运算符运算符功能AND与OR或NAND与非NOR或非XOR异或XNOR异或非NOT非其他运算符运算符功能+正-负&并置VHDL操作符列表1VHDL操作符列表2VHDL操作符列表3运算优先级** ABS NOT* / MOD REM+正 -负+ - &SLL SLA SRL SRA ROL ROR= <= < > >=AND OR NANDNORXORXNOR高低逻辑运算举例std_logic_vector是按位运算的。例:A=“10101”;B=“10011”则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、b、c的数据类型同属4位长的位矢量d<=eORfORg;--两个操作符OR相同,不需括号h<=(iNANDj)NANDk;--NAND不属上述三种算符中的一种,必须加括号l<=(mXORn)AND(oXORp);--操作符不同,必须加括号h<=iANDjANDk;--两个操作符都是AND,不必加括号h<=iANDjORk;--两个操作符不同,未加括号,表达错误a<=bANDe;--操作数b与e的位矢长度不一致,表达错误h<=iORl;--i的数据类型是位STD_LOGIC,而l的数据类型是...--布尔量BOOLEAN,因而不能相互作用,表达错误

逻辑运算举例连接运算符举例连接符&可将两个对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如,为表达a=‘1’andb=‘0’and

温馨提示

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

评论

0/150

提交评论