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.
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
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.