Altifigence Academy

5 / 37 · Concepto

logic, wire, X/Z y anchuras explícitas

Distingue declaración y almacenamiento; verifica literales, comparaciones, extensiones y desconocidos.

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.

SystemVerilog
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;
endmodule

extended_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.

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