2016-11-21 95 views
1

Truth table错误真值表VHDL

My code

我计算的卡诺图,但我的代码是不正确的。我得到错误:“D ='1'的错误C ='0'B ='1'A ='0'预计O ='1',收到O ='0'”。

我在哪里犯错?

library IEEE; 
use IEEE.std_logic_1164.all; 
entity truth_table is port( A,B,C,D : in std_logic; 
           O  : out std_logic); 
end truth_table; 

architecture behavior of truth_table isbegin 

O <= (((not A) and C and D) or ((not D) and B and C) or (A and (not C) and D) or (A and C and (not B))); 
end behavior; 
+0

您应该避免将代码发布为链接图像。代码很好地显示为问题中的文本。 – Tome

+0

如果您的代码没有复制真值表,那是因为您在K-map中发生了错误。你没有显示这个,所以我们不能说出你做错了什么!就我个人而言,我发现这一个更容易处理反向输出,然后在最后反转整个方程。这给了4个产品总和而不是6个。 –

+0

我的错误,反转并不能减少产品的总和,但是如果这对于应用来说非常重要的话,它确实使用较少的门控输入。 –

回答

0

你的信号“O”右边的逻辑等式是错了,它应该是:

O <= (((not D) and B and A) or ((not A) and C and B) or (D and (not B) and A) or (D and B and (not C))); 

http://www.32x8.com/var4.html和自己尝试一下,但请注意,列的顺序是不是相反在你的真相表中。

+0

我使用了相同的站点,但我没有意识到列的顺序是相反的,我总是得到错误的结果。 – Ninalol

+0

“不”在这里拥有最高的运营商优先级。你不需要封闭的支撑物 - 例如“(不是D)”可以表示为“不是D”。参见IEEE Std 1076-2008 9.2运营商,9.2.1概述,优先级递增的运营商列表。 – user1155120