TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: dielafer en 21 de Febrero de 2011, 13:53:25
-
Hola! El caso es que tengo que programar una secuencia numérica con una Gal, en principio voy a utilizar la 22V10, y 3 biestables. La manera mas facil que se me ocurre es con una máquina de estados en Xilinx pero tampoco tengo mucha idea de como llevarlo a cabo. ¿Podeis orientarme un poco?
Gracias.
-
En el siguiente link he posteado algunos ejemplos en verilog que te pueden servir:
http://www.todopic.com.ar/foros/index.php?topic=32327.msg274587#msg274587 (http://www.todopic.com.ar/foros/index.php?topic=32327.msg274587#msg274587)
-
Me parece que si vas a trabajar con la GAL22V10 una mejor opcion (dada la simplicidad de este chip) seria el winCUPL. A traves de este soft podras facilmente generar secuencias usando la teoria de Moore y Mealy. Si deseas mostrar la secuencia sobre display de 7 segmentos, este chip es inclusive capaz de generar en su escasa arquitectura (terminos producto y OLMC) el decodificador necesario. Desde luego que Xilinx es una herramienta poderosa pero ademas un tanto compleja y creo que un compilador CUPL te seria mas util, ademas que el .jed generado bien lo puedes cargar en la GAL de PROTEUS y simular tu proyecto para depurar todos los posibles inconvenientes. Bueno es mi humilde opinion, espero te sea util.
Saludos...
-
Lo que dice agauss es cierto, pero en algunos casos el wincupl me daba algunos problemas pero no estoy seguro si ya le repararon esos errores.
-
Ojo que los dispositivos GAl estan dejandose de fabricar, sobre todo los de la firma Lattice.
Para nuevos proyectos os aconsejaria el utilizar dispositivos CPLD.
-
Si te sirve de algo te muestro un ejemplo de una secuencia para visualizar los numeros del 0-3. Use la GAL22V10 y el compilador winCUPL. En el adjunto estan el archivo .pld y el .jed, ademas de la simulacion para PROTEUS.
Saludos...
Name sec2b ;
PartNo 00 ;
Date 01/03/2011 ;
Revision 01 ;
Designer Engineer ;
Company MECATRONICA ;
Assembly None ;
Location ;
Device gal22v10 ;
PIN 1 = CLK;
PIN 23 = QA;
PIN 22 = QB;
QA.oe = 'b'1;
QA.ar = 'b'0;
QA.sp = 'b'0;
QB.oe = 'b'1;
QB.ar = 'b'0;
QB.sp = 'b'0;
QA.d = !QA;
QB.d = QB$QA;
PIN 21 = a;
PIN 19 = c;
PIN 18 = d;
PIN 17 = e;
PIN 16 = f;
PIN 15 = g;
FIELD ENTRADAS = [QB,QA];
FIELD SALIDAS = [g,f,e,d,c,a];
TABLE ENTRADAS => SALIDAS
{
'b'00 => 'b'011111;
'b'01 => 'b'000010;
'b'10 => 'b'101101;
'b'11 => 'b'100111;
}
-
Hola agauss.
Lo que hace tu códig esta bien, pero estas desperdiciando dos pines de manera innecesaria, puedes realizar una secuencia de datos de manera simple.
En wincupl para realizar una secuencia de numeros que se muestren en un display de 7 segmentos con el 22v10 debes hacer algo así
PIN 1: CLK;
PIN [21..15]: [a_to_g6..0]; //Declaramos las salidas de la a hasta g del display
sequence [a_to_g6..0] {
PRESENT 0 //Estado inicial al encender siempre es cero
NEXT 'b'0111111; //El estado siguiente sera el codigo correspondiente al 0
PRESENT 'b'0111111; //Si el estado presente es el codigo del 0
NEXT 'b'0000110; //El proximo estado sera el codigo del 1
PRESENT 'b'0000110; //Si el estado presente es el codigo del 1
NEXT 'b'1011011; //El proximo estado sera el codigo del 2
PRESENT 'b'1011011; //Si el estado presente es el codigo del 2
NEXT 'b'1001111; //El proximo estado sera el codigo del 3
PRESENT 'b'1001111; //Si el estado presente es el codigo del 3
NEXT 'b'0111111; //El estado siguiente sera el codigo del 0
}
-
Tienes toda la razon, mi intencion era mostrar el diseño del rograma usando la teoria de moore y mealy, ya sabes el diseño con los flip-flop, estado presente y estado siguiente. De ahi que tengo dos salidas de flip-flop QA y QB, sin embargo a traves de la funcion sequence de winCUPL esto parece inecesario al menos en terminos practicos (es decir, no es necesario conocer la terioa detras), aunque pienso que en terminos didacticos al menos para comenzar la primera opcion es util.
Respecto a tu codigo, tendria que decir que me parece una solucion bastante elegante.
Saludos...
-
Mis profesores creen lo mismo que tu, pero yo no lo creo, ciertamente es necesario saber que el circuito final contendrá ciertos flip-flop y compuertas, pero para mi hasta ahi nomas.
:D Durante ese semestre debiamos realizar el diseño del circuito digital pero eso me daba mucha pereza y nunca lo hacia ya que de todos modos el compilador lo iba a hacer por mi.
Lo que quiero decir es que yo no se como hacer circuitos secuenciales, lo único que se hacer es sacar el diagrama de estados y a partir de eso genero el codigo necesario para que el circuito funcione ya que de todos modos el compilador hara ese trabajo por mi.
Lo que si te puedo decir es que con wincupl y los gal no hay que confiar tanto en el compilador ya que al poseer caracteristicas tan pobres existen ocasiones en las que el compilador dice que el dispositivo no soporta ese codigo aunque si lo haga y es ahi donde tienes que saber un poco acerca de la arquitectura interna y de como crea el circuito interno del gal el wincupl.
Lo interesante de hoy en dia es que ese problema ha quedado completamente resuelto ya que las nuevas tecnologias como CPLD y FPGA son sumamente versatiles en este sentido y basicamente el unico limite es tu imaginacion.
-
Para seguir con el hilo, otra buena opcion para programar PLDs como la GAL22V10 es el lenguaje ABEL, que puede programarse a travez de compiladores como el EasyABEL de DATAIO o bien con el ispLEVER de Lattice Semiconductors, este ultimo ofrece una licencia gratuita por un año llenando un formulario en su pagina web www.latticesemi.com ademas de contener tambien compiladores para VHDL y VERILOG. En fin aqui dejo un ejemlo muy sencillo; se trata de una funcion XOR de tres entradas, la funcion no esta reducida, se trata mas bien de una forma canonica programada directamente en codigo ABEL, espero sea de interes para alguien.
MODULE fxor3e;
TITLE 'Funcion XOR de 3 entradas'
DECLARATIONS;
fxor3e DEVICE 'P22V10;
A,B,C PIN 2,3,4;
Y PIN 23 ISTYPE 'COM';
EQUATIONS;
Y = (!C&!B&A)#(!C&B&!A)#(C&!B&!A)#(C&B&A);
END fxor3e;
Saludos...
-
Exactamente el mismo programa pero usando la modalidad de tablas de verdad.
MODULE fxor3e;
TITLE 'Funcion XOR de 3 entradas'
DECLARATIONS;
fxor3e DEVICE 'P22V10';
A,B,C PIN 2,3,4;
Y PIN 23 ISTYPE 'COM';
EQUATIONS;
truth_table ([C,B,A]->Y)
[0,0,0]->0;
[0,0,1]->1;
[0,1,0]->1;
[0,1,1]->0;
[1,0,0]->1;
[1,0,1]->0;
[1,1,0]->0;
[1,1,1]->1;
END fxor3e;
Saludos...
-
Quizas sea buena idea empezar un POST con el tema "Logica programable en HDL con PLDs simples", o algo asi. Por supesto seria tratar con los GAL16V8 y GAL22V10, chips sencillos y economicos. Esto con la finalidad mas bien de tratar los aspectos referentes al software (CUPL, ABEL, VHDL, VERILOG, SCHEMATICS, etc), lo cual permitiria posteriormente ascender a niveles superiores con CPLD o FPGA. Creo que en la semana pondre manos a la obra, espero sea de interes para alguien.
saludos...
-
Quizas sea buena idea empezar un POST con el tema "Logica programable en HDL con PLDs simples", o algo asi. Por supesto seria tratar con los GAL16V8 y GAL22V10, chips sencillos y economicos. Esto con la finalidad mas bien de tratar los aspectos referentes al software (CUPL, ABEL, VHDL, VERILOG, SCHEMATICS, etc), lo cual permitiria posteriormente ascender a niveles superiores con CPLD o FPGA. Creo que en la semana pondre manos a la obra, espero sea de interes para alguien.
saludos...
esta muy buena la idea.. a mi me enseñaron en la facultad algo, muy poquito, de cpld y fpga, en sí me hicieron leer los datasheets de un dispositivo cpld y de una fpga ambos de xilinxs, la verdad que recuerdo la mitad de las cosas, creo que cpld es algo sencillo, pero debería darse más tempranamente en la carrera, es algo que puede ser muy útil, yo aun uso chips ttl y cmos 74xxxx y 4xxx
Me interesa información básica como ser: cómo se graba una cpld? JTAG? qué necesito tener, comprar o armar? es como grabar un pic? etc