Autor Tema: Logica programable en HDL con PLDs simples  (Leído 32651 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Logica programable en HDL con PLDs simples
« en: 14 de Marzo de 2011, 20:50:21 »
"Logica programable en HDL con PLDs simples"

Hoy en dia muchas escuelas de nivel medio y superior por todas partes del mundo continuan
introduciendo a los estudiantes al mundo de la  electronica  digital  mediante  la  forma
discreta, es decir, haciendo uso de la ya obsoleta tecnologia TTL, especificamente  de la
familia serie 74xxx. Si bien estoy  de  acuerdo  en  que, para  tener  bases  solidas  es
necesario comprender las raices del area en cuestion, estoy en total desacuerdo en que se
siga gastando, tanto tiempo como recursos, en seguir incorporando practicas complejas que
mas bien logran en muchos casos desanimar a los incursionistas  a  este  mundo. Me parece
que hoy en dia una buena practica didactica podria consistir en explorar  la  electronica
digital de forma teorica como se ha venido haciendo pero, llevando la  parte  practica al
nivel de la logica programable a traves de  los  lenguajes  de  descripcion  de  hardware,
partiendo de las familias de CI desde las de mas baja escala de integracion  como las GAL,
PAL, etc. hasta los elementos mas completos y sofisticados como son los CPLD y FPGA.

Es por esta razon que me parece pertinente compartir a traves de este foro algunas de mis
experiencias al respecto, esperando  ademas  la  valiosa  contribucion  de  los  miembros
de TODOPIC que sean gustosos de nutrirnos  con  sus  aportaciones. Cabe  aclarar  que  la
intencion es cubrir los aspectos basicos de este tema y quizas posteriormente alguien mas
se anime a profundizar con tecnologias mas sofisticadas. Espero que esto sea del  interes
de los compañeros del foro asi como tambien de quienes no visitan.

saludos...



NOTA: Todas las definiciones que se daran a continuacion han sido recopiladas casi en su
          mayoria de http://www.wikipedia.org/
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #1 en: 14 de Marzo de 2011, 20:54:18 »
Lenguaje de descripción de hardware (HDL)

Un lenguaje de descripción de hardware (HDL, Hardware Description Language) permite documentar
las interconexiones y el comportamiento de un circuito electrónico, sin utilizar diagramas
esquemáticos.

El flujo de diseño suele ser típico:

   1. Definir la tarea o tareas que tiene que hacer el circuito.
   2. Escribir el programa usando un lenguaje HDL. También existen programas de captura de
      esquemas que pueden hacer esto, pero no son útiles para diseños complicados.
   3. Comprobación de la sintaxis y simulación del programa.
   4. Programación del dispositivo y comprobación del funcionamiento.

Un rasgo común a estos lenguajes suele ser la independencia del hardware y la modularidad o
jerarquía, es decir, una vez hecho un diseño éste puede ser usado dentro de otro diseño más
complicado y con otro dispositivo compatible.

Lenguajes

    * CUPL
    * ABEL
    * VHDL
    * Verilog
    * SystemC
    * Schematic Capture
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #2 en: 14 de Marzo de 2011, 21:02:14 »
Compilador Universal para Logica Programable (CUPL)

El CUPL (Compiler Universal for Programmable Logic), es un lenguaje de descripción y simulación.
Por  medio  de  este  se  puede   describir   el   funcionamiento   de   un   circuito   lógico               
(combinacional  o  secuencial), por  medio  de  sus   ecuaciones  lógicas, por   diagramas   de
estados o tablas.
   
Después de conocer las ecuaciones lógicas que rigen un circuito, o su diagrama de
estados, este puede llevarse a CUPL, compilarse y obtenerse un archivo .jed, que permite
por medio de un programador y de un software, programar un dispositivo PLD, con la función
que requiera el usuario. Por medio del CUPL, también se pueden hacer pruebas al circuito para
comprobar que el diseño sea optimo o si es el caso, hacer las correcciones necesarias.

CUPL tiene palabras y símbolos reservados, es decir, tienen un uso restringido dentro
del programa, por ejemplo no pueden hacerse uso del nombre del programa en ninguna variable.
Para lógica combinacional se tienen símbolos especiales que representan las funciones
lógicas básicas not, and, or y xor.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #3 en: 14 de Marzo de 2011, 21:06:54 »
Lenguaje de programación para Expresiones Logicas Avanzadas (ABEL)

ABEL es el acrónimo de "Advanced Boolean Expression Language", permite implementar diseños
lógicos en dispositivos lógicos programables. Puede ser utilizado para programar cualquier
tipo de PLD y, por tanto, es un lenguaje independiente del dispositivo. El lenguaje ABEL se
ejecuta en un computador conectado a un programador de dispositivos, independiente del
lenguaje, en el que se inserta el PLD.

Un lenguaje de programación PLD está respaldado por un procesador de lenguaje PLD
denominado compilador. La tarea del compilador es traducir un archivo de texto escrito
en el lenguaje en un patrón de fusibles para el PLD físico. Aún cuando la mayoría de los
PLD pueden programarse físicamente sólo con expresiones de suma de productos, lenguajes
como ABEL permiten que las ecuaciones PLD se escriban casi en cualquier formato; el compilador
manipula algebraicamente y minimiza las ecuaciones para ajuste, si es posible, dentro de la
estructura PLD disponible.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #4 en: 14 de Marzo de 2011, 21:15:43 »
Lenguaje de Descripcion de Hardware de alta escala de integracion (VHDL)

VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo
de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware Description
Language.

Es un lenguaje definido por el IEEE (Institute of Electrical and Electronics Engineers)
(ANSI/IEEE 1076-1993) usado por ingenieros para describir circuitos digitales. Otros métodos
para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de
bloques, pero éstos no son prácticos en diseños complejos. Otros lenguajes para el mismo
propósito son Verilog y ABEL.

Aunque puede ser usado de forma general para describir cualquier circuito se usa principalmente
para programar PLD (Programable Logic Device - Dispositivo Lógico Programable),
FPGA (Field Programmable Gate Array), ASIC y similares

Dentro del VHDL hay varias formas con las que podemos diseñar el mismo circuito y es tarea del
diseñador elegir la más apropiada.

    * Funcional: Describimos la forma en que se comporta el circuito. Esta es la forma que más
                 se parece a los lenguajes de software ya que la descripción es secuencial.
                 Estas sentencias secuenciales se encuentran dentro de los llamados procesos
                 en VHDL. Los procesos son ejecutados en paralelo entre sí, y en paralelo con
                 asignaciones concurrentes de señales y con las instancias a otros componentes.

    * Flujo de datos: describe asignaciones concurrentes (en paralelo) de señales.

    * Estructural: se describe el circuito con instancias de componentes. Estas instancias
                   forman un diseño de jerarquía superior, al conectar los puertos de estas
                   instancias con las señales internas del circuito, o con puertos del circuito
                   de jerarquía superior.

    * Mixta: combinación de todas o algunas de las anteriores.

En VHDL también existen formas metódicas para el diseño de máquinas de estados, filtros
digitales, bancos de pruebas etc.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #5 en: 14 de Marzo de 2011, 21:20:56 »
Verilog

Verilog es un lenguaje de descripción de hardware (HDL, del Inglés Hardware Description
Language) usado para modelar sistemas electrónicos. El lenguaje, algunas veces llamado
Verilog HDL, soporta el diseño, prueba e implementación de circuitos analógicos, digitales
y de señal mixta a diferentes niveles de abstracción.

Los diseñadores de Verilog querían un lenguaje con una sintaxis similar a la del lenguaje
de programación C, de tal manera que le resultara familiar a los ingenieros y así fuera
rápidamente aceptada. El lenguaje tiene un preprocesador como C, y la mayoría de palabras
reservadas de control como "if", "while", etc, son similares. El mecanismo de formateo en
las rutinas de impresión y en los operadores del lenguaje (y su precedencia) son también
similares.

A diferencia del lenguaje C, Verilog usa Begin/End en lugar de llaves para definir un bloque
de código. Por otro lado la definición de constantes en Verilog requiere la longitud de bits
con su base. Verilog no tiene estructuras, apuntadores o funciones recursivas. Finalmente
el concepto de tiempo, muy importante en un HDL, no se encuentra en C.

El lenguaje difiere de los lenguajes de programación convencionales, en que la ejecución
de las sentencias no es estrictamente lineal. Un diseño en Verilog consiste de una jerarquía
de módulos. Los módulos son definidos con conjuntos de puertos de entrada, salida y
bidireccionales. Internamente un módulo contiene una lista de cables y registros. Las
sentencias concurrentes y secuenciales definen el comportamiento del módulo, describiendo
las relaciones entre los puertos, cables y registros. Las sentencias secuenciales son
colocadas dentro de un bloque begin/end y ejecutadas en orden secuencial, pero todas las
sentencias concurrentes y todos los bloques begin/end son ejecutadas en paralelo en el diseño.
Un módulo puede contener una o más instancias de otro módulo para definir un sub-comportamiento.

Un subconjunto de sentencias en el lenguaje es sintetizable. Si los módulos en un diseño
contienen sólo sentencias sintetizables, se puede usar software para convertir o sintetizar
el diseño en una lista de nodos que describe los componentes básicos y los conectores que
deben implementarse en hardware. La lista de nodos puede entonces ser transformada en una
forma describiendo las celdas estándar de un circuito integrado, por ejemplo ASIC, o una
cadena de bits para un dispositivo de lógica programable (PLD) como puede ser una FPGA o un
CPLD.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #6 en: 14 de Marzo de 2011, 21:22:32 »
SystemC

SystemC es frecuentemente descrito como un lenguaje de descripción de hardware como son VHDL
y Verilog, pero es más adecuado describirlo como un lenguaje de descripción de sistemas,
puesto que es realmente útil cuando se usa para modelar sistemas a nivel de comportamiento.

SystemC es un conjunto de librerías y macros implementadas en C++ que hacen posible una
simulación de procesos concurrentes con la sintaxis del lenguaje C++ ordinario. Así los
objetos descritos pueden comunicarse durante una simulación de tiempo real usando señales
de cualquier tipo ofrecido por C++, además algunas otras ofrecidas por las librerías de
SystemC y también otras definidas por el usuario.

La metodología de diseño es comenzar con un modelo de alto nivel escrito en C++ y aplicar
un proceso iterativo consistente en transformar el código para usar sólo los elementos que
tengan su equivalente en un lenguaje de descripción de hardware.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #7 en: 14 de Marzo de 2011, 21:45:36 »
Captura esquematica (Schematics)

La captura esquematica es un paso mas en el ciclo de diseño asistido de sistemas electronicos
(EDA), en el que el diagrama o esquema del circuito electronico es creado por un diseñador.
Esto se hace de manera interactiva con la ayuda de una herramienta de captura de esquemas
tambien conocida como editor de esquemas.

Un boceto en papel es el primer paso en el diseño de un circuito electrónico real, despues
este es ingresado en un ordenador a traves de un editor de esquemas.

A pesar de la complejidad de los componentes modernos, la captura esquematica es mas facil hoy
de lo que ha sido años atras, esto es gracias a las herramientas software tipo CAD que han
facilitado grandemente su deasrrollo.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Logica programable en HDL con PLDs simples
« Respuesta #8 en: 14 de Marzo de 2011, 23:00:17 »
Muy bueno el post lo pongo como favorito, asi de una vez por todas aprendo a programar CPLDs.

Saludos !

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #9 en: 14 de Marzo de 2011, 23:07:38 »
Les pongo los enlaces para las hojas de datos de las GAL tipicas o mas comerciales, estas son la GAL22V10, GAL20V8 y GAL16V8, vale la pena darle un vistazo, esto con el fin de conocer un poco sobre las limitaciones y funcionalidad de los chips.

gal22v10 datasheet
gal20v8 datasheet
gal16v8 datasheet

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #10 en: 14 de Marzo de 2011, 23:46:54 »
Empezaremos por programar la funcion expresada por el minitermino

F(C,B,A) = Sm(0,1,2,5,7).

Si vaciamos esta funcion en una tabla caracteristica, tendremos lo siguiente:

C B A   F
------   -
0 0 0   1
0 0 1   1
0 1 0   1
0 1 1   0
1 0 0   0
1 0 1   1
1 1 0   0
1 1 1   1

La forma canonica para esta funcion sera:

F = C'B'A' + C'B'A + C'BA' + CB'A + CBA

Para el caso especifico del winCUPL en las opciones de  compilacion  podremos  elegir
entre alguno de los metodos de minimizacion soportados por este software:

1). None
2). Quick
3). Quine-McCluskey

