sábado, 1 de marzo de 2008

AUTOMATIZACION DE REACTOR QUIMICO EMPLEANDO VERILOG QUARTUS II (CONTINUACION)

Verilog es un lenguaje de descripción de hardware (HDL, del Inglés Hardware Description Language) que se empleará para automatizar el Reactor Químico presentado en el blog Automatización del Reactor Químico.

Pasos de funcionamiento:

a. Al pulsar el pulsador de arranque se introduce el reactivo alcalino.b. Al alcanzar el nivel H2 se cierra la válvula de reactivo alcalino y se comienza a verter el reactivo ácido hasta llegar al nivel H3. Mientras se introduce los componentes de la mezcla, la válvula de escape permanece abierta.c. Una vez alcanzado el nivel H3 se cierra la válvula de escape y comienza el proceso de calentamiento de la mezcla y el agitador comienza el proceso de movimiento.d. Cuando el sensor de temperatura (T) alcanza los 100°C se interrumpe el proceso de calentamiento y agitación y se abre la válvula de escape y salida normal.e. Cuando el nivel en el tanque baja por debajo de H1 se cierra la válvula de salida normal y se detiene el proceso.f. Si en algún momento se activa el sensor de máxima presión (P), se abre la válvula de escape, se para el proceso de calentamiento y agitación, se vacía el deposito a través de la válvula de salida defectuosa hasta que el nivel baja por debajo de H1 y el sistema se va a situación de parado.g. Una vez terminado el proceso bien sea de vaciado normal o máxima presión, es necesario dar un nuevo Start para reinicial el proceso.
El diagrama de flujo y la tabla de la verdad que describe el funcionamiento del sistema ya fue presentado en la parte 1 de este blog donde se desarrollo la automatizacion el leguaje simbolico.
Para el desarrollo de la programacion tambien es necesario conocer el funcionamiento basico del verilog el cual tambien fue presentado en este blog.

A continuación se muestra la programación en verilog que permite la automatización del sistema.

Como se puede observar lo primero que se estable es el módulo principal del programa llamado reactor2.

module reactor2(ral,rac,ve,c_a,vsn,vsd,t,p,s1,h1,h2,h3,r,clk);


output ral,rac,ve,c_a,vsn,vsd; Se definen las salidas del sistema


input s1,h1,h2,h3,r,t,p,clk;Se definen las entradas del sistema, h1 a h3 son los nivel del tanque, t es la temperatura y p la presión máxima del tanque


wire n1,n2,n3,n4,n5,n6,n7;Se definen las conexiones internas
wire r_g,s_g,qb,qa,r_g1,s_g1,r_g2,s_g2,ta,tb,ta1,pa,pa1,pb; Se definen las conexiones internas

//valvula reactivo alcalino; lógica que permite controlar cuando la válvula de reáctivo alcalino se activará (ral)
and(n2,h1,h2);
not(n1,n2);
not(n3,h3);
and(ral,n1,n3,qa);

//rs flip flop start; lógica que permite construir un flip-flop a partir de compuertas or y and para generar la señal de control start (qb)
and(r_g,r,clk);
and(s_g,s1,clk);
nor(qa,r_g,qb);
nor(qb,s_g,qa);

//válvula reactivo acido; lógica que permite controlar cuando la válvula de reactivo ácido se activará (rac)
and(rac,qa,n2,n3);

//válvula de escape; lógica que permite controlar cuando la válvula de escape se activará (ve)
and(n4,h1,h2,h3);
not(n5,n4);
and(n6,qa,n5);
or(ve,n6,pa,ta);

//flip flop temperatura, lógica que permite controlar el sistema cuando la señal de temperatura t se activa

and(r_g1,r,clk);
and(s_g1,t,clk);
nor(ta,r_g1,tb);
nor(tb,s_g1,ta);

//flip flop presion; lógica que permite controlar el sistema cuando la señal de presión p se activa
and(r_g2,r,clk);
and(s_g2,p,clk);
nor(pa,r_g2,pb);
nor(pb,s_g2,pa);

//calentamiento/agitador; lógica que permite controlar cuando el calentador-agitador (c_a) se activará
not(ta1,ta);
and(c_a,qa,ta1,n4);

//valvula salida normal; lógica que permite controlar cuando la válvula de salida normal (vsn) se activará

not(n8,pa);
or(n7,h1,h2,h3);
and(vsn,ta,n7,n8);

//valvula defectuosa; lógica que permite controlar cuando la válvula defectuosa (vsd) se activará
and(vsd,n7,pa);

endmodule; fin de la lógica de control

