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.
Clon en FPGA facilito
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
- jotego
- 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
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.
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Clon en FPGA facilito
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.
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.
- jotego
- 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
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?
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?
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Clon en FPGA facilito
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.
- mcleod_ideafix
- 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
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
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
- jotego
- 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
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.
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
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Clon en FPGA facilito
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.


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.
- mcleod_ideafix
- 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
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 FPGAsPor 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
- antoniovillena
- Amiga 1200
- Mensajes: 2013
- Registrado: 16 Abr 2012, 21:22
- Gracias recibidas: 8 veces
Re: Clon en FPGA facilito
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