Sobre la posibilidad de añadir HDMI mediante placa addon

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por mcleod_ideafix » 03 Oct 2015, 05:36

(NOTA: movido al foro de "Tecnología" ya que es una discursión sobre todo tecnológica, que afecta a más de un core, no es exclusivo del ZX Spectrum aunque de poder hacerlo, se empezará haciéndose sobre este core)

Respuesta corta: podría ser posible, pero hay algún que otro "pero":

Los transmisores TMDS que se necesitan para la serialización y salida a altísima velocidad, y que hay integrados en la Spartan 6, están en los bancos 0 y 2. El banco 0 cubre desde el pin 111 a 144, y el banco 2 desde el pin 37 al 72. Nosotros, el conector de expansión lo tenemos cubriendo los pines desde el 11 al 35, y desde el 40 al 58 (excepto el pin 55 que es el reloj general). Esto nos da un tottal de 6 pares diferenciales para usar: L14, L31, L48, L49, L62, y L64. Para HDMI necesitamos 4 pares, así que de momento vamos bien.
esquema_hdmi.png
El recuadro grande a la derecha lo pone en hardware la Spartan 6. El recuadro de la izquierda (Fabric) es lo que tenemos que poner nosotros en código.

El primer problema viene porque los pines que conforman cada par diferencial, y que van al conector de expansión, no se han rutado como corresponde a un par diferencial. Esto es: las dos pistas del par deben ir una junto a otra (esto más o menos se cumple según qué par se considere), y ambas han de ser de la misma longitud de extremo a extremo (esto definitivamente no se cumple).

Por ejemplo, un par en el que se cumple bien lo primero pero no lo segundo es el par L64, resaltado a continuación:
dos_pistas_diferenciales.png
En el siguiente par, que serían las dos pistas a la izquierda de éstas dos, no se cumple ni lo primero ni lo segundo.

El otro pero viene del hecho de que esas señales van al conector de expansión, y serían recibidas por otro conector, que las llevaría a otro circuito impreso con el addon HDMI. Todo esto hace que esas señales sufran constantes cambios en el medio físico lo que provoca todo tipo de reflexiones.

Con todo, hay algo de esperanza: las señales que circularán por esas pistas tienen una frecuencia máxima de 280MHz. Es una frecuencia alta, sí, pero no estamos hablando de los 1600MHz que se necesitan para llevar resoluciones HD a un monitor. En concreto, 280MHz viene de usar un reloj de pixel de 28MHz, que es lo más cercano a los 27MHz de reloj de pixel de una de las resoluciones estándar del HDMI. El reloj de pixel se multiplica por 10 ya que cada dato que se envía a un canal TMDS es de 10 bits, y su transmisión debe durar lo mismo que dura un pixel, así que si un pixel debe durar el periodo correspondiente a 28MHz, los 10 bits deben transmitirse en el periodo correspondiente a 28MHz también, lo que significa que cada bit de datos se debe transmitir en el periodo correspondiente a 280MHz.
Los cálculos vienen del autor del Pipistrelo ZX, que implementó un ZX Spectrum usando la descripción de la ULA de Opencores. Respecto a la frecuencia HDMI, él comentaba lo siguiente:

http://joco.homeserver.hu/zxpipi/
Jozsef Laszlo escribió:Well, old spectrum funs know, that timing is really important for special effects. Unfortunately, the original spectrum only had PAL composite video output (or U-V-Y), and it used 7MHz as pixel clock. It isn’t compatible with any HDMI resolution or frame rate, but close enough to one, that is 720x576@50Hz. According to the standard, this one uses 27MHz pixel clock. Which sucks, because we’d need something “compatible” with 7MHz. I took the definitions for 27MHz, and calculated everything for 28MHz (because 4*7=28, so that would be a perfect clock). I have found that HDMI TVs can handle 28MHz without any issue. (There is also a slight difference in vertical timing, because I produce 624 lines instead of 625, but the TV is happy with it, too.)
A 280MHz no tengo idea de cuán graves puedan ser las reflexiones provocadas por los cambios de medio en la placa. No tengo experiencia en ello. Tampoco soy capaz de calcular exactamente el retardo de propagación en un medio como un circuito impreso a esas frecuencias, por lo que no puedo saber qué máxima diferencia de longitud entre pistas del par diferencial es admisible antes de que se produzcan errores al traducir una señal diferencial a otra en modo común.

Parto de un dato muy general, que es el retardo de progagación de una señal eléctrica en un cable de cobre, y que vienen a ser unos 200.000 km/s (2/3 partes de la velocidad de la luz). A 280 MHz, el periodo de reloj es de 3,571428 ns. Tomando como aceptable un par diferencial en donde las dos señales estén retrasadas una respecto de la otra un máximo de tiempo igual a medio periodo de reloj, esto es, 1,7857142 ns . Durante ese tiempo y a la velocidad de propagación indicada, una señal tendría tiempo de recorrer 35 centímetros. Si todos estos cálculos son correctos, se podría dar por bueno un par diferencial en donde la diferencia de longitud entre sus dos componentes no exceda de 35 cm, lo cual en la placa del ZX-Uno es trivial conseguirlo. Pero claro, repito que no tengo experiencia en este tipo de cosas y los cálculos indicados podrían ser completamente falsos.

