如何表示一长串数组?

时间:2013-07-19 13:21:30

标签: verilog system-verilog

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

    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]);

2 个答案:

答案 0 :(得分:3)

对于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

答案 1 :(得分:2)

在编辑中,'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];