Altifigence Academy

6 / 37 · Concepto

Índices de vector, orden de bits y signo

Distinga índices, orden de transmisión serie e interpretación aritmética al leer caminos de datos.

El índice es un nombre; la declaración fija el sentido

En logic [7:0] a;, a[7] es la posición izquierda. En logic [0:7] b;, lo es b[0]. Al asignar 8'h96, ambos muestran 10010110 de izquierda a derecha, pero con índices distintos. Solo puede suponer «bit 0 es el LSBLSB Bit de menor peso. Deben comprobarse conjuntamente el sentido de la notación y las reglas de indexación.» después de comprobar la declaración.

Mantener un sentido coherente en toda la interfaz facilita las revisiones. Especifique también el orden mostrado por la herramienta de ondas y el de las matrices del archivo. El JSON del curso enumera bits desde el LSB; los vectores RTL suelen leerse desde el MSBMSB Bit de mayor peso. Su índice depende del sentido de declaración del vector; no debe suponerse que siempre tiene el número más alto..

Compruebe la dirección por las conexiones

En q <= {q[1:0], din};, el siguiente q[2] recibe el antiguo q[1], q[1] recibe el antiguo q[0] y q[0] recibe din.

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

La especificación precisa dice qué índice recibe qué señal, no hacia qué lado se dibujó la flecha.

Las flechas indican las posiciones de almacenamiento recorridas. Todos los registrosRegistro Circuito que almacena varios bits de estado. Los registros síncronos de este curso capturan la entrada especificada en el flanco de reloj. Más información leen valores anteriores en el mismo flanco; din no atraviesa hasta q2 en un solo flanco.

Lea el camino de desplazamiento mediante los índices
  1. din: Bit aceptado en este flanco
  2. q0: Capture din
  3. q1: Capture el q0 anterior
  4. q2: Capture el q1 anterior

Desplazamiento aritmético y lógico

>> desplaza lógicamente a la derecha y rellena con 0 las posiciones vacantes de la izquierda, las más significativas. >>> permite desplazamiento aritmético con extensión de signo cuando el operando izquierdo es signed. Los mismos bits pueden producir resultados distintos según esa declaración.

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

Con x=8'b11111000 (-8), los resultados son 01111100 y 11111100. El desplazamiento aritmético de negativos no siempre coincide con el redondeo de una división entera negativa: compruébelo al diseñar algoritmos numéricos.

Inténtalo tú

Para q=101 de tres bits y din=0, calcule el siguiente valor de q<={q[1:0],din} y q<={din,q[2:1]}.

Leer la explicación

Ambas dan 010: para esta entrada las direcciones coinciden por casualidad. Con q=001 y din=0, dan 010 y 000, lo que sí distingue el error de dirección.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.