第二章 VHDL语言元素

第二章  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 RANGE 0 TO 15 := 2;
VARIABLE a: INTEGER;
赋值语 句的格式
标变 量名  :=  表达式;
赋值语  “:=”  的表达式必 与目 标变 量具有相同的数据 型, 表达式可以是一个运算表达式也可以是一个数 赋值语 句左 的目 标变 量可以是 单值变 量,也可以是 量的集合。
例如定 义变 量:
VARIABLE a b := REAL
VARIABLE x y := BIT_VECTOR 0 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 言中,整数的表示范 围为 2147483647 2147483647 ,即从- (231 1) (231 1)
2. 数( REAL
行算法研究或 实验时 ,作 为对 硬件方案的抽象手段,常常采用 数四 运算。 数的定 义值 围为 1.0E+38 +1.0E+38 数有正 数, 一定要有小数点 。例如:- 1.0 +2.5 ,- 1.0E+38
 
3. 位( BIT
用来表示数字系 中的信号 。位 用字符 ‘0’ 或者 ‘1’ (将 放在引号中)表示。与整数中的 1 0 不同, ‘1’ ‘0’ 仅仅 表示一个位的两
位数据可以用来描述数字系 总线 。位数据不同于布 数据,可以用 转换 函数 转换
4. 位矢量( BIT_VECTOR
位矢量是用双引号括起来的一 数据。例如: “001100” X“00bb” 。在 里位矢量前面的 X 表示是十六 。用位矢量数据表示 总线 最形象也最方便,在 VHDL 程序中将会 常遇到。 使用位矢量 注明位 即数 中元素个数和排列, 例如:
SIGNAL s1 BIT_VECTOR 15 DOWNTO 0 );
5. BOOLEAN
一个布 量具有两 或者 然布 量也是二 量,但它和位不同没有数 的含 ,也不能 行算 运算。它能 系运算 。例如,它可以在 if 句中被 测试 测试结 生一个布 TRUE 或者 FALSE
6. 字符( CHARACTER
    字符也是一 数据 型,所定 字符量通常用 引号 括起来, ‘a’ 。一般情况下 VHDL 大小写不敏感, 字符量中的大小写 则认为 是不一 。例如, ‘B’ 不同于 ‘b’ 。字符量中的字符可以是从 a z 中的任一个字母,从 0 9 中的任一个数以及空格或者特殊字符,如 $ @ % 等等。包集合 standard 出了 128 ASC 字符,不能打印的用 标识 出。字符 ‘1’ 与整数 1 1.0 都是不相同的,当要明确指出 1 的字符数据 可写 CHARACTER  ‘ 1’ )。
7. 字符串( STRING
字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串 。字符串常用于程序的提示和 明。字符串 例如下:
VATIABLE string_1 : STRING (0TO 3);
string_1:= “a b c d”;
8. 时间 TIME
时间 是一个物理量数据。完整的 时间 量数据 包含整数和 两部分,而且整数和 位之 至少 留一个空格的位置 。例如 55 sec 2 min 等。在包集合 STANDARD 出了 时间 ,其 fs ps ns ,μ s ms sec min hr 。例如: 20 μ s 100 ns 3 sec
在系 仿真 时间 数据特 有用,用它可以表示信号延 ,从而使模型系 能更逼近 实际 的运行
9. 错误 SEVERITY LEVEL
错误 级类 型数据用来表征系 的状 ,共有 4 note (注意), warning (警告), error (出 ), failure (失 。在系 仿真 程中可以用 4 来提示系 当前的工作情况,从而使 设计 了解当前系 工作的情况,并根据系 的不同状 采取相
10. 大于等于零的整数(自然数)( NATURAL ),正整数( POSITIVE
数据是整数的子 NATURAL 数据 0 0 以上的正整数;而 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_ STDLOGICVECTOR A
BIT_VECTOR 转换为 STD_LOGIC_VECTOR
函数  TO_ BITVECTOR A              
STD_LOGIC_VECTOR 转换为 BIT_VECTOR
函数  TO_ STDLOGIC A                   BIT 转换为 STD_LOGIC
函数  TO_ BIT A                          STD_LOGIC 转换为 BIT
.STD_LOGIC_ARITH 包集合函数
函数: CONV_STD_LOGIC_VECTOR (A,
UNSINGED SINGED 转换为 INTEGER  
STD_LOGIC_ UNSINGED 包集合
函数: CONV_INTEGER (A)        STD_LOGIC_VECTOR 转换为 INTEGER
·STD_LOGIC_ UNSINGED 包集合
函数: CONV_INTEGER (A)
     INTEGER UNSINGED SINGED 转换为  STD_LOGIC_VECTOR
2.3.2  标记 实现类 转换
标记 就是 型的名称。 标记 适合那些 系密切的 型之 转换 ,即整数和 数的 转换
例如:
VARIABLE I INTEGER
VARIABLE R REAL
 I := INTEGER R );
 R := REAL I );
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 ARRAY STD_ULOGIC OF BIT -- 定义一个类型
CONSTANT typecon_con typeconv_type = ‘0’/‘L’=>‘0’ ‘1’/‘H’ =>1’ OTHERS=>‘0’ );
SIGNAL b BIT
SIGNAL b BIT                      SIGNAL s STD_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 (取 绝对值
· 移位操作符: S LL 逻辑 左移)、 SRL 逻辑 右移)、 SLA (算 左移)、 SRA (算 右移)、 ROL 逻辑 左移)、 ROR 逻辑 右移
3. 系运算符
VHDL 言中有 6 种关 系运算符,他 是:
 =        等于;
 /=       不等于;
 <        小于;
  <=     小于等于;
 >        大于;
 >=      大于等于;
4. 并置运算符
&    
SIGNAL g h i STD_LOGIC
SIGNAL c d e STD_LOGIC _VECTOR 1 TO 0 );
                   
