Создание вектора проводов имеет то же значение, что и один провод - PullRequest
0 голосов
/ 05 февраля 2019

Я делаю схему, где мне нужно несколько проводов, чтобы получить значение одного входного провода.

Сейчас я назначаю их по отдельности, и это работает, мне было просто интересно, есть ли более эффективныйспособ сделать это.Мой текущий код показан ниже:

input [15:0] a;
wire [15:0] select;
assign select[0] = a[15];
assign select[1] = a[15];
assign select[2] = a[15];
assign select[3] = a[15];
assign select[4] = a[15];
assign select[5] = a[15];
assign select[6] = a[15];
assign select[7] = a[15];
assign select[8] = a[15];
assign select[9] = a[15];
assign select[10] = a[15];
assign select[11] = a[15];
assign select[12] = a[15];
assign select[13] = a[15];
assign select[14] = a[15];
assign select[15] = a[15];

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Хотя оператор повтора является лучшим и наиболее очевидным способом сделать это, вы также можете сделать это с помощью цикла for внутри комбинаторного всегда блока:

input [15:0] a;
wire [15:0] select;

always @* begin
  for (int i=0; i<16; i++) begin
    select[i] = a[15];
  end
end

Все эти три решения синтезируются до точноготот же результат.Хотя в этом случае я рекомендую оператор повтора, это решение может оказаться полезным позже, если вам потребуется выполнить более сложные назначения.

0 голосов
/ 05 февраля 2019

Используйте оператор повторения:

assign select = {16{a[15]}};

Это: {16{..}} производит повторное объединение того, что находится между внутренними фигурными скобками.
Таким образом, это: {16{a[15]}} объединяет [15] шестнадцатьраз.

...