Luego de haber compilado y simulado el programa las respuesta obtenida es la esperada, como se puede observar a continuacion:


Al activar el boton de start (s) se abre la válvula de reactivo alcalino (ral) hasta alcanzar el nivel h2, en ese momento es cerrada esta válvula y abierta la válvula de reáctivo ácido (rac). Cuando es alcanzado el nivel h3 se cierra la válvula (rac), la válvula de escape (ve) y activado el calentador-agitador (c_a). Esta condición ocurre hasta que la temperatura t alcanza 100ºC, en ese momento es abierta la válvula (ve), apagado el (c_a) y abierta la válvula de salida normal (vsn). Si por alguna razón es alcanzada la presión máxima p el sistema abre la válvula (ve) y abre la válvula de salida defectuosa (vsd).


Conclusiones
Como se puede concluir indistintamente del lenguaje empleado para la programacion del control de un sistema, el resultado debe ser el mismo, obteniendo la mismas respuestas deseas .
El lenguaje verilog puede ser de mucha utilidad para desarrollos complejo porque permite una programacion sencilla con menor tiempo de ejecucion si se compara con el leguaje simbolico del Quartus II.
El simulador permite verificar de manera mas precisa el funcionamiento de la lógica programa y corregir y depurar los errores que existan en la misma.
Con el desarrollo de una lógica en Quartus II, ya sea empleando lenguaje simbolico o verilog, para ser implementada en un dispositivo com un PDL o FPGA se logra simplificar de manera significativa los espacios en hardware que ocuparían éstas lógicas si se desarrollaran con circuito convencionales. Por otra parte, se logran reducir los tiempos de ejecución y respuesta del sistema.

Con estas herramiente y un hardware adecuado se pueden desarrollar una gama muy amplia de equipos electrónicos para cualquier aplicación posibles disminuyendo los costos y tiempos de desarrollo.


sábado, 23 de febrero de 2008

AUTOMATIZACION DE REACTOR QUIMICO

Se quiere automatizar el reactor químico de la siguiente figura.
Pasos de funcionamiento:

a. Al pulsar el pulsador de arranque se introduce el reactivo alcalino.
b. Al alcanzar el nivel H2 se cierra la válvula de reactivo alcalino y se comienza a verter el reactivo ácido hasta llegar al nivel H3. Mientras se introduce los componentes de la mezcla, la válvula de escape permanece abierta.
c. Una vez alcanzado el nivel H3 se cierra la válvula de escape y comienza el proceso de calentamiento de la mezcla y el agitador comienza el proceso de movimiento.
d. Cuando el sensor de temperatura (T) alcanza los 100°C se interrumpe el proceso de calentamiento y agitación y se abre la válvula de escape y salida normal.
e. Cuando el nivel en el tanque baja por debajo de H1 se cierra la válvula de salida normal y se detiene el proceso.
f. Si en algún momento se activa el sensor de máxima presión (P), se abre la válvula de escape, se para el proceso de calentamiento y agitación, se vacía el deposito a través de la válvula de salida defectuosa hasta que el nivel baja por debajo de H1 y el sistema se va a situación de parado.
g. Una vez terminado el proceso bien sea de vaciado normal o máxima presión, es necesario dar un nuevo Start para reinicial el proceso.

Representando el funcionamiento en un diagrama de flujo nos queda:



A partir de la secuencia de funcionamiento desarrollamos la tabla de la verdad para el sistema:


TABLA DE LA VERDAD



De manera mas detallada tenemos:


A partir de la tabla de la verdad se deducen las ecuaciones que rigen el sistema y se implementan en el software Quartus II.
AUTOMATIZACION DE REACTOR QUIMICO EMPLEANDO DIAGRAMA FUNCIONES DEL SOFTWARE QUARTUS II

El software de desarrollo Quartus® II provee un ambiente del diseño completo para diseños SOPC (“system-on-a-programmable-chip”: sistema sobre un dispositivo programable). Quartus II garantiza la implementación de diseños en dispositivos ACEX® 1K, APEX™ 20K, ÁPICE 20KC, ÁPICE 20KE, APEX™ II, Excalibur™ ARM®, Cyclone™, FLEX® 6000, ENCORVAN 10K®, ENCORVE 10KA, ENCORVE 10KE, Impresión Stratix™, MAX® 3000A, MAX®7000AE, MAX®7000B, MAX®7000S, Mercury™ y Stratix™. Quartus II posee diversas herramientas que le dan soporte ante los diversos estilos de trabajo. Cuenta con un editor de texto que permite realizar diseños en cualquiera de los lenguajes AHDL, VHDL y Verilog HDL. También cuenta con un editor en entorno gráfico que permite construir diagramas de bloque a partir de diseños HDL (“Hardware Description Language”: lenguaje de descripción de hardware), adicionalmente cuenta con bibliotecas de funciones en el entorno gráfico que previenen la construcción de bloques de funcionamiento básico como compuertas lógicas, multiplexores, decodificadores, etc




