Verilog 中的参数值是否有上限?
Is there an upper limit to parameter value in Verilog?
我有一个参数定义为:parameter TARGET = 18000000000
。此数字的十六进制等效值是“4 30E2 3400”。
但是当我将这个设计移植到 FPGA 上并检查波形时,我可以看到 820130816
正在通过。此数字的十六进制等效值是“30E2 3400”。
所以,这里似乎只考虑了低 32 位,而忽略了高位。
有人能告诉我我们可以传递的参数值有上限吗(在本例中为 32 位)?还是我做错了?
parameter
不指定类型将使用 rhs 表达式的类型。在您的情况下,rhs 表达式是一个 32 位整数。即使您指定了一个超过 32 位的数字,它也会被截断为默认宽度 32。这是没有指定宽度的数字常量的宽度。
因此,为了使其正确,您需要指定 rhs 文字的宽度。以下将做:
parameter TARGET = 64'd18000000000;
我有一个参数定义为:parameter TARGET = 18000000000
。此数字的十六进制等效值是“4 30E2 3400”。
但是当我将这个设计移植到 FPGA 上并检查波形时,我可以看到 820130816
正在通过。此数字的十六进制等效值是“30E2 3400”。
所以,这里似乎只考虑了低 32 位,而忽略了高位。
有人能告诉我我们可以传递的参数值有上限吗(在本例中为 32 位)?还是我做错了?
parameter
不指定类型将使用 rhs 表达式的类型。在您的情况下,rhs 表达式是一个 32 位整数。即使您指定了一个超过 32 位的数字,它也会被截断为默认宽度 32。这是没有指定宽度的数字常量的宽度。
因此,为了使其正确,您需要指定 rhs 文字的宽度。以下将做:
parameter TARGET = 64'd18000000000;