zoukankan      html  css  js  c++  java
  • [转]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
    只在定义的文件中有效,在其它文件中无效

    (原文地址:http://www.cublog.cn/u3/104683/showart_2289695.html)

  • 相关阅读:
    Python 之解析配置文件模块ConfigParser
    SonarQube代码质量管理平台
    SVN代码统计工具StatSVN
    python 3接口测试
    python+selenium使用chrome时,报错ignore certificate errors
    python3发送邮件(有附件)
    日记
    杂记 包含 serialize().ajaxStart() .ajaxStop()以及其他
    还是要说一下XML。全当日记
    桑心!XML
  • 原文地址:https://www.cnblogs.com/jianyungsun/p/1942067.html
Copyright © 2011-2022 走看看