【问题标题】:how can we define register width with variable value我们如何用变量值定义寄存器宽度
【发布时间】:2015-04-04 15:14:07
【问题描述】:

我在初始块中取了一个计数器变量'n',我计算了一些值。数完后,我想将其用作某些“reg a”的宽度。 那么我可以声明可以注册为 reg [n:0] a 当我尝试这个时,它给出了一个错误,即 r 不是恒定的......有什么办法可以解决这个问题

【问题讨论】:

    标签: variables verilog


    【解决方案1】:

    不,你不能那样做。一个 Verilog 描述意味着被翻译成某种电子电路,这些不能动态改变它们总线的位数。

    您所能做的就是用您将使用的最大宽度定义a,然后只需使用相应的位数和n的值

    您可以做的另一件事(但我认为它不会在这里使用)是定义一个具有参数化宽度的reg。但是,这与定义具有可变宽度的reg 不同,因为参数的值必须在编译时知道。

    【讨论】:

    • 如果我将 n 的值从一个模块传递到另一个模块会怎样。因为我使用 'n' 来指定我想要访问的 ram 的宽度。
    • n 将具有最大值,因此请使您的 RAM 具有该最大值。当您进行访问时,根据n 的值,包括丢弃不需要的 RAM 位的逻辑。想想你所描述的就是刻在硅上的,所以它是不可变的。无论您在描述中做什么需要动态重新配置,(至少目前)都是不允许的。
    • 我理解您的观点并同样实施。但在大多数情况下,我最终会浪费地址行数。有没有替代品。
    • Mmmmm.... 可能使用某种多路复用:随着时间的推移通过固定数量的连接传输地址位。这样您就可以控制可以发送/接收的位数。想想串行 EPROM 的工作方式。它们的引脚很少,但允许超过一兆字节的内存密度
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2011-05-30
    相关资源
    最近更新 更多