Altifigence Academy

6 / 37 · Concetto

Indici dei vettori, ordine dei bit e segno

Leggere il datapath separando numerazione, ordine seriale e interpretazione aritmetica.

Gli indici sono nomi; la direzione dichiarata ne determina il significato

In logic [7:0] a;, a[7] è la posizione più a sinistra; in logic [0:7] b; lo è b[0]. Assegnando 8'h96 a entrambi, da sinistra si legge 10010110 ma gli indici differiscono. L'ipotesi «bit 0 è sempre LSBLSB Bit di peso minore. Vanno controllati insieme direzione di scrittura e convenzione degli indici.» richiede prima il controllo della direzione.

Una direzione uniforme nelle interfacce facilita la revisione. Specificate anche ordine mostrato dal visualizzatore e ordine dei bit nei file. Gli array JSON del corso partono dal LSB; i vettori RTL si leggono normalmente dal MSBMSB Bit di peso maggiore. L’indice dipende dalla direzione dichiarata: non è necessariamente il numero più alto..

Verificare la direzione tramite i collegamenti

In q <= {q[1:0], din};, q[2] riceve il vecchio q[1], q[1] il vecchio q[0] e q[0] din.

q2next=q1,q1next=q0,q0next=dq_2^{next}=q_1,\quad q_1^{next}=q_0,\quad q_0^{next}=d

Specificare quali indici ricevono quali segnali è più preciso di «verso sinistra nel disegno».

Le frecce indicano le posizioni attraversate da un bit. Tutti i registriRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci leggono i valori precedenti allo stesso fronte; din non arriva fino a q2 in un solo fronte.

Leggere il percorso di scorrimento dai numeri dei bit
  1. din: Bit accettato a questo fronte
  2. q0: Acquisire din
  3. q1: Acquisire il precedente q0
  4. q2: Acquisire il precedente q1

Scorrimento aritmetico e logico

>> scorre logicamente a destra e riempie con 0 le posizioni libere a sinistra, più significative. >>> può eseguire uno scorrimento aritmetico con estensione del segno se l'operando sinistro è signed. Gli stessi bit possono dare risultati diversi secondo la dichiarazione signed.

SystemVerilog
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;

Per x=8'b11111000 (−8) si ottengono rispettivamente 01111100 e 11111100. Lo scorrimento aritmetico destro dei negativi non coincide sempre con l'arrotondamento della divisione intera: verificatelo negli algoritmi numerici.

Prova tu

Con q=101, din=0, calcolate i prossimi valori di q<={q[1:0], din} e q<={din, q[2:1]}.

Leggi la spiegazione

Entrambe danno 010: con questo ingresso le due direzioni coincidono per caso. Con q=001, din=0 si ottengono 010 e 000, distinguendo l’errore di direzione.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.