Как представить длинную последовательность массивов?

Я хочу представить задание с длинным списком переменных. Как сделать его компактным? Я попытался сгенерировать и составить список, но не смог этого понять. Длина может быть переменной, поэтому необходимо использовать параметр.

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

person gnoejh    schedule 19.07.2013    source источник
comment
В Verilog блоки генерации работают не так, как в C++ или java — они используются для обеспечения контроля над созданием многих типов элементов модуля.   -  person Qiu    schedule 19.07.2013
comment
Это для тестового стенда или RTL?   -  person Veridian    schedule 19.07.2013


Ответы (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];
person Community    schedule 20.07.2013

Для 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
person Greg    schedule 19.07.2013