您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > define,parameter和localparam的区别
1、define,parameter和localparam的区别:define:可以跨模块的定义;parameter:本module内有效的定义,可用于参数传递;localparam:关于localparam,这个关键字书上很少会讲到。但是大公司的代码里经常会看到本module内有效的定义,不可用于参数传递;localparamcannotbeusedwithinthemoduleportparameterlist.一般情况下,状态机的参数都是用localparam的。用来生成循环,生成维数可扩展的模块,localparam是局部参数,但它不能被重定义,也就是说在实例化的时候不能通过层次引用进行重定义,例如parameter可以通过#(参数)来进行重新定义,但是localparam不可以,只能通过源代码来改变。Verilog中parameter和define的区别1、语法声明:parameterxx=yy;`defineXXYY使用:xx`XX2、作用域parameter作用于声明的那个文件;`define从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:`ifndefxx`definexxyy//orparameterxx=yy;`endif`define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。3、作用parameter可以用作例化时的参数传递。具体方法参见《Verilog例化时的参数传递》一文在使用状态机时候区别挺大的状态机的定义可以用parameter定义,但是不推荐使用`define宏定义的方式,因为'define宏定义在编译时自动替换整个设计中所定义的宏,而parameter仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。例如一个工程里面有两个module各包含一个FSM,如果设计时都有IDLE这一名称的状态,如果使用'define宏定义就会混淆起来,如果使用parameter则不会造成任何不良影响’define一旦‘define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的’define指令,定义的常量可以被其他文件中被调用。直到遇到‘undefparameter只在定义的文件中有效,在其它文件中无效
本文标题:define,parameter和localparam的区别
链接地址:https://www.777doc.com/doc-2909735 .html