Protótipo SDRAM vs problemas de produção

11

Eu tenho um design usando um LPC1788 junto com um módulo SDRAM do ISSI ( IS42S32800D ). Esta é uma interface de 32 bits.

Encaminhei esse projeto e tive um protótipo feito com um fabricante de PCBs que faz protótipos de 6 camadas. O protótipo PCB funciona bem. Então, pensei em obter o PCB fabricado em um lote de pequeno volume (100) do meu fornecedor habitual de PCB. Eu dei a eles as informações de empilhamento que meu protótipo usava para garantir que não houvesse problemas.

Contudo! Eu tenho grandes problemas com a placa de produção. No começo, não consegui responder à SDRAM, o que foi, com o mesmo código que usei na placa de protótipo. A placa anterior estava trabalhando em 120Mhz, então eu tinha certeza de que havia algo errado com essa nova placa. Eu encontrei um post em que as pessoas sugeriam o uso do modo repetidor nas linhas de dados SDRAM (eu não havia usado isso anteriormente) e isso gerou uma resposta do SDRAM, no entanto, não é estável. Posso escrever em mais ou menos 16 endereços, mas, com leituras subsequentes, os dados retornados (em todos os endereços) são os dados que eu escrevi por último (provavelmente devido ao Modo Repetidor). Quando desativo o modo repetidor, os dados retornados são 0xFFFFFFF. Agora estou tentando conectar a 48Mhz, a configuração mais baixa para a qual tenho tempo.

Eu estou usando os mesmos resistores de terminação (nas linhas de dados) de 22Ohms em ambas as placas, as linhas de dados têm uma média de 3 cm de comprimento. A linha do relógio tem 2,4 cm de comprimento. As linhas de endereço têm uma média de 3,8 cm de comprimento.

Isso está fora de especificação, devo atrasar o relógio por mais tempo se for substancialmente mais curto? Estou realmente preso aqui, pois não mudei nada sobre o design que esperava obter uma manufatura perfeita para essas placas.

Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm

Aqui está a configuração da pilha de PCB para o protótipo original (de trabalho): insira a descrição da imagem aqui

Aqui está a configuração da pilha de PCBs para os PCBs de produção (que não funcionam) insira a descrição da imagem aqui

Aqui está o roteamento para a SDRAM: Roteamento SDRAM

James
fonte
3
O controle de impedância foi o mesmo entre as execuções de proto e produção?
Dext0rb
Não tenho certeza. Não sei o suficiente sobre a integridade do sinal para definir adequadamente esses parâmetros para as casas do conselho. Senti que, se eu especificasse parâmetros sem saber o que estava fazendo, causaria problemas, em vez de corrigir problemas.
James
E você pagou para verificar a impedância (que @dextorb sugeriu que você controle)?
Brian Carlton
Não é o tamanho médio que importa. É o mínimo e o máximo dentro do grupo.
9788 Brian Bradton
1
Como a integridade do sinal no rastreamento do relógio analisa os pinos da SDRAM?
Brian Carlton

Respostas:

10

Isso é péssimo. Seus núcleos devem ter 0,2 mm e o equilíbrio de sua espessura deve estar no pré-impregnado entre as camadas 3 e 4 (Inner 1 e Inner 2).

A razão para isso é que, para qualquer sinal em um traço, é necessário que haja um caminho de corrente de retorno no plano logo abaixo dele. A corrente de retorno no plano tentará minimizar a indutância (ou seja, a área do loop), o que significa que tentará seguir o traço do sinal. Se o rastreamento do sinal estiver distante do plano, ele procurará outros rastreamentos para encontrar um caminho de retorno. Isso é eletromagnética que você está lutando.

Além disso, ao ter as camadas internas a distâncias diferentes dos seus planos de referência (lembre-se, todos os trilhos de suprimento se assemelham à terra!) Em comparação com as distâncias da camada externa, você cria uma alteração de impedância toda vez que troca de camada (embora isso possa ser neutralizado com alterações na largura do traço, embora eu ache que valha a pena o problema apenas uma vez) e você aumenta significativamente o potencial de diafonia e outras interferências.

Outra coisa que você precisa verificar são os materiais utilizados: existem mais de 20 materiais diferentes que se autodenominam "FR-4", por exemplo. As coisas que eu costumo usar se chama 370-HR. Ele se comporta muito bem com sinais de alta velocidade de 100 a 500 MHz.

Em relação à linha do relógio, o IIRC, no meu último projeto de SDRAM, tinha o relógio configurado para que sua borda acontecesse por último (seu rastreio era mais longo em 1 cm), depois que todas as linhas de endereço e dados se estabilizaram. Então, sim, vale a pena tentar atrasar o relógio. Eu não precisava de nenhum controle de impedância nas linhas SDRAM.

