VHDL中奇怪的XNOR行为

时间:2012-02-14 13:05:13

标签: vhdl fpga xilinx

导致问题的代码看起来像普通的xnor操作,如下所示:

S(1) <= L(16) xnor L(26);

此行会导致以下错误:

ncvhdl_p: *E,EXPSMI (HDL/aes_sbox_enc_depth16.vhd,169|14): expecting a semicolon (';') [9.5.1].
ncvhdl_p: *F,MAXERR: maximum error count reached (1).
TOOL: ncvhdl 10.20-s075: Exiting on Feb 14, 2012 at 12:56:05 GMT (total: 00:00:01)

任何人都知道这里出了什么问题,分号显然在那里。是否有可能是VHDL 不支持xnor,如果是这样,我该如何重写呢?

非常感谢!

2 个答案:

答案 0 :(得分:6)

我相信xnor是为比特和布尔值定义的,而不是std_logic。我认为这实际上取决于您使用的VHDL版本(例如98/2002 / 2008)。它肯定是从我见过的std_logic_1164.vhd文件的某些版本中评论过的。

如何反转xor

S(1) <= not (L(16) xor L(26));

答案 1 :(得分:6)

详细说明保罗的答案。

  • IEEE-1076 1987年:不支持xnor运营商。
  • IEEE-1076 2002年:支持xnor运算符。

这可以通过查看Language Spec的第7.1节进行验证。

1987年:

expression ::=
      relation { and  relation }
    | relation { or   relation }
    | relation { xor  relation }
    | relation [ nand relation ]
    | relation [ nor  relation ]

2002年:

expression ::=
        relation { and  relation }
      | relation { or   relation }
      | relation { xor  relation }
      | relation [ nand relation ]
      | relation [ nor  relation ]
      | relation { xnor relation }

如果你的工具支持2002(或2008),那么它还需要在std_logic_1164中定义运算符,但这可能是相对可能的。

最有可能的是,您的工具仅支持IEEE-1076-1987。然后你想写一个xnor:

not(L(16) xor L(26));