1

我想用一长串变量来表示一个赋值。我怎样才能使它紧凑?我尝试了生成和网络列表,但无法弄清楚。长度可能是可变的,因此必须使用参数。

    assign ldistance = 
          distance(upin[127:120],downin[127:120])
          + .....
          + distance(upin[23:16],downin[23:16])
          + distance(upin[15:8],downin[15:8])
          + distance(upin[7:0],downin[7:0]);
4

2 回答 2

4

对于 IEEE1364-2001 或更新版本:

parameter WIDTH=128;
integer ldistance;
integer lsb;
always @* begin
    ldistance = 0;
    for(lsb=0; lsb<WIDTH; lsb=lsb+8) begin
        ldistance = ldistance + distance( upin[lsb +: 8], downin[lsb +: 8] );
    end
end
于 2013-07-19T15:40:57.580 回答
3

在一次编辑中,“gnoejh”表示他通过以下方式解决了这个问题:

genvar p;
assign ldist[0] = 0;
generate
for (p=1; p < `CHANNELS + 1; p = p + 1) begin
    assign ldist[p] = (ldist[p-1] + distance(upin[(8 * (p-1)) +: 8], 
                       downin[(8 * (p-1)) +: 8])>>2);
end 
endgenerate

assign ldistance = ldist[`CHANNELS];
于 2013-07-20T23:05:06.497 回答