【问题标题】:How to write the boolean function in VHDL?如何在 VHDL 中编写布尔函数?
【发布时间】:2013-10-25 12:49:51
【问题描述】:

我有一个布尔函数最小化,我想使用 VHDL 创建它。我用电路创建它,它工作得很好,但是当我使用 VHDL 创建它时,它给出了不同的输出。有人可以检查我的布尔函数和代码并帮助调试吗?

这是布尔函数

Q0 = A0 + A1 + (~A2 * ~A3 * ~B0 * (B1 + ~B2 * B3))

这是我的布尔函数代码:

Q0 <= (A0) or (A1) or (not A2 and not A3 and not B0 and B1) or (not A2 and not A3 and not B0 and not B2 and B3);

【问题讨论】:

  • 除了手动应用分配律之外,这两个看起来和我一模一样。你能给我们一个完整的、可编译的代码示例来演示这个问题吗?
  • 我觉得没问题。既然您是在寻求帮助调试,您能否告诉我们您没有预料到的情况?

标签: vhdl boolean-logic


【解决方案1】:

在重写为 VHDL 时,您似乎假设 * 具有更高的 在布尔表达式中优先于+,所以布尔值的最后一部分 表达式为:

B1 + ~B2 * B3  = B1 + (~B2 * B3)

但是,在 VHDL 中,andor 运算符具有相同的优先级,并且是 左联想。 not 运算符具有更高的优先级,因此可以在之前编写 没有“()”的参数。

所以如果+ 代表or* 代表and~ 代表not,那么 上述VHDL表达式的最后一部分是:

B1 or not B2 and B3 = (B1 or not B2) and B3

用VHDL运算符优先级编写的原始表达式是:

... ~B0 * ((B1 + ~B2) * B3)

因此,当应用*+ 的VHDL 运算符优先级时,~B0 之后的* 不能分布在B1 + ~B2 * B3 中的+

【讨论】:

  • 我认为这就是 HellMan 手动应用分配法则的原因。在给定的 VHDL 代码中,andor 没有括号混合,所以没有歧义。如果他的意思是布尔表达式中的(B1 + ~B2) * B3,那么使用分配律当然是不正确的。
  • 还有括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多