2

我将 Verilog 与 modelSim 一起使用,当我尝试将 reg 变量分配给另一个 reg 变量的不同部分时出现以下错误:

** Error: Range width must be greater than zero.
** Error: Range width must be constant expression.

这是相关代码:

 integer f; //zd, qd, R and Q are regs

    always @ * begin 
    f = 52 - zd; 
    R = qd[f +:0]; 
    Q = qd[63 -:f+1]; 
    end

我希望 R 包括 qd(从 0 到 f),而 Q 是(其余的)qd(从 f+1 到 63)。怎么做?谢谢。

4

1 回答 1

4

你试图做的在verilog 2001中是不合法的。

正如您的警告所说,Range width must be constant expression即您不能选择可变长度的部分。

您可以选择改变起点的固定长度部分(即选择从 开始的 8 位f),但其语法是这样的:

vector_name[starting_bit_number +: part_select_width]
vector_name[starting_bit_number -: part_select_width]

在硬件中,总线的大小必须是固定大小,您不能根据寄存器的内容更改硅中的线数:)

于 2012-04-06T17:01:59.047 回答