Verilog学习笔记(一)parameter和localparam区别

下面我先附上两个例子

module count(

    //mudule clock
    input                 clk , // 时钟信号
    input                 rst_n, // 复位信号

    //user interface
    output  reg [19:0]    data , // 6个数码管要显示的数值
    output  reg [ 5:0]    point, // 小数点的位置,高电平点亮对应数码管位上的小数点
    output  reg           en , // 数码管使能信号
    output  reg           sign // 符号位,高电平时显示负号,低电平不显示负号
);

parameter MAX_NUM = 23'd5000_000; // 计数器计数的最大值
module seg_led(

    input              clk , // 时钟信号
    input              rst_n , // 复位信号

    input  [19:0]      data , // 6位数码管要显示的数值
    input  [5:0]       point , // 小数点具体显示的位置,从高到低,高电平有效
    input              en , // 数码管使能信号
    input              sign , // 符号位(高电平显示“-” 号)

    output  reg [5:0]  seg_sel, // 数码管位选,最左侧数码管为最高位
    output  reg [7:0]  seg_led // 数码管段选
);

//parameter define
localparam  CLK_DIVIDE = 4'd10 ; // 时钟分频系数
localparam  MAX_NUM = 13'd5000 ; // 对数码管驱动时钟(5MHz)计数1ms所需的计数值

FPGA硬件描述型语言,运行时会并行进行。

这两个模块是同一个项目中的,其中MAX_NUM为两个不同变量,为了让系统不混淆定义,在seg_led模块中,定义了局部变量。

parameter:全局常量,用于顶层模块与底层模块之间的参数传递,并行例化的模块也可以使用。
localparam:局部常量,module内部使用,并行例化的模块不可调用。


版权声明:本文为CaoMei_HuaCha原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。