Papilio Pro ejecutando Arcade "Lady Bug"

Foro dedicado a máquinas recreativas de salón, máquinas de construcción propia y réplicas.
jepalza

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jepalza » 03 Feb 2013, 09:42

Hark0 escribió:Me encanta el conector VGA, en serio... vaya fiesta de resistencias!

Como dice el compañero... lo vuestro es flipante... ;)


:meparto:

Que me lo digan a mi: cuatro resistencias por cada color, total 12 resistencias mas dos para el H y V. Lo de las 4 resistencias por color es por aquello de 4bits de profundidad por color, 12bits al total, que da para 4096 colores, suficientes para la gran mayoría de sistemas, como el Amiga 500 (para mas colores, lógicamente, mas resistencias, mas pines gastados)

Avatar de Usuario
jotego
Atari 1040 STf
Atari 1040 STf
Mensajes: 657
Registrado: 16 Ene 2013, 23:25
Sistema Favorito: Atari ST
primer_sistema: Amstrad CPC
consola_favorita: Sony PlayStation 2
Primera consola: Atari Lynx
Ubicación: Valencia (España)
Gracias dadas: 27 veces
Gracias recibidas: 44 veces
Contactar:

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jotego » 03 Feb 2013, 09:49

Muy interesante. ¿De dónde has sacado el código Verilog? ¿Sabes de algún sitio con código Verilog para otros sistemas? En opencores hay un Z80 pero no hay ningún sintetizador de sonido. Tampoco hay ningún compatible 6809.

Por cierto insisto en que no se dice "programar" en Verilog sino "diseñar" porque aunque programas las conexiones físicas de la FPGA, ésta no corre ningún programa porque no es un procesador.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor mcleod_ideafix » 03 Feb 2013, 15:44

jotego escribió:En opencores hay un Z80 pero no hay ningún sintetizador de sonido.

Mira en FPGA Arcade.
http://www.fpgaarcade.com/library.htm
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
mentalthink
Amiga 2500
Amiga 2500
Mensajes: 2840
Registrado: 11 Abr 2010, 15:06
Gracias dadas: 45 veces
Gracias recibidas: 14 veces

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor mentalthink » 03 Feb 2013, 17:07

Gracias McLeod, por la info..

Por cierto insisto en que no se dice "programar" en Verilog sino "diseñar" porque aunque programas las conexiones físicas de la FPGA, ésta no corre ningún programa porque no es un procesador.


Me apunto esto que es un punto interesante...

jepalza

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jepalza » 03 Feb 2013, 22:25

mentalthink escribió:Gracias McLeod, por la info..

Por cierto insisto en que no se dice "programar" en Verilog sino "diseñar" porque aunque programas las conexiones físicas de la FPGA, ésta no corre ningún programa porque no es un procesador.


Me apunto esto que es un punto interesante...


Yo no me lo apunto. Yo sigo programando, sea cual sea el sistema. Es como lo quiera decir cada uno. Para mi, todo lo que significa escribir un programa, es programar. Para gustos los colores.

En cuanto a de dónde he sacado los "programas" ( :twisted: ) para el Papilio, los he cogido todos juntos de la página del fabricante, solo he modificado los pines acordes a mi salida de VGA y los que corresponden a mi hardware. El resto, no lo he tocado de momento.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor mcleod_ideafix » 03 Feb 2013, 23:11

jepalza escribió:Para mi, todo lo que significa escribir un programa, es programar. Para gustos los colores.

Es que ahí está el quid de la cuestión: no estás escribiendo un programa, estás escribiendo una descripción. Estás usando HDL para hacer tu descripción. HDL significa "Lenguaje de Descripción de Hardware". De igual forma que si escribes código HTML no se te ocurre decir que estás "programando" en HTML, sino que estás escribiendo la descripción visual de una página web. O si escribes código en Latex, no "programas" en Latex, sino que describes un documento con sus pies de página, sus fotos, etc.
El que se use un lenguaje que "parece" o "recuerda" a lo que uno conoce de programación en C (Verilog) o Ada (VHDL) no significa que al usar esos lenguajes estés programando. Sencillamente se usa la riqueza sintáctica de esos lenguajes de referencia para permitir al ingeniero describir su circuito.

Conceptualmente, esto:

Código: Seleccionar todo

always @(*) begin
  if (s)
    y = a;
  else
    y = b;
end

