Як називається цей оператор як "+:" у verilog


14

Я переглядаю тестовий випадок verilog і знайшов заяву

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

Що означає оператор "+:". Я намагався знайти це в google, але відповіді не отримав.

Відповіді:


23

Цей синтаксис називається індексованим вибором частини . Перший доданок є зміщенням біта, а другий член - шириною. Це дозволяє вказати змінну для зміщення, але ширина повинна бути постійною.

Приклад з LRM SystemVerilog 2012:

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

3

Нарешті, я отримав сторінку джерела для цього, це називається Вибір індексованої векторної частини ("+:") .

Щоб пояснити це трохи більше

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.