[求助] 请教一个关于时钟信号的问题

蔚崴   2011-12-24 17:57 楼主
大家好,我是一个FPGA初学者,最近在用赛灵思的片子做项目。我将60M的全局时钟奇分频为800KHZ(输出),同时又把800KHZ当作时钟信号再分频为8KHZ(输出),但是发现place&route的时候报了警告,大致是说我用800KHZ做时钟信号会有超出指标的延迟。
always@(negedge rst1 or negedge clk800khz)
begin
        if(!rst1)
        begin
                clk8khzreg<=0;
                clk8khz<=0;
        end
        else
        begin
                if(clk8khzreg==49)
                begin
                        clk8khz<=!clk8khz;
                        clk8khzreg<=0;
                end
                else
                        clk8khzreg<=clk8khzreg+1;
        end
end
请问大家有遇到过这样的问题么?是怎么解决的呢?谢谢......

回复评论 (7)

同问 ......... 请高手指教!!
点赞  2011-12-24 19:29

8K的输出相对60M的原始时钟边沿滞后比较多

如果你的系统不关注两者的相位就忽略,如果关注,那先分频16K再用个DFF,DFF的时钟是60M的那个,打一下出8K

[ 本帖最后由 mr.king 于 2011-12-24 19:49 编辑 ]
点赞  2011-12-24 19:47
不要用logic产生的信号再去做时钟,因为那样产生的时钟延时无法保证。FPGA就无法在Place & Routing时做timing的分析
正规的做法是用DLL或者DCM锁相的方法去产生新的时钟。这样新时钟的相位和原始时钟是固定的,比如可以保证是0相移。同时DCM产生的时钟通过BUFG可以使用专用时钟分配网络。
时钟的约束可以只约束原始时钟,而新时钟的约束自动导出。也可以直接约束新时钟。

点赞  2011-12-25 11:44
楼上的你好,我也遇见过这样的问题。DCM只能产生固定的几个分频吧?比如楼主所说的75、100分频等就无法产生。
另,比如说在项目中一定要用到800KHZ、8KHZ、1KHZ等几个频率信号,都用60M奇分频产生么?这样是不是也不合适?请问有什么好的办法么?
点赞  2011-12-25 23:08
可以的。比如spartan3 一般有4个dcm。每个dcm可做 f=(M/D)*fin 运算。m=2-32 d=1-32。几个dcm串起来组合一下。再者,尽量别使用多个时钟。用一个高频基准时钟,其它低频部分用各种频率的使能信号比较好。比如用60m产生所需宽度的800k,8k,1k使能逻辑信号去处理低频部分。这是同步设计的普遍方法.

写了篇短文谈论这个话题。 参见  https://home.eeworld.com.cn/my/space.php?uid=355576&do=blog&id=64386
[ 本帖最后由 sun_ic 于 2011-12-26 04:33 编辑 ]
点赞  2011-12-26 03:02
谢谢sun_ic的耐心解释,研究一下......
点赞  2011-12-26 09:40

所有的模块都应是系统时钟,分频的时钟信号都是做控制信号处理,这叫全同步设计!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-12-26 15:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复