一、现象与解释
`timescale 1ns/1ps
`include "uvm_macros.svh"
import uvm_pkg::*;
program testcase();
int a=1;
initial begin
$display("*************************************************************");
if(a == 1)
`uvm_info("ID1", "Test message1", UVM_LOW);
else
`uvm_info("ID1", "Test message2", UVM_LOW);
$display("*************************************************************");
$finish();
end
endprogram
当我们使用以上代码进行编译时,会提示关键字else附近存在语法错误。有些同学不清楚为什么会存在语法错误,但是尝试着使用begin...end语句将`uvm_info包围后,语法错误就消失了。实际上带参数的宏在使用时,分号是多余的。也就是说这样会在正常语句后再加上一个分号,分号即一个空语句,这样在关键字if后看到的是两条语句,如果没有begin...end包围,那么就存在语法错误。
二、正确的写法
显然,带参数的宏在使用时,都不应该加上分号。
initial begin
$display("*************************************************************");
if(a == 1)
`uvm_info("ID1", "Test message1", UVM_LOW)
else
`uvm_info("ID1", "Test message2", UVM_LOW)
$display("*************************************************************");
$finish();
end