Clon en FPGA facilito

Comentarios sobre el actual panorama retro. Lanzamiento de libros, películas, vídeos, y cualquier media sobre retro. Cualquier otra iniciativa que promueva nuestra afición y noticias retro que no cuenten con foro específico en ZONADEPRUEBAS.
Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon en FPGA facilito

Mensajepor antoniovillena » 19 Jul 2013, 12:16

Aunque se llame MOD-VGA y tenga una salida VGA, en el clon del tutorial no se usa para nada. Lo que hay que sacar es PAL RGB: puedes sacarlo directamente por un Euroconector, o bien hacerte un pequeño circuito con un AD724 y sacar video compuesto.

A diferencia de la VGA, en RGB sólo hay un pin de sincronismo llamado CSYNC e incluye los dos, tanto el horizontal como el vertical, es una función XNOR de ambas señales. Vista en el osciloscopio tienes que poder observar tanto la señal de 50Hz (20ms de periodo) como la de 15625Hz (64us) en el mismo pin, CSYNC.

De todas formas te recomiendo que pruebes primero el código VHDL, o al menos hagas una simulación con iSIM para comprobar que tu código Verilog y el VHDL de la lección dan la misma salida. No estaría mal hacer un tutorial Verilog alternativo con los mismos ejemplos, si te animas a hacerlo para retrónica tienes todo mi apoyo.

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: Clon en FPGA facilito

Mensajepor jotego » 19 Jul 2013, 13:41

La simulación si que es correcta. Luego lo adaptaré para sacar salida VGA que es lo que tengo en el banco. Cuando funcione te lo mando.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon en FPGA facilito

Mensajepor antoniovillena » 19 Jul 2013, 13:56

Hace tiempo hice unas pruebas con otra placa (la OLS) para sacar salida VGA. Si te sirve como referencia puedes coger los timings del código que está en este hilo.

http://foro.speccy.org/viewtopic.php?f=9&t=2432

Pero mi recomendación es que en cuanto trastees un poco con VGA te pases a PAL RGB. Con salida VGA no vas a tener un clon exacto de primeras, y si tu intención es hacer un scan doubler, lo lógico sería tener primero la señal RGB, y luego sacar simultáneamente la salida VGA. Así, si has cometido un error es más fácil detectarlo. Si quieres sacar RGB por el conector VGA necesitas, además de las líneas normales de RGB, la alimentación de 5V. De esta forma puedes tener una señal de video válida al otro lado del cable, en el conector Scart.

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: Clon en FPGA facilito

Mensajepor jotego » 20 Jul 2013, 18:53

Lo de la salida RGB no creo que llegue a hacerlo porque me resulta muy incómodo probarlo. Sólo tenga esa conexión en el televisor del salón y no es el lugar para probar cosas.

He hecho la salida VGA y aunque se ve unos segundos en el monitor, pierde el sincronismo en seguida. Para sacar 640x480 debería usar un reloj de 25.125MHz pero sólo tengo disponibles 25MHz por limitaciones de la placa. No sé si es por culpa de eso. ¿Cuál fue tu experiencia con el reloj? ¿Necesitaste clavar la frecuencia estándar para que el monitor mantuviese la imagen?

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon en FPGA facilito

Mensajepor antoniovillena » 20 Jul 2013, 20:00

jotego escribió:Lo de la salida RGB no creo que llegue a hacerlo porque me resulta muy incómodo probarlo. Sólo tenga esa conexión en el televisor del salón y no es el lugar para probar cosas.


A mí también me resulta incómodo, de hecho la única prueba en RGB ha sido esta:

http://www.youtube.com/watch?v=mBAtyxzXkJA

El resto del tiempo uso la opción más cómoda, en mi caso video compuesto a través de capturadora como expliqué antes. La conversión RGB a video compuesto es trivial con el AD724, un chip que cuesta sólo 2 euros.

jotego escribió:He hecho la salida VGA y aunque se ve unos segundos en el monitor, pierde el sincronismo en seguida. Para sacar 640x480 debería usar un reloj de 25.125MHz pero sólo tengo disponibles 25MHz por limitaciones de la placa. No sé si es por culpa de eso. ¿Cuál fue tu experiencia con el reloj? ¿Necesitaste clavar la frecuencia estándar para que el monitor mantuviese la imagen?