Lo entiende cualquiera que haya programado en C (o en PHP, o en JAVA, o....) aunque lo del "always" le pille un poco con el paso cambiado (conceptualmente, el always de ahí significa "haz esto cada vez que cambie alguna de las señales que intervienen en el bloque"). Dado que el comportamiento de un multiplexor es el mismo que este trozo de código, era lógico suponer que los creadores del HDL Verilog usaran esta misma construcción para decirle al sintetizador "infiere un multiplexor cuando veas esto". Esto está muy bien porque permite que gente como tú, con experiencia en C, pille "a la primera" la esencia del lenguaje. Para pillar el resto de sutilezas, como ya sabes, más vale que sepas de electrónica digital ;)

Pero si te olvidas de que esto es una descripción en lugar de un programa, antes o después cometerás errores. Es decir, si echas a un lado tu formación en electrónica y piensas en un código como el anterior como en un programa, te puedes llevar alguna que otra sorpresa. Por ejemplo... ¿qué ocurre si completo la secuencia de código de arriba con la definición de lo que es s,a,y,b?

Código: Seleccionar todo

reg [127:0] a;
reg [127:0] b;
reg [127:0] y;
wire s;

always @(*) begin
  if (s)
    y = a;
  else
    y = b;
end

¡Ay va! Resulta que esto no infiere un simple multiplexor... sino que infiere 128 multiplexores de dos entradas cada uno. Visualízalo: es como un montón de chips 74LS157 (32 para ser exactos) trabajando en paralelo, con la señal "s" aplicada a esos 128 multiplexores.
¿Y? Pues que el programador obvía un detalle que no pasará por alto al ingeniero electrónico: resulta que la señal "s" está siendo aplicada a 128 cargas (la entrada de selección de cada uno de los 128 multiplexores). Cuando este circuito se sintetice posiblemente no funcione bien, porque estaremos pidiendo que una señal esté conectada a la entrada de 128 circuitos. La señal podría no ser suficientemente fuerte, o bien la capacidad parásita de esas 128 entradas podría hacer que la señal se retrasara más de la cuenta. Y ya sabemos lo importante que es que una señal no sea aplicada a más cargas de la cuenta (fue el error que me tuvo en jaque con mi Jupiter ACE, por no usar un chip 74HCT y poner en su lugar un 74LS... con ese chip, la señal que alimentaba a una parte del circuito no tenía suficiente fuerza, y veía "extraños" en la pantalla)

¿La solución? Pues algo en lo que no caería el programador, y que de hecho no tendría ningún sentido para él, pero sí para alguien que ve el código no como un programa sino como una descripción de un cableado: replicar la señal "s" varias veces, y replicar el multiplexor tantas veces como copias tengas de "s", aplicando cada copia de "s" a uno de esos multiplexores. Cada multiplexor se encargará de multiplexar una parte del vector a,b,y

Código: Seleccionar todo

reg [127:0] a;
reg [127:0] b;
reg [127:0] y;

wire s;
/* se le dice al sintetizador que no intente simplicar esto, sino que asigne un BUF para cada assign
Esto se hace con comentarios parecidos a los pragma de C, pero no recuerdo cuál es el que se usa
en Verilog para este caso concreto */
wire s1=s;
wire s2=s;
wire s3=s;
wire s4=s;

/* Cada "always" es un bloque multiplexor de 32 canales, o mejor dicho, 32 multiplexores.
No se "ejecutan" de arriba a abajo. Todos funcionan a la vez */
always @(*) begin
  if (s1)
    y[31:0] = a[31:0];
  else
    y[31:0] = b[31:0];
end
always @(*) begin
  if (s2)
    y[63:32] = a[63:32];
  else
    y[63:32] = b[63:32];
end
always @(*) begin
  if (s3)
    y[95:64] = a[95:64];
  else
    y[95:64] = b[95:64];
end
always @(*) begin
  if (s4)
    y[127:96] = a[127:96];
  else
    y[127:96] = b[127:96];
end


Ahora la señal de selección maestra "s" se aplica a 4 cargas: los cuatro bufferes que generan las señales s1 a s4. A su vez, cada señal s1,...,s4 se aplica a 32 cargas. Es decir, hemos pasado de tener una señal aplicada a 128 cargas a tener señales aplicadas a 32 cargas (en el peor de los casos). El circuito resultante tiene el mismo comportamiento que el que debería tener el original (si acaso, con algún que otro nanosegundo de retraso en la conmutación del multiplexor por culpa de los buffers).

El nuevo código modificado le parecerá redundante al programador (y se sentirá tentado de simplificarlo para dejarlo como estaba al principio), pero tendrá todo el sentido del mundo al que lo lee como si fuera un esquemático.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

jepalza

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jepalza » 03 Feb 2013, 23:33

