Desenvolvimento do módulo no iMX8 da NXP. Recursos de transferência de rastreamento DDR

Saudações, Habr!



Há algum tempo, a NXP introduziu a linha de processadores iMX8. Seria estranho perder uma oportunidade e não desenvolver um novo módulo. Quem se importa com as nuances, peço um recorte (muitas fotos leves).

Introdução (pular)


Há muito tempo estamos “viciados” em produtos NXP, em termos de processadores, e sempre seguimos as últimas atualizações da empresa. Quando um novo produto é lançado, compramos uma referência e recebemos amostras através dos distribuidores, para que os programadores iniciem imediatamente o desenvolvimento do chip, e os aparelhos, após a conclusão da primeira iteração, recebam rapidamente um modelo de produto. Um papel importante em tudo isso é desempenhado pelo suporte técnico, que fornece SDK e HDK e responde a perguntas de programadores e aparelhos. Enquanto os primeiros iniciam o software e começam a adaptá-lo às nossas tarefas, os segundos preparam a segunda iteração da placa com os erros corrigidos, se houver (por exemplo, o módulo do processador no chip iMX7 desenvolvido pelo cliente foi comissionado a partir da primeira iteração e o segundo era puramente cosmético, o módulo O iMX6UL / ULL, desenvolvido pela primeira vez para nossos projetos, e depois se tornar um produto separado,também quase inalterado após o primeiro lançamento). Ao desenvolver o ferro, preservamos parcialmente o circuito de referência (desde que isso não prejudique a qualidade do produto), para que o encaixe do software e do hardware seja rápido e indolor. Cada nova iteração leva a novos testes, que não apenas precisam ser reexecutados, mas também complementados, levando em consideração todas as alterações. Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.Ao desenvolver ferro, preservamos parcialmente o circuito de referência (desde que isso não prejudique a qualidade do produto), para que o encaixe do software e do hardware seja rápido e indolor. Cada nova iteração leva a novos testes, que não apenas precisam ser reexecutados, mas também complementados, levando em consideração todas as alterações. Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.Ao desenvolver o ferro, preservamos parcialmente o circuito de referência (desde que isso não prejudique a qualidade do produto), para que o encaixe do software e do hardware seja rápido e indolor. Cada nova iteração leva a novos testes, que não apenas precisam ser reexecutados, mas também complementados, levando em consideração todas as alterações. Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.para que o encaixe das peças de software e hardware seja rápido e indolor. Cada nova iteração leva a novos testes, que não apenas precisam ser reexecutados, mas também complementados, levando em consideração todas as alterações. Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.para que o encaixe das peças de software e hardware seja rápido e indolor. Cada nova iteração leva a novos testes, que não apenas precisam ser reexecutados, mas também complementados, levando em consideração todas as alterações. Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.Cada nova descarga de gérberas do projeto requer verificação (produção de amostras e seus testes) antes de iniciar a série. Normalmente, o módulo desenvolvido é uma solução universal e é usado em nossos vários projetos. Além disso, alguns clientes solicitam a personalização do módulo, por exemplo, em termos de orifícios de montagem, tipos de conectores, configuração ou todos de uma vez, para usar como produto final em seus desenvolvimentos futuros.

É assim que costumamos ir da saída do processador à aparência do nosso novo produto. Às vezes, é simples e rápido, mas acontece que você precisa fazer melhorias sérias em pouco tempo, que aparecem durante o teste.

Por onde começar?


Não vou me aprofundar no trabalho preparatório que antecede o início do projeto - essa é a coordenação do TOR, a elaboração de um cronograma de trabalho, a aprovação de estimativas, etc. Falarei sobre as primeiras etapas que podem ajudar a reduzir significativamente o tempo de desenvolvimento do projeto, usando o iMX8 no Altium Designer como exemplo. Não será algo sobrenatural e obscuro, acho que muitos o fazem, mas talvez não todos.

A coisa mais assustadora, talvez, quando olho para a documentação de um processador ou um circuito pronto, é a perspectiva de rastrear a RAM. Cedo ou tarde, todos se defrontam com isso, mas, como dizem, é melhor tarde, se houver essa oportunidade. Bem, se você apenas usar um chip no dispositivo, poderá ser mais fácil rastrear você mesmo. Abaixo está um exemplo de um rastreamento DDR3L para Xilinx (placa de 4 camadas). Projetado a partir do zero, sem queixas.



Figura 1. Rastreio de memória RAM DDR3L para Xilinx XC7A35T-1FTG256

