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.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
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 , en cuatro bits:
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 .
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.
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.
- 1111 frente a 0001: Las mismas entradas de cuatro bits
- Sin signo: 15 es mayor que 1
- 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 , pruebe primero , 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.