d <= i & NOT h              - - 元素与元素并置,形成 2 的数
 a <= c & d          - - 与数 并置,形成 4 的数
5.VHDL 操作符的
运算符                                                                    
NOT ABS **                                                          最高
* / MOD REM
+ (正号),-( 号)
+ ,-,
SLL SLA SRL SRA ROL ROR
= /= < > <= >=
AND OR NAND NOR XOR XNOR                                  最低
2.4 VHDL 规则 标识
2.4.1  规则
1.
     了提高 VHDL 源程序的可 性,在 VHDL 中可以写入注 。注 - - 开头 直到本行末尾的一段文字。在 MUX+PLUS Ⅱ中可以看 敲入 - - 之后,后面字体的 色就 生改 不是 VHDL 设计 描述的一部分, 编译 后存入数据 中的信息不包含注
释举 例:
Q OUT STD_LOGIC _VECTOR 11 DOWNTO 0 ); --A/D 转换 数据 示( 行注
--SRAM  数据写入控制状 机( 段注
WRIT_STATE PROCESS clk rst --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 ,以基表示的数中允 A F 的字母,大小写字母意 无区
· 数: 数必 须带 有小数点 。如
      12.0    0.0    3.14    6_741_113.666    52.6 E 2
· 物理量文字: 合器不支持物理量 文字的 。如
      60 s (秒)      100 m  (米)         177 A (安培)
3. 字符和字符串
字符是用 引号引起来的 ASC Ⅱ字符,可以是数 ,也可以是符号或字母,如
       ‘E’    ‘e’    ‘$’    ‘23’  ‘A’…
字符串是一 的字符数 ,需放在双引号中。有两 种类 型的字符串:文字字符串和位矢量字符串。
文字字符串是用双引号引起来的一串文字。如
   “FALSE”  “X”     “THIS IS END”
位矢量字符串是被双引号引起来的 展的数字序列,数字序列前冠以基数 明符。基数符有 “B” “O” “X” ,他 的含 如下。
B :二 制基数符号,表示二 制位 0 1 ,在字符串中 一个位表示一个 BIT
O :八 制基数符号,在字符串中 一个数代表一个八 制数,即代表一个 3 位( BIT )的二 制数。
X :十六 制基数符号,代表一个十六 制数,即代表一个 4 位二 制数。
例如:
    B“1011_1111”    O“152”     X“F821”
4.
名用于指示数 量或信号的某一元素
SIGNAL a b BIT _VECTOR 0 TO 3 );
SIGNAL s INTEGER RANGE 0 TO 2
SIGNAL x y BIT;
x <= a (s);
y <= b (3);
上例中, a (s) 一下 标语 句, s 是不可 算的下 名,只能在特定情况下 合; b (3) 的下 标为 3 ,可以
2.4.2  标识
      标识 符是最常用的操作符,可以是常数、 量、信号、端口、子程序或参数的名字。 标识 规则 VHDL 言中符号 写的一般 规则 EDA 工具提供了 准的 范。 VHDL’93 VHDL’87 版本的 标识 规则进 行了 展,通常称 VHDL’87 版本 标识 标识 符, VHDL’93 标识 为扩 标识 符。
1. 标识
VHDL 标识 符需遵守以下 规则
1 )必 英文字母 开头
2 )英文字母、数字( 0 9 )和下划 线 都是有效的字符;
3 )短 标识 符不区分大小写;
4 )下划 线 _ )的前后都必 有英文字母或数字
一般的,在 写程序 VHDL 的保留字大写或黑体, 设计 自己定 的字符小写 ,以使得程序便于 阅读 检查 。尽管 VHDL 仿真 不区分大小写,但一个 秀的硬件程序 设计师应该养 成良好的 习惯
例:
一些合法的 标识 符:
S_MACHINE present_state sig3
不合法的 标识 符:
present-state 3states cons_,_now   
2. 标识
标识 符的 识别 写有下面的 规则
1 用反斜杠来界定 标识 符,  /control_machine/ /s_block/  等都是合法的 标识 符;
2 标识 符允 包含 形符号和空格,如  /s&33/ /legal$state/  是合法的 标识 符;
3 )两个反斜杠之 的字可以和保留字相同,如  /SIGNAL/ /ENTITY/  是合法的 标识 符,与 SIGNAL ENTITY 是不同的;
4 )两个反斜杠之 标识 符可以用数字 开头 ,如  /15BIT/ /5ns/ 是合法的;
5 标识 符是区分大小写的,如  /a/   / A/  是不同的 标识 符;
6 标识 符允 多个下划 线 ,如  /our_ _entity/  是合法的 标识 符( 不推荐 这种 方式 );
7 标识 符的名字中如果含有一个反斜杠, 用相 的两个反斜杠来代表它,如  /te//xe/  表示 该扩 标识 符的名字 te/xe  (共 5 个字符);

原文地址:http://blog.csdn.net/skyyunmi/article/details/1572343

你可能感兴趣的:(第二章,VHDL语言元素)