我的结构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 - 当我将它们全部XNOR时,我得到了7776的答案。
我怀疑问题可能是由于XNOR操作一次只应用一次,即
OutX <= (mt1_op XNOR mt2_op XNOR(mt3_op XNOR(mt4_op XNOR( ..... )))))))));
不会产生所需的行为。
有没有人知道如何才能获得我想要的行为?即如果所有25个向量相同,给我所有的1或有差异的地方,给我一个0. ??
由于
汤姆
答案 0 :(得分:3)
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
因此,如果向XNOR
提供相同的向量25次,表达式将返回参数向量。
要检查所有向量是否相同,您可以这样做:
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';