Ответы:
Этот синтаксис называется индексированной выборкой части . Первый член - это битовое смещение, а второй - ширина. Это позволяет вам указать переменную для смещения, но ширина должна быть постоянной.
Пример из SystemVerilog 2012 LRM:
logic [31: 0] a_vect;
logic [0 :31] b_vect;
logic [63: 0] dword;
integer sel;
a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]
dword[8*sel +: 8] // variable part-select with fixed width
Наконец, у меня есть исходная страница для этого, она называется « Выбор индекса по индексу» («+:») .
Чтобы объяснить это немного больше
PQR_AR[44*8 +: 64];
С помощью функции выбора индексированной векторной части, которая добавлена в Verilog 2000, вы можете выбрать часть шины вместо выбора всей шины.
44 * 8 часть - это начальная точка переменной выбора части, а 64 - ширина части выбора, а также константа. Это означает, что если изначально мы инициализировали
input [415:0] PQR;
мы выбираем определенную часть PQR, используя
PQR_AR[44*8 +: 64];
это PQR_AR [352+: 64] или это означает, что мы принимаем участие от 352 до 415 из 0 до 415.