【发布时间】:2015-04-04 15:14:07
【问题描述】:
我在初始块中取了一个计数器变量'n',我计算了一些值。数完后,我想将其用作某些“reg a”的宽度。 那么我可以声明可以注册为 reg [n:0] a 当我尝试这个时,它给出了一个错误,即 r 不是恒定的......有什么办法可以解决这个问题
【问题讨论】:
我在初始块中取了一个计数器变量'n',我计算了一些值。数完后,我想将其用作某些“reg a”的宽度。 那么我可以声明可以注册为 reg [n:0] a 当我尝试这个时,它给出了一个错误,即 r 不是恒定的......有什么办法可以解决这个问题
【问题讨论】:
不,你不能那样做。一个 Verilog 描述意味着被翻译成某种电子电路,这些不能动态改变它们总线的位数。
您所能做的就是用您将使用的最大宽度定义a,然后只需使用相应的位数和n的值
您可以做的另一件事(但我认为它不会在这里使用)是定义一个具有参数化宽度的reg。但是,这与定义具有可变宽度的reg 不同,因为参数的值必须在编译时知道。
【讨论】:
n 将具有最大值,因此请使您的 RAM 具有该最大值。当您进行访问时,根据n 的值,包括丢弃不需要的 RAM 位的逻辑。想想你所描述的就是刻在硅上的,所以它是不可变的。无论您在描述中做什么需要动态重新配置,(至少目前)都是不允许的。