Что этот оператор называется «+:» в Verilog


14

Я прохожу тестовый случай Verilog и нашел заявление

assign XYZ = PQR_AR[44*8 +: 64];

Что означает оператор "+:" Я пытался найти это в Google, но не получил никакого соответствующего ответа.

Ответы:


22

Этот синтаксис называется индексированной выборкой части . Первый член - это битовое смещение, а второй - ширина. Это позволяет вам указать переменную для смещения, но ширина должна быть постоянной.

Пример из 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

2

Наконец, у меня есть исходная страница для этого, она называется « Выбор индекса по индексу» («+:») .

Чтобы объяснить это немного больше

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.


Из ответа dwikle, полученного из LRM, когда мы инициализируем шину, такую ​​как: input [415: 0] PQR; Тогда PQR_AR [44 * 8 +: 64] должен быть PQR_AR [352: 288], а не PQR_AR [415: 352]. Пожалуйста, поправьте меня, если я иду в неправильном направлении.
ABX

@ABX Я согласен с направлением, за исключением того, что PQR_AR [352: 289] должен быть шиной шириной 64 бита
peterbc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.