vcs +define+ 简单用法

在vcs编译过程中可以通过+define+来进行传递参数或者一些控制操作,具体如下:

module test;

    `ifdef A
        parameter num = 123;
        //XXX
    `elsif B
        parameter num = 456;
        //XXX
    `else
        parameter num = 789;
        //XXX
    `endif

    initial begin
        $display("num is %0d",num);
    end
endmodule

在编译命令行中加入+define+A时,num打印值为123,+define+B时为456,定义其他或者不加+define+时打印789,XXX可以为自己的一些代码。通过这种方式,可以实现定义不同参数编译不同代码的功能。

module test;

    `ifdef A
        parameter num = 123;
        //XXX
    `elsif B
        parameter num = 456;
        //XXX
    `else
        parameter num = 789;
        //XXX
    `endif

    initial begin
        $display("num is %0d",num);
        $display("A is %0d",`A);
    end
endmodule

在编译命令中还可以+define+A=666,实现参数的传递,num打印123,A打印666,如果此时不加=666或者不加+define+,display就会报错,miss or empty argument,因为没有数据。

module test;

    `ifndef A
        `define A 100
    `else
        `define A 200
    `endif

    initial begin
        $display("A is %0d",`A);
    end
endmodule

如果+define+进行了对A的定义,代码内部又进行了对A的定义,情况会如何呢?

首先是不加+define+的情况,A的打印结果是100(用的是`ifndef,命令行没有定义A的话就进入这一条语句);然后试试+define+A,打印出错,miss or empty argument;再试试+define+A=300,打印结果是300。

这个结果说明,通过+define+定义的参数优先级最高,会覆盖代码内部的同名定义。

你可能感兴趣的:(硬件工程,学习,数字IC)