6 / 37 · Concetto
Indici dei vettori, ordine dei bit e segno
Leggere il datapath separando numerazione, ordine seriale e interpretazione aritmetica.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
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.
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.
- din: Bit accettato a questo fronte
- q0: Acquisire din
- q1: Acquisire il precedente q0
- 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.
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.