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):
Aqui está a configuração da pilha de PCBs para os PCBs de produção (que não funcionam)
Aqui está o roteamento para a SDRAM:
fonte
Respostas:
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).
fonte
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?
fonte
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;
Você está usando loops for / next ou código discreto como;
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? O método (1) é o preferido. 1.25Vdc está limpo?
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;)
fonte