第二章 VHDL语言元素

来源:互联网 发布:qq浏览器 知乎 编辑:程序博客网 时间:2024/05/18 01:27
 
第二章 VHDL言元
2.1    VHDL言的客体
2.2    VHDL言的数据
2.3    VHDL数据转换
2.4    VHDL规则标识
 
2.1   VHDL言的客
VHDL言中,可以予一个象就称客体。客体主要包括以下三量(VARIABLE)、常量(CONSTANT)、信号(SIGNAL)。
2.1.1 常量(CONSTANT(常数)
一个常数主要是了使设计实体中的某些量易于阅读和修改。常数明就是某一常数名予一个固定的。通常在程序始前赋值该值的数据型在句中明。
常数句格式
CONSTANT 常数名:数据 := 表达式;
例如:
CONSTANT Vcc : REAL := 5.0;
CONSTANT Fbus : BIT_VECTOR := “1011”
CONSTANT Delay : TIME := 10ns
:常量是一个恒定不,一旦做了数据型和赋值,它在程序中就不能再改
2.1.2 量(VARIABLE
只能在程和子程序中用,是一个局部量,不能将信息它做出定的当前设计单。与信号不同,量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延
量定义语句的格式
VARIABLE 量名 : 数据 : 束条件 := 初始
例如:
VARIABLE n: INTEGER RANGE0 TO 15 := 2;
VARIABLE a: INTEGER;
赋值语句的格式
标变量名 := 表达式;
赋值语 “:=” 的表达式必与目标变量具有相同的数据型,表达式可以是一个运算表达式也可以是一个数赋值语句左的目标变量可以是单值变量,也可以是量的集合。
例如定义变量:
VARIABLE ab := REAL
VARIABLE xy := BIT_VECTOR0 TO 7);
2.1.3 信号(SIGNAL
信号是路内部硬件接的抽象。它可以作为设计实体中的并行句模块间交流信息的通道。信号及其相的延时语地体了硬件系的特征
信号定义语句的格式
SIGNAL 信号名:数据型:束条件 :=  表达式;--定义时候使用
例如:
SIGNAL gnd BIT := ‘0’
SIGNAL data STD_LOGIC_VECTOR (7 DOWNTO 0);
信号赋值语句表达式
信号名 <= 表达式;                --赋值时候使用
符号 “<=” 表示赋值操作,即将数据信息。数据信息可以置延时过与器件的实际传播延十分接近。因此信号的代入采用“<=”代入符,而不是像赋值时“:。但信号定义时初始赋值符号“:即仿真的时间是从初始值开始的
信号赋值语例:
X<= y;
a <= ‘1’
s1 <= s2 AFTER 10 ns
--注意:量和信号都必先定,赋值。注意赋值“<=” “:的差
信号与量的区
信号和量是VHDL中重要的客体,他的主要区有:
·信号赋值至少要有δ延;而赋值没有
·信号除当前外有多相的信息,如史信息和投影波形;而量只有当前
·信号敏感而不对变量敏感
·信号可以是多个程的全局信号;而量只在定序域可(共享量除外)
·信号是硬件中连线的抽象描述,他的功能是保存化的数据接子元件,信号在元件的端口接元件。量在硬件中没有似的对应关系,他用于硬件特性的高次建模所需要的算中
2.2 VHDL言的数据
     VHDL的客体行定义时,都要指定其数据型。VHDL有多种标准的数据型,并且允自定数据型。在VHDL语义约束中,对类型的要求反映在赋值语句的目与源的一致,表达式中操作的一致,子型中束与型的一致等多方面
2.2.1 VHDL的数据型(程者可直接使用
       义类型在VHDL准程序包STANDARD中定,在用中自包含VHDL的源文件,不需要USE。数据明如下
1.整数(INTEGER
       整数与数学中整数的定相似,可以使用运算操作符,如加、减、乘×、除÷行算运算。在VHDL言中,整数的表示范围为21474836472147483647,即从-(2311)(2311)
2.数(REAL
行算法研究或实验时,作为对硬件方案的抽象手段,常常采用数四运算。数的定义值围为1.0E+38+1.0E+38数有正数,一定要有小数点。例如:-1.0+2.5,-1.0E+38
 
3.位(BIT
用来表示数字系中的信号。位用字符‘0’或者‘1’(将放在引号中)表示。与整数中的10不同,‘1’‘0’仅仅表示一个位的两
位数据可以用来描述数字系总线。位数据不同于布数据,可以用转换函数转换
4.位矢量(BIT_VECTOR
位矢量是用双引号括起来的一数据。例如:“001100”X“00bb”。在里位矢量前面的X表示是十六。用位矢量数据表示总线最形象也最方便,在VHDL程序中将会常遇到。使用位矢量注明位即数中元素个数和排列,例如:
SIGNAL s1BIT_VECTOR15 DOWNTO 0);
5.BOOLEAN
一个布量具有两或者然布量也是二量,但它和位不同没有数的含,也不能行算运算。它能系运算。例如,它可以在if句中被测试测试结生一个布TRUE或者FALSE
6.字符(CHARACTER
   字符也是一数据型,所定字符量通常用引号括起来,‘a’。一般情况下VHDL大小写不敏感,字符量中的大小写则认为是不一。例如,‘B’不同于‘b’。字符量中的字符可以是从az中的任一个字母,从09中的任一个数以及空格或者特殊字符,如$@%等等。包集合standard出了128ASC字符,不能打印的用标识出。字符‘1’与整数11.0都是不相同的,当要明确指出1的字符数据可写CHARACTER ‘ 1’)。
7.字符串(STRING
字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串。字符串常用于程序的提示和明。字符串例如下:
VATIABLE string_1 : STRING (0TO 3);
string_1:= “a b c d”;
8.时间TIME
时间是一个物理量数据。完整的时间量数据包含整数和两部分,而且整数和位之至少留一个空格的位置。例如55 sec2 min等。在包集合STANDARD出了时间,其fspsns,μsmssecminhr。例如:20 μs100 ns3 sec
在系仿真时间数据特有用,用它可以表示信号延,从而使模型系能更逼近实际的运行
9.错误SEVERITY LEVEL
错误级类型数据用来表征系的状,共有4note(注意),warning(警告),error(出),failure(失。在系仿真程中可以用4来提示系当前的工作情况,从而使设计了解当前系工作的情况,并根据系的不同状采取相
10.大于等于零的整数(自然数)(NATURAL),正整数(POSITIVE
数据是整数的子NATURAL数据00以上的正整数;而POSITIVE 只能正整数
上述10数据型是VHDL言中准的数据型,在可以直接引用。如果用需使用10以外的数型,须进行自定。但大多数的CAD厂商已在包集合中对标准数据行了。例如,数型数据等,同学注意
2.2.2 自定的数据
可以由用的数据型有:
·ENUMERATED型;
·整数(INTEGER型;
·REAL)、浮点数(FLOATING型;
·ARRAY型;
·存取(ACCESS型;
·文件(FILE型;
·记录RECORDE型;
·时间TIME型(物理型)
2.2.3 IEEE义标
1.准化数据
IEEE‘93增加了多值逻辑STD_LOGIC_1164,使得“STD_LOGIC”数据具有9不同的。其定如下所示:
TYPE   STD_LOGIC IS
     ‘U’              - - 初始
     ‘X’              - - 不定
      ‘0’              - - 0
      ‘1’             - - 1
      ‘Z’              - -   高阻
     ‘W’              - -   弱信号不定
      ‘L’              - - 弱信号0
     ‘H’               - - 弱信号1
     ‘—’                   - - 不可能情况
          );                  --9种不同的值
2.3 VHDL数据转换
VHDL程序设计中不同的数据型的象之不能代入和运算。实现数据型的转换3方法:
·标记
·函数转换
·常数转换
2.3.1 用函数转换
VHDL言中,程序包中提供了变换函数些程序包有3个程序包中的变换函数不一列表如下
·STD_LOGIC_1164包集合函数
函数 TO_ STDLOGICVECTORA
BIT_VECTOR转换为STD_LOGIC_VECTOR
函数 TO_ BITVECTORA             
STD_LOGIC_VECTOR转换为BIT_VECTOR
函数 TO_ STDLOGICA                 BIT转换为STD_LOGIC
函数 TO_ BITA                        STD_LOGIC转换为BIT
.STD_LOGIC_ARITH包集合函数
函数:CONV_STD_LOGIC_VECTOR (A,
UNSINGEDSINGED转换为INTEGER 
STD_LOGIC_ UNSINGED包集合
函数:CONV_INTEGER (A)       STD_LOGIC_VECTOR转换为INTEGER
·STD_LOGIC_ UNSINGED包集合
函数:CONV_INTEGER (A)
    INTEGERUNSINGEDSINGED转换为 STD_LOGIC_VECTOR
2.3.2 标记实现类转换
标记就是型的名称。标记适合那些系密切的型之转换,即整数和数的转换
例如:
VARIABLE IINTEGER
VARIABLE RREAL
 I := INTEGERR);
 R := REALI);
2.3.3 常数实现类转换
就模效率而言,利用常数实现类转换比利用转换函数的效率更高
下面的例子使用常数把STD_LOGIC值转换为BIT型的
:
LIBRARY IEEE
USE IEEE. STD_LOGIC_1164.ALL
ENTITY typeconv IS
END
ARCHITECTURE arch OF typeconv IS
    TYPE typeconv_type IS ARRAYSTD_ULOGICOF BIT--定义一个类型
CONSTANT typecon_contypeconv_type=‘0’/‘L’=>‘0’‘1’/‘H’ =>1’OTHERS=>‘0’);
SIGNAL bBIT
SIGNAL bBIT                     SIGNAL sSTD_ULOGIC 
BEGIN
 b<= typecon_con (s)--常数实现类型转换
2.4 VHDL操作符
与其他程序设计语言相似,VHDL中的表达式也是由运算符将基本元素接起来形成。里的基本元素包括象名、文字、函数用及用括号括起来的表达式。
VHDL言中共有4操作符,可以分别进逻辑运算LOGICAL)、系运算RELATIONAL)、算运算ARITHMETIC)和并置运算(CONCATENATION。需要指出的是操作符操作的象是操作数,且操作数的应该和操作符所要求的型相一致。另外,运算操作符是有,例如,逻辑运算符not,在所有操作符中最高
1.逻辑运算符
VHDL言中,共有6种逻辑运算符,他是:
 NOT        取反;
 AND        与;
 OR           或;
   NAND    与非;
   NOR       或非;
   XOR       异或。
6种逻辑运算符可以“STD_LOGIC ”“BIT”逻辑型数据、“STD_LOGIC _VECTOR”逻辑型数数据逻辑运算注意,运算符的左和右,以及代入的信号的数据型必是相同的
2.运算符
VHDL言中有5运算符,他是:
·求和操作符:+(加)、-(减)
·操作符:*(乘)、/(除)、MOD(求模)、REM(取余)
·符号操作符:+(正)、-(
·混合操作符:**(指数)、ABS(取绝对值
·移位操作符:SLL逻辑左移)、SRL逻辑右移)、SLA(算左移)、SRA(算右移)、ROL逻辑左移)、ROR逻辑右移
3.系运算符
VHDL言中有6种关系运算符,他是:
 =       等于;
 /=      不等于;
 <       小于;
 <=    小于等于;
 >       大于;
 >=     大于等于;
4.并置运算符
&  
SIGNAL ghiSTD_LOGIC
SIGNAL cdeSTD_LOGIC _VECTOR1 TO 0);
                 
d <= i & NOT h            - -元素与元素并置,形成2的数
 a <= c & d         - -与数并置,形成4的数
5.VHDL操作符的
运算符                                                                  
NOTABS**                                                         最高
*/MODREM
+(正号),-(号)
+,-,
SLLSLASRLSRAROLROR
=/=<><=>=
ANDORNANDNORXORXNOR                                最低
2.4 VHDL规则标识
2.4.1 规则
1.
    了提高VHDL源程序的可性,在VHDL中可以写入注。注- -开头直到本行末尾的一段文字。在MUX+PLUSⅡ中可以看敲入- -之后,后面字体的色就生改不是VHDL设计描述的一部分,编译后存入数据中的信息不包含注
释举例:
QOUT STD_LOGIC _VECTOR11 DOWNTO 0);--A/D转换数据示(行注
--SRAM 数据写入控制状机(段注
WRIT_STATEPROCESSclkrst--SRAM写入控制状
2.数字
数字型文字可以有多表达方式:可以是制数,也可以表示制、八制或十六基的数,可以是整数,也可以是含有小数点的浮点数。现举例如下。
·制整数表示法:如
012     5     78_456 (=78456)      2E6
在相数字之插入下划线制数生影响,仅仅了提高文字的可在数字之前冠以若干个0,但不允在数字之存在空格
·以基表示的数:用这种方式表示的数由五个部分成。第一部分,用十制数明数值进位的基数;第二部分,数隔离符号“#”;第三部分,表达的文字;第四部分,指数隔离符号“#”;第五部分,用十制表示的指数部分,一部分的数如果0可以省去不写。
2#111_1011#     8#1473#    16#A8#E1     016#F.01#E+4
以基表示的数而言,相数字插入下划线不影响数。基的最小数2,最大数16,以基表示的数中允AF的字母,大小写字母意无区
·数:数必须带有小数点。如
      12.0    0.0    3.14    6_741_113.666    52.6 E2
·物理量文字:合器不支持物理量文字的。如
      60 s(秒)     100 m (米)        177 A(安培)
3.字符和字符串
字符是用引号引起来的ASCⅡ字符,可以是数,也可以是符号或字母,如
       ‘E’   ‘e’   ‘$’   ‘23’ ‘A’…
字符串是一的字符数,需放在双引号中。有两种类型的字符串:文字字符串和位矢量字符串。
文字字符串是用双引号引起来的一串文字。如
   “FALSE” “X”    “THIS IS END”
位矢量字符串是被双引号引起来的展的数字序列,数字序列前冠以基数明符。基数符有“B”“O”“X”,他的含如下。
B:二制基数符号,表示二制位01,在字符串中一个位表示一个BIT
O:八制基数符号,在字符串中一个数代表一个八制数,即代表一个3位(BIT)的二制数。
X:十六制基数符号,代表一个十六制数,即代表一个4位二制数。
例如:
    B“1011_1111”   O“152”    X“F821”
4.
名用于指示数量或信号的某一元素
SIGNAL abBIT _VECTOR0 TO 3);
SIGNAL sINTEGER RANGE 0 TO 2
SIGNAL xyBIT;
x <= a (s);
y <= b (3);
上例中,a (s)一下标语句,s是不可算的下名,只能在特定情况下合;b (3)的下标为3,可以
2.4.2 标识
     标识符是最常用的操作符,可以是常数、量、信号、端口、子程序或参数的名字。标识规则VHDL言中符号写的一般规则EDA工具提供了准的范。VHDL’93VHDL’87版本的标识规则进行了展,通常称VHDL’87版本标识标识符,VHDL’93标识为扩标识符。
1.标识
VHDL标识符需遵守以下规则
1)必英文字母开头
2)英文字母、数字(09)和下划线都是有效的字符;
3)短标识符不区分大小写;
4)下划线_)的前后都必有英文字母或数字
一般的,在写程序VHDL的保留字大写或黑体,设计自己定的字符小写,以使得程序便于阅读检查。尽管VHDL仿真不区分大小写,但一个秀的硬件程序设计师应该养成良好的习惯
例:
一些合法的标识符:
S_MACHINEpresent_statesig3
不合法的标识符:
present-state3statescons_,_now  
2.标识
标识符的识别写有下面的规则
1用反斜杠来界定标识符, /control_machine//s_block/ 等都是合法的标识符;
2标识符允包含形符号和空格,如 /s&33//legal$state/ 是合法的标识符;
3)两个反斜杠之的字可以和保留字相同,如 /SIGNAL//ENTITY/ 是合法的标识符,与SIGNALENTITY是不同的;
4)两个反斜杠之标识符可以用数字开头,如 /15BIT//5ns/是合法的;
5标识符是区分大小写的,如 /a/ / A/ 是不同的标识符;
6标识符允多个下划线,如 /our_ _entity/ 是合法的标识符(不推荐这种方式);
7标识符的名字中如果含有一个反斜杠,用相的两个反斜杠来代表它,如 /te//xe/ 表示该扩标识符的名字 te/xe (共5个字符);
 
原创粉丝点击