Mas quando você precisa de 4 ripas, e mesmo em lados diferentes da placa, para reduzir o tamanho. A seguir, é apresentado um exemplo de módulo no iMX6Q.



Figura 2. Rastreie 4 chips de RAM DDR3 para NXP iMX6Q (2 na parte superior, 2 na parte inferior - um abaixo do outro)

Isso também não é uma tarefa esmagadora, mas não vejo o sentido (repito, infelizmente nem sempre é esse o caso) se puder ser simplificado, mantendo a qualidade de um produto testado e depurado (no nosso caso, essa é uma referência que você pode "tocar") ) Na primeira iteração, o principal é que o chip é iniciado e o maior número possível de interfaces funciona. Isso significa que pelo menos a memória está funcionando conosco, toda a energia necessária é fornecida e a pilha de placas é selecionada corretamente. Trabalhos adicionais serão realizados no sentido de melhorar os parâmetros da placa em termos de desempenho periférico. Portanto, a primeira prioridade para nós é memória (operacional e não volátil) e energia.

Não é um segredo que, para um processador produzido em massa e com suporte do fabricante, você possa encontrar, geralmente, um conjunto completo de documentação (exceções são produtos sob a NDA, novos produtos sem suporte etc.). Eu, na primeira fase, ficarei interessado em apenas alguns documentos - trata-se de uma folha de dados, esquema e rastreamento do quadro de referência. Além disso, tudo depende de que forma essa documentação será transferida e em qual sistema CAD você trabalha. Trabalho apenas no Altium Designer e, portanto, não posso usar circuitos e placas de circuito impresso de fabricantes, pois eles geralmente vêm em diferentes formatos. Outro problema de conversão de projetos de programas de terceiros é a incompatibilidade dos campos da base de componentes e, como resultado, a incapacidade de descarregar a lista de elementos. E o que é realmente triste é a falta de conexões entre os componentes (nem sempre, mas com mais frequência).

Neste artigo, quero falar sobre como você pode transferir parcialmente um projeto para o Altium com um circuito convertido e uma placa de circuito impresso.

O pacote interno do Altium Designer, chamado Assistente de Importação, permite importar arquivos de outros sistemas CAD. Pessoalmente, isso é acompanhado por uma dança constante com um pandeiro, pois além do Altium, por exemplo, o Allegro deve ser instalado, mas não vou falar sobre isso. Isso é dedicado a vídeos e artigos individuais na Internet. A conversão, geralmente, mas nem sempre, não permite que você obtenha um rascunho de trabalho, do qual não preciso. Para o nosso trabalho, precisamos de um arquivo pcb e, de preferência, um esquema. Por exemplo, usarei o projeto de referência no iMX8 - "MCIMX8M-EVK-DESIGNFILES".



Fig. 3. Quadro de referência MCIMX8M-EVK-DESIGNFILES

Como planejo desenvolver um módulo, não precisarei da maioria das interfaces - elas serão implementadas na placa-mãe. Até a imagem mostra que você precisa encolher muito ao organizar os componentes e, da placa de circuito impresso, posso pegar apenas o rastreamento LPDDR4 (MT53B768M32D4NQ-062) e PMIC (controlador de energia do processador MC34PF4210A1ES). O eMMC e o cartão SD estão longe do chip, eles precisarão ser rastreados novamente, mas isso não é um problema.

Biblioteca de componentes


Para minha biblioteca do projeto MCIMX8M-EVK-DESIGNFILES, usei apenas alguns componentes, incluindo processador, memória e PMIC.

Vamos dar uma olhada no componente iMX8. Abaixo está uma captura de tela da biblioteca. O MIMX8MQ7DVAJZXA possui 14 partes combinadas em um componente. Essa separação permite distribuir ainda mais as interfaces em diferentes folhas (partes do circuito, que são combinadas em um projeto). Por exemplo, "PARTE A" é sobre USB, "PARTE D" é MIPI DSI, "PARTE G" é tudo SAI, etc. No futuro, direi que meu projeto tem apenas 12 folhas de esquemas, respectivamente, combinei alguns dos elementos para facilitar a leitura.



Fig. 4. MIMX8MQ7DVAJZXA esquemático

Tendo esse componente após a importação, evitei criá-lo do zero, reduzindo significativamente a probabilidade de erros no circuito. Agora, sobre o que terá que ser corrigido nos parâmetros do componente.



