Dissecando a ULA do TK90X - Parte 1



O contador "mestre"


Para a ULA trabalhar, um "trem de pulsos" precisa ser aplicado na entrada do oscilador, o pino 11, pulsando a 14.30244Mhz, conforme o cristal oscilador original montado no TK. Para facilitar a gramática, daqui pra frente dispensarei "os trocados" e falarei somente em 14Mhz, 7Mhz e 3.5Mhz, sendo que a frequência real são, logicamente, as divisões da original.

O que chamei de contador mestre, na realidade é o contador horizontal, mas praticamente toda a ULA leva em conta o timming desse contador.


No esquema ele foi feito com três contadores binários 74HC161 denominados U1 a U3 em cascata. Isso quer dizer que, quando U1 chega na contagem máxima de 15, ele zera e um pulso é enviado a U2, que por sua vez faz o mesmo com U3. Então, com os três componentes formando um contador de 12 bits poderíamos contar de 0 a 4095, porém como notado, só foram usados 10 bits, já reduzindo para a faixa de 0 a 1023. A pegadinha é que temos uma porta lógica NAND em U47, no esquema um 74HC30, que reseta o contador em 911. O resumo de tudo é que o contador mestre conta sempre de 0 a 911.

Vendo esse mesmo bloco no VHDL, temos o seguinte:

    process ( OSC )
    begin        
        if rising_edge( OSC ) then -- a cada subida do pulso de clock
            
            if ( hcc = 911 ) then -- se o contador chegou a 911
            
                hcc <= ( OTHERS => '0' ); -- ele é zerado
                
            else
            
                hcc <= hcc + 1; -- senão, incrementa a variável temporária do contador em 1
                
            end if;
            
        end if;
    end process;

Mesmo para quem não conhece a linguagem, é bem simples de entender com os comentários.

Então, o contador mestre é apenas um contador até 911, mas de onde saiu esse número? Para isso, temos que nos basear na própria tela do TK. (A imagem abaixo está modificada sendo que originalmente foi feita pelo Flávio Matsumoto, do Cantinho do TK90X.)
Warning: imagejpeg(): Unable to open 'TempoHor_t.jpg' for writing: Permission denied in /home/panet/victortrucco.com/funcoes.php on line 111



Como vemos, cada linha da tela é formada por 456 pulsos de clock a 7Mhz sendo que os primeiros 40 pulsos são a borda esquerda, 256 para o miolo, 64 para a direita e os 96 pulsos extras seriam o "retraço", o tempo que os aparelhos de tvs antigos precisavam para reposicionar o canhão de elétrons para o começo da nova linha. Então, em um contador de 0 a 911 a 14Mhz, se dispensarmos o primeiro bit, teremos um contador de 0 a 455 a 7Mhz nos bits de 1 a 9 do contador.

No VHDL, temos então:

     hc( 8 downto 0 ) <= hcc( 9 downto 1 );

Vejam que os bits da variável temporária do contador "hcc" é armazenada no contador propriamente dito, o "hc", comforme a explicação acima. Já no esquema (a primeira imagem), notem que o HC0 a HC8 é nomeado a partir do segundo bit do contador, na pratica sendo exatamente igual a versão VHDL. Voltaremos a falar dos contadores horizontal e vertical com mais detalhes quando estivermos tratando da parte do vídeo.

O primeiro bit é aproveitado para fazer o clock de 7Mhz usado em muitos lugares dentro da ULA. No esquema ele é parte da porta NAND U11.


No VDHL:

     clk7 <= not hcc( 0 );


Voltar para o índice




Dúvidas, sugestões? Use o espaço abaixo.


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.