6

导致问题的代码看起来像正常的 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,如果是,我该如何重写它?

非常感谢!

4

2 回答 2

6

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

只是反转一个xor怎么样?

S(1) <= not (L(16) xor L(26));
于 2012-02-14T15:21:38.957 回答
6

详细说明保罗的回答。

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

这可以通过查看语言规范的第 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));
于 2012-02-14T17:23:11.493 回答