Que va, puse el mismo ejemplo de esta web:
http://www.mikekohn.net/micro/fpga_vga.php

Y el resultado fue una imagen totalmente estable. El reloj que usé fue 25MHz y se veía perfectamente una imagen estable.

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: 54 veces
Contactar:

Re: Clon en FPGA facilito

Mensajepor mcleod_ideafix » 20 Jul 2013, 22:35

Pues que... aprovechando la coyuntura, le debía yo a Antonio Villena la descripción en Verilog del clon Superfo 128 que usé para testear el circuito. Aquí está, con unas instrucciones para usarlo y utilidades variadas para gnerar video.
http://www.zxprojects.com/images/storie ... rfo128.zip

Es un proyecto del ISE Xilinx. Basta con cargar superfo128.xise para tener acceso a todo el diseño.
NOTA: como ejercicio se podría añadir el módulo AY-3-8912 de Jotego, y un módulo para grabar el sonido generado, al estilo de los módulos que vereis que uso para grabar video. Luego con eso y el snapshot de la Shock Megademo cargada en el diseño, grabar un video de unos cuántos segundos con sonido AY :)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

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: Clon en FPGA facilito

Mensajepor jotego » 20 Jul 2013, 23:19

Gracias McLeod por los archivos de superfo. Espero llegar allí pronto. Pero primero tengo que solucionar este problema tonto del monitor que pierde la sincronía. Los enlaces que me ha pasado Antonio Villena me llevan a implementaciones que deberían estar haciendo lo mismo que la mía. En una de ellas tenían el signo de un sincronismo invertido, pero cambiar eso no ha servido de nada. Os mando el código, que es muy cortito, por si veis algo raro. No incuyo el nivel superior que básicamente instancia bar_display y añade un divisor por dos al reloj de 50MHz de la placa. Este código debería generar unas barras en 640x480 con el estilo de color del Spectrum. Las barras salen bien pero la imagen sólo aguanta en pantalla unos segundos. Luego desaparece y al cabo de otro segundo vuelve a salir.

Por cierto, que la asignación a {bright, red, green, blue} se puede hacer asíncrona y no mejora el resultado.

Código: Seleccionar todo

