definig宏时预期的endmodule错误

时间:2016-08-11 07:51:13

标签: macros verilog system-verilog

我已经为门控断言定义了一个宏,但在编译时,我面临失败的说法:在endproperty期望endmodule。

代码:

`define gating_check( _name, _clock, _data, txen) \
property _name ; \
@(posedge `TOP.``_clock``) disable iff (~`STIMULUS.RSTN_VEC_GEN) \
(~(txen) |-> ##[1:6] ( |`TOP.``_data`` == 0 ) ); \ 
endproperty \ 
``_name``_checker : assert property (_name) else $error("-E- property gating_check failed"); \
``_name``_cover : cover property (_name)

请帮助。

1 个答案:

答案 0 :(得分:1)

如果你删除这些代码应该编译的尾随空格,你只需在“\”之后的两行--4和5中有额外的空格。

“\”用于转义行尾,但“\”之后的额外空格不会这样做。因此,现在您的宏已成为生成错误的多留言语句。因为它的空间特征很难观察:)。

下面是第4行和第5行没有尾随空格的代码。

`define gating_check( _name, _clock, _data, txen) \
property _name ; \
@(posedge `TOP.``_clock``) disable iff (~`STIMULUS.RSTN_VEC_GEN) \
(~(txen) |-> ##[1:6] ( |`TOP.``_data`` == 0 ) ); \
endproperty \
``_name``_checker : assert property (_name) else $error("-E- property gating_check failed"); \
``_name``_cover : cover property (_name)