Estou procurando implementar um bloqueio de fase em um FPGA sem usar nenhum componente externo (que não seja o ADC). Para simplificar, o bloqueio a um simples pulso binário é adequado. A frequência dos sinais é de ~ 0,1-1% do relógio. Não posso usar os PLLs de relógio a bordo porque eles são tipicamente:
- Não configurável (definido durante a síntese).
- Ansioso.
- Não suporte a frequência que eu preciso.
Eu estive examinando a literatura e encontrei alguns loops de fase binária bloqueados. O mais notável é o design de "roubo de pulso", no qual posso postar um link, se desejado. Eu implementei e sintetizei com algum sucesso, mas seu alcance de jitter e bloqueio não era tão bom quanto o anunciado. Eu também tive sucesso usando um DVCO externo, mas eu preferiria se eu pudesse implementar tudo no chip.
Um projeto de circuito digital ou até mesmo uma dica na direção certa seria útil (já estou batendo nisso há algum tempo), uma implementação comprovada de FPGA seria maravilhosa, mas não esperada.
ADICIONADO 10-27-2010
O design atual da DPLL que eu usei tem um "Random Walk Filter" como o filtro de loop (não o "roubo de pulso" descrito anteriormente, passando por minhas anotações que não funcionaram muito bem), que direciona os pulsos do relógio para o DCO . O intervalo de bloqueio é definido via divisor no DCO. A sensibilidade do loop é estabelecida variando o comprimento da caminhada aleatória.
O artigo em que isso é encontrado é citado no final deste post. Depois de implementar partes dele, descobri que ele já estava implementado no OpenCores; no entanto, nos últimos meses, o projeto foi excluído, mas eu tenho os arquivos Verilog salvos, se alguém quiser.
Yamamoto, H .; Mori, S .; , "Desempenho do loop binário bloqueado de fase digital quantizado binário com uma nova classe de filtro sequencial", Communications, IEEE Transactions on, vol.26, no.1, pp. 35-45, janeiro de 1978
doi: 10.1109 / TCOM.1978.1093972
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1093972&isnumber=23895
Respostas:
Você pode postar mais detalhes sobre a frequência de destino, largura de banda de jitter e loop (tempo de acomodação necessário)? Além disso, que tipo de oscilador você deseja usar (externo com um DAC, com / sem pontilhamento ?, um contador / acumulador digital no chip)?
Se você está satisfeito com um "oscilador" digital (ou seja, um acumulador transbordante) e seu tremor, o resto do circuito pode ser bastante simples:
Quanto à largura de banda do loop, se não for aplicada pelo tempo de acomodação, decida-a com base nas contribuições de ruído de todos os componentes.
Caso o sinal de referência seja modulado por fase ou frequência - use uma largura de banda de loop menor que a menor frequência do sinal que modula a referência.
Técnicas mais complicadas são usadas se a frequência de saída for próxima ou igual à freqüência do relógio e / ou se for necessária a baixa instabilidade ou uma faixa de travamento muito rápida. Talvez no seu caso eles não sejam necessários, além de não serem adequados para uma implementação de FPGA.
fonte
Se você pode tolerar um pouco de instabilidade, mas na maioria das vezes só precisa de um relógio preciso em um relógio para recuperação de dados, convém implementar algo como o CAN Standard PLL (começa na página 67 desse PDF). Isso funciona com base em um contador de estouro que deve ser ajustado nominalmente corretamente, mas sincroniza até as bordas no fluxo de pulso de entrada.
fonte