是的,可以在 Stratix® IV GX 设备中使用Altera® SPI 4.2 MegaCore® 功能共享 PLL。与其他FPGA设备相比,与 SPI 4.2 内核之间传输 (TX) 和收发 (RX) 的 PLL 共享对于Stratix IV GX ES 来说更为复杂。
SPI 4.2 内核的 Stratix IV GX ES 的 ALTLVDS 宏功能不支持用于 Tx 和 Rx 的 PLL 的内部共享。 DPA 卸载比选择最佳相所需的时间要长得多。这样会导致不理想的阶段,并导致数据位错误,即使在 DPA 锁信号被表明之后。重置 DPA 电路也会触发此问题。
要启用 PLL 共享,请按照以下步骤设置操作:
1. 在 ALTLVDS 宏功能参数设置 选项卡中检查"使用外部 PLL"
2. 在 ALTLVDS 宏功能的 Frequency/PLL 设置选项卡中取消勾选"使用共享 PLL(s)用于接收器和发射器"
3. 在 ALTLVDS 宏功能的第三 DPA 设置选项卡中检查"启用 PLL 校准"
4. 执行 Megawistreamd 插件管理器并创建 ALTPLL 宏功能。根据系统配置应用相应的设备速度等级和时钟输入频率。选择 Left_Right PLL
4-1. 在 PLL 重新配置选项卡中,在动态相配置下,选择"创建用于动态阶段重新配置的可选输入"
4-2. 在 Output Clocks 选项卡 - clk c0 中,输入输出时钟频率(以 LVDS 数据速率运行的快速时钟)。此时钟将馈送rx_inclock和tx_inclock。设置相位移 = -180 度(对于 VCO 时钟)。将功耗周期设置为 50%。选择"对 DPA 时钟使用这些时钟设置"
4-3. 在 Output Clocks 选项卡 - clk c1 中,输入 ouput 时钟频率(快速时钟/解算因数)。将此时钟输出馈送至tx_enable和rx_enable。将相位移位设置为 [(解算因数 - 2)/解层化因数]* 360 度。将容积周期设置为 (100/ 解算系数)
4-4. 在 Output Clocks 选项卡 - clk c2,输入输出时钟频率(快速时钟/解算因数)。将此时钟输出馈送至rx_syncclock。将相移设置为(-180 偏差/解压因子)。将占比周期设置为 50%
图 1 PLL 至 LVDS 时钟方案
5. 对 SPI4.2 Rx 内核模块进行更改
5-1. 在 _rx_core.v 中,用以下实例化替换 _rx_data_phy_altlvds:
_rx_data_phy_altlvds rx_data_phy_altlvds (
.pll_areset(pll_areset),
.pll_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}),//输入 [16:0],
.rx_syncclock(rx_syncclock),
.dpa_pll_cal_busy(dpa_pll_cal_busy)
.pll_phasecounterselect(相台人员电子)
.pll_phasestep(phasestep),
.pll_phaseupdown(逐步淘汰)
.pll_scanclk(扫描),
.rx_dpa_locked(stat_rd_dpa_lvds_locked)
.rx_out(rx_out_serdes));
5-2. 在 .v (SPI4.2 Rx 内核包装器) 中,包括以下实例化:
_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(相机者电)
.phaseStep(phasestep),
.阶段性(阶段性淘汰),
.scanclk(扫描),
.phasedone(相端),
...);
6. 对 SPI4.2 Tx 内核模块进行更改:
6-1. 在 _tx_core.v 中,用以下实例化替换 _tx_data_phy_altlvds:
_tx_data_phy_altlvds tx_data_phy_altlvds (
.tx_enable(tx_enable)、/输入
.tx_in(tx_in_i)、/输入
.tx_inclock(tx_inclock)//输入
.tx_coreclk(tx_coreclk)
.tx_out(tx_out)、/输出
.tx_outclock(tx_outclock) //output );
6-2. .v (SPI4.2 Tx 内核包装器) 中,包含以下实例化:
_pl4_tx_core _pl4_tx_core_inst (
...
.trefclk (trefclk),
.tx_enable(tx_enable)
.tx_coreclk(tx_coreclk)
... );
7. SPI4.2 接收器 ALTLVDS rx_out 总线输出已注册 为 rx_outclock。
8. SPI4.2 发射器 ALTLVDS tx_in 总线已用 tx_coreclock预先注册。
9. 反转共享 PLL 锁输出,并将其馈送至 ALTLVDS 宏功能 的pll_areset 端口。