关于错误“范围必须由常量表达式限制”

时间:2013-01-05 12:33:46

标签: verilog

always @(numint or numfrac)
  begin
     begin : BIT_DET
     for (i=22;i>0;i=i-1)
       begin
         if (numint[i]==1'b1)
           begin

           ieeesign <= numsign ;
            ieeeexp [7:0] <=  127+i;
            ieeemant[22:0] <= { numint[i-1:0] , numfrac[22:i] } ;
            ieeeop [31:0] <=  { ieeesign, ieeeexp , ieeemant[22:0] } ;
            disable BIT_DET;
           end
     end
   end
  end
endmodule

请告诉我如何删除错误?

1 个答案:

答案 0 :(得分:4)

该错误适用于[i-1:0][22:i]。部分选择不能具有可变范围。位选择可以使用变量。 ieeemant的每个位都需要单独分配。

变化:

ieeemant[22:0] <= { numint[i-1:0] , numfrac[22:i] } ;

为:

for(j=0; j<23; j+=1) begin
    ieeemant[j] <= (i+j < 23) ? numfrac[j+i] : numint[j-i];
end