大家好,我是一个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
请问大家有遇到过这样的问题么?是怎么解决的呢?谢谢......
8K的输出相对60M的原始时钟边沿滞后比较多
如果你的系统不关注两者的相位就忽略,如果关注,那先分频16K再用个DFF,DFF的时钟是60M的那个,打一下出8K
[ 本帖最后由 mr.king 于 2011-12-24 19:49 编辑 ]
不要用logic产生的信号再去做时钟,因为那样产生的时钟延时无法保证。FPGA就无法在Place & Routing时做timing的分析
正规的做法是用DLL或者DCM锁相的方法去产生新的时钟。这样新时钟的相位和原始时钟是固定的,比如可以保证是0相移。同时DCM产生的时钟通过BUFG可以使用专用时钟分配网络。
时钟的约束可以只约束原始时钟,而新时钟的约束自动导出。也可以直接约束新时钟。
楼上的你好,我也遇见过这样的问题。DCM只能产生固定的几个分频吧?比如楼主所说的75、100分频等就无法产生。
另,比如说在项目中一定要用到800KHZ、8KHZ、1KHZ等几个频率信号,都用60M奇分频产生么?这样是不是也不合适?请问有什么好的办法么?
可以的。比如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 编辑 ]
所有的模块都应是系统时钟,分频的时钟信号都是做控制信号处理,这叫全同步设计!
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!