Números con tamaño
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 14 de 90.
Existe una forma de declarar un número con un tamaño específico en Verilog. Se llama número dimensionado. Es útil porque evita confusiones sobre cuántos bits tiene tu número y garantiza que tu hardware se comporte exactamente como esperas.
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 uopara 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, binary 10101010
data = 8'd170; // 8 bits, decimal 170
data = 8'hAA; // 8 bits, hex AAAll 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 supone que los números pequeños tienen 32 bits de forma predeterminada, lo que puede causar problemas.
Con tamaño:
reg [7:0] data;
data = 8'b00000001; // Clear: 8-bit value 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; // Becomes 8'b00001010Desafío
Completa el código escribiendo los números del tamaño correcto.
Qué hacer:
- Establece
acomo un número binario de 8 bits para el decimal 170 (binario 10101010) - Establece
bcomo un número binario de 4 bits para el decimal 12 (binario 1100) - Establece
ccomo un número hexadecimal de 16 bits para el decimal 255 (hexadecimal FF)
Prué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 VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: 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 condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online