下面我先附上两个例子
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内部使用,并行例化的模块不可调用。