最近在使用Xilinx FPGA验证项目,使用DCM将50M晶振分频得到20M时钟。但是下载代码到板子上验证,发现板子完全不工作。
然后 测量时钟,发现根本就没有20M时钟。查找资料,以及跟以前项目对比,DCM的使用没有错误。
项目中DCM的使用如下:
DCM u_dcm_20m(
.CLKIN (clk50m),
.CLKFX (clk20m),
.RST (rst_n ),
.LOCKED (locked )
);
defparam u_dcm_20m.CLKFX_DIVIDE = 5;
defparam u_dcm_20m.CLKFX_MULTIPLY = 2;
defparam u_dcm_20m.CLKIN_PERIOD = 20;
defparam u_dcm_20m.CLK_FEEDBACK = "NONE";
按照FPGA user guide上的讲述,完全没错,如下图红色框中所示:
但是测试结果就是不对。后来在 Virtex-4 FPGA Data Sheet: DC and Switching Characteristics这篇
文档里找到了答案。如来是DCM的CLKFX的输出范围是有限制的,同时对输入频率也有要求的,如下面红框所示:
在低频模式下,CLKFX只能输出32M~150Mhz的频率,而20MHz不再这个范围内,因此要使用CLKDV,20M在其
输出范围内。
所以 做设计要看Spec,而且不能只看部分Spec。这个小问题,找了好久原因,今晚记录下来,与大家共勉。