Buscar la lógica a este código

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

Buscar la lógica a este código

Mensaje por jepalza » 26 Sep 2016, 21:42

Me está ocurriendo una cosa alucinante. Estoy portando el Crazy Climber aprovechando el hard del Crazy Kong, y por ahora me va medianamente bien, a excepción del desplazamiento vertical, que no existe, y por lo tanto, el edificio no se mueve.

Pero aparte de eso, si pongo este código:

Código: Seleccionar todo

	vga_r <= (std_logic_vector(r)); 
	vga_g <= (std_logic_vector(g));
	vga_b <= (std_logic_vector(b) & '0');
no funciona bien el juego, se queda congelado en la pantalla de créditos y no responde a nada.
Pero si pongo este otro código

Código: Seleccionar todo

	vga_r <= (std_logic_vector(r)); 
	vga_g <= (std_logic_vector(g));
	vga_b <= ('0' & std_logic_vector(b));
Resulta que si funciona. (nota la diferencia sutil de sumar un '0' delante o detrás del color azul.
Los registros están bien direccionados, los colores se ven bien. Son de 3+3+2 bits y por eso al azul debo sumarle un bit para sacarlo hacia el ZXUNO que usa 3+3+3.

Pregunta: ¿que tiene que veer el bit del color azul delante o detrás para que el juego se congele? :tepego:

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

Re: Buscar la lógica a este código

Mensaje por mcleod_ideafix » 27 Sep 2016, 10:01

jepalza escribió:Pero si pongo este otro código

Código: Seleccionar todo

	vga_r <= (std_logic_vector(r)); 
	vga_g <= (std_logic_vector(g));
	vga_b <= ('0' & std_logic_vector(b));
Resulta que si funciona. (nota la diferencia sutil de sumar un '0' delante o detrás del color azul.
Los registros están bien direccionados, los colores se ven bien. Son de 3+3+2 bits y por eso al azul debo sumarle un bit para sacarlo hacia el ZXUNO que usa 3+3+3.

Pregunta: ¿que tiene que veer el bit del color azul delante o detrás para que el juego se congele? :tepego:
Cuando un cambio pequeño hace que un diseño deje de funcionar, o funciona de forma muy diferente, a menudo es síntoma de que el sintetizador ha descubierto que cierta parte de la lógica no se usa (por ejemplo porque no está conectada a nada) y por tanto la elimina del circuito final. Este tipo de cosas suele pasar por ejemplo cuando en una CPU se te olvida conectar el reloj, que coge el sintetizador y te borra la CPU por completo del diseño.

Mira, por tanto, en un caso y en otro, si cambia de forma considerable el número de slices y LUTs que se usan, ya que ahí tendrías un indicio de que el sintetizador ha eliminado lógica.

Por supuesto, mirar también el informe de síntesis, que es donde se te indica qué se ha borrado y por qué.

Respecto a la forma de generar el color azul, yo te sugeriría otra forma: poner un 0 antes o después vale, pero no tienes el rango de colores que podrías llegar a tener. Una forma, más o menos común de solventar esto consiste en añadir a la derecha del valor, el bit más significativo de dicho valor. O sea:

Código: Seleccionar todo

vga_b <= (std_logic_vector(b) & b(2));
(suponiendo que esto esté bien escrito en VHDL)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jotego
Mensajes: 158
Registrado: 11 May 2016, 23:45
Ubicación: Valencia
Contactar:

Re: Buscar la lógica a este código

Mensaje por jotego » 27 Sep 2016, 10:14

mcleod_ideafix escribió:
Respecto a la forma de generar el color azul, yo te sugeriría otra forma: poner un 0 antes o después vale, pero no tienes el rango de colores que podrías llegar a tener. Una forma, más o menos común de solventar esto consiste en añadir a la derecha del valor, el bit más significativo de dicho valor. O sea:

Código: Seleccionar todo

vga_b <= (std_logic_vector(b) & b(2));
Esa es la forma en que escalan el sonido del AY en el core de MIST para Atari ST. En el caso de Jepalza, como es pasar de 2 a 3 bits añadir el MSB te da la misma salida que si escalas la señal multiplicando:

00b -> 000b
01b -> 1*3/7 ~ 010b
10b -> 2*3/7 ~ 101b
11b -> 111b

Pero cuando hay mas bits el error de linealidad se nota más. Yo, en esos casos, soy más partidiario de usar una LUT si los tiempos lo permiten.

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

Re: Buscar la lógica a este código

Mensaje por jepalza » 27 Sep 2016, 11:28

Gracias a ambos, a ver si esta tarde puedo mirarlo todo con lupa.

Responder