Sim, as PLLs podem ser compartilhadas usando a função Altera® SPI 4.2 MegaCore® em Stratix® dispositivos IV GX. O compartilhamento de PLL com o núcleo SPI 4.2 entre transmissão (TX) e recepção (RX) é mais complicado para Stratix IV GX ES do que outros dispositivos FPGA.
A megafunção ALTLVDS DO NÚCLEO SPI 4.2 para Stratix IV GX ES não suporta o compartilhamento interno de PLL para Tx e Rx. O desalinhamento DPA leva significativamente mais tempo do que o esperado para selecionar a fase ideal. Isso causará uma fase não ideal e resultará em erros de bits de dados mesmo após o sinal de bloqueio DPA ter sido afirmado. A redefinição do circuito DPA também desencadeia este problema.
Para habilitar o compartilhamento de PLL, siga as configurações passo a passo abaixo:
1. Verifique "Usar PLL externo" na guia Configurações de parâmetros da Megafunção ALTLVDS
2. Desmarque "Use PLL(s) compartilhado para receptores e transmissores" na guia De configurações de frequência/PLL da Megafunção ALTLVDS
3. Verifique "Habilitar a calibração pll" na 3ª guia de configurações DPA da Megafunção ALTLVDS
4. Execute o gerenciador de plug in megawizard e crie uma Megafunção ALTPLL. Aplique o grau de velocidade do dispositivo adequado e a frequência de entrada do clock de acordo com a configuração do sistema. Escolha Left_Right PLL
4-1. Na guia Reconfiguração PLL, em configuração de fase dinâmica, selecione "Criar entradas opcionais para reconfiguração dinâmica de fase"
4-2. Na guia Clocks de saída - clk c0, insira a frequência do clock de saída (o clock rápido executando a taxa de dados LVDS). Este relógio alimentará rx_inclock e tx_inclock. Ajuste a mudança de fase = -180 graus em relação ao clock vcO. Defina o ciclo de trabalho para 50%. Selecione "use essas configurações de clock para o clock DPA"
4-3. Na guia Clocks de saída - clk c1, insira a frequência do clock de transferência (clock rápido / fator de deserialização). Alimente esta saída de clock para tx_enable e rx_enable. Defina a mudança de fase para [(fator de deserialização - 2) / fator de deserialização] * 360 graus. Defina o ciclo de trabalho para (100 / fator de deserialização)
4-4. Na guia Clocks de saída - clk c2, insira a frequência do clock de saída (clock rápido / fator de deserialização). Alimente esta saída de clock para rx_syncclock. Defina a mudança de fase para (-180 degress/ fator de deserialização). Ajuste o ciclo de trabalho para 50%
Esquema de clocking da Figura 1 PLL para LVDS
5. Faça alterações nos módulos do núcleo SPI4.2 Rx
5-1. No nome de variação _rx_core.v, substitua a instalação do nome de variação _rx_data_phy_altlvds com a instalação abaixo:
< nome de variação do SPI4>_rx_data_phy_altlvds rx_data_phy_altlvds (
.pll_areset(pll_areset),
.pll_phasedone(phasedone),
.rx_cda_reset({lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset}),
.rx_channel_data_align(bitslip),
.rx_enable(rx_enable),
.rx_fifo_reset({lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset}),
.rx_in(rx_in),
.rx_inclock(rx_inclock),
.rx_reset({lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset, lvds_reset}), // entrada [16:0],
.rx_syncclock(rx_syncclock),
.dpa_pll_cal_busy(dpa_pll_cal_busy),
.pll_phasecounterselect(phasecounterselect),
.pll_phasestep(phasestep),
.pll_phaseupdown(phaseupdown),
.pll_scanclk(scanclk),
.rx_dpa_locked(stat_rd_dpa_lvds_locked),
.rx_out(rx_out_serdes) );
5-2. No nome de variação .v (invólucro do núcleo SPI4.2 Rx), inclua a seguinte instação:
< nome de variação do SPI4>_pl4_rx_core _pl4_rx_core_inst (
...
.rx_inclock(rx_inclock),
.rx_enable(rx_enable),
.rx_syncclock(rx_syncclock),
.dpa_pll_cal_busy(dpa_pll_cal_busy),
.phasecounterselect (phasecounterselect),
.phasestep (phasestep),
.phaseupdown (phaseupdown),
.scanclk(scanclk),
.phasedone (phasedone),
...);
6. Faça alterações no módulo do núcleo SPI4.2 Tx:
6-1. No nome de variação _tx_core.v, substitua a instalação do nome de variação _tx_data_phy_altlvds com a instalação abaixo:
_tx_data_phy_altlvds tx_data_phy_altlvds (
.tx_enable(tx_enable), //input
.tx_in(tx_in_i), //input
.tx_inclock(tx_inclock)/entrada
.tx_coreclk(tx_coreclk),
.tx_out(tx_out), //saída
.tx_outclock(tx_outclock) //saída);
6-2. No nome de variação .v (invólucro do núcleo SPI4.2 Tx), inclua a seguinte instação:
_pl4_tx_core _pl4_tx_core_inst (
...
.trefclk(trefclk),
.tx_enable(tx_enable),
.tx_coreclk(tx_coreclk),
... );
7. A saída do barramento ALTLVDS rx_out receptor SPI4.2 será registrada com rx_outclock.
8. O barramento do transmissor SPI4.2 ALTLVDS tx_in pré-registrado com tx_coreclock.
9. Inverta a saída de bloqueio PLL compartilhada e a alimente para pll_areset porta da Megafunção ALTLVDS.