parameter 与 define的区别

在FPGA中,parameter与define都可以用来定义常量,但他们也有区别。
define定义常量涉及到define的作用域问题,不同的仿真编译器、综合工具的解析方式不同。在ISE中,define的作用域为当前文件,但是ISE可以将某个文件的属性设置为global,一旦文件设置为global,则其中的define也会被赋予全局属性。在QUARTUS中没有设置global的操作,但是如果在顶层文件中使用define,则该define也将具有全局属性。所以可在一个文件中所有的default变量都需要在该文件的结尾处进行undef,以确保define的作用域仅限于该文件。
parameter的作用域仅限于在当前文件,所以可以放心使用。
由于鄙人只使用quartus软件,就用quartus写个例子。

module compare(
input clk,
input rst_n,
output out
);
`define a 1
d_ef    d_ef1(
            .clk(clk),
            .rst_n(rst_n),
            .D(),
            .Q(out)
            );
endmodule

module d_ef(
input clk,
input rst_n,
input D,
output reg Q
);
always@(posedge clk or negedge rst_n)
    if(!rst_n) Q <= 1'd0;
    else Q <= `a;
endmodule

这里写图片描述

底层获得a值
在上面的例子中,compare是顶层文件,d_ef是底层文件,通过输出可以看出,顶层定义的常量a能在底层被调用,所以在顶层使用define定义的常量a具有全局性。此处就不列出parameter的用法了。总之,在定义常量时,使用parameter很可以放心的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值