Управление столбцами в 2-D массиве в verilog - PullRequest
2 голосов
/ 21 марта 2019

Я работаю с 1023 * 1023 MATRIX в Verilog. Я пытаюсь сделать следующее: 1) Выберите каждую строку по одному, сделайте некоторые изменения, запишите результат обратно в соответствующую строку. Например, я сначала выбираю row0, вносю в него изменения и записываю вывод обратно в row0. Я делаю это для всех 1023 строк. 2) Затем я выбираю каждый столбец по одному, делаю некоторые изменения и затем записываю данные обратно.

Я могу создать двумерный массив, например, reg [1022: 0] my_array [1022: 0]. Теперь доступ к строкам прост. Я могу написать my_array [0] для доступа к первой строке и так далее. Но как мне получить доступ к столбцам?

1 Ответ

3 голосов
/ 21 марта 2019

Лучше не думать о

reg [1022:0] my_array[1022:0];

как о массиве 1023 на 1023;лучше всего думать о нем как о массиве из 1023 1023-битных чисел.Это истинный массив 1023 на 1023:

reg my_array[1022:0][1022:0];

SystemVerilog обобщает массивы и вводит новую терминологию, которая полезна при разговоре о Verilog.(В любом случае, Verilog - это только неофициальное подмножество SystemVerilog.) В SystemVerilog вы объявляете массивы следующим образом

<type> <packed dimensions> <name> <unpacked dimensions>

Итак, эквивалент вашего исходного объявления будет

logic [1022:0] my_array [1022:0];

первый [1022:0] - это упакованный размер , а второй [1022:0] - неупакованный размер .В SystemVerilog вы можете иметь столько упакованных измерений, сколько вам нужно, и столько распакованных размеров, сколько хотите.В Verilog вы можете иметь столько распакованных размеров, сколько вам нужно, но вы можете иметь только одно распакованное измерение .

Правила доступа к упакованным измерениям отличаются от правил доступа к неупакованным измерениям.В принципе, правила доступа к неупакованным размерам гораздо более строгие.(Вот почему вы чувствуете разницу в поведении между строками и столбцами.) По сути, для неупакованных измерений вы можете либо

  • получить доступ к одному элементу, либо
  • получить доступ ко всему массиву водин раз.

Вот и все.Поэтому, когда вы имеете дело с неупакованным измерением, вам придется использовать какой-то цикл, чтобы делать то, что вы хотите.И, если вы действительно работаете с массивом 1023 на 1023 однобитных числа, то, учитывая, что всегда будет больше работы для доступа к распакованным измерениям, вы можете рассмотреть возможность распаковки обоих измерений и использования циклов для обоих измерений..

...