donde la opcion (1) es equivalente a programar la funcion como una forma canonica, la
opcion (2) es un primer paso de minimizacion usando algebra boleana y  la  opcion (3)
usa el algoritmo de Quine-McCluskey para maxima minimizacion, se trata de  un  metodo
tabular equivalente a los mapas de Karnaugh que a  diferencia  de  este  facilita  la
implementacion  del  algoritmo  en  algun  lenguaje  de  programacion. Este metodo de
minimizacion es el mas usado por los lenguajes HDL para minimizar funciones cuando se
trabaja con logica combinatoria.

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #11 en: 15 de Marzo de 2011, 00:25:57 »
Programacion del minitermino F(C,B,A) = Sm(0,1,2,5,7) en lenguaje CUPL usando la GAL22V10

Código: [Seleccionar]
Name     Fun3E ;
PartNo   00 ;
Date     14/03/2011 ;
Revision 01 ;
Designer agauss ;
Company  MECATRONICA ;
Assembly CUPL ;
Location  ;
Device   gal22v10 ;


PIN 2 = A;
PIN 3 = B;
PIN 4 = C;

PIN 23 = F;

F = (!C&!B&!A)#(!C&!B&A)#(!C&B&!A)#(C&!B&A)#(C&B&A);

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #12 en: 15 de Marzo de 2011, 00:26:57 »
Programacion del minitermino F(C,B,A) = Sm(0,1,2,5,7) en lenguaje ABEL usando la GAL22V10

