A ULA em CPLD - Semana de 25 de Novembro a 1 de Dezembro


25 de Novembro de 2012

Achei o problema no chaveamento do 50/60Hz, era apenas uma string que eu tinha digitado errado no esquemático. Já na parte da memória de video, o caso parece ser mesmo de acesso às DRAMs. Cheguei a colocar as portas em tri-state (obrigado Fabio pela dica no ISE) e mesmo com a sugestão do Daniel para um pequeno atraso na linha de multiplexação dos endereços, ainda não está funcional. Acredito que valha a pena voltar um passo e testar diretamente a saída dos latchs ANTES da matriz, utilizando a EEPROM. No teste de ontem tentei colocá-la depois, do mesmo jeito que o TK acessaria a DRAM, mas nunca cheguei a testar só o latch.

Tempo de hoje: 03 horas



26 de Novembro de 2012

Falando rapidamente de como a imagem é realmente formada, um contador formado por U33 e U34 avança para buscar na memória de video cada informação do que eu chamo de "miolo", aquele quadrado com a imagem propriamente dita, dentro da borda. Para cada byte lido para tela, uma posição equivalente é lida na área de atributos, controlado pelo sinal AL2 (pixels quando em nivel baixo, atributos quando em nivel alto). Logo, são duas leituras simultâneas para cada posição da tela.

Vale ressaltar também o engenhoso esquema usado pelos desenvolvedores originais da ULA do Spectrum: sem entrar em muitos pormenores, nas memórias dinâmicas, os bytes são armazenados em forma de matriz e para acessá-los são necessário dois sinais de leitura, /RAS para acessar a linha e /CAS para a coluna. Para economizar pinos e ao mesmo tempo baratear custos da produção, o multiplexador de endereços, a parte que converte um endereço para essa matriz, ficou interno na ULA, sendo possível então a ligação direta entre ela e as DRAMs. Como disse anteriormente, são necessárias duas leituras simultâneas nas memórias, uma pro pixel e outra para o atributo, então para ganhar tempo, os pixels ficam gravados numa das colunas da matriz, enquanto os atributos em outra coluna de uma mesma linha. Na prática isso quer dizer que é enviado um único sinal de /RAS seguido de dois /CAS na sequencia, que retornam os dois bytes necessários. Simples, rápido e eficiente!

Eu nunca tinha debugado muito bem a parte da geração do video propriamente dita, então matei a parte de multiplexação, voltei para o protoboard e liguei diretamente a CPLD na EEPROM, gravada com algumas telas de abertura de jogos, fazendo a leitura direta dos pixels, sem a matriz. Pude comprovar que tinha algo de muito errado nessa parte...


Pixels perdidos nas bordas, sinal que eu estava lendo e gerando a imagem antes do tempo. Revisando o esquema, percebi o meu erro de digitação: a entrada de clock do contador não era a "VidClock" e sim "OutLatch".


Ah, bem melhor agora. Apesar da imagem não estar correta ainda, os pixels parecem estar no lugar certo, apesar de incorretos. Resolvi atacar então o problema da borda. Como eu não estava dando nenhum comando para mudá-la, ela deveria ficar simplesmente preta, mas algo estava alterando os bytes dela. Essa parte é bem simples. Um 74hc574 detecta quando houve escrita na porta da ULA e transfere os dados para "as variáveis" de controle. Ok, mas no ISE não tem o 574 pronto na biblioteca, mas existe a primitiva do latch, logo, só colocar e deu... Porém, o pulo do gato só percebi agora na revisão: a primitiva do Latch tem o seu gate controlada por sinal alto (active High), enquanto o 574 é sinal baixo (active Low), então antes do latch obrigatóriamente eu tenho que ter um inversor para que eu não precise alterar o esquema original. Já sabendo disso, catei e acertei os outros latchs que eu também usava na parte do gerador do display.

E...





Bem, ainda não está 100% correto, mas claramente já dá pra identificar as imagens. Desconfio que em algum ponto eu tenha cruzado os sinais de alguns bits, porque aparentemente os bits estão corretos, mas em ordem trocada dentro do byte. Ou talvez estão apenas delocados para o lado, ainda nao deu pra entender muito bem, deve ser o sono. Ficou ainda duas faixas verticais, gerada pela linha D2, que ainda não descobri a causa, mas certamente hoje já avançamos bem.

