簡體   English   中英

Verilog的macro_text是如何拆分成token的?

[英]How is Verilog's macro_text split into tokens?

從我對 IEEE 1800-2017 的閱讀來看,詞法分析似乎是上下文相關的,特別是由於數字。 考慮以下示例。

// A number followed by an identifier -- delayed invocation of task `f`
# 1f;

// A number followed by a null statement.
#'h 1f;

f是否是前面數字標記的一部分取決於數字標記前面是否有'h

但是,在預處理時,上下文並不總是很清楚。 以下代碼片段應該打印什么?

module m;
    initial begin
        `define Y(f) 1f
        $display('h `Y(c));
    end
endmodule

macro_text中的1f應該被視為兩個標記並用f代替c (打印'h1c ),還是應該將1f視為單個標記,從而使宏參數未被使用(以及 $display 參數'h1f )?

不是你問題的真正答案,但似乎這些工具也不同意。 如果您在https://www.edaplayground.com上嘗試,不同的工具會給出不同的結果。

您可能已經知道可以強制替換f 以下內容在不同工具中的作用相同:

module m;
    initial begin
      `define Y(f) 1``f``
      $display("%x", 'h `Y(c));
    end
endmodule

額外的反引號強制預處理器將f解釋為宏參數並將其融合到1 (我冒昧地為顯示添加了格式說明符,以使打印的文本更易於閱讀。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM