Menu Close

VHDL语言文字规则与数据表达方式

VHDL语言与其它计算机高级语言一样,也有自己的文字规则,而且由于VHDL语言在设计和仿真中都是采用源文件方式引用,因此可以更清晰观察其文字规则的使用。如在使用IEEE库中std_ulogic类型时,可以打开std_logic_1164文件观察到 std_ulogic类型定义如下:

type std_ulogic is ( 
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);

在此基础上又定义了std_logic类型,resolved 函数等,确定了该类型的使用规则。因此学习VHDL语言不仅能学习VHDL语言规则及使用,随着理解的深入还能系统掌握VHDL语言的这些语言规则的构成,正所谓知其然,知其所以然。下面就VHDL语言文字规则详细介绍,在学习和实践中掌握这些规则后并在编程中遵循规则,才能写出优质的代码。VHDL语言具有类似于计算机高级语言编程的一般文字规则外, 还包含特有的文字规则和表达方式 。VHDL 文字(Literal)主要包括数值和标识符。

1. 数值型文字表达方式

数值型文字所描述的值主要有数字型 ,字符串型 ,位适量型。

  •  数字型文字
    数字型文字的值有多种表达方式 ,现列举如下:

    •  整数文字

整数文字都是十进制的数, 如 5 ,678 ,0 ,156E2(=15600), 45_234_287 (=45234287)。数字间的下划线仅仅是为了提高文字的可读性 相当于一个空的间隔符,而没有其它的意义,因而不影响文字本身的数值。

    •  实数文字

实数文字也都是十进制的数 ,但必须带有小数点。 如 188.993 ,88_670_551.453_909(=88670551.453909) ,1.0,44.99E-2(=0.4499) ,1.335, 0.0等。

    •  以数制基数表示的文字

用数制基数表示的数由五个部分组成:

      • 第一部分用十进制数标明数制进位的基数,
      • 第二部分为数制隔离符号 # ,
      • 第三部分为表达的文字,
      • 第四部分为指数隔离符号 #,
      • 第五部分用十进制表示的指数部分,
      • 这一部分的数如果为 0 可以省略不写。

例:

SIGNAL d1,d2,d3,d4,d5  : INTEGER  RANGE  0  TO  255;
d1 <= 110#170# ;                                                                                  — (十进制表示 等于 170)
d2 <= 16#FE# ;                                                                                     — (十六进制表示 等于 254)
d3 <= 2#1111_1110#;                                                                           — (二进制表示 等于 254)
d4 <= 8#376# ;                                                                                     — (八进制表示 等于 254)
d5 <= 16#E#E1 ;                                                                                   — (十六进制表示 等于 2#1110000# 等于 224)

  • 物理量文字

如:60s (60 秒) ,100m (100 米),kohm(千欧姆), 177A (177 安培)等。这些带有单位的物理量都有明确的含义,但在数字逻辑设计时,往往不能实现,除非写支持函数来实现。但在仿真与验证时时可以较好的支持。

2.  字符及字符串型文字

  • 字符型

字符是用单引号扩起来的ASCII 字符, 可以是数值也可以是符号或字母 。如’R’, ‘a’ ,’*’,’Z’, ‘U’ ,’0’, ’11’, ‘-‘ ‘,L’等。如可用字符来定义一个新的数据类型 STD_ULOGIC 如下:

TYPE  STD_ULOGIC  IS  ( ‘U’,’X’ ,’0’, ‘1’,’Z’, ‘W’ ,’L’ ,’H’ ,’-‘ ) ; (注: 这种在括号内有顺序的数据类型为枚举型,也就是列举所有可能的类型,索引顺序从左到右)。

 

entity vhdl_tb is

--  Port ( );
end vhdl_tb;

architecture test_and_logic of vhdl_tb is
signal test_a,test_b,result_c: bit;

component top_logic
generic
( WIDTH_IN : integer;
  WIDTH_OUT: integer
);
port(
a : in bit;
b : in bit;
c : buffer bit

);
end component;

begin
test_a<='1';
test_b<='0';

top_logic_inst : top_logic
generic map
( WIDTH_IN  =>4,
  WIDTH_OUT =>4
)
port map(
a =>test_a,
b =>test_b,
c =>result_c

);

end test_and_logic;

 

  • 字符串型

字符串型则是一维的字符数组 ,使用时需放在双引号中 。VHDL语言中有两种类型的字符串分别为 文字字符串和数位字符串。

    •  文字字符串

文字字符串是用双引号引起来的一串文字, 如:”ERROR”, “Both S and Q equal to 1″, “X” ,”BB$CC”等。文字字符串如果可以正确解释为数字,也可以作为数位字符串使用,如”ab87″,如果在赋值语句中,左边为bit_vector或std_logic_vector,编译器会自动推断为16进制数,但此时不能使用”_”座位数字的分隔符,因为”_”也是文字字符串的一个部分,系统无法正确解释为数字。

    •  数位字符串

数位字符串也称位矢量字符串, 是预定义的数据类型Bit的一位数组。数位字符串与文字字符串相似, 但所代表的是二进制, 八进制或十六进制的数组。 它们所代表的位矢量的长
度即为等值的二进制数的位数。 字符串数值的数据类型是一维的枚举型数组 。与文字字符串表示不同, 数位字符串的表示首先要有计算基数, 然后将该基数表示的值放在双引号中,基数符以”B” “O”和”X”表示, 并放在字符串的前面, 它们的含义分别是:

 B :二进制基数符号。其含义是字符串中每位表示一个 Bit,其含义为二进制 0 或 1 。

 O: 八进制基数符号。其含义是字符串中的每一个数代表一个八进制数, 即代表一个 3位(BIT)的二进制数。

 X: 十六进制基数符号。其含义是字符串中的每一个字符 代表一个十六进制数, 即一个 4 位的二进制数。
例如:
data1 <= B”1_1101_1110″    ;                                                       — 二进制数位矢量,位矢数组长度是 9。
data2 <= O”15″  ;                                                                           — 八进制数数组 位矢数组长度是 6
data3 <= X”AD0″  ;                                                                       — 十六进制数数组 位矢数组长度是 12
data4 <= B”101_010_101_010″ ;                                               — 二进制数数组 位矢数组长度是 12

Posted in FPGA, FPGA 教材教案, IC 教材教案, VHDL, VHDL, 开发语言, 教材与教案, 文章, 编程语言

发表回复

相关链接