Apa yang disebut operator ini sebagai "+:" di Verilog

14

Saya akan melalui test case Verilog dan menemukan pernyataan

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

Apa yang dikenal dengan operator "+:". Saya mencoba menemukan ini di google tetapi tidak mendapatkan jawaban yang relevan.

shailendra
sumber

Jawaban:

22

Sintaks itu disebut bagian-pilih yang diindeks . Istilah pertama adalah bit offset dan suku kedua adalah lebar. Ini memungkinkan Anda untuk menentukan variabel untuk offset, tetapi lebarnya harus konstan.

Contoh dari 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
dwikle
sumber
2

Terakhir saya mendapatkan halaman sumber untuk ini, ini disebut sebagai bagian Vectored Indexed Select ("+:") .

Untuk menjelaskannya sedikit lagi

PQR_AR[44*8 +: 64];

Dengan pilih bagian vektor yang diindeks, yang ditambahkan di Verilog 2000, Anda dapat memilih bagian bus daripada memilih seluruh bus.

44 * 8 bagian adalah titik awal dari bagian pilih variabel dan 64 adalah lebar bagian pilih danadalah konstan. Ini berarti bahwa jika awalnya kita telah menginisialisasi

input [415:0] PQR;

kami memilih bagian tertentu dari PQR menggunakan

PQR_AR[44*8 +: 64];

itu adalah PQR_AR [352+: 64] atau itu berarti bahwa kami mengambil bagian dari 352 hingga 415 dari 0 hingga 415.

shailendra
sumber
Dari jawaban dwikle yang berasal dari LRM, ketika kita menginisialisasi bus seperti: input [415: 0] PQR; Maka, PQR_AR [44 * 8 +: 64] harus menjadi PQR_AR [352: 288] dan bukan PQR_AR [415: 352]. Harap perbaiki saya jika saya salah arah.
ABX
@ABX Saya setuju tentang arah, kecuali harus PQR_AR [352: 289] menjadi bus selebar 64 bit
peterbc