【问题标题】:case? VHDL2008 matching case statement案子? VHDL2008匹配case语句
【发布时间】:2020-01-23 14:25:12
【问题描述】:

VHDL 2008 引入了一个很好的功能,称为“匹配 case 语句”。

我应该使用“案例”吗?关键字或“案例?”中间也可以有空格吗?

我不清楚。 Lattice LSE 允许两者。 Synplify 只接受第一个。

标准中的定义(第 10.9 节)是:

case_statement ::=
    [ case_label : ]
    case [ ? ] expression is
        case_statement_alternative
        { case_statement_alternative }
    end case [ ? ] [ case_label ] ;

【问题讨论】:

  • BNF 产品(IEEE Std 1076-2008 1.3.2 句法描述)包含用于描述句法的词法元素和非 VHDL 定界符。词法元素的规则见 15. 词法元素、15.3 词法元素、分隔符和定界符。没有要求在标识符(这里是保留字大小写,见 15.10)和分隔符(这里是字符'?')之间有分隔符。 “在每个设计单元的第一个之前,或在设计文件的最后一个词法元素之后,任何两个相邻的词法元素之间都允许有一个或多个分隔符。”
  • 你的评论假装是回答。
  • 请注意,据称 Synplify 在第一条评论中违反了 15.3 中引用的句子。如果 Synopsys Synplify 实际上不允许在保留字 case(15.10) 和分隔符 ? (15.3) 之间使用分隔符,那么对于保留字 select 和分隔符 ? 也是如此选定的信号分配 (10.5.4) 或选定的变量分配 (10.6.4)。

标签: syntax vhdl


【解决方案1】:

案例?是关键字。没有空间。

【讨论】:

  • 你能告诉我为什么吗?
  • 您的答案不正确。标识符(包括保留字)和定界符之间不需要分隔符。另一个简单的例子是port(。 IEEE Std 1076-2008 15.3 词法元素、分隔符和定界符。没有词法元素边界混淆,一个标识符(15.4 Identifiers,包括一个保留字(15.10 Reserved words)不包含分隔符。(注意下划线不是分隔符。)
  • @user1155120 是否意味着“案例”?是错误的关键字吗?
  • 没有规则要求标识符和定界符之间有分隔符,分隔词法元素。保留字在 IEEE Std 1076-2008 15.10 保留字中列出。您不会找到任何包含分隔符 (15.3) 的保留字或其他标识符 (!5.4)。
  • @scary_jeff @user1155120 你为什么不发布一个实际的答案...... “我应该使用“case?”关键字还是“case?”之间还有空格允许吗?”什么,一个字回答Either?注意这个没有支持的答案可以被视为意见。
【解决方案2】:

在 VHDL-2008 语言参考手册(IEEE Std 1076-2008)第 15.3 章中写道

在任何两个相邻的词法元素之间、每个设计单元的第一个之前或设计文件的最后一个词法元素之后都允许有一个或多个分隔符。标识符或抽象文字与相邻的标识符或抽象文字之间至少需要一个分隔符。

空格字符在同一章节中定义为分隔符之一。 "case" 和 "[ ? ]" 都是词法元素。

所以两个“案例?”和“案例?”是有效的。您应该使用的是“案例?”因为它适用于您的所有工具。

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 2017-08-06
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多