[英]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.