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.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
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.
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.
- din: Bit aceptado en este flanco
- q0: Capture din
- q1: Capture el q0 anterior
- 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.
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.