Seus resistores de terminação devem ser colocados o mais próximo possível dos drivers de linha. Se não estiverem a cerca de 0,5 cm, podem causar reflexões, resultando em ultrapassagem e zumbido. IMHO, o comprimento do traço de 3 cm é muito curto para a necessidade de resistores de terminação (eu os uso começando em torno de 6 a 10 cm); você já tentou tirá-los?

Outra coisa a verificar são seus aviões: você tem traços de sinal cruzando cortes de avião? É um enorme não-não, porque força a corrente de retorno a percorrer um longo caminho em torno do corte.

Finalmente, a taxa de borda é um grande problema nesses projetos. Muitos chips têm tempos de subida e descida desnecessariamente curtos, e a redução da frequência do relógio não afeta isso. Essas arestas rápidas são ótimas para criar reflexões. É isso que seus resistores terminadores de 22 ohms estão tentando consertar: eles diminuem a velocidade das bordas. No entanto, se você está realmente pressionando, uma ferramenta como o HyperLynx da Mentor Graphics pode ser usada para encontrar o melhor design de terminação.

Alguns livros que posso recomendar a você que cobrem tudo isso e muito mais, e juramos por eles no trabalho:

Esses livros abrangem redução de EMI, design de blindagem, empilhamento de PCB, controle de impedância, desacoplamento da fonte de alimentação e muito mais. Além disso, o Sr. Ott ministra seminários sobre esse tópico (vem com uma cópia gratuita de seu livro).

Mike DeSimone
fonte
O livro de Henry Ott é uma bíblia para mim em 1980. No entanto, antes de lê-lo, eu já era hábil em ver vazamentos de RF em um projeto mecânico / elétrico, antes mesmo de os testes da EMC começarem. Slots, radiadores, antenas dielétricas e cabos de barramento de E / S eram a melhor antena para entrada e saída.
Tony Stewart Sunnyskyguy EE75
Boas informações aqui, de acordo com a simulação Hyperlynx baseada nos meus dados de simulação introduzidos, os resistores de 22 Ohm são necessários; caso contrário, a forma de onda nos dados (conduzidos no tempo de subida de 1ns) do SDRAM é terrivelmente distorcida e algumas reflexões cruzam a tensão de referência.
14554 James
Além disso, a recomendação de empilhamento é boa. Há uma pequena diferença no empilhamento entre o protótipo e o fabricante. Estou adicionando os diagramas à pergunta para você ver. Também - eu tenho lido Integridade de Sinais Simplificada por Eric Bogatin. Boas informações aqui, mas levará algum tempo para ser digerido e afundado o suficiente para iniciar um novo layout da placa com suas recomendações.
21412 James
Pelo que vale a pena, o OP tinha originalmente o que parecia ser uma foto de Altium. O Altium possui seu próprio conjunto de ferramentas de integridade de sinal que podem usar arquivos IBIS. Também pode examinar a diafonia. Mas ele precisa das informações exatas de empilhamento para fazer isso.
Ajs410
1
Então, neste ponto, estou mais preocupado com os resistores. Eles parecem estar no meio dos traços, e não nos motoristas a que pertencem. Nessas aplicações, é melhor não usar pacotes de resistores, mas usar resistores individuais pequenos. Se você precisar usar pacotes de resistores, reserve um tempo para fazer um trabalho muito melhor trocando os resistores para tornar o layout menos louco. É tudo o que posso dizer do seu layout, que não possui contornos de pacote e dificulta a visualização de metade das camadas.
Mike DeSimone
4

Nesse tipo de frequência, acho improvável que os problemas de tamanho de faixa sejam um problema importante, certamente para problemas de atraso. Como os problemas começaram com uma nova placa de circuito impresso, a primeira coisa a fazer seria testar todas as linhas em busca de continuidade (com relação à folha de dados, não ao esquema, caso o esquema tenha erros) e escopo de cada pino para verificar se as formas de onda estão em menos plausível - mesmo que seu escopo não esteja apurado para verificar detalhes de tempo, deve ser bastante óbvio se houver pinos abertos ou em curto.

Fazer esse tipo de coisa sem um escopo adequado é repleto de perigos em potencial - como você sabe quanta margem possui? Mesmo que funcione, como você sabe se está ou não no limite e vulnerável a falhas de campo / produção devido a tolerâncias, temperatura ou Fase da Lua?

mikeselectricstuff
fonte
2

2nd add Assumimos que seu design foi testado com margem e o código foi perfeito em suas perguntas. (não), sugiro que você verifique o seguinte;

  1. Configure o IO para reduzir rapidamente e desativar os filtros de entrada
  2. Ativar o modo de entrada no relógio
  3. Defina o bit de rotação (9?) Para aumentar a taxa de rotação dos pinos da interface SDRAM
  4. Ative o modo repetidor, pois são bidirecionais e não devem ser deixados flutuando em uma entrada CMOS.
  5. Altere a tensão de alimentação para determinar a sensibilidade ao erro.
  6. o modo de redefinição padrão para um pino do barramento de dados é FUNC = 0X00, MODO = 0X02, HISTÉRIA = ATIVADO, INVERTIDO = DESATIVADO e SLEW = PADRÃO
  7. A sua chamada para PINSEL_ConfigPin () com um novo valor de função, redefine o MODO para INATIVO (sem resistor de pull-down / pull-up) e desativa a Histerese?
  8. Você está usando loops for / next ou código discreto como;

    • LPC_IOCON-> P3_0 | = 1; // D0 @ P3.0
    • LPC_IOCON-> P3_1 | = 1; // D1 @ P3.1
    • LPC_IOCON-> P3_2 | = 1; // D2 @ P3.2 etc.
  9. Você afirma reativar o PIN WE, sempre que necessário?
  10. Você usa? * pPIN & = ~ (0x00000007); // Limpar bits de função "

Lembro-me de depurar meu design do 1º CMOS de um aluno de pós-graduação em Física para uma placa lógica sísmica de comutação temporizada e gravação portátil. Não havia firmware ou uC, mas ele nunca fez uma análise de tolerância de pior caso e o hardware tinha condições de corrida em todo o lugar, quando uma dúzia de placas a mais foram construídas e depuradas por mim. O Prof. Sísmico chamou o Chefe do Departamento de Física para perguntar por que eu não poderia fazer a depuração das placas, então tive que aconselhá-lo quanto à variação dos componentes expostos a muitas falhas de projeto chamadas condições de corrida de tempo devido a condições metaestáveis ​​e a borda do relógio usada. Ele ainda não entendeu, então eu perguntei a ele quantos dedos eu desdobrei enquanto levantava minha mão antes que atingisse minha cintura de baixo a alto. Então ele disse: você não pode fazer isso e espera uma resposta correta. Eu disse precisamente. Essa é uma condição de corrida primitiva. Eles ficam menos óbvios com mais níveis de complexidade. U de Manitoba 1973.

1º adicionado: Qual esquema de terminação de ônibus você usou? ônibus O método (1) é o preferido. 1.25Vdc está limpo?


  1. Pagou as TIC nessas placas? teste de placa nua é uma obrigação
  2. Você especificou impedância nas instruções de layout do seu gerber?
  3. Você executou simulações no seu layout com tolerâncias?
  4. A constante dielétrica nas placas e o número de camadas de pré-gravação controla a impedância da tira de linha e da micro-tira, juntamente com a largura e o espaço do traço.

    Existem muitas calculadoras Z online gratuitas para stripline.

    Você pode tentar medir a capacitância em pistas grandes ou planos de terra e comparar as duas placas nuas.

    Observe também os sinais com escopo de alta velocidade e observe o overshoot e o relógio <> padrão de olho de dados.

Tem que haver uma explicação simples para os erros, mas não é fácil de encontrar. Mas uma vez que você encontre a causa raiz ... você não cometerá esse erro novamente.

adicionado: Outro erro que encontrei é o seu diagrama de altura da pilha não indica a espessura da camada de Cu e não é suficiente para caber em 6 camadas, a menos que esteja errado ou a espessura do Cu seja de 0,039 mm (NÃO;)

Tony Stewart Sunnyskyguy EE75
fonte
Apenas um comentário para o OP - vejo que o OP está usando o Altium Designer e há uma calculadora de impedância embutida no software. Eu não usei muito, mas eu sei que está lá em algum lugar!
Dext0rb
2
Ao conectar um traço (pressione W no modo de exibição PCB), pressione a tecla Tab e você verá a impedância estimada.
11282 ajs410
geralmente para baixa complexidade Qtd 100 PWB's Eu não pagaria por TIC (teste), mas estes têm faixas cegas, então eu ... algo a considerar ... e medir a capacitância em uma placa vazia V + <> GND
Tony Stewart Sunnyskyguy EE75
Não paguei pelo controle de impedância nessas placas. As linhas simuladas no Hyperlynx (MentorGraphics) mostraram formas de onda praticamente perfeitas (ou dentro das especificações) com base no meu projeto roteado. Para modelar isso, recriei cada linha de transmissão e via junto com os modelos IBIS. Eu não tenho um escopo de largura de banda suficiente o investigou correctamente os sinais actuais = (
James
1
Olá @TonyStewart, obrigado por seu apoio. 1) A placa do protótipo não exigiu o giro rápido. Ativado sem nenhuma alteração em vigor. 2) Não sabe o que isso significa - o relógio é uma saída? 3) A histerese foi deixada ativada. Desativado sem alteração no efeito. 4) Aumento da rotação não ativado no proto. Ativado sem nenhuma alteração em vigor. 5) Não testado. 7) A função Pin Config não altera outros bits. 8) Código discreto para pinos de controle, para loop para dados / endereço 9) Quando preciso ativar o WE? O controlador EMC deve fazer isso por mim? 10) Os bits não são anotados antes de serem definidos. Tenho outro protótipo em ordem, estarei aqui semana que vem.
14444 James