Luego de compilar y sintetizar el programa procedemos a su simulación, verificando que los resultados obtenidos sean los esperados:



Ahora procedemos a implementar nuestro sistema empleando el Altera PLD Embebido modelo Flex EPF10K70RC240-4, que pertenece a la familia FLEX 10K con lógica programable. La familia FLEX 10K esta en los rangos de 10.000-250.000 compuertas típicas y expandible a procesos de tres generaciones. Cada uno de estos sobrepasa las generaciones pasadas brindando un alto desarrollo, bajo costo y bajo consumo de potencia y con una velocidad del sistema por encima de 240 MHz. Los dispositivos FLEX 10K son específicamente diseñados para acoger la demanda de encontrar dispositivos de mediana densidad para el diseño de compuertas de acarreo. La familia FLEX 10K fue la primera familia de PLD´s para implementar diseños que integran un sistema completo, sobre un dispositivo. A continuación se muestran algunas características del dispositivo:



Empleando el software Quartus II se logra el siguiente diseño para el dispositivo.

Como se puede ver es posible implementar todo la lógica de control de un sistema simple o complejo en un solo dispositivo sin mayores costos de hardware que el emplear un PLD o FPGA.









viernes, 8 de febrero de 2008

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.

Historia
Verilog fue inventado por Phil Moorby en 1985 mientras trabajaba en Automated Integrated Design Systems, más tarde renombrada Gateway Design Automation. El objetivo de Verilog era ser un lenguaje de modelado de hardware. Gateway Design Automation fue comprada por Cadence Design Systems en 1990. Cadence ahora tiene todos los derechos sobre los simuladores lógicos de Verilog y Verilog-XL hechos por Gateway.

Estándar abierto
Con el incremento en el éxito de VHDL, Cadence decidió hacer el lenguaje abierto y disponible para estandarización. Cadence transfirió Verilog al dominio público a través de Open Verilog International, actualmente conocida como Accellera. Verilog fue después enviado a la IEEE que lo convirtió en el estándar IEEE 1364-1995, habitualmente referido como Verilog 95.

Verilog 2001
Extensiones a Verilog 95 fueron enviadas a la IEEE para cubrir las deficiencias que los usuarios habían encontrado en el estándar original de Verilog. Estas extensiones se volvieron el estándar IEEE 1364-2001 conocido como Verilog 2001.

Superlog/System Verilog
El advenimiento de los lenguajes de verificación de alto nivel como OpenVera y el lenguaje E de Verisity, impulsaron el desarrollo de Superlog, por Co-Design Automation Inc. Co-Design fue más tarde comprada por Synopsis. Las bases de Superlog y Vera han sido donadas a Accellera. Todo ello ha sido transformado y actualizado en forma de SystemVerilog, que probablemente se convierta en el próximo estándar de la IEEE.
Las últimas versiones del lenguaje incluyen soporte para modelado analógico y de señal mixta. Todos estos están descritos en Verilog-AMS.

Tipo de Programa
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.

Estructura
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.
Este lenguaje nos permite la descripción del diseño a diferentes niveles, denominados niveles de abstracción.

Nivel de puerta.

Nivel de transferencia de registro o nivel RTL.


Nivel de comportamiento (Behavioral level)


Como Diseñar en VERILOG

Mediante la sentencia module se define un módulo y se pueden especificar todos sus detalles. Una vez que se ha definido el módulo se puede utilizar (instanciar, instantiate) cuantas veces sea preciso en un diseño. Cada ejemplar del módulo que se utilice (instance) puede estar conectado con otras instancias de forma distinta y puede tener un nombre diferente.

Cada módulo es una unidad lógica que incluye:
• Una interfaz para su conexión con otros módulos
• Una descripción de su contenido mediante la especificación de su estructura interna (módulos que lo constituyen y su forma de interconexión) o mediante la especificación de su comportamiento

Los módulos se conectan mediante cables (nets) que, junto con los registros (registers) son uno de los tipos de datos que utiliza Verilog.
Las nets modelan una conexión eléctrica entre entidades estructurales (módulos). Existen varios tipos de nets: wire, wire-AND, wire-OR, trireg


Ejemplo





HARDWARE RECONFIGURABLE LIBRE

Construcción

