【问题标题】:SystemVerilog stringify (`") operator and line breaksSystemVerilog stringify (`") 运算符和换行符
【发布时间】:2017-09-27 20:29:43
【问题描述】:

我在宏中使用 SystemVerilog 字符串化运算符`",如下所示。该案例是故意设计的,以显示错误:

module my_test();
    `define print(x) $fwrite(log_file, `"x`")
    `define println(x) $fwrite(log_file, `"x\n`")
    integer log_file;

    initial begin
        log_file = $fopen("result.txt", "w");
        `print(A);
        `print(B);
        `println(C);
        `println(D);
        `print(E);
        `print(F);
    end
endmodule

这给出了输出(没有尾随换行符):

ABC
`D
`EF

为什么输出中有`s,却只来自println
这是规范中记录的行为,还是我的模拟器(Aldec Active-HDL)中的错误?

【问题讨论】:

    标签: system-verilog active-hdl


    【解决方案1】:

    这是您工具中的错误。但是,不需要第二个`",它会为您提供您正在寻找的结果。

    【讨论】:

    • 你能链接我解释为什么第二个 ```" ` 是不必要的吗?最好是规范中的一个页面
    • LRM 的 1315 页中只有一页提到了 `" 并且提到了混合。
    • 我对这个描述的含糊程度感到有点震惊 - 它说宏文本可以使用混合,而不是具体来说字符串文字可以以一个开头并以另一个结尾。
    • 它确实会说,如果你以未转义的双引号开头,最后的引号永远不会被转义,因为反引号将被视为字符串文字的一部分,并且不是逃生角色。因此,唯一允许的混合方式是以转义的-" 开头并以简单的 "." 结尾。
    • 这可能不够严格。这可能只是意味着允许```define macro {"foo", "bar"}``。这也是一种混合。
    猜你喜欢
    • 2011-01-15
    • 2013-08-25
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2021-08-19
    • 2012-01-27
    • 2018-09-14
    相关资源
    最近更新 更多