5 / 37 · Concepto
logic, wire, X/Z y anchuras explícitas
Distingue declaración y almacenamiento; verifica literales, comparaciones, extensiones y desconocidos.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Tipo, controlador y almacenamiento son preguntas distintas
logic es un tipo de cuatro estados; wire describe una conexión de red, que también puede transportar cuatro estados. Una variable logic puede representar resultado combinacional o estado con reloj según las reglas de controladores. Ningún nombre garantiza un flip-flop: localiza asignación continua, procedimiento combinacional o de flanco. Usa un controlador previsto por señal RTL ordinaria. Redes resueltas y bidireccionales requieren otro contrato eléctrico y de herramientas y quedan fuera de estos ejemplos.
Especifica anchura e interpretación
logic [7:0] u son ocho bits sin signo; logic signed [7:0] s interpreta los mismos bits en complemento a dos. 8'hFF es 255 para u y −1 para s. Un vector packed transfiere bits juntos, no una secuencia temporal de ocho valores.
module typed_examples (
input logic [3:0] a, b,
input logic signed [7:0] s,
output logic [4:0] full_sum,
output logic signed [8:0] extended_s,
output logic negative,
output logic any_bit, all_bits, parity
);
assign full_sum = {1'b0, a} + {1'b0, b};
assign extended_s = {s[7], s};
assign negative = s < 8'sd0;
assign any_bit = |a;
assign all_bits = &a;
assign parity = ^a;
endmoduleextended_s repite el bit de signo. Añadir solo cero convertiría −1 en +255. La concatenación es una expresión sin signo: para aritmética con signo, interpreta explícitamente o declara un intermedio adecuado. Aquí se asigna el patrón deseado al destino con signo. Usa 4'd15,8'hFF,8'sd0 cuando importe la anchura. Un entero sin tamaño puede ampliar la expresión; revisa ambos operandos y el contexto, no solo el izquierdo.
Distingue tres familias de operadores
a & b combina bits; a && b comprueba si ambos vectores son lógicamente verdaderos y devuelve un bit; &a reduce y exige todos los bits a 1. Para a=0011, b=0101 dan 0001,1,0. ^a calcula paridad, que vale 0 para 0011. Separa expresiones confusas en señales intermedias para especificar rangos.
Desconocido no es un tercer voltaje físico
X modela desconocido y Z alta impedancia; no son voltajes exactos. Una ejecución de dos estados no demuestra comportamiento de cuatro estados. Reinicia explícitamente el DUT en lugar de ocultar X como cero. == puede dar X; actual !== expected detecta claramente X/Z frente a expectativas conocidas en el banco de pruebas. Case equality no implica que hardware corriente pueda detectar X físico.
Práctica: extender, sumar y comparar
a=15, b=1 da full_sum=10000. s=8'h80 da extended_s=110000000, negative=1; s=8'h7F da 001111111, negative=0. Comprueba cero, máximo positivo, mínimo negativo y −1. Cambia a {1'b0, s} y confirma fallos negativos. Cambia !== por != e inyecta X en actual: comprueba si la condición informa el fallo; una condición desconocida puede omitirlo.