parameter和localparm
0赞
发表于 2/9/2017 10:40:39 AM
阅读(1357)
在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语法的预处理操作。