El Hardware Reconfigurable Libre es aquel que se construye tomando por un lado los lenguajes HDL y por otro las FPGAs. Un lenguaje HDL, (Hardware Description Language, lenguaje de descripción hardware) especifica con todo detalle la estructura y funcionalidad del hardware y a partir del código programado se generan unos ficheros de configuración (bitstreams) para que los dispositivos del tipo FPGA se reconfiguren, funcionando según lo descrito.

Su naturaleza es completamente diferente a la del hardware estático. Se desarrolla de una manera muy similar a como se hace con el software. Se les puede aplicar directamente una licencia libre, como la GPL.


Estructura

El Hardware Reconfigurable libre comprende como se menciono anteriormente dos partes:

Lenguajes HDL
El hardware se puede describir utilizando un lenguaje HDL, como por ejemplo VHDL, Verilog, Handel C, etc. De esta forma, los diseños se convierten en ficheros de texto ASCII (``código fuente''), que describen tanto la estructura del diseño como el comportamiento de las partes integrantes. Se pueden crear librerías de componentes que luego se usan en diseños más complejos.
Inicialmente estos lenguajes se empleaban para describir de una forma no ambigua el hardware y poder realizar simulaciones.

FPGAs
Las FPGAs son dispositivos que nos permiten implementar circuitos digitales. Están compuestos por bloques iguales, configurables, llamados CLBs, que se unen dinámicamente según cómo se especifique en la memoria de configuración. De esta forma, cambiando el contenido de la esta memoria, se establecen unas uniones diferentes entre los CLBs, obteniéndose un dispositivo u otro. La características fundamental de las FPGAs es que son Dispositivos universales. Se pueden ``convertir'' en cualquier diseño digital, según el bitstream que se cargue en su memoria de configuración. En la siguiente figuras se puede ver el detalle de circuitos FPGA de diferentes fabricabtes.



Los FPGA Altera Flex EPF10K20 20000 y el Xilinx Spartan


Funcionamiento

El fichero que contiene la configuración se denomina bitstream. A partir de los ficheros fuente, se realiza una simulación, lo que nos permite comprobar si nuestro diseño cumple las especificaciones. Por otro lado, podemos obtener el bitstream, que al descargarlo en una FPGA conseguimos que nuestro diseño hardware se .materialice. Esta fase se denomina genéricamente síntesis, aunque internamente consta de dos fases: síntesis e implementación. En la figura se ha esquematizado.


Lo anterior se indica por medio del siguiente diagrama:



Diseño


El procedimiento diseño del Hardware Reconfigurable Libre esta definido por el lenguaje HDL empleado y el FPGA.
Asi tenemos que por ejemplo para el 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.


En el siguiente diagrama se estable la secuencia a seguir para un Hardware Reconfigurable empleando VHDL.

Fabricantes

Existen varios diseños y fabricantes que se pueden encontrar en la web que emplean Hardware Reconfigurable a continuación presentamos algunos:

Construcción del prototipo Cube Revolutions, constituido por 8 Módulos Y1 conectados en fase


Tesis doctoral en la Escuela Politécnica Superior de la Universidad Autónoma de Madrid.




Se proponen y evalúan dos alternativas de control basadas en FPGA. Una mediante lógica combinacional y secuencial, y otra usando una CPU empotrada


Diseño y síntesis de un modulador BPSK, QPSK Y FSK Reconfigurable.


Departamento de Física Fundamental y Experimental, Electrónica y Sistemas Universidad de La Laguna. España.



El sistema propuesto, con su correspondiente programa de control, posibilita la modulación en las técnicas digítales anteriormente reseñadas. Al realizarse el mismo mediante VHDL hace que el sistema tenga independencia tecnológica, aunque éste finalmente se sintetizó en una FPGA de la casa Altera.


Siemens

Muchas empresas piensan que la iniciación de actividades de desarrollo ASIC – circuito integrado específico del usuario – o en el mundo FPGA implica una utilización excesiva de tiempo o costes. Pero son justo estos componentes los que hacen que sus productos sean más innovadores. ¿Qué más se puede ofrecer que la colaboración con un socio sólido?







Por ultimo podemos mencionar que el hardware reconfigurable se puede compartir exactamente igual que el software, se pueden ofrecer las mismas libertades del software libre a los ficheros en HDL (por ejemplo distribuyéndolos bajo licencia GPL), ademas, aparecen comunidades hardware que comparten información, como OpenCores y OpenCollector y se pueden crear repositorios hardware, lo que permite que muchas personas puedan participar en el desarrollo y pueden aparecer distribuciones que recopilen todo el hardware libre existente.