QuietE

参数定义parameter和localparam

0
阅读(2822)

在verilog中,常用到参数定义parameter定义一个常量,如parameter IDLE = 4’d0;。尤其在使用状态机时,这种定义,使得状态转换变得清晰,并且便于维护。同样的,代码中,还可以使用localparam定义,它与parameter的都只在当前模块有效,区别只是在于localpara不可变,而parameter可以用于模块间参数传递。比如在某些模块中,可能会定义到时钟频率 parameter SYS_FREQ = 50000000;同样也可以localparam SYS_FREQ = 50000000;不同之处在于如果在上层模块中需要改变时钟频率值,可以这样用

Module test_sub #(paramter SYS_FREQ = 50000000;)//此处parameter用于模块间参数传递

(//接口列表);

//

endmodule

在上层模块例化

Module test

(//接口列表);

//例化模块

Test_sub #(.SYS_FREQ(100000000))

U_test_sub(//接口);

Endmodule

还有一种宏定义 define的方式,作用域从define开始到endefine

Define并不属于verilog的关键字。

定义一个宏定义,比如define FREQ 500000

这样,在代码中,遇到FREQ这样的组合就会用500000代替。有一点需要注意的是,在verilog中使用时,需要在前面加“· ”编译预处理符号告诉编译器这是一个非verilog语法的预处理操作。

Baidu
map