Skip to main content

Introducción a las FPGAs libres: Probando icestudio y GTKWave

Es muy útil realizar simulaciones de los circuitos digitales que diseñamos para poder comprobar el buen funcionamiento de estos.

En primer lugar vamos a comprobar las tablas de la verdad de las diferentes puertas lógicas. A continuación, verificaremos las leyes de Morgan. Todo esto, lo realizaremos sin implementar hardware en la FPGA, únicamente realizando simulaciones con la herramienta GTKWave. DIseñaremos los circuitos de forma gráfica usando icestudio.

Procedimiento

El procedimiento a realizar será siempre el mismo para cada una de las puertas.

  1. Diseñamos el circuito correspondiente a una puerta lógica con icestudio.
    A la hora de diseñar, como no vamos a implementarlo en hardware real, las entradas y salidas las dejamos sin asignar a ningún pin. En caso de que sí quisiéramos implementarlo las podemos asignar, ya que esto no afectará a la simulación.
  2. Guardamos el diseño.
  3. Exportamos el fichero verilog en «File>Export>Verilog»
  4. Exportamos el fichero del testbench en «File>Export>Testbench».
  5. Exportamos el fichero de GTKWave en «File>Export>GTKWave».
  6. Abrimos el fichero «puerta_tb.v» con el editor de textos que más nos guste.
  7. Editamos el fichero para probar las distintas combinaciones de la tabla de la verdad.
    Las simulaciones van a ser de 100ns, por lo que usaremos 25ns para cada combinación. En el caso de la puerta not usaremos 50ns (por haber solo 2 posibilidades). El código nos quedará tal que así.

    // TODO: initialize the registers here
      // e.g. value = 1;
      // e.g. #2 value = 0;
      A = 0;
      B = 0;
      #2.5
      A = 0;
      B = 1;
      #2.5
      A = 1;
      B = 0;
      #2.5
      A = 1;
      B = 1;
      #(DURATION) $display("End of simulation");
      $finish;

    En el caso de la puerta not, el código será algo diferente.

    // TODO: initialize the registers here
      // e.g. value = 1;
      // e.g. #2 value = 0;
      A = 0;
      #5
      A = 1;
      #(DURATION) $display("End of simulation");
      $finish;
  8. Desde el terminal, en el directorio de trabajo ejecutamos «apio sim».

Puerta AND

A B out
0 0 0
0 1 0
1 0 0
1 1 1

Puerta NAND

A B out
0 0 1
0 1 1
1 0 1
1 1 0

Puerta NOR

A B out
0 0 1
0 1 0
1 0 0
1 1 0

Puerta NOT

A out
0 1
1 0

Puerta OR

A B out
0 0 0
0 1 1
1 0 1
1 1 1

Puerta XNOR

A B out
0 0 1
0 1 0
1 0 0
1 1 1

Puerta XOR

A B out
0 0 0
0 1 1
1 0 1
1 1 0

Leyes de Morgan

He decidido verificar estos circuitos ya que fueron el primer ejercicio que tuve que hacer en su día cuando empecé con la electrónica digital, una vez visto lo más básico.

«Comprobar la siguiente igualdad (teorema de De Morgan):

  • /( a + b )= /a * /b;

  • /c * /d = /(c + d)»

Vamos a generar dos salidas, de tal forma que podamos comparar los resultados visualmente. Otra forma para demostrarlo con una única salida es pasar las dos salidas por una puerta XNOR, y si nos da 1 en todos los casos, la igualdad se cumplirá. Los resultados quedan como se muestra a continuación.

Enlaces de interés

Eneko Montero

Estudiando teleco e imprimiendo en 3D. A veces hago robotillos. Cuando tengo tiempo escribo algún artículo.

Deja un comentario