Explicando novamente, as imagens são estáticas, gravadas em EEPROM com testes em protoboard. Apesar de ter dado um grande passo hoje, ainda falta muito chão a ser percorrido.

Tempo de hoje: 04 horas



27 de Novembro de 2012

Continuei testando a leitura e saida para o video a partir da EEPROM, mas em meio aos testes eu soltava e aterrava algumas linhas de dados para tentar entender melhor onde estava ocorrendo o deslocamento dos pixels. Numa destas peguei a linha A0 ao invés da linha D0 que era ao lado e R.I.P. CPLD :(

Troquei a peça no shield, mas quando terminei já era tarde para começar os testes novamente.

Acredito que eu vá voltar mais um passo e pegar somente os pixels, ignorando por enquanto a área de atributos. Será mais fácil de identificar o problema sem aquela confusão toda de cores na tela. O Daniel Viana também deu uma sugestão boa de gerar algumas teclas com padrões conhecidos, como uma com todas os pixels preenchidos, outra sem nenhum e por ai vai...

Volto as telinhas dos jogos quando já estiver funcionando essa parte.

Tempo de hoje: 03 horas



28 de Novembro de 2012

Gerei algumas telinhas em preto e branco para tentar entender melhor onde estaria o problema de decodificação. Ao que tudo indica, está seria inversão em algumas das linhas, porque as colunas estão perfeitas, o que pode ser notado nas imagens que são somente listras.










Tempo de hoje: 03 horas



29 de Novembro de 2012

Hoje tive a presença ilustre do Fabio Belavenuto no meu MSN e rodamos alguns testes no CPLD. Ele descobriu que uma das primitivas usadas no ISE tem comportamento diferente do que diz a documentação, o que eu pude comprovar com um teste no osciloscópio. A primitiva CR16CE usada para substituir o 74HC4040 muda o contador na SUBIDA do clock e não na descida como diz claramente o manual. Na foto, o clock de 14Mhz em amarelo e a saída Q0 da porta em azul, comprovando a mudançca de estado na subida.


Para ficar igual ao 4040 foi necessário então um inversor na entrada de clock, porém curiosamente o resultado ficou pior do que antes, porque agora além da inversão das linhas citado ontem, as colunas estão duplicadas a cada 8 pixels. Apesar de "errado", retirei o inversor e mantive a saída como estava anteriormente.

Tempo de hoje: 03 horas



30 de Novembro de 2012

Novamente o Fabio me acompanhou no MSN e fizemos inumeros testes. O primeiro foi para achar o problema dos pixels trocados e com muita paciencia fui contando as linhas da tela e descobri que a linha 1 da matrix de 8 x 8 pixels invertia com 2 e a 5 invertia com a 6. Numa conta cheguei a conclusão que seria uma inversão entre A8 e A9, o que pude comprovar que inverti os fios quando montei o protoboard. No novo teste as imagens a partir da eeprom ficaram perfeitas!




Tempo de hoje: 04 horas



01 de Dezembro de 2012

Com a parte da saida de video funcionando perfeito, agora é hora de atacar a multiplexação das DRAMs. Após alguns testes no TK real e depois de muito observar as imagens geradas cheguei a conclusão que meus dois shields estavam com as CPLDs queimadas em parte pelo menos. Agora são 3 mortas e contando.

Substitui (agora rapidamente porque foi a terceira que soldei) num dos shield para continuar. Após INÚMEROS testes decidimos (o Fabio mais uma vez me acompanhou no MSN) encerrar o dia. Ainda persistem alguns problemas, talvez de contenção da CPU, talvez de tempo de acesso às DRAMs que não deixa o micro inicializar. Um segundo problema seria a borda não estar mudando entre azul e vermelho com a placa de diagnóstico conectada, o que reforça a desconfiança de ser problema de contenção.


O mais interessante nessas imagens acima é que eu juro que quando dou boot com a ULA original eu posso ver exatamente este padrão por um décimo de segundo na tela, antes do auto-teste da ROM do TK colocar a tela toda preta. Acho que estou começando a ver coisas! :D

Tempo de hoje: 05 horas



Total de tempo trabalhado no projeto nesta semana: 25 horas





Voltar - Home


Comente



COMENTÁRIOS DESABILITADOS NO MOMENTO! RETORNAM EM BREVE
É expressamente proibido a reprodução total ou parcial deste texto sem a minha devida autorização por escrito.