pub:dglab_tkgate

TkGate es un editor y simulador de circuitos digitales cuya interfaz se basa en Tcl/Tk. Incluye una serie de dispositivos digitales integrados como memorias, puertas lógicas, y módulos disponibles para ser editados en forma de esquemático o mediante Verilog como lenguaje de descripción de hardware.

El diseño de circuitos digitales se divide en módulos compuestos de puertas lógicas y elementos digitales simples para desarrollar la función deseada.

Al igual que en la mayoría de programas dedicados al diseño digital, un módulo definido en Verilog o mediante edición de esquemáticos pueden crearse múltiples instancias en el mismo documento.

A continuación se muestra la pantalla de bienvenida de TkGate:

Ejemplo de uso

Diseño y edición de módulos

El programa se inicia con un archivo de ejemplo en el que se muestran los circuitos básicos digitales que se pueden utilizar en simulación y en diseño. Creemos nuestro propio diseño en:

File -> New

Damos un nombre y una ruta a nuestro nuevo documento, y lo guardamos con extensión .v. A pesar de tener una extensión .v, el programa se sirve de una serie de comentarios para ubicar cada línea de conexión entre módulos y la posición de los mismos, y por tanto sigue por completo el estándar IEEE Std 1364.

Ahora vamos a crear un nuevo módulo Verilog, para ello vamos a la barra de herramientas y hacemos clic en:

Module -> New

Nos debe aparecer la siguiente ventana:

Tomamos los datos tal y como se muestran en la imagen y le damos a continuar. Se debe haber creado el módulo Contador, que se puede encontrar en el visor de módulos a la izquierda de la ventana principal en la sección unused. Procedemos a arrastrar el módulo hasta el área de trabajo, y observamos que se crea un cuadrado con el nombre Contador en el centro del mismo. Para poder utilizar el módulo contador es necesario establecer los puertos de entrada y salida. Para el caso de un contador básico, tendremos una señal de reloj, una señal de reset y una señal de activación como señales de entrada. La señal de salida corresponderá a la cuenta del propio contador. Para que el módulo muestre las señales de entrada y salida es necesario editar y actualizar su interfaz. Para ello, seleccionamos la etiqueta Interface que cambia el área de trabajo. Se puede observar en la siguiente imagen. Una vez hemos seleccionado la pestaña interface, hacemos doble clic sobre el módulo Contador, cuya interfaz queremos editar. Nos aparecerá una ventana en el área de trabajo en la que se pueden editar los puertos de entrada y salida del módulo. Edita los puertos hasta dejarlos tal y como se muestra en la siguiente figura. Una vez editado, debemos hacer clic sobre el botón Synchronize All, que se encargará de propagar la interfaz que acabamos de desarrollar al resto de módulos presentes en el diseño. De ahora en adelante, cada vez que se instancia el módulo Contador, la interfaz aparecerá configurada y lista para hacer las conexiones pertinentes del módulo. Hasta ahora, hemos creado un nuevo módulo Contador y configurado los puertos de entrada y salida del mismo. Sin embargo, el módulo no realiza todavía ninguna acción puesto que no se ha realizado aún una descripción del circuito lógico que contiene el mismo. Para ello, debemos volver a la pestaña edit, hacer click derecho sobre el módulo contador, y seleccionar open. Nos aparece una ventana con texto plano que contiene el siguiente código:

module Contador;
 
endmodule

Vamos a añadir la descripción Verilog del contador al módulo. El código del contador de 4 bits se muestra a continuación:

contador.v
module Contador(clk, reset, enable, count);
 
  // Definición de entradas y salidas
  input clk, reset, enable;
  output [3:0] count;
 
  // Declaración de count como variable tipo reg
  reg [3:0] count;
 
  //Asignación de la logica secuencial de conteo
  always@(posedge clk or posedge reset)
    if (reset)
      count <= 0;
    else if (enable)
      count <= count + 1;
 
endmodule

Una vez introducida la descripción hardware en el módulo, podemos proceder a añadir elementos de interfaz para testar el módulo que acabamos de desarrollar. Volvemos al main haciendo click sobre la vista tipo árbol a la izquierda de la ventana. Por último, para añadir los componentes seleccionamos el menú Components y dentro del mismo el menú I/O. De este menú añadiremos tres elementos de tipo Switch y un elemento de tipo LED Bar. Conectaremos los switches a las entradas del módulo. Sin embargo, la barra de led's tiene un ancho de bus de 8 bits. Para cambiarlo, simplemente hacemos doble clic sobre el bus de la barra de leds y cambiamos el parámetro Bit Width a cuatro. Una vez hecho esto, se pueden conectar los elementos arrastrando el cable al puerto correspondiente. El diseño final se puede observar en la siguiente imagen.

Simulación del diseño

Para simular el diseño, cambiamos a la pestaña de simulación y hacemos clic sobre:

Simulation -> Run

Una vez la simulación está corriendo, Podemos hacer clic sobre cada uno de los interruptores (Switches) y comprobar el correcto funcionamiento del módulo, tras proporcionarle un reset correctamente, puesto que antes del reset, las señales de salida se muestran en amarillo, que significa que están indeterminadas, puesto que no se ha establecido aún una condición inicial.

Un ejemplo con el módulo corriendo la simulación se muestra en la siguiente imagen.

  • pub/dglab_tkgate.txt
  • Última modificación: 2020/09/28 11:44
  • (editor externo)