Con todo, las diferencias de longitud entre la dos señales de un par se pueden compensar en la placa addon, pero mi principal temor son las reflexiones causadas por los cambios de medio al pasar de una placa a otra. Claro que también pienso que incluso en un sistema HDMI en el que todo se haya medido al milímeto no puedes evitar tener cambios de medio de la pista al conector, del conector al cable, del cable al otro conector, del otro conector a otra pista, etc.

Creo que merece la pena coger y sacar una partida de 20 (10x2) pequeñas plaquitas en donde los chicos de DirtyBoards, buscar una partida barata de conectores hembra HDMI para PCB, diseñar la placa y ver qué pasa. No creo que sea un gasto tremendo de dinero.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por antoniovillena » 03 Oct 2015, 11:52

Pues sí, estoy totalmente de acuerdo con que no se pierde nada probando. Si quieres yo me encargo de hacer los pedidos.

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por mcleod_ideafix » 03 Oct 2015, 12:48

Mira: el conector podría ser este:
http://es.aliexpress.com/store/product/ ... _74_75,0_0

Son 0,50€ cada conector. No sé si eso es muy caro o no.

Para ese conector he encontrado una librería para Eagle que contiene un componente HDMI que se ajusta en huella a él (incluyo librería como adjunto)
Adjuntos
00_cody.lbr
(1.52 MiB) Descargado 258 veces
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por jepalza » 03 Oct 2015, 20:31

Y por que no usar un conversor VGA-HDMI mediante un circuito creado para tal fin. Se evita la programación, el re-ruteado tratando de emparejar pares (valga la redundancia) y los problemas de reloj de 280mhz . El circuito mas básico coge hasta 1280x1024. De ese modo, con programar una salida VGA (que ya se está en ello), y sacando esta hacia el chip A/D de Analog (el modelo AD9983A) tendríamos HDMI de manera simple e integrada en el ZXUNO. Funciona a 1.8 y 3.3v, como ZXUNO. (creo que ademas tiene también entrada de video compuesto)

Sé que es mejor y mas barato hacer salida directa a HDMI desde la FPGA, a pesar de complicar la programación, y ocupar un espacio extra (por ahora desconocido). Son dos alternativas. EL chip vale unos 4€ comprando 100 unidades.

http://www.analog.com/en/products/audio ... t-overview
http://www.analog.com/library/analogDia ... MI_VGA.pdf

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por antoniovillena » 03 Oct 2015, 21:21

Bienvenido al foro, jepalza.

Como alternativa no la veo mal. Si cuesta 4 euros el chip tendremos un addon más sencillo de diseñar (sin necesidad de código Verilog) que sólo cuesta 4 euros más que el addon sin chip. Iría conectado por la salida RGB en lugar del bus de expansión. Sería la solución para no calentarse la cabeza, siempre que el conversor este aceptara las frecuencias VGA no estándares de 53Hz o así.

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por mcleod_ideafix » 03 Oct 2015, 22:29

jepalza escribió:Y por que no usar un conversor VGA-HDMI mediante un circuito creado para tal fin. Se evita la programación, el re-ruteado tratando de emparejar pares (valga la redundancia) y los problemas de reloj de 280mhz . El circuito mas básico coge hasta 1280x1024. De ese modo, con programar una salida VGA (que ya se está en ello), y sacando esta hacia el chip A/D de Analog (el modelo AD9983A) tendríamos HDMI de manera simple e integrada en el ZXUNO. Funciona a 1.8 y 3.3v, como ZXUNO. (creo que ademas tiene también entrada de video compuesto)
En realidad el AD9983A nos lo podemos ahorrar si rutamos una copia de los 3 bits de color para R,G y B hacia el conector de expansión y usamos directamente el ADV7513W. Así de esta forma no abandonamos el dominio digital y no hay merma de la calidad de la señal :)

Lo que no nos ahorramos es la programación: además de hacer el scandoubler (habría que ver de todas formas si este chisme admite 720x576@50Hz y entonces no habría que hacerlo) hay que configurar al chip usando I2C, lo que significa hacer un pequeño interfaz I2C y que desde el Z80 se inicialice el chip con los valores que sean necesarios.
jepalza escribió:Sé que es mejor y mas barato hacer salida directa a HDMI desde la FPGA, a pesar de complicar la programación, y ocupar un espacio extra (por ahora desconocido). Son dos alternativas. EL chip vale unos 4€ comprando 100 unidades.
En realidad el código Verilog para la salida HDMI directa es menor que el que se usaría para el scandoubler de VGA. Usando el modo HDMI que proponía Josef Laszo, la correspondencia pixel-a-pixel es total. Simplemente que al ser el reloj de pixel del ZX-Uno de 14MHz, pues en dos ciclos de reloj de 28MHz se sacaría el mismo valor.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por jepalza » 04 Oct 2015, 09:11