Código: [Seleccionar]
MODULE Fun3E;
TITLE 'Funcion logica de 3 entradas'

DECLARATIONS;

        Fun3E DEVICE 'P22V10';
        A,B,C PIN 2,3,4;
        F     PIN 23 ISTYPE 'COM';

EQUATIONS;

   F = (!C&!B&!A)#(!C&!B&A)#(!C&B&!A)#(C&!B&A)#(C&B&A);

END Fun3E;

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #13 en: 15 de Marzo de 2011, 02:22:18 »
Programacion del minitermino F(C,B,A) = Sm(0,1,2,5,7) en lenguaje VHDL usando la GAL22V10

Código: [Seleccionar]
library ieee;
use ieee.std_logic_1164.all;

entity Fun3E is port
(
   A,B,C: in  std_logic;
   F    : out std_logic
);
end Fun3E;

architecture concurrent of Fun3E is
begin

   f <= (not C and not B and not A) or (not C and not B and A)
        or (not C and B and not A) or (C and not B and A)
        or (C and B and A);

end Fun3E;

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Logica programable en HDL con PLDs simples
« Respuesta #14 en: 15 de Marzo de 2011, 02:34:45 »
Programacion del minitermino F(C,B,A) = Sm(0,1,2,5,7) en lenguaje VERILOG usando la GAL22V10

Código: [Seleccionar]
module Fun3E
(
   input A,
   input B,
   input C,

   output F
);

   assign F = (!C&!B&!A)|(!C&!B&A)|(!C&B&!A)|(C&!B&A)|(C&B&A);

endmodule

No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"


 

anything