Leitura da memória microwire 93C46 usando CPLD

    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!

 

0 comentários:

Postar um comentário