3 VHDL语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3VHDL语言VHDL:VHSICHardwareDescriptionLanguage.3.1VHDL语言基础3.2VHDL基本结构3.3VHDL语句3.4状态机在VHDL中的实现3.5常用电路VHDL程序3.6VHDL仿真3.7VHDL综合HDL----HardwareDescriptionLanguage一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。优点:HDL设计的电路能获得非常抽象级的描述。如基于RTL(RegisterTransferLevel)描述的IC,可用于不同的工艺。HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。HDL设计的电路类似于计算机编程。常用的HDL语言:VHDL、VerilogHDLVHDL是美国国防部在20世纪80年代初为实现其高速集成电路硬件VHSIC计划提出的描述语言;IEEE从1986年开始致力于VHDL标准化工作,融合了其它ASIC芯片制造商开发的硬件描述语言的优点,于93年形成了标准版本(IEEE.std_1164)。1995年,我国国家技术监督局推荐VHDL做为电子设计自动化硬件描述语言的国家标准。VHDL概述:VHDLVHSICHardwarterDescriptionLanguageVeryHighspeedintegratedcircuitVHSIC覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言;VHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解;VHDL语言可以与工艺无关编程;VHDL语言已做为一种IEEE的工业标准,便于使用、交流和推广。VHDL语言的不足之处:VHDL优点:设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。3.1.1标识符(Identifiers)要求:首字符必须是字母末字符不能为下划线不允许出现两个连续的下划线不区分大小写VHDL定义的保留字(关键字),不能用作标识符标识符字符最长可以是32个字符。注释由两个连续的虚线(--)引导。3.1VHDL语言基础标识符用来定义常数、变量、信号、端口、子程序或参数的名字,由字母(A~Z,a~z)、数字(0~9)和下划线(_)字符组成。例如:ABS,ACCESS,AFTER,ALL,AND,ARCHITECTURE,ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE,COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,FILE,FOR,FUNCTION,GENERIC,GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR,NOT,NULL,OF,ON,OPEN,OR,OTHERS,OUT,PACKAGE,POUT,PROCEDURE,PROCESS,PURE,RANGE,RECODE,REM,REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO,TYPE,UNAFFECTED,UNITS,UNTIL,USE,VARIABLE,WAIT,WHEN,WHILE,WITH,XOR,XNOR关键字(保留字):关键字(keyword)是VHDL中具有特别含义的单词,只能做为固定的用途,用户不能用其做为标识符。3.1.2数据对象(DateObjects)常量ConstantConstantbus_width:integer:=8;--定义总线宽度为常数8数据对象包括常量、变量、信号和文件四种类型。常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。Constant常数名:数据类型:=表达式ConstantVcc:real:=5.0;--定义Vcc的数据类型是实数,赋值为5.0V常量所赋的值应和定义的数据类型一致;常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。Variable变量名:数据类型:=初始值;Variablecount:integer0to255:=20;--定义count整数变量,变化范围0~255,初始值为20。变量Variable变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直接的,非预设的,分配给变量的值立即成为当前值,变量不能表达“连线”或存储元件,不能设置传输延迟量。变量赋值语句:目标变量名:=表达式;变量定义语句:x:=10.0;--实数变量赋值为10.0Y:=1.5+x;--运算表达式赋值,注意表达式必须与目标变量的数据类型相同A(3to6):=(“1101”);--位矢量赋值Signal信号名:数据类型:=初始值Signalclock:bit:=‘0’;--定义时钟信号类型,初始值为0信号Signal信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在构造体、程序包和实体中说明。信号定义语句:Signalcount:BIT_VECTOR(3DOWNTO0);--定义count为4位位矢量信号赋值语句:目标信号名=表达式;x=9;Z=xafter5ns;--在5ns后将x的值赋予z3.1.2数据类型布尔:(Boolean)位:(Bit)TYPEBITIS(‘0’,’1’);--取值为0和1,用于逻辑运算位矢量:(Bit_Vector)TYPEBIT_VECTORISARRAY(Naturalrange)OFBIT;--基于Bit类型的数组,用于逻辑运算SIGNALa:Bit_Vector(0TO7);SIGNALa:Bit_Vector(7DOWNTO0)VHDL的预定义数据类型在VHDL标准程序包STANDARD中定义好,实际使用过程中,已自动包含进VHDL源文件中,不需要通过USE语句显式调用。TYPEBOOLEANIS(FALSE,TRUE);--取值为FALSE和TRUE,不是数值,不能运算,一般用于关系运算符整数:(Integer)取值范围-(231-1)~(231-1),可用32位有符号的二进制数表示variablea:integerrange-63to63在实际应用中,VHDL仿真器将Integer做为有符号数处理,而VHDL综合器将Integer做为无符号数处理;要求用RANGE子句为所定义的数限定范围,以便根据范围来决定表示此信号或变量的二进制数的位数。字符:(Character)TYPECHARACTERIS(NUL,SOH,STX,…,‘’,‘!’,…);--通常用‘’引起来,区分大小写;字符串:(String)VARIABLEstring_var:STRING(1TO7);string_var:=“ABCD”;--通常用“”引起来,区分大小写;实数:(Real)取值范围-1.0E38~+1.0E38,仅用于仿真不可综合1.0--十进制浮点数8#43.6#e+4--八进制浮点数43.6E-4--十进制浮点数时间:(Time)物理量数据,完整的包括整数和单位两个部分,用至少一个空格隔开,仅用于仿真不可综合;fs,ps,ns,us,ms,sec,min,hr错误等级(SeverityLevel):表示系统状态,仅用于仿真不可综合;TYPEseverity_levelIS(NOTE、WARNING、ERROR、FAILURE);IEEE预定义标准逻辑位与矢量标准逻辑位(Std_Logic)标准逻辑位矢量(Std_Logic_vector)基于Std_Logic类型的数组;使用Std_Logic和Std_Logic_Vector要调用IEEE库中的Std_Logic_1164程序包;就综合而言,能够在数字器件中实现的是“-、0、1、Z”四种状态。在条件语句中,必须要全面考虑Std_Logic的所有可能取值情况,否则综合器可能会插入不希望的锁存器。U:Uninitialized;X:ForcingUnkown;0:Forcing01:Forcing1Z:HighImpedanceW:WeakUnknownL:Weak0H:Weak1—:Don’tcare枚举:typestatesis(idle,decision,read,write);typebooleanis(false,true);typebitis(‘0’,‘1’);数组:typevalue_typeisarray(127downto0)ofinteger;typematrix_typeisarray(0to15,0to31)ofstd_logic;用户自定义TYPE数据类型名IS数据类型定义OF基本数据类型或TYPE数据类型名IS数据类型定义SUBTYPE子类型名IS基本数据类型定义RANGE约束范围subtypedigitisintegerrange0to9;3.1.3数据类型转换VHDL为强定义类型语言,不同类型的数据不能进行运算和直接赋值。类型标记法VariableA:integer;VariableB:real;A=integer(B);B=real(A);函数法Conv_interger(A);--由std_logic转换为integer型,在std_logic_unsigned包。常数转换法/常量转换法Typeconv_tableisarray(std_logic)ofbit;Constanttable:conv_table:=(‘0’|’L’=’0’,‘1’|’H’=’1’,others=’0’);Signala:bit;signalb:std_logic;A=table(b);--将std_logic型转换为bit型具有转换表性质的常数在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”和“STD_LOGIC_UNSIGNED”的程序包中提供的数据类型变换函数。属性属性提供的是关于信号、类型等的指定特性。‘event:若属性对象有事件发生,则生成布尔值“true”,常用来检查时钟边沿是否有效。上升沿:Clock’EVENTANDClock=‘1’’range:生成一个限制性数组对象的范围’left:生成数据类型或数据子类型的左边界值;’right,’high,’low,’length’range:“0ton”;’reverse_range:“ndownto0”运算符算术运算符:+,-,*,/,MOD,REM,SLL,SRL,SLA,SRA,ROL,ROR,**,ABS关系运算符:=,/=,,,=,=逻辑运算符:AND,OR,NAND,NOR,XNOR,NOT,XOR赋值运算符:=,:=关联运算符:=其他运算符:+,-,&并置操作符SIGNALa:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd:STD_LOGIC_VECTOR(1DOWNTO0);...a='1''0'd(1)'1';--元素与元素并置,并置后的数组长度为4...IFad=101011THEN...–-在IF条件句中可以使用并置符运算符优先级别逻辑、算术运算符(NOT,**,ABS)乘法运算符(/,MOD,REM,*)正负运算符:+,-,加减、并置运算符:+,-,&关系运算符:=,/=,,,=,=逻辑运算符:AND,OR,NAND,NOR,XNOR,NOT,XOR移位运算符的左边为一维数组,其类型必须是BIT或BOOLEAN,右边必须

1 / 112
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功