`timescale 1ns/1ps

module bar_display(
  input clk,
  input rst,
  output hsync,
  output vsync, 
  output [3:0] red,
  output [3:0] green,
  output [3:0] blue
);

vga_bars u_bars(
  .clk  ( clk      ),
  .rst  ( rst      ),
  .hsync ( hsync   ),
  .vsync ( vsync   ),
  .red  ( zx_red   ),
  .blue ( zx_blue  ),
  .green( zx_green ), 
  .bright( zx_bright )
);
 
speccy2board u_convert(
  .zx_red  ( zx_red   ),
  .zx_blue ( zx_blue  ),
  .zx_green( zx_green ),
  .zx_bright( zx_bright ),
  .red  ( red   ),
  .blue ( blue  ),
  .green( green )
);

endmodule
 
 
module vga_bars(
  input  clk, // pixel clock!
  input  rst,
  output reg hsync,
  output reg vsync, 
  output reg red,
  output reg green,
  output reg blue,
  output reg bright
);

parameter HSYNC=96, H_BACK_PORCH=48, H_FRONT_PORCH=16, WIDTH = 640,
          VSYNC= 2, V_BACK_PORCH=27, V_FRONT_PORCH=10, HEIGHT= 480;
parameter MSB=9;
parameter LINE_WIDTH=HSYNC + H_BACK_PORCH + H_FRONT_PORCH + WIDTH;
parameter FIELD_HEIGHT = VSYNC + V_BACK_PORCH + V_FRONT_PORCH + HEIGHT;
parameter FIRST_LINE = VSYNC + V_BACK_PORCH;
parameter LAST_LINE  = FIRST_LINE + HEIGHT;
parameter FIRST_PIXEL= HSYNC + H_BACK_PORCH;
parameter LAST_PIXEL = FIRST_PIXEL + WIDTH;

reg [MSB:0] hcnt, vcnt;
wire active_area;
assign active_area = vcnt>=FIRST_LINE && vcnt<LAST_LINE && hcnt>=FIRST_PIXEL&& hcnt<LAST_PIXEL;

always @(posedge clk or posedge rst ) begin
  if( rst ) begin
    hcnt <= 0;
    vcnt <= 0;
    { hsync, vsync } <= 2'b11;
    end
  else begin
    // counters
    if (hcnt==LINE_WIDTH-1) begin
      hcnt <= 0;
      vcnt <= (vcnt==FIELD_HEIGHT-1) ? 0 : vcnt+1'b1;   
      end
    else
      hcnt <= hcnt+1'b1;   
    // sync pulses
    if( vcnt < VSYNC ) begin
      vsync <= 1'b0;
      end
    else begin
      vsync <= 1'b1;
      hsync <= hcnt < HSYNC ? 1'b0 : 1'b1;
      end
    end
  end

// colour output   
always @(posedge clk or posedge rst ) begin
  if( rst )
    {bright, red, green, blue } <= 4'b0;
  else
    {bright, red, green, blue } <= active_area ? hcnt[MSB:MSB-4] : 4'b0;
  end

endmodule
 
module speccy2board (
  input zx_red,
  input zx_blue,
  input zx_green,
  input zx_bright,
  output [3:0]red,
  output [3:0]blue,
  output [3:0]green
);

assign red   = zx_red   ? (zx_bright?4'hF : 4'h8) : 4'h0;
assign green = zx_green ? (zx_bright?4'hF : 4'h8) : 4'h0;
assign blue  = zx_blue  ? (zx_bright?4'hF : 4'h8) : 4'h0;

endmodule

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon en FPGA facilito

Mensajepor antoniovillena » 20 Jul 2013, 23:23

Que no hombre, que no me debías nada. Al revés, te lo debo yo a tí por introducirme en el lado oscuro de las FPGAs :) Por cierto últimamente estoy haciendo un buen trabajo para la secta evangelizando puristas ;)

Ahora en serio, lo he visto por encima y tiene muy buena pinta. Los gifs de la Shock Megademo (pal y ntsc) no los había visto antes. Espero que no te importe que incluya algunos de tus fuentes en el tutorial VHDL, respetando la licencia GPL, por supuesto previa adaptación Verilog->VHDL.

Espero poder meterle mano a este material cuanto antes, muchas gracias por publicarlo.

-- Actualizado 20 Jul 2013, 22:32 --

@jotego he mirado tus fuentes y una diferencia que veo con los de mikekohn es que tú cuentas 519 líneas y él cuenta 521, no sé si ahí estará el fallo. Por cierto, ¿has probado a meter este código fuente?

http://www.mikekohn.net/micro/source/vga.vhd

Más que nada para descartar fallos eléctricos o de otra índole.

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: 54 veces
Contactar:

Re: Clon en FPGA facilito

Mensajepor mcleod_ideafix » 21 Jul 2013, 00:01

antoniovillena escribió:Que no hombre, que no me debías nada. Al revés, te lo debo yo a tí por introducirme en el lado oscuro de las FPGAs :) Por cierto últimamente estoy haciendo un buen trabajo para la secta evangelizando puristas ;)

Eso me congratula enormemente :)

antoniovillena escribió:Ahora en serio, lo he visto por encima y tiene muy buena pinta. Los gifs de la Shock Megademo (pal y ntsc) no los había visto antes. Espero que no te importe que incluya algunos de tus fuentes en el tutorial VHDL, respetando la licencia GPL, por supuesto previa adaptación Verilog->VHDL.

Los usé en el hilo sobre el Superfo128 para enseñar los glitches y otras historias. Allí deben seguir todavía. En www.zonadepruebas.com/viewtopic.php?f=2 ... 280#p20994 y los siguientes posts...

Por supuesto, puedes publicarlos, usarlos en los tutoriales, etc.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Clon en FPGA facilito

Mensajepor antoniovillena » 21 Jul 2013, 00:19

mcleod_ideafix escribió:Los usé en el hilo sobre el Superfo128 para enseñar los glitches y otras historias. Allí deben seguir todavía. En viewtopic.php?f=26&t=3074&start=280#p20994 y los siguientes posts...


Cierto, como no me acordaba busqué en el hilo aunque no lo encontré. Y es que la simulación de la pantalla del Jetpac está en la página 11, sin embargo la Shock Megademo está en la 29.


Volver a “Retroinformatica hoy”

¿Quién está conectado?

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