Lo siento, pero "no aceptamos cocodrilo como animal de compañia". Programar es programar, diseñar es diseñar, cocinar es cocinar. Si estoy escribiendo un código, estoy programando. Si estoy dibujando esquemas, estoy diseñando. Si hecho sal, cocino. Cada cual que lo llame como quiera, que yo estoy programando.

Me reitero:para gustos se hicieron los colores, y mi color es "programar"

Conozco a un señor, que al marrón, lo llama rojo, y no lo sacas de ahí.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor mcleod_ideafix » 03 Feb 2013, 23:51

jepalza escribió:Si estoy dibujando esquemas, estoy diseñando

O sea, que si dibujas un circuito en el OrCAD, y luego resulta que OrCAD guarda ese circuito en disco como un fichero en VHDL, tú lo que has hecho no es diseño, sino "programación visual", ¿no? :D

Lo siento: ni yo ni la comunidad de profesionales de la ingeniería electrónica aceptamos que usar Verilog o cualquier otro HDL sea "programar" [-X [-X

Pero vamos, que parece que esto es un tópico que sale de vez en cuando a la palestra...
http://stackoverflow.com/questions/5121 ... g-language
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

jepalza

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jepalza » 04 Feb 2013, 07:27

No te quito la razón. Es como cuando Plutón era un planeta. Muchos libros lo siguen mencionando como tal.
Pero no quita que programar sea "escribir un código para programar un dispositivo". Lo llaméis "Sintetizar" o "Diseñar" no deja de ser preogramación, o sea, escritura de códigos.

En el mundo del CAD/CAM, hacer la figura 3D de una pieza para enviar a un CNC, se llama "mecanizar", pero no hace mucho salió un grupo que lo empezó a llamar "copiar" por que las primeras máquinas no automáticas, se llamaban "copiadoras", que lo que hacían eran copiar una figura en madera a partir de una maestra (como se hace hoy día las llaves de cerraduras). Desde hace unos años, si a un cliente le dices que has "mecanizado" la pieza, no te entiende, pero si le dices que "ya tengo la copia", te entiende. ¿qué queda mejor, "copiar" o "mecanizar"? Yo creo que es evidente que es "mecanizar". Pero si los estudiosos han decidido cambiarle el nombre, que lo cambien, para mi siempre será "mecanizar", por que provengo de la vieja escuela, no de la nueva.

Pasa igual con eso que me decís: ¿programar o sintetizar/diseñar? Yo diseño en un sistema de dibujo o CAD/CAM, y programo las piezas ("mecanizo") para enviarlas a un CNC como nube de puntos. Esto es igual. No estoy diseñando un circuito, estoy programándolo. Otra cosa es si entro en el módulo de dibujo del Xilinx, que eso sí es diseñar, que luego paso a texto, y lo completo "programando".... :lamer:

En el mundo siempre han existido tres grupos: los del SI, los del NO, y los "NO-SE", y el tiempo pone las cosas en su sitio, por mayoría. ¿Qué pasó con el Vídeo Beta? ¿O con el LaserDisc? y así cientos de cosas. Es como lo quiera tomar la mayoría, y por ahora, mientras no tenga necesidad de cambiarlo, sigo "programando" en Verilog :gamer:

Avatar de Usuario
jotego
Atari 1040 STf
Atari 1040 STf
Mensajes: 657
Registrado: 16 Ene 2013, 23:25
Sistema Favorito: Atari ST
primer_sistema: Amstrad CPC
consola_favorita: Sony PlayStation 2
Primera consola: Atari Lynx
Ubicación: Valencia (España)
Gracias dadas: 27 veces
Gracias recibidas: 44 veces
Contactar:

Re: Papilio Pro ejecutando Arcade "Lady Bug"

Mensajepor jotego » 04 Feb 2013, 09:24

jepalza escribió:Es como lo quiera tomar la mayoría, y por ahora, mientras no tenga necesidad de cambiarlo, sigo "programando" en Verilog :gamer:


Mientras entiendas que no hay ningún procesador ejecutando el código, que el código describe unos circuitos que son inherentemente paralelos (al contrario que el código de un programa informático) y cuestiones similares lo puedes llamar hasta patinar si quieres. El hecho es que los ingenieros electrónicos llamamos a escribir código Verilog diseñar, tanto en español como en inglés, y si ese código acaba en una FPGA, entonces la FPGA se programa con ese código pero si el código acaba en un chip propio entonces nadie habla de "programar el silicio" si no de la implementación física del diseño.


Volver a “Máquinas recreativas”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados