Verilog reg分配给另一个reg的一部分

时间:2012-04-06 16:49:23

标签: verilog

我正在使用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)。怎么做?谢谢。

1 个答案:

答案 0 :(得分:4)

你想要做的事情在verilog 2001中是不合法的。

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

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

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

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