¿el modo VGA lo vais a omitir? Lo ideal es tener ambos, VGA y HDMI. Odio el HDMI, lo siento, pero es así. Eso de que haga oversampling y se salga de los márgenes no me gusta nada. Tengo una TV cuyo HDMI saca los bordes de la pantalla del PC fuera del marco, y queda horroroso, y no hay modo de hacer autocentraje, al menos en esta TV, y eso recorta unos milímetros la imágen. En un Spectrum da igual, por lo del border, pero en un PC pierdes píxeles.

El chip AD que he mirado, tiene modos 576 (pone que a 60hz, pero imagino que da igual) y lo del I2c es opcional (o eso he entendido), y es solo si quieres manipular brillos, contraste, pixel clock, etc, que en un principio, sería mas bien para poner este chip dentro de una TV y usar el mando para esos menesteres.

Por curiosidad (al márgen de lo que hablamos), he mirado en ebay, y veo que se venden conversores VGA-HDMI, mas caros que los contrarios, los HDMI-VGA (de este tipo tengo uno para pruebas en los RaspBerry), del orden de 12€ frente a 5, pero sería curioso probar uno y ver que imagen sacan. Lo mismo me compro uno para tener para futuros proyectos, que siempre es bueno tener cosas de estas. :)

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por mcleod_ideafix » 04 Oct 2015, 11:50

jepalza escribió:¿el modo VGA lo vais a omitir?
No, no, para nada. Lo mismo que te digo que esto del HDMI es sólo un experimento, para ver si sería factible sacarlo y darlo como opción a quien quiera esta salida. El sistema de salida del ZX-Uno principal es video compuesto, que para eso está el conector embebido en la placa. VGA y HDMI son opciones, de las cuales la que queremos implementar con soporte oficial es VGA, aunque salga más "caro" (en términos de espacio en la FPGA) que HDMI. Ten en cuenta que implementar HDMI significa usar el conector de expansión, y querriamos que ese conector de expansión se convirtiera en un conector de expansión de verdad de Spectrum.

Vamos, que esto del HDMI es un experimento, como lo fue en su día el Z80 externo. Nada más.

Como también te digo que otro experimento que tengo todavía en barbecho es una tarjetita Spectranet para el conector de expansión. Ahí lo dejo ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por jepalza » 04 Oct 2015, 21:32

Buscando por la red, he dado con este proyecto de prueba:
http://hamsterworks.co.nz/mediawiki/ind ... nimal_HDMI

Lo he reproducido para el ZXUNO, y sintetiza bien, sin errores, usando los siguientes pines:

Código: Seleccionar todo

NET "hdmi_out_p<0>" LOC="P62" | IOSTANDARD="TMDS_33"; # L12P
NET "hdmi_out_n<0>" LOC="P61" | IOSTANDARD="TMDS_33"; # L12N
NET "hdmi_out_p<1>" LOC="P44" | IOSTANDARD="TMDS_33"; # L62P
NET "hdmi_out_n<1>" LOC="P43" | IOSTANDARD="TMDS_33"; # L62N
NET "hdmi_out_p<2>" LOC="P58" | IOSTANDARD="TMDS_33"; # L14P
NET "hdmi_out_n<2>" LOC="P57" | IOSTANDARD="TMDS_33"; # L14N
NET "hdmi_out_p<3>" LOC="P48" | IOSTANDARD="TMDS_33"; # L48P
NET "hdmi_out_n<3>" LOC="P47" | IOSTANDARD="TMDS_33"; # L48N
He utilizado los pares que indicas mas o menos, que para una simple prueba, yo creo que valen. (Bueno, ahora que leo bien, el L12 podía haber puesto el L64, pero bueno, para una prueba rápida valen)

No lo he probado, por que no tengo un conector hembra de HDMI (y por que no tengo tiempo ahora de ponerme a soldar cables)
A ver si podéis probarlo alguno, y sino, entre semana me compro un alargador HDMI en un "todo-a-100" y a ver si puedo hacer la prueba.
Incluyo aquí el proyecto en XILINX 12.4 y el BIT.
Adjuntos
HDMI_ZXUNO.rar
(21.46 KiB) Descargado 253 veces

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Sobre la posibilidad de añadir HDMI mediante placa addon

Mensaje por mcleod_ideafix » 04 Oct 2015, 21:48

Ñam! Este es el tipo de cosas que me gusta ver!!! Ahora tenemos que comprar unos cuantos conectores HDMI, hacer las plaquitas en el dirtyboards, y a ver qué pasa. Si funciona, estupendo. Si no lo hace, o lo hace a ratos, pues al menos nos habremos divertido probando nuevas tecnologías :)

Gracias, Joseba!
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Responder