首页系统综合问题parameter与define的三大区别

parameter与define的三大区别

时间2023-01-15 09:58:46发布分享专员分类系统综合问题浏览218

今天小编给各位分享define的知识,文中也会对其通过parameter与define的三大区别和Verilog中parameter和define的区别等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • parameter与define的三大区别
  • Verilog中parameter和define的区别
  • Verilog中parameter和define的区别
  • Verilog中parameter和define的区别
  • 一、parameter与define的三大区别

    程序中多次出现某些数字,如延迟时间或变量的宽度,有时可能要改变这些值,这种情况下经常要用到参数。参数一经声明,就视其为一个常量,在整个仿真过程中不再改变。

    使用参数可以提高程序的可读性,也利于修改。

    1.语法定义

    2.作用范围

    parameter作用于声明的那个文件;`define从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令失效。

    3.功能

    状态机可以用 parameter 定义,但是不推荐使用`define 宏定义的方式,因为ˈdefine宏定义在编译时自动替换整个设计中所定义的宏,而 parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态混淆。例如一个工程里面有两个 module 各包含一个FSM,设计时都有IDLE这一名称的状态,如果使用ˈdefine宏定义就会发生混淆,如果使用parameter则不会造成任何不良影响。

    一旦`define指令被编译,其在整个编译过程中都有效。例如,通过一个文件中的`define指令,定义的常量可以在其他文件中被调用,直到遇到`undef。

    parameter只在定义的文件中有效,在其他文件中无效,举例如下。

    一、Verilog中parameter和define的区别

    1、语法
    声明:
    parameter xx = yy;
    `define XX YY

    使用:
    xx
    `XX

    2、作用域
    parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。

    如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:
    `ifndef xx
    `define xx yy // or parameter xx = yy;
    `endif

    `define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。

    3、作用
    parameter可以用作例化时的参数传递。具体方法参见《Verilog例化时的参数传递》一文

    在使用状态机时候区别挺大的
    状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方
    式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而
    parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机
    混淆。例如一个工程里面有两个module 各包含一个FSM,如果设计时都有
    IDLE 这一名称的状态,如果使用'define 宏定义就会混淆起来,如果使用
    parameter 则不会造成任何不良影响

    ’define
    一旦‘define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的’define指令,定义的常量可以被其他文件中被调用。直到遇到
    ‘undef
    parameter
    只在定义的文件中有效,在其它文件

    二、Verilog中parameter和define的区别

    1语法定义
    param肠畅斑堆职瞪办缺暴画eter xx = yy;
    `define xx yy ( 注: 句尾无分号)
    2作用范围
    parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效
    3功能
    状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。例如一个工程里面有两个module 各包含一个FSM,如果设计时都有IDLE 这一名称的状态,如果使用'define 宏定义就会混淆起来,如果使用parameter 则不会造成任何不良影响。
    `define
    一旦`define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的`define指令,定义的常量可以被其他文件中被调用。直到遇到 `undef.
    parameter只在定义的文件中有效,在其它文件中无效
    eg:
    `define plus 3'd0
    `define minuus 3'd1
    `define band 3'd2
    `define bor 3'd3
    `define oppo 3'd4
    module test(
    input[7:0] a,
    input[7:0] b,
    input[2:0] opcode,
    output[7:0]out);

    reg [7:0] rout;
    always @(a or b or opcode)
    case(opcode)
    `plus: rout=a+b;
    `minuus: rout=(a>b)?b:a;
    `band: rout=a & b;
    `bor: rout =a | b;
    `oppo: rout =~a;
    default: rout=8'hxx;
    endcase

    assign out=rout;
    endmodule

    三、Verilog中parameter和define的区别

    `define 是宏定义,全局作用的,而且不受语意限制。你甚至可以定义半截的字符串出来。但是使用的时候才会做展开。

    举例而言,如果你定义一个宽度信息为:

    `define RANGE 2:3

    然后在使用的时候`include这个文件,RANGE就可以解析了。
    wire [`RANGE] bus;

    parameter是模块内常量定义,仅限于常量。一般的工具对于parameter的支持力度更好,毕竟是语意可以识别的。而`define的支持仅仅限于parse阶段,不会流入到elaboration阶段。但是如果把``define的使用场景都改为parameter会造成不必要的变量的引入。

    目前一般使用`define的地方一般是全局化的configuration阶段。比如说对整个IP的配置信息,一个IP应该满足不同的SOC的需求提供不同的配置。

    关于define的问题,通过《Verilog中parameter和define的区别》、《Verilog中parameter和define的区别》等文章的解答希望已经帮助到您了!如您想了解更多关于define的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    define
    月初买的华为 月底突然失灵 最新!2020中国高被引学者榜单正式发布