Skip to content

Look Up Tables

1. Códigos

1.1. Función booleana

\[ f(A,B,C,D) = (\overline{A} \cdot \overline{B} \cdot D) + (B \cdot \overline{C} \cdot \overline{D}) + (\overline{A} \cdot C \cdot \overline{D}) \]
Tabla 1. Tabla de verdad de función boolena.
Decimal \(A\) \(B\) \(C\) \(D\) \(f\)
0 0 0 0 0 0
1 0 0 0 1 1
2 0 0 1 0 1
3 0 0 1 1 1
4 0 1 0 0 1
5 0 1 0 1 0
6 0 1 1 0 1
7 0 1 1 1 0
8 1 0 0 0 0
9 1 0 0 1 0
10 1 0 1 0 0
11 1 0 1 1 0
12 1 1 0 0 1
13 1 1 0 1 0
14 1 1 1 0 0
15 1 1 1 1 0

Download lut1.v

lut1.v
module lut1(
  input A,
  input B,
  input C,
  input D,
  output F
);

  assign F = (~A & ~B & D) | (B & ~C & ~D) | (~A & C & ~D);

endmodule

1.2. Diagrama esquemático

Image title

Figura 2. Diagrama esquemático de circuito combinacional.
lut2.v
module lut2(
  input A,
  input B,
  input C,
  input D,
  output F
);

  wire c1;
  wire c2;
  wire c3;

  assign c1 = ~A & ~B &  D;
  assign c2 =  B & ~C & ~D;
  assign c3 = ~A &  C & ~D;
  assign  F = c1 | c2 | c3;

endmodule

1.3. Mintérminos

También se les conoce como suma de productos o SOP (Sum Of Products).

Tabla 2. Tabla de verdad.
Decimal \(A\) \(B\) \(C\) \(D\) \(f\)
... ... ... ... ... 0
11 1 0 1 1 1
13 1 1 0 1 1
lut4.v
module lut4(
  input A,
  input B,
  input C,
  input D,
  output reg F
);

  always @(A,B,C,D) begin
    if ( ( A & ~B &  C &  D) | (A & B & ~C & D)  )
      F = 1'b1;
    else 
      F = 1'b0;
    end
  end

endmodule
lut5.v
module lut5(
  input A,
  input B,
  input C,
  input D,
  output F
);

  assign F = ( A & ~B &  C &  D) | ( A &  B & ~C &  D);

endmodule

2. Verificación

2.1. Testbench

Download lut_tb.v

lut_tb.v
`timescale 1ns / 100 ps
`include "lut1.v"

module lut_tb();
  // Definición de señales de entrada y salida
  reg A;
  reg B;
  reg C;
  reg D;
  wire F;

  // Instanciacion del modulo
  lut1 dut(.A(A), .B(B), .C(C), .D(D), .F(F));

  // Variables para archivo, iteraciones y tiempo
  integer write_data;
  integer i;
  time t;

  initial begin
    // Configuracion de archivos de salida
    write_data = $fopen("lut_tb_output.txt","w");

    // Salida de simulacion y variables de salida
    $dumpfile("lut_tb.vcd");
    $dumpvars(0,lut_tb);

    // Configuracion de formato de tiempo
    $timeformat(-9, 2, " ns", 10);

    // Simular todas las combinaciones posibles
    for (i = 0; i < 16; i = i + 1) begin
        {A,B,C,D} = i; #20; t = $time;
        $fdisplay(write_data,"Time = %t, {A,B,C,D} = %b, X = %b", t, {A,B,C,D}, F);
    end

    // Cerrar archivo de texto
    $fclose(write_data);

    // Terminar simulacion
    $display("Test completed");
    $finish;

  end

endmodule

2.2. Resultados

lut_tb_output.txt
Time =   20.00 ns, {A,B,C,D} = 0000, X = 0
Time =   40.00 ns, {A,B,C,D} = 0001, X = 1
Time =   60.00 ns, {A,B,C,D} = 0010, X = 1
Time =   80.00 ns, {A,B,C,D} = 0011, X = 1
Time =  100.00 ns, {A,B,C,D} = 0100, X = 1
Time =  120.00 ns, {A,B,C,D} = 0101, X = 0
Time =  140.00 ns, {A,B,C,D} = 0110, X = 1
Time =  160.00 ns, {A,B,C,D} = 0111, X = 0
Time =  180.00 ns, {A,B,C,D} = 1000, X = 0
Time =  200.00 ns, {A,B,C,D} = 1001, X = 0
Time =  220.00 ns, {A,B,C,D} = 1010, X = 0
Time =  240.00 ns, {A,B,C,D} = 1011, X = 0
Time =  260.00 ns, {A,B,C,D} = 1100, X = 1
Time =  280.00 ns, {A,B,C,D} = 1101, X = 0
Time =  300.00 ns, {A,B,C,D} = 1110, X = 0
Time =  320.00 ns, {A,B,C,D} = 1111, X = 0

3. Referencias


  1. Russell, “Tutorial - Boolean Algebra using Look-Up Tables (LUTs)”, Nandland, el 9 de junio de 2022. https://nandland.com/lesson-4-what-is-a-look-up-table-lut (consultado el 17 de julio de 2023). 

  2. “Quine–McCluskey algorithm”. https://www.mathematik.uni-marburg.de/~thormae/lectures/ti1/code/qmc (consultado el 17 de julio de 2023). 

  3. “Gate Level Modeling”, ChipVerify. https://www.chipverify.com/verilog/verilog-gate-level-modeling (consultado el 17 de julio de 2023).