std_logic_vector XNOR 的 VHDL 意外行为

VHDL unexpected behaviour of XNOR for std_logic_vector

我的结构VHDL代码中有一系列25位64位std_logic_vectors。这些应该总是相同的,我想测试是否有任何故障会稍微翻转一下。我的代码如下所示:

outX <= mt1_op XNOR mr2_op XNOR mt3_op XNOR .... XNOR mt25_op;

这没有给我任何错误并且合成很好,但是当我在 ISim 中模拟它时,XNOR 操作似乎不起作用。如果出现故障,我希望所有 1 或偶尔为 0,但最终输出信号 outX 与所有输入信号具有相同的值。我不会费心说明整个 64 位向量,但作为一个无符号整数,它解析为 7776。所有输入向量都是相同的 - 7776 - 当我将它们全部异或时,我得到 7776 的答案。

我怀疑问题可能是由一次应用一个 XNOR 运算引起的,即

OutX <= (mt1_op XNOR mt2_op XNOR(mt3_op XNOR(mt4_op XNOR( ..... )))))))));

这不会给出所需的行为。

有谁知道我怎样才能得到我想要的行为?即,如果所有 25 个向量都相同,则全部为 1 或有差异的地方为 0。??

谢谢

汤姆

XNOR expression 工作正常:

'0' XNOR '0' XNOR ... XNOR '0' = '0'  -- For 25 XNOR '0's
'1' XNOR '1' XNOR ... XNOR '1' = '1'  -- For 25 XNOR '1's

因此,如果相同的向量被赋予 25 次 XNOR,那么表达式将 return 作为参数向量。

要检查所有向量是否相同,您可以这样做:

or_all <= mt1_op OR mt2_op OR ... OR mt25_op;    
and_all <= mt1_op AND mt2_op AND ... AND mt25_op; 
identical <= or_all = and_all;  -- Boolean as resulting type

结果类型为std_logic

identical_std_logic <= '1' when (and_all = or_all) else '0';