Leitura da memória microwire 93C46 usando CPLD

0 comentários
    O blog andou sem nenhuma postagem nas últimas semanas, é por causa de um projeto em que estou trabalhando, um kit de desenvolvimento com um AVR e um CPLD Xilinx, por um preço legal e ainda com material didático, afim de que quem nunca trabalhou com lógica programável receba exemplos práticos e de fácil entendimento.
   Um desses guias pode virar o assunto desse post, apresentarei o método.
   A idéia é fazer um "cartão" com a memória, e foi feito, isso ligado diretamente ao CPLD, a ordem dos pinos não interessa muito, mas sim facilitar o layout, já que nesse tipo de lógica programável e ainda mais nos XC9500, os pinos podem ser mudados de qualquer maneira que isso não vai interferir no projeto, já que o tempo de propagação é muito menor que o maior clock do projeto, e o sistema é muito lento.

  O protótipo é mostrado ao lado, e fica registrado que a placa foi fabricada pelo Matheus: http://ryndack.com.br .

   Tudo montado e sem problemas, o próximo passo é trabalhar no hardware em VHDL.





   O que o circuito em VHDL faz é: Com um clock denomindado PEND, um contador de endereços é incrementado, e a saída paralela de dados é enviada diretamente a um display de sete segmentos.

  O COM representa os comuns do display (com vários dígitos), foi mantido num valor fixo para facilitar, CS é o Chip Select, DI é por onde saem os dados do CPLD para entrar no pino DI da memória, DO entram os dados no protocolo Microwire.

  A memória 93C46/56/66 é muito interessante, o protocolo é muito direto de se implementar em hardware, tanto que já me deparei com estas memórias em inúmeras placas de rede, placas de som e até num cartucho de identificação de uma caixa de fitas reagentes de um glicosímetro que eu tinha, ou seja, é algo extremamente interessante e barato, estas memórias podem ser compradas por uma mixaria no ebay.

   Essa memória é FLASH e opera em dois modos, para a 93x46 os modos são:
      128 x 8 ou 64 x 16, o modo é escolhido pelo nível lógico do pino ORG, como descrito no datasheet.
   O meu trabalho se resumiu então a se implementar em VHDL o modo de leitura, como abaixo:

   Isso foi feito com o uso de uma máquina de estado muito simples, como a leitura é sequencial para criar a sequencia de luzes no display, os estados da máquina são diretamente retirados de um contador, cujo clock é o próprio SK.


   Um exemplo de teste foi feito abaixo, na simulação do circuito, onde dá pra ver claramente que a máquina de estados é simples, e algumas saídas são derivadas diretamente dela:


   Esse já é o resultado final, depois de algumas mudanças isso foi testado em um Xilinx XC9536, um CPLD pequeno, mas muito flexível e com capacidade lógica muito maior que um CPLD Altera EPM3032/7032 (concorrente direto).
 
  Mais uma imagem interessante, diretamente do circuito RTL gerado pela síntese, repare nas nets em azul, selecionei elas dentre as que são os estados ou comparação lógica direta entre eles, repare que eles são boa parte das nets desse projeto:


   Depois desse pequeno projetinho pude perceber a motivação de um desenvolvedor de ASIC usar esse tipo de memória, é muito fácil se fazer a leitura disso, como é o caso de placas de rede, onde nas que usam esse tipo de memória, onde o MAC Address é gravado nela, ou numa placa de rede 803.11b/g que vi onde além disso estavam algumas configurações, como canal default, ou em alguns cartões PCMCIA que desmontei e inúmeros outros como até um DVD, fica claro que é muito mais fácil se ler esta memória por hardware que uma I²C.

   Referências:
   Datasheet HT93LC46 (Holtek): http://www.holtek.com/pdf/memory/93lc46v200.pdf
   Datasheet 93C46 (ST): http://www.datasheetcatalog.org/datasheets/120/500312_DS.pdf


  Por enquanto é só, aguardem que postarei aqui novidades!

 
Leia mais

Paralela x Kit da Xess XS95

0 comentários
   Esse problema comecou quando eu troquei a placa mãe da workstation aqui, porque a incrível placa mãe (lixo) da ECS que estava aqui deu problema com menos de 8 meses de uso, daí saí às compras.

   Como achar placa mãe com paralela hoje em dia é quase impossível, acabei comprando uma sem paralela, uma ASUS M2N68-SE2, modelo baratinho, e como 90% das que vi pra essa CPU minha era sem paralela.

  Resolvi isso com uma placa PCI paralela, com ci da Moschip, antes de comprar eu já sabia que isso ia dar problema, explico, o barramento PCI tem inúmeros modos de operação (estudei muito esse barramento há anos atrás, para uma implementação em CPLD), o modo da porta paralela é o de I/O, até aí tudo bem, mas não é recomendado que se coloquem periféricos na região abaixo de 1000h, por questão não do barramento, mas de essa área estar reservada ao barramento ISA, daí, ninguém faz uma paralela nos endereços tradicionais: 378, 278, 3BC, pelo problema de que essa faixa de endereços (teoricamente) não está disponível para o PCI.

   Daí a Moschip colocou as paralelas em EC00 e outro endereço perto, ou seja, em programas onde você só pode selecionar o endereço por caixa de diálogo entre os 3 citados acima, essa placa não funciona, assim em programas onde a opção de endereço só dá espaço pra 3 dígitos hexadecimais (24 bits).

   Ou seja, teve coisa antiga aqui que não vai funcionar nunca mais!

   Além disso, fui ligar meu kit XS95 da Xess, um kit que tem além de um CPLD Xilinx XC95108, um 8051e alguma RAM, ao tentar conectar só conseguia mensagem de erro..

   Pensei que eu poderia ter queimado o CPLD sem ter percebido, então comprei um novo da China, chegou aqui, coloquei ele na placa e nada mudou, muito estranho, as mesmas mensagens de erro..

   Com um notebook aqui com paralela instalei o programa nele e funcionou tudo direitinho com o hardware de testes, como na figurinha a seguir, isto é, o problema foi minha paralela..

 
Leia mais