Come si chiama questo operatore come "+:" in verilog


14

Sto esaminando il test case di Verilog e ho trovato una dichiarazione

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

Cosa significa "+:" operatore. Ho provato a trovarlo su Google, ma non ho ricevuto alcuna risposta pertinente.

Risposte:


22

Quella sintassi è chiamata selezione parziale indicizzata . Il primo termine è l'offset dei bit e il secondo termine è la larghezza. Consente di specificare una variabile per l'offset, ma la larghezza deve essere costante.

Esempio tratto da 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

Infine ho ottenuto la pagina di origine per questo, questo si chiama come Selezione vettoriale indicizzata ("+:") .

Per spiegarlo un po 'di più

PQR_AR[44*8 +: 64];

Con la selezione della parte vettoriale indicizzata, aggiunta in Verilog 2000, è possibile selezionare una parte del bus anziché selezionare l'intero bus.

44 * 8 parte è il punto iniziale della variabile selezione parte e 64 è la larghezza della selezione parte and è costante. Ciò significa che se inizialmente abbiamo inizializzato

input [415:0] PQR;

stiamo selezionando una parte particolare di PQR usando

PQR_AR[44*8 +: 64];

questo è PQR_AR [352+: 64] o significa che stiamo prendendo una parte da 352 a 415 da 0 a 415.


Dalla risposta dwikle derivata da LRM, quando inizializziamo un bus come: input [415: 0] PQR; Quindi, PQR_AR [44 * 8 +: 64] dovrebbe essere PQR_AR [352: 288] e non PQR_AR [415: 352]. Per favore, correggimi se sto andando nella direzione sbagliata.
ABX

@ABX Sono d'accordo sulla direzione, tranne per il fatto che PQR_AR [352: 289] dovrebbe essere un bus con larghezza a 64 bit
peterbc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.