Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

La intención principal de los tipos de datos en Verilog es representar elementos de almacenamiento como bits en un flip-flop y elementos de transmisión como wires que conectan puertas lógicas y estructuras secuenciales.

¿Qué valores pueden tener las variables?

Casi todos los tipos de datos solo pueden tener uno de cuatro valores (excepto real y event):

0representa un cero lógico, o condición falsa
1representa un uno lógico, o condición verdadera
xrepresenta un valor lógico desconocido (puede ser 0 o 1)
zrepresenta un estado de alta impedancia

La imagen muestra cómo se representan estos valores en diagramas de tiempo y formas de onda de simulación. La mayoría de simuladores usan rojo para X y naranja en el medio para alta impedancia o Z.

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

¿Qué implica el sistema de valores de Verilog?

Como Verilog describe elementos de hardware como flip-flops y lógica combinacional (NAND, NOR), debe modelar el sistema de valores del hardware. Un uno lógico representa la tensión de alimentación Vdd (0.8V a más de 3V según nodo tecnológico). Un cero lógico representa tierra (0V).

X o x significa que el valor es desconocido en ese momento, podría ser 0 o 1. Es distinto de la lógica booleana donde X significa "no importa".

Como en cualquier circuito eléctrico incompleto, un wire no conectado tendrá alta impedancia en ese nodo, representado por Z o z. En Verilog, cualquier wire no conectado resulta en alta impedancia.

Nets y Variables

Nets y variables son los dos grupos principales de tipos de datos que representan diferentes estructuras de hardware y difieren en cómo se asignan y retienen valores.

Nets

Los Nets conectan entidades de hardware como puertas lógicas y no almacenan valor propio. En la imagen, un net llamado net_11 conecta la salida de una puerta AND a la primera entrada de un flip-flop data_0. Las dos entradas del AND se conectan a nets net_45 y net_67.

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

Hay diferentes tipos de nets, pero el más popular y usado en diseños digitales es wire. Un wire conecta elementos y nets impulsados por una sola puerta o asignación continua. Es similar al cable eléctrico que conecta dos componentes en una protoboard.

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

Cuando se requieren múltiples nets, pueden agruparse en un solo wire. En la imagen, un wire de 4 bits puede enviar 4 valores separados. Entidades con ancho > 1 se llaman vectores (ver siguiente artículo).

wire [3:0] n0; // wire de 4 bits -> esto es un vector

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

Es ilegal redeclarar un nombre ya declarado por net, parámetro o variable:

module design;
wire abc;
wire a;
wire b;
wire c;
wire abc; // Error: Identificador "abc" declarado previamente
assign abc = a & b | c;
endmodule

Variables

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

Una variable abstrae un elemento de almacenamiento y puede retener valores. Un flip-flop es buen ejemplo.

El tipo reg de Verilog modela registros de hardware ya que retiene valores entre asignaciones. Nota que un reg no siempre representa un flip-flop; también puede representar lógica combinacional.

Tipos de datos en Verilog: Bits, wires y valores lógicos explicados

Otros tipos de datos

integer

Un integer es variable de propósito general de 32 bits para modelar hardware y almacenar valores enteros.

integer count; // Count es valor entero > 0

time

Una variable time es sin signo, 64 bits, para almacenar cantidades de tiempo de simulación para depuración. realtime almacena tiempo como punto flotante.

time end_time;     // end_time = 50ns
realtime rtime;    // rtime = 40.25ps

real

Una variable real almacena valores de punto flotante y se asigna igual que integer y reg.

real float; // float = 12.344

Ejemplo

module testbench;
integer int_a;
real real_b;
time time_c;
initial begin
    int_a = 32'hcafe_1234;
    real_b = 0.1234567;
    #20;
    time_c = $time;
    $display ("int_a = 0x%0h", int_a);
    $display ("real_b = %0.5f", real_b);
    $display ("time_c = %0t", time_c);
end
endmodule

Salida de simulación:

ncsim> run
int_a = 0xcafe1234
real_b = 0.12346
time_c = 20
ncsim: *W,RNQUIE: Simulation is complete.

Strings en Verilog

Los strings se almacenan en reg, y el ancho del reg debe ser suficiente para guardar el string. Cada carácter representa un valor ASCII y requiere 1 byte. Si el tamaño de la variable es menor que el string, Verilog trunca los bits más significativos. Si es mayor, añade ceros a la izquierda.

// "Hello World" requiere 11 bytes
reg [8*11:1] str = "Hello World"; // Variable guarda 11 bytes, str = "Hello World"
reg [8*5:1] str = "Hello World";  // Solo 5 bytes (resto truncado), str = "World"
reg [8*20:1] str = "Hello World"; // 20 bytes (resto padded con ceros), str = " Hello World"

Ejemplo completo simulando las tres variables:

module testbench;
reg [8*11:1] str1;
reg [8*5:1] str2;
reg [8*20:1] str3;
initial begin
    str1 = "Hello World";
    str2 = "Hello World";
    str3 = "Hello World";
    $display ("str1 = %s", str1);
    $display ("str2 = %s", str2);
    $display ("str3 = %s", str3);
end
endmodule

Salida:

ncsim> run
str1 = Hello World
str2 = World
str3 = Hello World
ncsim: *W,RNQUIE: Simulation is complete.

Nota: str1 tiene tamaño correcto y se imprime completo. str2 solo 5 bytes, trunca 6 bytes superiores quedando "World". str3 es mayor a 11 bytes y añade espacios a la izquierda.

Verilog

  1. 5 Modelos de Centros de Datos Explicados: Diseño, Casos de Uso y Ejemplos
  2. Ocho Modelos Clave de Computación en la Nube en 2021
  3. 8 Tipos Comunes de Violación de Datos: Ejemplos Reales e Impacto
  4. Domine variables y tipos de datos primitivos en C#: Guía completa
  5. Entendiendo los Tipos de Datos en C++: Fundamentos, Modificadores y Mejores Prácticas
  6. Tipos de datos en C explicados: int, float, char y más – guía completa
  7. Entendiendo los tipos de datos en C: Guía completa
  8. Dominar Verilog: Tutorial completo para diseño de circuitos digitales
  9. Dominar la concatenación en Verilog: Guía práctica
  10. Dominando tipos de datos en Python: Guía práctica
  11. Tipos de Datos Primitivos en Java: Guía Completa con Ejemplos