Bu operatöre verilog'da “+:” denir


14

Verilog test senaryosundan geçiyorum ve bir ifade buldum

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

"+:" Operatörü olarak bilinir. Bunu Google'da bulmaya çalıştım, ancak alakalı bir cevap alamadım.

Yanıtlar:


23

Bu sözdizimine dizinli parça seçimi denir . İlk terim bit uzaklığı ve ikinci terim genişliktir. Ofset için bir değişken belirlemenize izin verir, ancak genişlik sabit olmalıdır.

SystemVerilog 2012 LRM'den örnek:

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

Son olarak bunun için kaynak sayfayı aldım, buna Dizinlenmiş Vektör bölüm Seçimi ("+:") denir .

Biraz daha açıklamak gerekirse

PQR_AR[44*8 +: 64];

Verilog 2000'e eklenen Dizinlenmiş vektör parça seçimi ile, veri yolunun tamamını seçmek yerine veri yolunun bir bölümünü seçebilirsiniz.

44 * 8 parça, parça seçme değişkeninin başlangıç ​​noktasıdır ve 64, parça seçimi ve sabittir. Sabittir.

input [415:0] PQR;

kullanarak PQR'nin belirli bir bölümünü seçiyoruz

PQR_AR[44*8 +: 64];

yani PQR_AR [352+: 64] veya 35 ila 415 arasında 0 ila 415 arasında yer aldığımız anlamına gelir.


LRM'den türetilen dwikle cevabından, şöyle bir veri yolu başlattığımızda: input [415: 0] PQR; Daha sonra PQR_AR [44 * 8 +: 64] PQR_AR [415: 352] değil PQR_AR [352: 288] olmalıdır. Yanlış yöne gidersem lütfen düzeltin.
ABX

@ABX Yönü kabul ediyorum, ancak 64 bit genişliğinde bir otobüs olması gereken PQR_AR [352: 289] olmalı
peterbc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.