2013-07-19 3 views
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]); 
+0

В Verilog генерировать блоки не работают так же, как в C++ или java, - они используются для обеспечения контроля над созданием множества типов элементов модуля. – Qiu

+0

Это для testbench или RTL? – Veridian

ответ

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]; 
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 
Смежные вопросы