一个例子说明FPGA中PLL的重要性

PLL的重要性

PLL,即锁相环。是FPGA中的重要资源。由于一个复杂的FPGA系统往往需要多个不同频率,相位的时钟信号。所以,一个FPGA芯片中PLL的数量是衡量FPGA芯片能力的重要指标。

今天,我结合一个例子,来活生生的展示PLL的重要性。

 

背景

使用FPGA采集PAL视频信号(遵循CCIR656标准),使用的视频编码芯片为SAA7120。

采集时钟频率为27MHz。根据标准,若想要准确的采集到Y:U:V(4:2:2)信号中的Y分量,对场标志信号(命名为:saain_fvld)以及行有效信号(命名为:saain_lvld)的正确采集显得尤为重要。实际中,我遇到了一些问题。

 

实验过程

SAA7120芯片的时钟管脚(saain_clk)连接到我的FPGA芯片的Pin-D31引脚,给FPGA输入27MHz时钟信号,方便FPGA实现对信号的采集。如图所示:



通过该图,我们知道D31管脚是一个通用I/O管脚。一开始,我没有给该输入时钟经过PLL,通过逻辑分析仪看到的信号如下图:


放大一下:


可以看出,信号有明显的毛刺。这显然会导致灾难性的结果。我整个FPGA代码必然将无法工作。


接着,我尝试了增加锁相环。代码如下:(用__wire_saain_clk代替所有saain_clk)

wire		__wire_saain_clk;
PLL_27M PLL_27M_Module(
	.inclk0(saain_clk),
	.c0(__wire_saain_clk)
);
但是编译后报错:

Error: Can't place fastor enhanced PLL

"PLL_27M:PLL_27M_Module|altpll:altpll_component|pll"-- I/O pin saain_clk

(port type INCLK of thePLL) is assigned to a location which is not connected to port    

type INCLK of any PLL on the device


上述错误说明,板卡上saain_clk的输入管脚D31不能作为PLL模块的输入,必须换一个可以作为PLL输入的管脚。这该怎么办。。硬件已经连死了。只能通过飞线了。

首先查看一下FPGA芯片的管脚图(每行32个Pin):

我在与D31相同的Bank找到了一下几个可以作为时钟输入的管脚(即标志为方波信号的管脚):

D29,D30,T29,T30,T31,T32


然后我查了一下板卡的说明书,试图寻找能够和D31连接起来的管脚,幸运的是我找到了,如下图所示:


于是,我可以把D31与T32连接起来,然后在FPGA的PinAssignment中把原先连接saain_clk的Pin-D31改成Pin-T32,那么不就可以使用PLL了吗。

下图是板卡上的飞线图:


OK,下面重新编译工程,可以看到,saain_clk可以作为PLL27M模块的输入了

顺利成章的,打开逻辑分析仪,得到了理想的稳定波形:

总结

通过以上内容,可以看出,PLL是非常重要的。一旦你的工程里涉及到外部时钟输入,尤其是频率较高,扇出系数较大的时候,千万不要忘了加PLL啊

同时,在设计电路板时,也要给时钟输入信号分配正确的管脚,还好我比较走运可以飞线,否则真是后悔莫及

你可能感兴趣的:(FPGA)