Números con tamaño definido
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 14 de 90.
Hay una forma de declarar un número con un tamaño específico en Verilog. Se llama número con tamaño. Es útil porque evita confusiones sobre cuántos bits tiene tu número y asegura que tu hardware se comporte exactamente como se espera.
Un número con tamaño sigue este formato: [bits]'[format][value]
<strong>bits</strong>— el número de bits (por ejemplo,8)<strong>'</strong>— un apóstrofo que separa el tamaño del formato (obligatorio)
<strong>format</strong>— la base del número:bpara binario,dpara decimal,hpara hexadecimal, oopara octal<strong>value</strong>— el número real (por ejemplo,1010)
Por ejemplo:
4'b1010— 4 bits, binario 1010 (decimal 10)8'd255— 8 bits, decimal 255 (binario 11111111)16'hFF— 16 bits, hexadecimal FF (binario 0000000011111111)3'b1— 3 bits, binario 001 (los bits de la izquierda se rellenan con ceros)
Ejemplo de código:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binario 10101010
data = 8'd170; // 8 bits, decimal 170
data = 8'hAA; // 8 bits, hexadecimal AALos tres ejemplos asignan el mismo valor a data.
Por qué importa el tamaño
Sin tamaño:
reg [7:0] data;
data = 1; // ¿Qué significa esto? ¿1 bit? ¿8 bits?Verilog asume que los números pequeños son de 32 bits por defecto, lo que puede causar problemas.
Con tamaño:
reg [7:0] data;
data = 8'b00000001; // Claro: valor de 8 bits 1Relleno con ceros
Cuando asignas un valor más pequeño a un vector más grande, Verilog rellena los bits de la izquierda con ceros:
reg [7:0] data;
data = 4'b1010; // Se convierte en 8'b00001010Desafío
Completa el código escribiendo los números con el tamaño correcto.
Qué hacer:
- Establece
aa un número binario de 8 bits para el decimal 170 (binario 10101010) - Establece
ba un número binario de 4 bits para el decimal 12 (binario 1100) - Establece
ca un número hexadecimal de 16 bits para el decimal 255 (hex FF)
Hoja de referencia
Un número con tamaño en Verilog sigue el formato: [bits]'[format][value]
bits— número de bits'— separador de apóstrofe obligatorioformat—b(binario),d(decimal),h(hexadecimal),o(octal)value— el número real
reg [7:0] data;
data = 8'b10101010; // 8 bits, binario
data = 8'd170; // 8 bits, decimal
data = 8'hAA; // 8 bits, hexadecimal (los tres son iguales)Sin un tamaño, Verilog utiliza por defecto 32 bits, lo que puede causar un comportamiento inesperado. Los bits de la izquierda se rellenan con ceros cuando el valor es menor que el tamaño declarado:
reg [7:0] data;
data = 4'b1010; // Se convierte en 8'b00001010Pruébalo tú mismo
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // Binario de 8 bits para 170 (10101010)
b = ______; // Binario de 4 bits para 12 (1100)
c = ______; // Hexadecimal de 16 bits para 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", c);
$finish;
end
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
¿Qué es Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo