Verilog net指定

时间:2011-03-31 20:37:43

标签: verilog

我有一个来自_LS(511:0)的输入端口。这在我的模块中声明为wire。我将其分配给一组32个寄存器ilb(0:31),每个寄存器的长度为1 nits。我试图使用for循环来做到这一点。

 integer i;
 genvar j;
 initial
  begin
    count1 = 0;
    count2=0;
    flush_ctrl=0;
    buffer_bit=0;
    a=(hmic_ctrl[1]) + (hmic_ctrl[2]*2) + (hmic_ctrl[3]*4);
    //assigning data from LS to ilb

        for (i=0;i<=31;i=i+1)
          ilb[i]=from_LS[511-(16*i) : 511-(16*(i-1))];

    ilb[0]= from_LS[511:496];
    ilb[1]= from_LS[495:480];
    ilb[2]= from_LS[479:464];
    ilb[3]= from_LS[463:448];
    ilb[4]= from_LS[447:432];
    ilb[5]= from_LS[431:416];
    ilb[6]= from_LS[415:400];
    ilb[7]= from_LS[399:384];
    ilb[8]= from_LS[383:368];
    ilb[9]= from_LS[367:352];
    ilb[10]= from_LS[351:336];
    ilb[11]= from_LS[335:320];
    ilb[12]= from_LS[319:304];
    ilb[13]= from_LS[303:288];
    ilb[14]= from_LS[287:272];
    ilb[15]= from_LS[271:256];
    ilb[16]= from_LS[255:240];
    ilb[17]= from_LS[239:224];
    ilb[18]= from_LS[223:208];
    ilb[19]= from_LS[207:192];
    ilb[20]= from_LS[191:176];
    ilb[21]= from_LS[175:160];
    ilb[22]= from_LS[159:144];
    ilb[23]= from_LS[143:128];
    ilb[24]= from_LS[127:112];
    ilb[25]= from_LS[111:96];
    ilb[26]= from_LS[95:80];
    ilb[27]= from_LS[79:64];
    ilb[28]= from_LS[63:48];
    ilb[29]= from_LS[47:32];
    ilb[30]= from_LS[31:16];
    ilb[31]= from_LS[15:0];
    pctr(
     .clk(clk),
     .reset(0),
     .offset(branch_ctrl[13:1]),
     .mux_select(branch_ctrl[0]),
     .pc1(pc)
   );
  end

我收到的错误是我不应该使用变量索引。错误是:

# ** Error: C:/Modeltech_pe_edu_10.0/examples/COMP ARC/inst_line_buf.v(55): Range must be bounded by constant expressions.

所以我写下了以下内容:

ilb[0]= from_LS[511:496];
ilb[1]= from_LS[495:480];
ilb[2]= from_LS[479:464];
....
ilb[31]= from_LS[15:0];

但我想必须有更好的方法来做到这一点。谁能告诉我怎么样?

2 个答案:

答案 0 :(得分:2)

原始verilog不允许这种表达,因为它想要确保宽度总是正确的(它是,但在早期编译器不是很好: - )。

Verilog 2001提供了一些带+的解决方案:您可以指定宽度 例如在你的循环中from_LS[ 511-(16*i) +:16 ]

编辑:另一个解决方案是将另一个循环放入其中,逐位复制16位。

答案 1 :(得分:1)

您应该包含更多代码(至少包含灵敏度列表中包含该循环的always块)以及您获得的确切错误。

如果您将integer i更改为genvar i并在generateendgenerate中包含for,是否有效?