Я работаю с МАТРИЦЕЙ 1023 * 1023 в Verilog. Я пытаюсь сделать следующее: 1) Выберите каждую строку по одной, внесите некоторые изменения, запишите вывод обратно в соответствующую строку. Например, я сначала выбираю row0, вношу в нее изменения и записываю вывод обратно в row0. Я делаю это для всех 1023 строк. 2) Затем я выбираю каждый столбец по одному, делаю некоторые изменения, а затем записываю данные обратно.
Я могу создать двумерный массив, например reg [1022:0] my_array[1022:0]. Теперь доступ к строкам прост. Я могу написать my_array[0] для доступа к первой строке и так далее. Но как мне получить доступ к столбцам?





Лучше не думать
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, то, учитывая, что всегда будет больше работы для доступа к распакованным измерениям, вы можете рассмотреть возможность распаковки обоих измерений и использования циклов для обоих измерений. .