Увеличьте переменную в Verilog для индексации провода (используя циклы) - PullRequest
0 голосов
/ 03 марта 2019

Я недавно использую Verilog, поэтому я даже не уверен, правильно ли я использую синтаксис.Мне нужно умножить 2 входные шины по 8 бит каждая.Я пытаюсь получить результат каждого 8 × 1 только в одном проводе, больше похоже на объединение 8 результатов (по одному на умножение 8 × 1).

module m8bit(
    input reg[7:0]A, 
    input reg[7:0]B);
wire [63:0] P;

genvar i,j;
integer k=0;

for(i=0; i<8; i=i+1) begin
    for(j=0; j<8; j=j+1)begin
         P[k]=(A[i])*(B[j]);
         k<=k+1;
    end
end 

Как видите, я использовал genvar i и j для итерации цифр шины, но так как мне нужно, чтобы все результаты были получены одним проводом [63:0]P, я могу '• используйте i или j (они сбрасываются при перезапуске цикла).Когда я пытаюсь скомпилировать, я получаю следующие ошибки:

** Error: (vlog-13069) mult8bit.v(21): near "[": syntax error, unexpected '['.

** Error:mult8bit.v(21): (vlog-13205) Syntax error found in the scope following 'P'.   
Is there a missing '::'?

1 Ответ

0 голосов
/ 03 марта 2019

мало вещей.

  1. когда вы говорите A[i] * B[j], каждый селектор массива выбирает один бит из ваших входов.Результаты присваиваются одному биту P[k].Я не думаю, что это то, что вы действительно хотели.Поэтому сначала поработайте над объявлениями переменных.

  2. все действия в verilog возможны только внутри блоков procedural, например, блок always, или в результате непрерывного присваивания, т.е.assign заявление.Итак, в вашем случае вам нужно использовать assign для P (потому что P - это провод ): assign P[k] = A[i]* B[j];

  3. , так как выиспользовал generate блоки с genvars для генерации операторов verilog, вы не можете использовать k таким образом.Вы не можете изменить переменную в блоке generate.Синтаксис Verilog также не позволяет вам иметь автономные назначения для genvars.Но вы можете использовать выражение в индексе, например P[i * 8 + j], что, вероятно, является самым простым способом.

Итак, вот пример, который можно скомпилировать:

module m8bit(
  input reg[7:0]A[8], 
  input reg[7:0]B[8],
  output wire [16:0] P[64]);

genvar i,j;

for(i=0; i<8; i=i+1) begin
    for(j=0; j<8; j=j+1)begin
      assign P[i * 8 + j]=(A[i])*(B[j]);
    end
end 

endmodule
...