2015-10-09 1 views
0

У меня есть такой код:Verilog - Почему я не могу объявить несколько vars в инструкции for?

generate 
genvar i, j, k; 
for (i = 0, j = 8, k = 0; i < 4; i = i + 1, j = j + 8, k = k + 8) 
    Register Register_inst (.d(w_data), .en(decoder_out[i]), .clk(clk), .q(trunc_32_to_n_bits(reg_out, j-1, k))); 
endgenerate 

Можно ли иметь несколько ВАР в А для, как и на других языках?

ответ

1

Есть два типа для петель в Verilog, процедурные для-петли (внутри блока initial или always) и генерировать для-петли (за пределами блока initial и always). Оба они ограничены простым назначением переменных.

Обычно вам не нужно несколько переменных, управляемых циклом for. В большинстве случаев другие значения могут быть получены из одного индекса. You код не нужны три переменные, как все может быть определена из i:

generate 
genvar i; 
for (i = 0; i < 4; i = i + 1) 
    Register Register_inst (.d(w_data), .en(decoder_out[i]), .clk(clk), .q(reg_out[i*8 +: 8)); 
endgenerate 

Более подробную информацию о +: массиве нарезка operatior, обратитесь к ранее отвеченных вопросов:
Indexing vectors and arrays with +: и What is `+:` and `-:`?

Примечание: SystemVerilog опоры множественные назначения переменных с процедурными для-петель. Существует еще одно ограничение назначения переменных для генерации for-loops в соответствии с IEEE Std 1800-2012.