Altifigence Academy

18 / 63 · Concepto

Comparadores y especificación de los límites

Distinga comparaciones unsigned y signed de los mismos bits y verifique las condiciones límite.

La posición más alta que difiere decide el resultado

Compare dos vectores unsignedunsigned Interpretación de una secuencia de bits como entero no negativo. Con n bits, el rango es de 0 a 2^n−1; puede diferir de la interpretación signed de los mismos bits. Más información 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. Más información. En el primer bit distinto, el que tiene 1 es mayor. Definiendo ei=ai⊕bi‾e_i=\overline{a_i\oplus b_i}, en cuatro bits:

gt⁡(a,b)=a3b‾3+e3a2b‾2+e3e2a1b‾1+e3e2e1a0b‾0\operatorname{gt}(a,b)=a_3\overline b_3+e_3a_2\overline b_2+e_3e_2a_1\overline b_1+e_3e_2e_1a_0\overline b_0

gt⁡(a,b)\operatorname{gt}(a,b) es el resultado booleano de la comparación. Una posición inferior solo influye cuando coinciden todas las superiores. La igualdad es la AND de todos los eie_i.

La comparación signed interpreta primero el signo

4'b1111 y 4'b0001 son 15 y 1 en unsigned, pero -1 y 1 en signed. Con signos distintos, el negativo es menor. logic [3:0] y logic signed [3:0] almacenan lo mismo; cambia la interpretación de los operadores.

SystemVerilog
logic [3:0] a, b;
logic unsigned_lt, signed_lt;
assign unsigned_lt = a < b;
assign signed_lt = $signed(a) < $signed(b);

Este código supone anchos iguales. Si difieren, decida primero a qué ancho extender antes de aplicar un cast.

El orden entre los mismos bits puede invertirse según el contrato de signo. No aplique directamente a signed la regla unsigned de comparación desde el bit superior.

Defina la interpretación antes de comparar bits
  1. 1111 frente a 0001: Las mismas entradas de cuatro bits
  2. Sin signo: 15 es mayor que 1
  3. Con signo: −1 es menor que 1

Fije los límites en palabras

Un búfer de 16 elementos está lleno con count==16 y admite otro con count<16. Si count tiene cuatro bits, no representa 16 y falla la propia condición de lleno. Revise conjuntamente el comparador y el rango de sus operandos.

Para un umbral TT, pruebe primero T−1,T,T+1T-1,T,T+1, tratando por separado los valores fuera de rango. Diseñe pruebas que distingan deliberadamente < de <=. Comparar solo el valor posterior a un retorno modular unsigned no recupera un acarreo ya perdido.

Inténtalo tú

¿Cuántos bits necesita la ocupación de una FIFO de 0 a 16? ¿Puede una comparación por sí sola decidir si se permiten pop y push simultáneos estando llena?

Leer la explicación

Se representan 17 valores: hacen falta cinco bits. Aceptar push cuando simultáneamente se retira un elemento depende de la política de interfaz. count < 16 por sí solo puede impedir el intercambio con la FIFO llena; para permitirlo hay que considerar la aceptación real del pop.

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