Fig.5. Esquema MIMX8MQ7DVAJZXA

Para componentes diferentes, o número de parâmetros pode ser diferente, mas alguns campos devem ser os mesmos para que você possa carregar posteriormente a lista de componentes para pedido e montagem. Os campos à esquerda foram importados da referência. À direita - do qual preciso para mais trabalho. Resistores, por exemplo, têm mais parâmetros, capacitores ainda mais, etc. No meu exemplo, o conjunto mínimo necessário de parâmetros com os cabeçalhos necessários.

Da mesma maneira, converti e alterei a RAM e o controlador de energia. Em seguida, crio um novo projeto (aproximadamente sabendo quantas folhas terei), transfiro partes dos circuitos com ligação e substituo os componentes importados pelos meus. O resultado são peças de circuitos muito semelhantes ao original. Neste artigo, não falarei sobre a estrutura do projeto, a relação entre folhas, etc., então vamos seguir em frente.

A parte mais simples do trabalho foi feita. Agora você pode iniciar o segundo estágio - esta é a transferência do componente pcb da biblioteca.

Aqui é quase o mesmo que era antes, mas em vez dos parâmetros - as camadas. Nos meus componentes, eu uso um conjunto fixo de camadas. Além do padrão "top", "top overlay", "top passado", etc., por exemplo, em "Mechanical 1", traço um esboço de componente, seu modelo 3D e coloco um ".Designator" - isso é feito para que mais tarde foi mais fácil descarregar o desenho da montagem (e outros). Todos os campos extras que eu não uso são excluídos. Assim, tenho cerca de 15 deles sobrando, em vez de 24, como era após a importação. Muitas vezes, para BGA e QFN, é necessário alterar a abertura da máscara das almofadas, fazer outros ajustes nas capacidades de produção, etc.



Fig. 6. pcb MIMX8MQ7DVAJZXA

Agora, nas propriedades esquemáticas, você precisa conectar o componente ao PCB. Para entender melhor tudo o que foi escrito acima, você pode assistir a vídeos com instruções sobre como criar uma biblioteca para o Altium.

Nas duas primeiras etapas preparatórias, consegui criar componentes de biblioteca que agora podem ser usados ​​no projeto. Demorou significativamente menos tempo do que se eu estivesse fazendo isso do zero.

Transferência de rastreamento


O terceiro estágio é o mais difícil - é a transferência de parte do rastreamento do quadro de referência para o projeto. Você precisa ter muito cuidado. Geralmente, os erros de importação trazem erros de transferência (entre ambientes de desenvolvimento), então você só precisa "emprestar" o que precisa, algo que levaria muito tempo e esforço. Eu especialmente não recomendo mover vias, polígonos, recortes em polígonos e as regras para a RDC (Design -> Regras ...).

O iMX8 é rastreado em 10 camadas, então usarei a mesma pilha com a mesma sequência de camadas. Para facilitar o trabalho com o projeto MCIMX8M-EVK-DESIGNFILES, ocultarei todos os polígonos.



Fig. 7. Quadro de referência MCIMX8M-EVK-DESIGNFILES. PCB

Parece assustador. Muito assustador. Parece que você já pode fechar o Altium e chorar. Por conveniência, você pode ocultar camadas desnecessárias, mas isso não ajudará radicalmente, mas por camadas parecerá mais ou menos simples. O DDR é divorciado em 4 camadas, mas eu não consegui o fundo por acidente (veja abaixo).



Fig. 8. Rastreando LPDDR4 MCIMX8M-EVK-DESIGNFILES por camadas

Se você alcançou esse ponto no seu projeto, metade do trabalho de transferência, ou talvez todo o projeto, já foi feito.

Talvez você já tenha adivinhado o que precisa ser feito a seguir? Sim, resta apenas copiar corretamente camada por camada. Vou lhe dizer como faço para evitar erros simples.

Antes de tudo, abro a placa de referência e a minha, com os componentes carregados a partir do circuito em dois monitores (essa opção é mais conveniente para o desenvolvimento). Copio o processador e a memória da placa de referência para mim (isso é necessário para expor esses componentes levando em consideração o rastreamento existente).



Fig. 9. Arranjo mútuo de memória e processador (referência à esquerda)

Depois disso, é necessário instalar o processador e a memória de nossa placa sobre as instaladas corretamente, e depois basta remover os componentes copiados da referência.



Fig. 10. Localização correta do processador e da memória As

