parameter localparam define的区别


`define

语法格式

`define    A            12     //注意不加;不能忘记" ` "

作用区域  

在整个工程中均有效,因为它是可以跨模块的定义


parameter 和 localparam

语法格式

parameter      A    =    16'd2600 ;   //不定义位宽的时候默认是32位

localparam     A     =    16'd2600;   //同上

作用区域  

parameter 、localparam 只在定义的本模块内有效。

两者的区别是 parameter 可以进行参数例化,而 localparam 则不可以。

参数传递我将举下面这个例子进行说明

首先定义了一个模块 led_driver ,并且定义了一个参数 DATA ,代表了 led 灯的个数,此处代表有 7 个 led 灯

module led_driver (
                    clk    ,
                    rst_n,
                    led   
                           );
parameter   DATA = 7;  //定义一个参数
input clk,rst_n;  //输入
output [ DATA-1 : 0]  led;  //输出
............
endmodule

当要在顶层模块例化 led_driver 这个模块时,假设由于工程需要,要将 led 个数改为 4 个,

第一个方法 led_driver 内的 parameter 参数直接改为 3 。

另一种方法 在例化 led_driver 时,将参数 DATA 也进行例化,方法如下面这个代码

led_driver                     //被调用的模块
#(.DATA(4))                    // 参数例化
u_led_driver(                  //例化模块    
                    .clk    (clk),
                    .rst_n(rst_n),
                    .led    (led) 
                           );

在实际应用中,如果想让 parameter 或 `define 作用于整个工程中,可以单独声明一个文件,并且用 `include 让每个文件都包含声明文件。

原文链接:http://www.cnblogs.com/aslmer/p/6022152.html

   

原文地址:https://www.cnblogs.com/aslmer/p/6022152.html