Menu Close

VHDL boolean与bit类型逻辑运算

在VHDL运算符中介绍了逻辑运算符及重载函数,但由于侧重点不同,并没有详细介绍逻辑运算符使用的详细规则。本节内容以逻辑运算为重点展开介绍。逻辑运算符是VHDL语言的预定义类型,数据类型boolean, bit, boolean_vector, bit_vector 对应的数据对象可以直接参与运算。

  1. BOOLEAN逻辑运算符

为了介绍方便,下面将STD库中的boolean类型逻辑操作符重新列出:

  • 布尔类型与逻辑(and)

boolean 类型运算如表1到表8所示,

表1

and

L \ R FALSE TRUE
FALSE FALSE FALSE
TRUE FALSE TRUE

由于在数字设计(如FPGA或ASIC)在编译后,可以用0代表FALSE,1 代表TRUE,因此表1的表示方法也可以用表2表示,后面为了清晰,都采用0,1 代表FALSE, TRUE的方法表示。

表2

and

L \ R 0 1
0 0 0
1 0 1
  • 布尔或逻辑(OR)

表3   OR

L \ R 0 1
0 0 1
1 1 1
  • 布尔逻辑与非(nand)

表4  nand

L \ R 0 1
0 1 1
1 1 0
  • 布尔逻辑或非(nor)

表5    nor

L \ R 0 1
0 1 0
1 0 0
  • 布尔逻辑异或(xor)

表       xor

L \ R 0 1
0 0 1
1 1 0
  • 布尔逻辑异或非(xnor)

表7  xnor

L \ R 0 1
0 1 0
1 0 1
  • 布尔逻辑非(not)

表8       not

a 0 1
not a 1 0

例1: 利用boolean 类型设计逻辑电路并进行仿真验证

(1) 可综合的实体程序


从上面的程序可以看出,由于boolean 数据类型是STD库中定义的数据类型,逻辑运算也是库中的预定义函数,因此不需要使用libary 及use语句预先引用,就可以直接使用。

(2)仿真程序


本程序提供了仿真激励,仿真程序的实体不需要声明输入、输出,只要在构造体的声明区域声明需要的信号,并在构造体的描述区域给出随时间变化的逻辑值,并与被测的实体映射即可。语句:

a <= false, true after 20 ns, false after 40 ns, true after 60 ns;

表示,信号a在0时刻为false并持续20 ns。从 20 ns时刻开始为ture,并持续到40 ns, 40 ns到 60 ns期间为false, 60 ns后稳定在逻辑true值上不变。语句:

b <= false, true after 40 ns;

的解释类似。关于VHDL 仿真程序的编写,在后续的章节中还会详细讲解。

(3)仿真波形如图1所示

图1

从图1的仿真结果可以看出,输入、输出完全符合例1设计的逻辑关系。

2. BIT类型逻辑运算符

BIT类型逻辑运算符如下:


Bit 类型的逻辑运算与Boolean类型的逻辑运算及其类似,返回值为bit类型,在EDA软件综合时将’0′,’1’解释成0,1二值分别代表高低电平。

Bit类型逻辑运算与上面列出的真值表,表2~表8一致。由于bit类型与boolean一样都是VHDL预定义类型,因此在VHDL编程时可以直接使用。

例2: 利用Bit 类型设计逻辑电路并进行仿真验证

修改例1的设计和测试程序,并对bit类型的逻辑运算进行测试。

(1)实体设计程序


(2)仿真程序


(3)仿真波形, 如图2所示,

图2

从图2的仿真结果可以看出,bit类型与boolean的运算规则一致,只是在EDA软件中,直接将枚举类型中的’0′,’1’直接解释成0,1 二值。而boolean类型直接使用false和true表示逻辑值。

3.关于boolean与bit类型及其运算的讨论

  • 相同点
    • 都是2值枚举类型,
    • 在FPGA或IC的设计中都可以解释成0,1二值,
    • 都可以作为entity的端口,实现电路的接口设计,
    • 都是VHDL语言的预定义类型,
    • 都具有相同的逻辑运算规则,
    • 都可以作为基本标量类型从而组成矢量类型,分别为boolen_vector,bit_vector。
  • 不同点
    • boolean类型的二值为false、true,而bit类型的二值为’0′,’1’,
    • 不能相互赋值,虽然boolean与bit类型非常接近,但二者并没有类型转换的机制,因此并不能混合使用。

例3  boolean 与bit类型相互赋值测试

以bit类型作为实体设计,如例2的(1)部分,测试程序采用例1的(2)部分组合,在Vivado下进行测试。程序重新列出如下:

(1)实体设计程序


(2)仿真程序:(将boolean类型传递给bit类型)


(3)编译结果:如图3所示,

图3

从图3的编译结果可以看出,虽然bit, boolean的类型非常接近但并不兼容,因此不能对二者实现混合运算。STD库中的程序包也没有二者的转换函数,当然如果喜欢也可以由用户自定义函数实现二者的相互转换,或重载逻辑运算符实现二者的混合运算。

 

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