linhas de comunicação excessivas podem ser temporariamente ocultas e prosseguir para transferir o rastreio diretamente.

Você precisará usar duas maneiras de copiar fios. O primeiro é o mais simples e mais longo - copiando os condutores, um de cada vez. Você não precisa copiar todas as conexões dessa maneira - levará muito tempo, mas às vezes é conveniente. Por exemplo, tome os sinais dos choques nas almofadas AE14, AD14, AE12 e AD12. Clique em RMB no explorer, selecione o item de menu Localizar objetos semelhantes ..., na janela exibida, marque o nome do explorador e a camada (você pode copiar imediatamente de todas as camadas, incluindo orifícios).



Fig. 11. Copie um condutor em uma camada (superior)

Em seguida, pressione Ctrl + C e defina o mouse para o teclado do processador. Vamos ao nosso quadro e pressionamos Ctrl + V e colamos. Repetimos para todos os quatro condutores e colocamos orifícios nos blocos de memória para ir para o fundo - existem resistores. Se você fez cópias em todas as camadas, os resistores serão mais fáceis de instalar.



Fig. 12. Copiando um único condutor

Figura 12. (à direita) existe um condutor separado (com uma cruz do mouse) - este é um exemplo de cópia do condutor em todas as camadas com uma via. A essência do método é que, quando você copia o condutor e o “coloca no bloco”, recebe o nome do bloco (você precisa ter cuidado - se você copiar o condutor para outro bloco, o nome do outro bloco).

Mesmo agora, você pode transferir todos os condutores da referência para a sua placa, mas existe uma maneira mais fácil (existem vários, mas vamos nos concentrar em um), é ótimo para copiar grupos de condutores em uma camada. Para começar a copiar condutores da segunda camada (e da próxima), é necessário transferir os condutores superiores de todos os blocos do processador; caso contrário, a conexão dos condutores será interrompida (precisamos transferir vias da parte superior para outras camadas, para que os condutores sejam ligados a eles) .



Fig. 13. Copie todos os condutores com vias para o topo

Agora, tenho todos os blocos removidos do processador e podem ser usados ​​em outras camadas. Ou seja, em outra camada, posso ligar os condutores sem medo de que eles se tornem NoNet (condutores suspensos "no ar" que não captaram). Em seguida, transferirei a camada 6 (a terceira, se você observar a Fig. 8.), para mostrar outro hack. Mesmo assim, selecione, copie com encadernação em qualquer orifício ou bloco e cole.



Fig. 14. Copiando todos os condutores com vias da camada 6

O que é o hack? Portanto, além do rastreamento da RAM, consegui extrair as interfaces do processador, que já estarão agrupadas em certas partes da placa. No chip, os barramentos de dados individuais estão localizados em locais específicos. Por exemplo, no iMX8, na parte inferior esquerda do CSI, logo acima da NAND etc., ou seja, eles não podem ser exibidos de maneira diferente.

Após a transferência de todas as camadas necessárias, é necessário remover todas as vias e condutores NoNet (ao copiar cinco camadas, haverá cinco vias em cada placa de cada placa). Então eu organizo manualmente via, ao mesmo tempo, verificando todas as conexões. Com alguma habilidade, todo o trabalho de transferência levará várias horas.

Inferior


Na Fig. 8. Eu mostrei a camada inferior, que também quero transferir. Mas o principal não são condutores (não existem muitos), mas o arranjo dos componentes. Existem 132 elementos sob o chip e a RAM. Normalmente, eu não copio essa camada, mas simplesmente defino o passivo e a referência (abrindo duas placas em monitores diferentes). Essa opção é adequada se você não alterou o tamanho dos componentes para um maior, caso contrário, será necessário mexer.



Fig. 15. Componentes na parte traseira da placa do módulo



Fig. 16. Rastreio final sob o processador e memória das camadas de sinal

Posfácio


Resumindo, posso dizer que esse método de transferência é bastante simples (não excluo que existam outros). Se você começar com cartões simples em 4 camadas, poderá aprender rapidamente como transferir rastreamentos mais complexos, sem gastar grandes recursos nele. Sobre isso, acredito, o artigo pode ser concluído.

Para a "semente", direi que no painel resultante existem 156 polígonos e, se alguém estiver interessado, posso escrever um artigo sobre como eles foram colocados neste módulo, que dificuldades surgiram devido às pequenas dimensões (dimensões do módulo 81 mm * 58 mm) e quais deve ser considerado.

Obrigado pela atenção!

All Articles